fixed get_powerstat to read correctly when memory channel is blank

git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@1828 7ae35d74-ebe9-4afe-98af-79ac388436b8
Hamlib-1.2.3
Mark J. Fine 2004-08-30 01:39:21 +00:00
rodzic 6bc65386ed
commit 0045e775a3
1 zmienionych plików z 21 dodań i 19 usunięć

Wyświetl plik

@ -2,7 +2,7 @@
* Hamlib CI-V backend - main file * Hamlib CI-V backend - main file
* Copyright (c) 2000-2004 by Stephane Fillod * Copyright (c) 2000-2004 by Stephane Fillod
* *
* $Id: icom.c,v 1.88 2004-08-27 01:49:38 fineware Exp $ * $Id: icom.c,v 1.89 2004-08-30 01:39:21 fineware Exp $
* *
* This library is free software; you can redistribute it and/or modify * This library is free software; you can redistribute it and/or modify
* it under the terms of the GNU Library General Public License as * it under the terms of the GNU Library General Public License as
@ -2291,34 +2291,36 @@ int icom_set_powerstat(RIG *rig, powerstat_t status)
*/ */
int icom_get_powerstat(RIG *rig, powerstat_t *status) int icom_get_powerstat(RIG *rig, powerstat_t *status)
{ {
unsigned char ackbuf[MAXFRAMELEN]; unsigned char cmdbuf[MAXFRAMELEN], ackbuf[MAXFRAMELEN];
int ack_len, retval; int cmd_len, ack_len, retval;
/* r75 has no way to get power status, so fake it */ /* r75 has no way to get power status, so fake it */
if (rig->caps->rig_model == RIG_MODEL_ICR75) { if (rig->caps->rig_model == RIG_MODEL_ICR75) {
retval = icom_transaction(rig, C_RD_MODE, -1, NULL, 0, /* getting the mode doesn't work if a memory is blank */
ackbuf, &ack_len); /* so use one of the more innculous 'set mode' commands instead */
cmd_len = 1;
cmdbuf[0] = S_PRM_TIME;
retval = icom_transaction(rig, C_CTL_MEM, S_MEM_MODE_SLCT,
cmdbuf, cmd_len, ackbuf, &ack_len);
if (retval != RIG_OK) if (retval != RIG_OK)
return retval; return retval;
*status = ((ack_len == 3)&&(ackbuf[0] == C_RD_MODE)) ? *status = ((ack_len == 6)&&(ackbuf[0] == C_CTL_MEM)) ?
RIG_POWER_ON : RIG_POWER_OFF; RIG_POWER_ON : RIG_POWER_OFF;
return RIG_OK;
} }
else {
retval = icom_transaction(rig, C_SET_PWR, -1, NULL, 0,
ackbuf, &ack_len);
if (retval != RIG_OK)
return retval;
retval = icom_transaction(rig, C_SET_PWR, -1, NULL, 0, if (ack_len != 1 || ackbuf[0] != ACK) {
ackbuf, &ack_len); rig_debug(RIG_DEBUG_ERR,"icom_get_powerstat: ack NG (%#.2x), "
if (retval != RIG_OK) "len=%d\n", ackbuf[0],ack_len);
return retval; return -RIG_ERJCTED;
}
if (ack_len != 1 || ackbuf[0] != ACK) { *status = ackbuf[1] == S_PWR_ON ? RIG_POWER_ON : RIG_POWER_OFF;
rig_debug(RIG_DEBUG_ERR,"icom_get_powerstat: ack NG (%#.2x), "
"len=%d\n", ackbuf[0],ack_len);
return -RIG_ERJCTED;
} }
*status = ackbuf[1] == S_PWR_ON ? RIG_POWER_ON : RIG_POWER_OFF;
return RIG_OK; return RIG_OK;
} }