From: <fi...@us...> - 2005-04-20 16:43:41
|
Update of /cvsroot/hamlib/hamlib/jrc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4944 Modified Files: jrc.c Log Message: fix Hold on decode, get out of remote mode for the I command Index: jrc.c =================================================================== RCS file: /cvsroot/hamlib/hamlib/jrc/jrc.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -r1.24 -r1.25 *** jrc.c 13 Apr 2005 22:31:46 -0000 1.24 --- jrc.c 20 Apr 2005 16:43:29 -0000 1.25 *************** *** 78,89 **** serial_flush(&rs->rigport); retval = write_block(&rs->rigport, cmd, cmd_len); ! if (retval != RIG_OK) return retval; ! if (!data || !data_len) return 0; retval = read_string(&rs->rigport, data, BUFSZ, EOM, strlen(EOM)); if (retval < 0) return retval; --- 78,98 ---- serial_flush(&rs->rigport); + Hold_Decode(rig); + retval = write_block(&rs->rigport, cmd, cmd_len); ! if (retval != RIG_OK) { ! Unhold_Decode(rig); return retval; + } ! if (!data || !data_len) { ! Unhold_Decode(rig); return 0; + } retval = read_string(&rs->rigport, data, BUFSZ, EOM, strlen(EOM)); + + Unhold_Decode(rig); + if (retval < 0) return retval; *************** *** 225,228 **** --- 234,253 ---- } + static int get_current_istate(RIG *rig, char *buf, int *buf_len) + { + int retval; + + /* + * JRCs use "I" to get information, + * but the command is not available in remote mode + */ + retval = jrc_transaction (rig, "H0"EOM "I1"EOM "I" EOM, 8, buf, buf_len); + + /* and back to remote mode */ + jrc_transaction (rig, "I0"EOM "H1"EOM, 6, NULL, NULL); + + return retval; + } + /* * jrc_get_freq *************** *** 236,240 **** //note: JRCs use "I" to get information ! retval = jrc_transaction (rig, "I" EOM, 2, freqbuf, &freq_len); if (retval != RIG_OK) return retval; --- 261,265 ---- //note: JRCs use "I" to get information ! retval = get_current_istate(rig, freqbuf, &freq_len); if (retval != RIG_OK) return retval; *************** *** 310,338 **** /* * jrc_get_mode ! * Assumes rig!=NULL, freq!=NULL */ int jrc_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { struct jrc_priv_caps *priv = (struct jrc_priv_caps*)rig->caps->priv; ! int freq_len, retval; ! char freqbuf[BUFSZ]; char cmode; char cwidth; //note: JRCs use "I" to get information ! retval = jrc_transaction (rig, "I" EOM, 2, freqbuf, &freq_len); if (retval != RIG_OK) return retval; //I command returns Iabdffffffffg<CR> ! if (freqbuf[0] != 'I' || freq_len != priv->info_len) { rig_debug(RIG_DEBUG_ERR,"jrc_get_mode: wrong answer %s, " ! "len=%d\n", freqbuf, freq_len); return -RIG_ERJCTED; } /* extract width and mode */ ! cwidth = freqbuf[2]; ! cmode = freqbuf[3]; retval = jrc2rig_mode(rig, cmode, cwidth, --- 335,363 ---- /* * jrc_get_mode ! * Assumes rig!=NULL, mode!=NULL, width!=NULL */ int jrc_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width) { struct jrc_priv_caps *priv = (struct jrc_priv_caps*)rig->caps->priv; ! int md_len, retval; ! char mdbuf[BUFSZ]; char cmode; char cwidth; //note: JRCs use "I" to get information ! retval = get_current_istate(rig, mdbuf, &md_len); if (retval != RIG_OK) return retval; //I command returns Iabdffffffffg<CR> ! if (mdbuf[0] != 'I' || md_len != priv->info_len) { rig_debug(RIG_DEBUG_ERR,"jrc_get_mode: wrong answer %s, " ! "len=%d\n", mdbuf, md_len); return -RIG_ERJCTED; } /* extract width and mode */ ! cwidth = mdbuf[2]; ! cmode = mdbuf[3]; retval = jrc2rig_mode(rig, cmode, cwidth, *************** *** 411,415 **** /* FIXME: FAGC levels */ //retval = jrc_transaction (rig, "G" EOM, 2, funcbuf, &func_len); ! retval = jrc_transaction (rig, "I" EOM, 2, funcbuf, &func_len); if (retval != RIG_OK) return retval; --- 436,440 ---- /* FIXME: FAGC levels */ //retval = jrc_transaction (rig, "G" EOM, 2, funcbuf, &func_len); ! retval = get_current_istate(rig, funcbuf, &func_len); if (retval != RIG_OK) return retval; *************** *** 634,638 **** case RIG_LEVEL_ATT: ! retval = jrc_transaction (rig, "I" EOM, 2, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; --- 659,663 ---- case RIG_LEVEL_ATT: ! retval = get_current_istate(rig, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; *************** *** 648,652 **** case RIG_LEVEL_AGC: ! retval = jrc_transaction (rig, "I" EOM, 2, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; --- 673,677 ---- case RIG_LEVEL_AGC: ! retval = get_current_istate(rig, lvlbuf, &lvl_len); if (retval != RIG_OK) return retval; *************** *** 969,978 **** int jrc_set_trn(RIG *rig, int trn) { ! unsigned char trnbuf[BUFSZ]; ! int trn_len; ! trn_len = sprintf(trnbuf, "I%d" EOM, trn==RIG_TRN_RIG?1:0); ! return jrc_transaction (rig, trnbuf, trn_len, NULL, NULL); } --- 994,1005 ---- int jrc_set_trn(RIG *rig, int trn) { ! unsigned char *trncmd; ! /* transceive mode not available in remote mode ! * so switch back and forth upon entering/leaving ! */ ! trncmd = trn==RIG_TRN_RIG ? "H0"EOM"I1"EOM : "I0"EOM"H1"EOM; ! return jrc_transaction (rig, trncmd, 6, NULL, NULL); } |