kopia lustrzana https://github.com/Hamlib/Hamlib
rodzic
f37c24d052
commit
07a9f321b4
|
@ -93,13 +93,6 @@ DECLARE_PROBERIG_BACKEND(anytone)
|
|||
|
||||
memset(acBuf, 0, ANYTONE_RESPSZ + 1);
|
||||
|
||||
#if 0
|
||||
retval = write_block(port,
|
||||
(unsigned char *)ADAT_CMD_DEF_STRING_GET_ID_CODE,
|
||||
strlen(ADAT_CMD_DEF_STRING_GET_ID_CODE));
|
||||
nRead = read_string(port, (unsigned char *) acBuf, ANYTONE_RESPSZ,
|
||||
ADAT_EOM, 1, 0, 1);
|
||||
#endif
|
||||
close(port->fd);
|
||||
|
||||
if ((retval != RIG_OK || nRead < 0))
|
||||
|
@ -205,12 +198,14 @@ int anytone_transaction(RIG *rig, char *cmd, int cmd_len, int expected_len)
|
|||
|
||||
if (retval == RIG_OK && expected_len != 0)
|
||||
{
|
||||
char buf[16];
|
||||
anytone_receive(rig, buf, sizeof(buf), 1);
|
||||
if (buf[0] == 0xaa && buf[1] == 0x53)
|
||||
char *buf = calloc(64,1);
|
||||
int len = anytone_receive(rig, buf, 64, expected_len);
|
||||
rig_debug(RIG_DEBUG_VERBOSE, "%s(%d): rx len=%d\n", __func__, __LINE__, len);
|
||||
if ( len == 16 && buf[0] == 0xaa && buf[1] == 0x53)
|
||||
{
|
||||
p->vfo_curr = buf[8] == 0x00 ? RIG_VFO_A : RIG_VFO_B;
|
||||
}
|
||||
free(buf);
|
||||
}
|
||||
|
||||
MUTEX_LOCK(p->mutex);
|
||||
|
@ -231,19 +226,18 @@ int anytone_init(RIG *rig)
|
|||
|
||||
if (rig != NULL)
|
||||
{
|
||||
anytone_priv_data_ptr pPriv = NULL;
|
||||
anytone_priv_data_ptr p = NULL;
|
||||
|
||||
// Get new Priv Data
|
||||
|
||||
pPriv = calloc(1, sizeof(anytone_priv_data_t));
|
||||
p = calloc(1, sizeof(anytone_priv_data_t));
|
||||
|
||||
if (pPriv == NULL)
|
||||
if (p == NULL)
|
||||
{
|
||||
retval = -RIG_ENOMEM;
|
||||
}
|
||||
|
||||
rig->state.priv = pPriv;
|
||||
anytone_priv_data_t *p = rig->state.priv;
|
||||
rig->state.priv = p;
|
||||
p->vfo_curr = RIG_VFO_NONE;
|
||||
#ifdef HAVE_PTHREAD
|
||||
pthread_mutex_init(&p->mutex, NULL);
|
||||
|
@ -301,6 +295,7 @@ int anytone_open(RIG *rig)
|
|||
// can we ask for any information? Maybe just toggle A/B?
|
||||
}
|
||||
|
||||
#if 0
|
||||
pthread_t id;
|
||||
int err = pthread_create(&id, NULL, anytone_thread, (void *)rig);
|
||||
|
||||
|
@ -310,6 +305,7 @@ int anytone_open(RIG *rig)
|
|||
strerror(errno));
|
||||
RETURNFUNC(-RIG_EINTERNAL);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
RETURNFUNC(retval);
|
||||
|
@ -321,21 +317,8 @@ int anytone_open(RIG *rig)
|
|||
int anytone_close(RIG *rig)
|
||||
{
|
||||
int retval = RIG_OK;
|
||||
#if 0
|
||||
anytone_priv_data_ptr pPriv = (anytone_priv_data_ptr) rig->state.priv;
|
||||
|
||||
if (pPriv->pcCmd != NULL) { free(pPriv->pcCmd); }
|
||||
|
||||
if (pPriv->pcResult != NULL) { free(pPriv->pcResult); }
|
||||
|
||||
#endif
|
||||
|
||||
ENTERFUNC;
|
||||
#if 0
|
||||
// Now switch to interactive mode
|
||||
|
||||
retval = anytone_transaction(rig, &anytone_cmd_list_close_adat);
|
||||
#endif
|
||||
|
||||
RETURNFUNC(retval);
|
||||
}
|
||||
|
@ -356,9 +339,15 @@ int anytone_get_vfo(RIG *rig, vfo_t *vfo)
|
|||
}
|
||||
else
|
||||
{
|
||||
anytone_priv_data_ptr pPriv = (anytone_priv_data_ptr) rig->state.priv;
|
||||
anytone_priv_data_ptr p = (anytone_priv_data_ptr) rig->state.priv;
|
||||
if (p->vfo_curr == RIG_VFO_NONE) // then we need to find out what our current VFO is
|
||||
{
|
||||
// only way we know to do this is switch VFOS twice so we can get the reply
|
||||
anytone_set_vfo(rig, RIG_VFO_B); // it's just toggle right now so VFO doesn't really matter
|
||||
anytone_set_vfo(rig, RIG_VFO_A);
|
||||
}
|
||||
|
||||
*vfo = pPriv->vfo_curr;
|
||||
*vfo = p->vfo_curr;
|
||||
}
|
||||
|
||||
RETURNFUNC(retval);
|
||||
|
@ -370,6 +359,7 @@ int anytone_get_vfo(RIG *rig, vfo_t *vfo)
|
|||
int anytone_set_vfo(RIG *rig, vfo_t vfo)
|
||||
{
|
||||
int retval = RIG_OK;
|
||||
anytone_priv_data_t *p = rig->state.priv;
|
||||
|
||||
ENTERFUNC;
|
||||
// Check Params
|
||||
|
@ -387,7 +377,13 @@ int anytone_set_vfo(RIG *rig, vfo_t vfo)
|
|||
char buf2[8] = { 0x41, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x06 };
|
||||
anytone_transaction(rig, buf1, 8, 0);
|
||||
hl_usleep(100 * 1000);
|
||||
anytone_transaction(rig, buf2, 8, 15);
|
||||
anytone_transaction(rig, buf2, 8, 0);
|
||||
// we expect 16 bytes coming back
|
||||
unsigned char reply[16];
|
||||
int nbytes = read_block(&rig->state.rigport, reply, 16);
|
||||
rig_debug(RIG_DEBUG_ERR, "%s(%d): nbytes=%d\n", __func__, __LINE__, nbytes);
|
||||
if (reply[8] == 0x00) p->vfo_curr = RIG_VFO_A;
|
||||
else p->vfo_curr = RIG_VFO_B;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -395,7 +391,12 @@ int anytone_set_vfo(RIG *rig, vfo_t vfo)
|
|||
char buf2[8] = { 0x41, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x06 };
|
||||
anytone_transaction(rig, buf1, 8, 0);
|
||||
hl_usleep(100 * 1000);
|
||||
anytone_transaction(rig, buf2, 8, 15);
|
||||
anytone_transaction(rig, buf2, 8, 0);
|
||||
unsigned char reply[16];
|
||||
int nbytes = read_block(&rig->state.rigport, reply, 16);
|
||||
rig_debug(RIG_DEBUG_ERR, "%s(%d): nbytes=%d\n", __func__, __LINE__, nbytes);
|
||||
if (reply[8] == 0x00) p->vfo_curr = RIG_VFO_A;
|
||||
else p->vfo_curr = RIG_VFO_B;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -419,6 +420,8 @@ int anytone_get_ptt(RIG *rig, vfo_t vfo, ptt_t *ptt)
|
|||
}
|
||||
else
|
||||
{
|
||||
anytone_priv_data_t *p = rig->state.priv;
|
||||
*ptt = p->ptt;
|
||||
}
|
||||
|
||||
return retval;
|
||||
|
@ -443,6 +446,8 @@ int anytone_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
|
|||
if (ptt) { buf[1] = 0x01; }
|
||||
|
||||
anytone_transaction(rig, buf, 8, 1);
|
||||
anytone_priv_data_t *p = rig->state.priv;
|
||||
p->ptt = ptt;
|
||||
}
|
||||
|
||||
RETURNFUNC(retval);
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include "hamlib/rig.h"
|
||||
|
||||
#define BACKEND_VER "20230527"
|
||||
#define BACKEND_VER "20230528"
|
||||
|
||||
#define ANYTONE_RESPSZ 64
|
||||
|
||||
|
@ -22,9 +22,10 @@ extern const struct rig_caps anytone_d578_caps;
|
|||
|
||||
typedef struct _anytone_priv_data
|
||||
{
|
||||
int ptt;
|
||||
ptt_t ptt;
|
||||
vfo_t vfo_curr;
|
||||
int runflag; // thread control
|
||||
char buf[64];
|
||||
pthread_mutex_t mutex;
|
||||
} anytone_priv_data_t,
|
||||
* anytone_priv_data_ptr;
|
||||
|
|
|
@ -25,6 +25,7 @@ char modeB = '1';
|
|||
int width_main = 500;
|
||||
int width_sub = 700;
|
||||
int ptt = 0;
|
||||
int curr_vfo = 0;
|
||||
|
||||
|
||||
int
|
||||
|
@ -96,7 +97,7 @@ int openPort(char *comport) // doesn't matter for using pts devices
|
|||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
unsigned char buf[256];
|
||||
unsigned char buf[256], buf2[256];
|
||||
int n;
|
||||
|
||||
again:
|
||||
|
@ -120,19 +121,61 @@ again:
|
|||
switch (buf[0])
|
||||
{
|
||||
case 0x41:
|
||||
if (buf[1] == 1)
|
||||
if (buf[4] == 0x00) // set ptt
|
||||
{
|
||||
ptt = 1;
|
||||
printf("PTT ON\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
ptt = 0;
|
||||
printf("PTT OFF\n");
|
||||
if (buf[1] == 1)
|
||||
{
|
||||
ptt = 1;
|
||||
printf("PTT ON\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
ptt = 0;
|
||||
printf("PTT OFF\n");
|
||||
}
|
||||
|
||||
buf[0] = 0x06;
|
||||
n = write(fd, buf, 1);
|
||||
}
|
||||
|
||||
if (buf[4] == 0x0d) // set vfo
|
||||
{
|
||||
printf("Set VFO key1=%d, curr_vfo=%d\n", buf[2], curr_vfo);
|
||||
|
||||
if (buf[2] == 0x00)
|
||||
{
|
||||
if (curr_vfo == 1)
|
||||
{
|
||||
curr_vfo = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
curr_vfo = 1;
|
||||
}
|
||||
}
|
||||
|
||||
printf("Set VFO key2=%d, curr_vfo=%d\n", buf[2], curr_vfo);
|
||||
buf2[0] = 0xaa;
|
||||
buf2[1] = 0x53;
|
||||
buf2[2] = 0x00;
|
||||
buf2[3] = 0x00;
|
||||
buf2[4] = 0x00;
|
||||
buf2[5] = 0x00;
|
||||
buf2[6] = 0x00;
|
||||
buf2[7] = 0x00;
|
||||
buf2[8] = curr_vfo;
|
||||
buf2[9] = 0x00;
|
||||
buf2[10] = 0x10;
|
||||
buf2[11] = 0x00;
|
||||
buf2[12] = 0x00;
|
||||
buf2[13] = 0x00;
|
||||
buf2[14] = 0x00;
|
||||
buf2[15] = 0x06;
|
||||
|
||||
if (buf[2] == 0x00) { n = write(fd, buf2, 16); }
|
||||
else { n = 0; }
|
||||
}
|
||||
|
||||
buf[0] = 0x00;
|
||||
n = write(fd, buf, 1);
|
||||
break;
|
||||
|
||||
case 0x06:
|
||||
|
|
Ładowanie…
Reference in New Issue