Reformat optoscan.c to Linux Style

Use astyle to format to Linux Style.
Hamlib-3.1
Nate Bargmann 2016-02-14 18:08:54 -06:00
rodzic dbf25c5139
commit 785e926db9
1 zmienionych plików z 463 dodań i 434 usunięć

Wyświetl plik

@ -55,7 +55,7 @@ const struct confparams opto_ext_parms[] = {
}; };
static int optoscan_get_status_block(RIG *rig, struct optostat *status_block); static int optoscan_get_status_block(RIG *rig, struct optostat *status_block);
static int optoscan_send_freq(RIG *rig,pltstate_t *state); static int optoscan_send_freq(RIG *rig, pltstate_t *state);
static int optoscan_RTS_toggle(RIG *rig); static int optoscan_RTS_toggle(RIG *rig);
static int optoscan_start_timer(RIG *rig, pltstate_t *state); static int optoscan_start_timer(RIG *rig, pltstate_t *state);
static int optoscan_wait_timer(RIG *rig, pltstate_t *state); static int optoscan_wait_timer(RIG *rig, pltstate_t *state);
@ -73,25 +73,28 @@ int optoscan_open(RIG *rig)
int ack_len, retval; int ack_len, retval;
rs = &rig->state; rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv; priv = (struct icom_priv_data *)rs->priv;
pltstate = malloc(sizeof(pltstate_t)); pltstate = malloc(sizeof(pltstate_t));
if (!pltstate) { if (!pltstate) {
return -RIG_ENOMEM; return -RIG_ENOMEM;
} }
memset(pltstate, 0, sizeof(pltstate_t)); memset(pltstate, 0, sizeof(pltstate_t));
priv->pltstate = pltstate; priv->pltstate = pltstate;
/* select REMOTE control */ /* select REMOTE control */
retval = icom_transaction (rig, C_CTL_MISC, S_OPTO_REMOTE, retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_REMOTE,
NULL, 0, ackbuf, &ack_len); NULL, 0, ackbuf, &ack_len);
if (retval != RIG_OK) { if (retval != RIG_OK) {
free(pltstate); free(pltstate);
return retval; return retval;
} }
if (ack_len != 1 || ackbuf[0] != ACK) { if (ack_len != 1 || ackbuf[0] != ACK) {
rig_debug(RIG_DEBUG_ERR,"optoscan_open: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR, "optoscan_open: ack NG (%#.2x), "
"len=%d\n", ackbuf[0], ack_len); "len=%d\n", ackbuf[0], ack_len);
free(pltstate); free(pltstate);
return -RIG_ERJCTED; return -RIG_ERJCTED;
@ -112,16 +115,17 @@ int optoscan_close(RIG *rig)
int ack_len, retval; int ack_len, retval;
rs = &rig->state; rs = &rig->state;
priv = (struct icom_priv_data*)rs->priv; priv = (struct icom_priv_data *)rs->priv;
/* select LOCAL control */ /* select LOCAL control */
retval = icom_transaction (rig, C_CTL_MISC, S_OPTO_LOCAL, retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_LOCAL,
NULL, 0, ackbuf, &ack_len); NULL, 0, ackbuf, &ack_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (ack_len != 1 || ackbuf[0] != ACK) { if (ack_len != 1 || ackbuf[0] != ACK) {
rig_debug(RIG_DEBUG_ERR,"optoscan_close: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR, "optoscan_close: ack NG (%#.2x), "
"len=%d\n", ackbuf[0], ack_len); "len=%d\n", ackbuf[0], ack_len);
return -RIG_ERJCTED; return -RIG_ERJCTED;
} }
@ -135,20 +139,21 @@ int optoscan_close(RIG *rig)
* optoscan_get_info * optoscan_get_info
* Assumes rig!=NULL, rig->state.priv!=NULL * Assumes rig!=NULL, rig->state.priv!=NULL
*/ */
const char* optoscan_get_info(RIG *rig) const char *optoscan_get_info(RIG *rig)
{ {
unsigned char ackbuf[16]; unsigned char ackbuf[16];
int ack_len, retval; int ack_len, retval;
static char info[64]; static char info[64];
/* select LOCAL control */ /* select LOCAL control */
retval = icom_transaction (rig, C_CTL_MISC, S_OPTO_RDID, retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDID,
NULL, 0, ackbuf, &ack_len); NULL, 0, ackbuf, &ack_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return NULL; return NULL;
if (ack_len != 7) { if (ack_len != 7) {
rig_debug(RIG_DEBUG_ERR,"optoscan_get_info: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR, "optoscan_get_info: ack NG (%#.2x), "
"len=%d\n", ackbuf[0], ack_len); "len=%d\n", ackbuf[0], ack_len);
return NULL; return NULL;
} }
@ -173,19 +178,20 @@ int optoscan_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone)
retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDCTCSS, NULL, 0, retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDCTCSS, NULL, 0,
tonebuf, &tone_len); tonebuf, &tone_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (tone_len != 4) { if (tone_len != 4) {
rig_debug(RIG_DEBUG_ERR,"optoscan_get_ctcss_tone: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR, "optoscan_get_ctcss_tone: ack NG (%#.2x), "
"len=%d\n", tonebuf[0], tone_len); "len=%d\n", tonebuf[0], tone_len);
return -RIG_ERJCTED; return -RIG_ERJCTED;
} }
tone_len -= 2; tone_len -= 2;
*tone = from_bcd_be(tonebuf+2, tone_len*2); *tone = from_bcd_be(tonebuf + 2, tone_len * 2);
rig_debug(RIG_DEBUG_ERR,"optoscan_get_ctcss_tone: *tone=%d\n",*tone); rig_debug(RIG_DEBUG_ERR, "optoscan_get_ctcss_tone: *tone=%d\n", *tone);
return RIG_OK; return RIG_OK;
} }
@ -195,69 +201,68 @@ int optoscan_get_ctcss_tone(RIG *rig, vfo_t vfo, tone_t *tone)
* optoscan_get_dcs_code * optoscan_get_dcs_code
* Assumes rig!=NULL, rig->state.priv!=NULL * Assumes rig!=NULL, rig->state.priv!=NULL
*/ */
int optoscan_get_dcs_code(RIG * rig, vfo_t vfo, tone_t *code) int optoscan_get_dcs_code(RIG *rig, vfo_t vfo, tone_t *code)
{ {
unsigned char tonebuf[MAXFRAMELEN]; unsigned char tonebuf[MAXFRAMELEN];
int tone_len, retval; int tone_len, retval;
retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDDCS, NULL, 0, retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDDCS, NULL, 0,
tonebuf, &tone_len); tonebuf, &tone_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (tone_len != 4) { if (tone_len != 4) {
rig_debug(RIG_DEBUG_ERR,"optoscan_get_dcs_code: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR, "optoscan_get_dcs_code: ack NG (%#.2x), "
"len=%d\n", tonebuf[0], tone_len); "len=%d\n", tonebuf[0], tone_len);
return -RIG_ERJCTED; return -RIG_ERJCTED;
} }
tone_len -= 2; tone_len -= 2;
*code = from_bcd_be(tonebuf+2, tone_len*2); *code = from_bcd_be(tonebuf + 2, tone_len * 2);
rig_debug(RIG_DEBUG_ERR,"optoscan_get_dcs_code: *code=%d\n",*code); rig_debug(RIG_DEBUG_ERR, "optoscan_get_dcs_code: *code=%d\n", *code);
return RIG_OK; return RIG_OK;
} }
int optoscan_recv_dtmf(RIG *rig, vfo_t vfo, char *digits, int *length) int optoscan_recv_dtmf(RIG *rig, vfo_t vfo, char *digits, int *length)
{ {
unsigned char dtmfbuf[MAXFRAMELEN],digit; unsigned char dtmfbuf[MAXFRAMELEN], digit;
int len, retval, digitpos; int len, retval, digitpos;
unsigned char xlate[] = {'0','1','2','3','4','5','6', unsigned char xlate[] = {'0', '1', '2', '3', '4', '5', '6',
'7','8','9','A','B','C','D', '7', '8', '9', 'A', 'B', 'C', 'D',
'*','#'}; '*', '#'
digitpos=0; };
digitpos = 0;
do { do {
retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDDTMF, retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDDTMF,
NULL,0,dtmfbuf, &len); NULL, 0, dtmfbuf, &len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (len != 3) { if (len != 3) {
rig_debug(RIG_DEBUG_ERR,"optoscan_recv_dtmf: ack NG (%#.2x), len=%d\n", dtmfbuf[0], len); rig_debug(RIG_DEBUG_ERR, "optoscan_recv_dtmf: ack NG (%#.2x), len=%d\n", dtmfbuf[0], len);
return -RIG_ERJCTED; return -RIG_ERJCTED;
} }
digit = dtmfbuf[2]; digit = dtmfbuf[2];
if( digit < 0x16 ) if (digit < 0x16) {
{
digits[digitpos] = xlate[digit]; digits[digitpos] = xlate[digit];
digitpos++; digitpos++;
} }
} while( (digit != 0x99) && (digitpos < *length) ); } while ((digit != 0x99) && (digitpos < *length));
*length = digitpos; *length = digitpos;
digits[digitpos]=0; digits[digitpos] = 0;
if(*length > 0) if (*length > 0) {
{ rig_debug(RIG_DEBUG_ERR, "optoscan_recv_dtmf: %d digits - %s\n", *length, digits);
rig_debug(RIG_DEBUG_ERR,"optoscan_recv_dtmf: %d digits - %s\n",*length,digits); } else {
} rig_debug(RIG_DEBUG_ERR, "optoscan_recv_dtmf: no digits to read.\n");
else
{
rig_debug(RIG_DEBUG_ERR,"optoscan_recv_dtmf: no digits to read.\n");
} }
return RIG_OK; return RIG_OK;
@ -270,42 +275,46 @@ int optoscan_set_ext_parm(RIG *rig, token_t token, value_t val)
{ {
unsigned char epbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN]; unsigned char epbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN];
int ack_len; int ack_len;
int retval,subcode; int retval, subcode;
memset(epbuf,0,MAXFRAMELEN); memset(epbuf, 0, MAXFRAMELEN);
memset(ackbuf,0,MAXFRAMELEN); memset(ackbuf, 0, MAXFRAMELEN);
switch(token) { switch (token) {
case TOK_TAPECNTL: case TOK_TAPECNTL:
if( val.i == 0 ) { if (val.i == 0) {
subcode = S_OPTO_TAPE_OFF; subcode = S_OPTO_TAPE_OFF;
} } else {
else {
subcode = S_OPTO_TAPE_ON; subcode = S_OPTO_TAPE_ON;
} }
break; break;
case TOK_5KHZWIN: case TOK_5KHZWIN:
if( val.i == 0 ) { if (val.i == 0) {
subcode = S_OPTO_5KSCOFF; subcode = S_OPTO_5KSCOFF;
} } else {
else {
subcode = S_OPTO_5KSCON; subcode = S_OPTO_5KSCON;
} }
break; break;
case TOK_SPEAKER: case TOK_SPEAKER:
if( val.i == 0 ) { if (val.i == 0) {
subcode = S_OPTO_SPKROFF; subcode = S_OPTO_SPKROFF;
} } else {
else {
subcode = S_OPTO_SPKRON; subcode = S_OPTO_SPKRON;
} }
break; break;
default: default:
return -RIG_EINVAL; return -RIG_EINVAL;
} }
retval = icom_transaction (rig, C_CTL_MISC, subcode, epbuf, 0, retval = icom_transaction(rig, C_CTL_MISC, subcode, epbuf, 0,
ackbuf, &ack_len); ackbuf, &ack_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
@ -327,36 +336,44 @@ int optoscan_get_ext_parm(RIG *rig, token_t token, value_t *val)
struct optostat status_block; struct optostat status_block;
int retval; int retval;
retval = optoscan_get_status_block(rig,&status_block); retval = optoscan_get_status_block(rig, &status_block);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
switch(token) { switch (token) {
case TOK_TAPECNTL: case TOK_TAPECNTL:
val->i = status_block.tape_enabled; val->i = status_block.tape_enabled;
break; break;
case TOK_5KHZWIN: case TOK_5KHZWIN:
val->i = status_block.fivekhz_enabled; val->i = status_block.fivekhz_enabled;
break; break;
case TOK_SPEAKER: case TOK_SPEAKER:
val->i = status_block.speaker_enabled; val->i = status_block.speaker_enabled;
break; break;
case TOK_AUDIO: case TOK_AUDIO:
val->i = status_block.audio_present; val->i = status_block.audio_present;
break; break;
case TOK_DTMFPEND: case TOK_DTMFPEND:
val->i = status_block.DTMF_pending; val->i = status_block.DTMF_pending;
break; break;
case TOK_DTMFOVRR: case TOK_DTMFOVRR:
val->i = status_block.DTMF_overrun; val->i = status_block.DTMF_overrun;
break; break;
case TOK_CTCSSACT: case TOK_CTCSSACT:
val->i = status_block.CTCSS_active; val->i = status_block.CTCSS_active;
break; break;
case TOK_DCSACT: case TOK_DCSACT:
val->i = status_block.DCS_active; val->i = status_block.DCS_active;
break; break;
default: default:
return -RIG_ENIMPL; return -RIG_ENIMPL;
} }
@ -376,7 +393,7 @@ int optoscan_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
int icom_val; int icom_val;
int retval; int retval;
memset(lvlbuf,0,MAXFRAMELEN); memset(lvlbuf, 0, MAXFRAMELEN);
/* /*
* So far, levels of float type are in [0.0..1.0] range * So far, levels of float type are in [0.0..1.0] range
@ -389,25 +406,28 @@ int optoscan_set_level(RIG *rig, vfo_t vfo, setting_t level, value_t val)
switch (level) { switch (level) {
case RIG_LEVEL_AF: case RIG_LEVEL_AF:
lvl_cn = C_CTL_MISC; lvl_cn = C_CTL_MISC;
if( icom_val == 0 ) {
if (icom_val == 0) {
lvl_sc = S_OPTO_SPKROFF; lvl_sc = S_OPTO_SPKROFF;
} } else {
else {
lvl_sc = S_OPTO_SPKRON; lvl_sc = S_OPTO_SPKRON;
} }
break; break;
default: default:
rig_debug(RIG_DEBUG_ERR,"Unsupported set_level %d", level); rig_debug(RIG_DEBUG_ERR, "Unsupported set_level %d", level);
return -RIG_EINVAL; return -RIG_EINVAL;
} }
retval = icom_transaction (rig, lvl_cn, lvl_sc, lvlbuf, 0, retval = icom_transaction(rig, lvl_cn, lvl_sc, lvlbuf, 0,
ackbuf, &ack_len); ackbuf, &ack_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
if (ack_len != 1 || ackbuf[0] != ACK) { if (ack_len != 1 || ackbuf[0] != ACK) {
rig_debug(RIG_DEBUG_ERR,"optoscan_set_level: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR, "optoscan_set_level: ack NG (%#.2x), "
"len=%d\n", ackbuf[0], ack_len); "len=%d\n", ackbuf[0], ack_len);
return -RIG_ERJCTED; return -RIG_ERJCTED;
} }
@ -429,32 +449,33 @@ int optoscan_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
int cmdhead; int cmdhead;
int retval; int retval;
if( level != RIG_LEVEL_AF ) if (level != RIG_LEVEL_AF) {
{
switch (level) { switch (level) {
case RIG_LEVEL_RAWSTR: case RIG_LEVEL_RAWSTR:
lvl_cn = C_RD_SQSM; lvl_cn = C_RD_SQSM;
lvl_sc = S_SML; lvl_sc = S_SML;
break; break;
default: default:
rig_debug(RIG_DEBUG_ERR,"Unsupported get_level %d", level); rig_debug(RIG_DEBUG_ERR, "Unsupported get_level %d", level);
return -RIG_EINVAL; return -RIG_EINVAL;
} }
retval = icom_transaction (rig, lvl_cn, lvl_sc, NULL, 0, retval = icom_transaction(rig, lvl_cn, lvl_sc, NULL, 0,
lvlbuf, &lvl_len); lvlbuf, &lvl_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
/* /*
* strbuf should contain Cn,Sc,Data area * strbuf should contain Cn,Sc,Data area
*/ */
cmdhead = (lvl_sc == -1) ? 1:2; cmdhead = (lvl_sc == -1) ? 1 : 2;
lvl_len -= cmdhead; lvl_len -= cmdhead;
if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) { if (lvlbuf[0] != ACK && lvlbuf[0] != lvl_cn) {
rig_debug(RIG_DEBUG_ERR,"optoscan_get_level: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR, "optoscan_get_level: ack NG (%#.2x), "
"len=%d\n", lvlbuf[0],lvl_len); "len=%d\n", lvlbuf[0], lvl_len);
return -RIG_ERJCTED; return -RIG_ERJCTED;
} }
@ -462,17 +483,16 @@ int optoscan_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
* The result is a 3 digit BCD, but in *big endian* order: 0000..0255 * The result is a 3 digit BCD, but in *big endian* order: 0000..0255
* (from_bcd is little endian) * (from_bcd is little endian)
*/ */
icom_val = from_bcd_be(lvlbuf+cmdhead, lvl_len*2); icom_val = from_bcd_be(lvlbuf + cmdhead, lvl_len * 2);
} } else { /* level == RIG_LEVEL_AF */
else /* level == RIG_LEVEL_AF */ retval = optoscan_get_status_block(rig, &status_block);
{
retval = optoscan_get_status_block(rig,&status_block);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
icom_val = 0; icom_val = 0;
if( status_block.speaker_enabled == 1 )
if (status_block.speaker_enabled == 1)
icom_val = 255; icom_val = 255;
} }
@ -480,14 +500,15 @@ int optoscan_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val)
case RIG_LEVEL_RAWSTR: case RIG_LEVEL_RAWSTR:
val->i = icom_val; val->i = icom_val;
break; break;
default: default:
if (RIG_LEVEL_IS_FLOAT(level)) if (RIG_LEVEL_IS_FLOAT(level))
val->f = (float)icom_val/255; val->f = (float)icom_val / 255;
else else
val->i = icom_val; val->i = icom_val;
} }
rig_debug(RIG_DEBUG_TRACE,"optoscan_get_level: %d %d %d %f\n", lvl_len, rig_debug(RIG_DEBUG_TRACE, "optoscan_get_level: %d %d %d %f\n", lvl_len,
icom_val, val->i, val->f); icom_val, val->i, val->f);
return RIG_OK; return RIG_OK;
@ -524,61 +545,61 @@ int optoscan_scan(RIG *rig, vfo_t vfo, scan_t scan, int ch)
int rc, pin_state; int rc, pin_state;
struct rig_state *rs; struct rig_state *rs;
if(scan != RIG_SCAN_PLT) if (scan != RIG_SCAN_PLT)
return -RIG_ENAVAIL; return -RIG_ENAVAIL;
rs=&rig->state; rs = &rig->state;
cb = rig->callbacks.pltune; cb = rig->callbacks.pltune;
state = ((struct icom_priv_data*)rs->priv)->pltstate; state = ((struct icom_priv_data *)rs->priv)->pltstate;
if(state==NULL) if (state == NULL)
return -RIG_EINTERNAL; return -RIG_EINTERNAL;
if(state->freq==0) /* pltstate_t is not initialized - perform setup */ if (state->freq == 0) { /* pltstate_t is not initialized - perform setup */
{
/* time for CIV command to be sent. this is subtracted from */ /* time for CIV command to be sent. this is subtracted from */
/* rcvr settle time */ /* rcvr settle time */
state->usleep_time = (1000000 / (rig->state.rigport.parm.serial.rate)) state->usleep_time = (1000000 / (rig->state.rigport.parm.serial.rate))
* 13 * 9; * 13 * 9;
rc=cb(rig,vfo,&(state->next_freq),&(state->next_mode), rc = cb(rig, vfo, &(state->next_freq), &(state->next_mode),
&(state->next_width),rig->callbacks.pltune_arg); &(state->next_width), rig->callbacks.pltune_arg);
if(rc==RIG_SCAN_STOP)
if (rc == RIG_SCAN_STOP)
return RIG_OK; /* callback halted loop */ return RIG_OK; /* callback halted loop */
/* Step 1 is implicit, since hamlib does this when it opens the device */ /* Step 1 is implicit, since hamlib does this when it opens the device */
optoscan_send_freq(rig,state); /*Step 2*/ optoscan_send_freq(rig, state); /*Step 2*/
} }
rc=!RIG_SCAN_STOP; rc = !RIG_SCAN_STOP;
while(rc!=RIG_SCAN_STOP)
{ while (rc != RIG_SCAN_STOP) {
optoscan_RTS_toggle(rig); /*Step 3*/ optoscan_RTS_toggle(rig); /*Step 3*/
state->freq = state->next_freq; state->freq = state->next_freq;
state->mode = state->next_mode; state->mode = state->next_mode;
optoscan_start_timer(rig,state); optoscan_start_timer(rig, state);
rc=cb(rig,vfo,&(state->next_freq),&(state->next_mode), rc = cb(rig, vfo, &(state->next_freq), &(state->next_mode),
&(state->next_width),rig->callbacks.pltune_arg); &(state->next_width), rig->callbacks.pltune_arg);
if(rc!=RIG_SCAN_STOP)
{ if (rc != RIG_SCAN_STOP) {
optoscan_send_freq(rig,state); /*Step 4*/ optoscan_send_freq(rig, state); /*Step 4*/
} }
optoscan_wait_timer(rig,state); /*Step 5*/ optoscan_wait_timer(rig, state); /*Step 5*/
ser_get_car(&rs->rigport,&pin_state); ser_get_car(&rs->rigport, &pin_state);
if( pin_state ) /*Step 6*/
{ if (pin_state) { /*Step 6*/
return RIG_OK; /* we've broken squelch - return(). caller can */ return RIG_OK; /* we've broken squelch - return(). caller can */
/* get current freq & mode out of state str */ /* get current freq & mode out of state str */
} }
} }
/* exiting pipeline loop - force state init on next call */ /* exiting pipeline loop - force state init on next call */
state->freq=0; state->freq = 0;
return RIG_OK; return RIG_OK;
} }
@ -591,77 +612,86 @@ static int optoscan_get_status_block(RIG *rig, struct optostat *status_block)
int retval, ack_len, expected_len; int retval, ack_len, expected_len;
unsigned char ackbuf[MAXFRAMELEN]; unsigned char ackbuf[MAXFRAMELEN];
memset(status_block,0,sizeof(struct optostat)); memset(status_block, 0, sizeof(struct optostat));
retval = icom_transaction (rig, C_CTL_MISC, S_OPTO_RDSTAT, NULL, 0, retval = icom_transaction(rig, C_CTL_MISC, S_OPTO_RDSTAT, NULL, 0,
ackbuf, &ack_len); ackbuf, &ack_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
switch( rig->caps->rig_model ) switch (rig->caps->rig_model) {
{
case RIG_MODEL_OS456: case RIG_MODEL_OS456:
expected_len=4; expected_len = 4;
break; break;
case RIG_MODEL_OS535: case RIG_MODEL_OS535:
expected_len=5; expected_len = 5;
break; break;
default: default:
rig_debug(RIG_DEBUG_ERR,"optoscan_get_status_block: unknown rig model"); rig_debug(RIG_DEBUG_ERR, "optoscan_get_status_block: unknown rig model");
return -RIG_ERJCTED; return -RIG_ERJCTED;
break; break;
} }
if (ack_len != expected_len ) { if (ack_len != expected_len) {
rig_debug(RIG_DEBUG_ERR,"optoscan_get_status_block: ack NG (%#.2x), " rig_debug(RIG_DEBUG_ERR, "optoscan_get_status_block: ack NG (%#.2x), "
"len=%d\n", ackbuf[0], ack_len); "len=%d\n", ackbuf[0], ack_len);
return -RIG_ERJCTED; return -RIG_ERJCTED;
} }
if( ackbuf[2] & 1 ) status_block->remote_control = 1; if (ackbuf[2] & 1) status_block->remote_control = 1;
if( ackbuf[2] & 2 ) status_block->DTMF_pending = 1;
if( ackbuf[2] & 4 ) status_block->DTMF_overrun = 1;
if( ackbuf[2] & 16 ) status_block->squelch_open = 1;
if( ackbuf[2] & 32 ) status_block->CTCSS_active = 1;
if( ackbuf[2] & 64 ) status_block->DCS_active = 1;
if( ackbuf[3] & 1 ) status_block->tape_enabled = 1; if (ackbuf[2] & 2) status_block->DTMF_pending = 1;
if( ackbuf[3] & 2 ) status_block->speaker_enabled = 1;
if( ackbuf[3] & 4 ) status_block->fivekhz_enabled = 1;
if( ackbuf[3] & 16 ) status_block->audio_present = 1;
rig_debug(RIG_DEBUG_VERBOSE,"remote_control = %d\n",status_block->remote_control); if (ackbuf[2] & 4) status_block->DTMF_overrun = 1;
rig_debug(RIG_DEBUG_VERBOSE,"DTMF_pending = %d\n",status_block->DTMF_pending);
rig_debug(RIG_DEBUG_VERBOSE,"DTMF_overrun = %d\n",status_block->DTMF_overrun); if (ackbuf[2] & 16) status_block->squelch_open = 1;
rig_debug(RIG_DEBUG_VERBOSE,"squelch_open = %d\n",status_block->squelch_open);
rig_debug(RIG_DEBUG_VERBOSE,"CTCSS_active = %d\n",status_block->CTCSS_active); if (ackbuf[2] & 32) status_block->CTCSS_active = 1;
rig_debug(RIG_DEBUG_VERBOSE,"DCS_active = %d\n",status_block->DCS_active);
rig_debug(RIG_DEBUG_VERBOSE,"tape_enabled = %d\n",status_block->tape_enabled ); if (ackbuf[2] & 64) status_block->DCS_active = 1;
rig_debug(RIG_DEBUG_VERBOSE,"speaker_enabled = %d\n",status_block->speaker_enabled);
rig_debug(RIG_DEBUG_VERBOSE,"fivekhz_enabled = %d\n",status_block->fivekhz_enabled); if (ackbuf[3] & 1) status_block->tape_enabled = 1;
rig_debug(RIG_DEBUG_VERBOSE,"audio_present = %d\n",status_block->audio_present);
if (ackbuf[3] & 2) status_block->speaker_enabled = 1;
if (ackbuf[3] & 4) status_block->fivekhz_enabled = 1;
if (ackbuf[3] & 16) status_block->audio_present = 1;
rig_debug(RIG_DEBUG_VERBOSE, "remote_control = %d\n", status_block->remote_control);
rig_debug(RIG_DEBUG_VERBOSE, "DTMF_pending = %d\n", status_block->DTMF_pending);
rig_debug(RIG_DEBUG_VERBOSE, "DTMF_overrun = %d\n", status_block->DTMF_overrun);
rig_debug(RIG_DEBUG_VERBOSE, "squelch_open = %d\n", status_block->squelch_open);
rig_debug(RIG_DEBUG_VERBOSE, "CTCSS_active = %d\n", status_block->CTCSS_active);
rig_debug(RIG_DEBUG_VERBOSE, "DCS_active = %d\n", status_block->DCS_active);
rig_debug(RIG_DEBUG_VERBOSE, "tape_enabled = %d\n", status_block->tape_enabled);
rig_debug(RIG_DEBUG_VERBOSE, "speaker_enabled = %d\n", status_block->speaker_enabled);
rig_debug(RIG_DEBUG_VERBOSE, "fivekhz_enabled = %d\n", status_block->fivekhz_enabled);
rig_debug(RIG_DEBUG_VERBOSE, "audio_present = %d\n", status_block->audio_present);
return RIG_OK; return RIG_OK;
} }
static int optoscan_send_freq(RIG *rig,pltstate_t *state) static int optoscan_send_freq(RIG *rig, pltstate_t *state)
{ {
unsigned char buff[OPTO_BUFF_SIZE]; unsigned char buff[OPTO_BUFF_SIZE];
char md,pd; char md, pd;
freq_t freq; freq_t freq;
rmode_t mode; rmode_t mode;
freq=state->next_freq; freq = state->next_freq;
mode=state->next_mode; mode = state->next_mode;
memset(buff,0,OPTO_BUFF_SIZE); memset(buff, 0, OPTO_BUFF_SIZE);
to_bcd(buff,freq,5*2); /* to_bcd requires nibble len */ to_bcd(buff, freq, 5 * 2); /* to_bcd requires nibble len */
rig2icom_mode(rig,mode,0,(unsigned char *) &md, (signed char *) &pd); rig2icom_mode(rig, mode, 0, (unsigned char *) &md, (signed char *) &pd);
buff[5]=md; buff[5] = md;
/* read echo'd chars only...there will be no ACK from this command /* read echo'd chars only...there will be no ACK from this command
* *
@ -669,7 +699,7 @@ static int optoscan_send_freq(RIG *rig,pltstate_t *state)
* It may have waited fro pltstate->usleep_time before reading the echo'd * It may have waited fro pltstate->usleep_time before reading the echo'd
* chars, but the read will be blocking anyway. --SF * chars, but the read will be blocking anyway. --SF
* */ * */
return icom_transaction (rig, C_CTL_MISC, S_OPTO_NXT, buff, 6, NULL, NULL); return icom_transaction(rig, C_CTL_MISC, S_OPTO_NXT, buff, 6, NULL, NULL);
return RIG_OK; return RIG_OK;
} }
@ -677,18 +707,18 @@ static int optoscan_send_freq(RIG *rig,pltstate_t *state)
static int optoscan_RTS_toggle(RIG *rig) static int optoscan_RTS_toggle(RIG *rig)
{ {
struct rig_state *rs; struct rig_state *rs;
int state=0; int state = 0;
rs=&rig->state; rs = &rig->state;
ser_get_rts(&rs->rigport,&state); ser_get_rts(&rs->rigport, &state);
ser_set_rts(&rs->rigport,!state); ser_set_rts(&rs->rigport, !state);
return RIG_OK; return RIG_OK;
} }
static int optoscan_start_timer(RIG *rig, pltstate_t *state) static int optoscan_start_timer(RIG *rig, pltstate_t *state)
{ {
gettimeofday(&(state->timer_start),NULL); gettimeofday(&(state->timer_start), NULL);
return RIG_OK; return RIG_OK;
} }
@ -703,14 +733,13 @@ static int optoscan_wait_timer(RIG *rig, pltstate_t *state)
settle_usec = priv_caps->settle_time * 1000; /*convert settle time (ms) to */ settle_usec = priv_caps->settle_time * 1000; /*convert settle time (ms) to */
/* settle time (usec) */ /* settle time (usec) */
gettimeofday(&(state->timer_current),NULL); gettimeofday(&(state->timer_current), NULL);
usec_diff = abs( (state->timer_current.tv_usec) - usec_diff = abs((state->timer_current.tv_usec) -
(state->timer_start.tv_usec) ); (state->timer_start.tv_usec));
if( usec_diff < settle_usec ) if (usec_diff < settle_usec) {
{ usleep(settle_usec - usec_diff); /* sleep balance of settle_time */
usleep( settle_usec - usec_diff ); /* sleep balance of settle_time */
} }
return RIG_OK; return RIG_OK;