From 1a12ca681f5390e4bb701b78a3230db3b6e2ce5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Fillod=2C=20F8CFE?= Date: Mon, 14 Sep 2009 21:22:59 +0000 Subject: [PATCH] Patch ID:2845171 "Initial changes to get the AOR8000 working" by JohnU (johncunderwood) git-svn-id: https://hamlib.svn.sourceforge.net/svnroot/hamlib/trunk@2730 7ae35d74-ebe9-4afe-98af-79ac388436b8 --- aor/aor.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++- aor/ar8000.c | 19 ++++++++++------ 2 files changed, 73 insertions(+), 7 deletions(-) diff --git a/aor/aor.c b/aor/aor.c index 18c98bada..82d2ffe67 100644 --- a/aor/aor.c +++ b/aor/aor.c @@ -183,6 +183,10 @@ int aor_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) return retval; rfp = strstr(freqbuf, "RF"); + if (!rfp && rig->caps->rig_model == RIG_MODEL_AR8000) + rfp = strstr(freqbuf, "VA"); + if (!rfp && rig->caps->rig_model == RIG_MODEL_AR8000) + rfp = strstr(freqbuf, "VB"); if (!rfp) { rig_debug(RIG_DEBUG_WARN, "NO RF in returned string in aor_get_freq: '%s'\n", freqbuf); @@ -203,7 +207,16 @@ int aor_set_vfo(RIG *rig, vfo_t vfo) char *vfocmd; switch (vfo) { - case RIG_VFO_VFO: vfocmd = "VF" EOM; break; + case RIG_VFO_VFO: + if (rig->caps->rig_model == RIG_MODEL_AR8000) + { + vfocmd = "RF" EOM; + } + else + { + vfocmd = "VF" EOM; + } + break; case RIG_VFO_A: vfocmd = "VA" EOM; break; case RIG_VFO_B: vfocmd = "VB" EOM; break; case RIG_VFO_C: vfocmd = "VC" EOM; break; @@ -233,6 +246,28 @@ int aor_get_vfo(RIG *rig, vfo_t *vfo) if (retval != RIG_OK) return retval; + if (rig->caps->rig_model == RIG_MODEL_AR8000) + { + switch (vfobuf[0]) + { + case 'S': + case 'D': + *vfo = RIG_VFO_VFO; + break; + case 'V': + *vfo = RIG_VFO_N(vfobuf[4]-'A'); + break; + case 'M': + *vfo = RIG_VFO_MEM; + break; + default: + rig_debug(RIG_DEBUG_ERR,"aor_get_vfo: unknown vfo %s\n", + vfobuf); + return -RIG_EINVAL; + } + } + else + { switch (vfobuf[1]) { case 'S': case 'V': @@ -248,6 +283,7 @@ int aor_get_vfo(RIG *rig, vfo_t *vfo) vfobuf[1]); return -RIG_EINVAL; } + } return RIG_OK; } @@ -258,6 +294,12 @@ int format8k_mode(RIG *rig, char *buf, rmode_t mode, pbwidth_t width) switch (mode) { case RIG_MODE_AM: + if (rig->caps->rig_model == RIG_MODEL_AR8000) + { + aormode = AR8K_AM; + } + else + { switch(width) { case RIG_PASSBAND_NORMAL: case s_kHz(9): aormode = AR8K_AM; break; @@ -271,12 +313,19 @@ int format8k_mode(RIG *rig, char *buf, rmode_t mode, pbwidth_t width) mode, width); return -RIG_EINVAL; } + } break; case RIG_MODE_CW: aormode = AR8K_CW; break; case RIG_MODE_USB: aormode = AR8K_USB; break; case RIG_MODE_LSB: aormode = AR8K_LSB; break; case RIG_MODE_WFM: aormode = AR8K_WFM; break; case RIG_MODE_FM: + if (rig->caps->rig_model == RIG_MODEL_AR8000) + { + aormode = AR8K_NFM; + } + else + { switch(width) { case RIG_PASSBAND_NORMAL: case s_kHz(12): aormode = AR8K_NFM; break; @@ -288,6 +337,7 @@ int format8k_mode(RIG *rig, char *buf, rmode_t mode, pbwidth_t width) __FUNCTION__, mode, width); return -RIG_EINVAL; + } } break; default: @@ -311,6 +361,8 @@ int aor_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) int mdbuf_len, mdbuf2_len, retval; mdbuf_len = priv->format_mode(rig, mdbuf, mode, width); + // Return on error + if(mdbuf_len<0) return mdbuf_len; strcpy(mdbuf+mdbuf_len, EOM); mdbuf_len += strlen(EOM); @@ -532,7 +584,14 @@ int aor_get_level(RIG *rig, vfo_t vfo, setting_t level, value_t *val) unsigned att; if (ack_len < 4 || ackbuf[0] != 'A' || ackbuf[1] != 'T') return -RIG_EPROTO; + if (rig->caps->rig_model == RIG_MODEL_AR8000) + { + att = ackbuf[2]-'0'; + } + else + { att = ackbuf[3]-'0'; + } if (att == 0) { val->i = 0; break; diff --git a/aor/ar8000.c b/aor/ar8000.c index a8e840309..669ecaaa2 100644 --- a/aor/ar8000.c +++ b/aor/ar8000.c @@ -1,6 +1,6 @@ /* * Hamlib AOR backend - AR8000 description - * Copyright (c) 2000-2008 by Stephane Fillod + * Copyright (c) 2000-2009 by Stephane Fillod * * $Id: ar8000.c,v 1.7 2008-04-11 17:10:45 fillods Exp $ * @@ -34,7 +34,7 @@ #define AR8000_FUNC_ALL (RIG_FUNC_TSQL|RIG_FUNC_ABM|RIG_FUNC_AFC) -#define AR8000_LEVEL (RIG_LEVEL_ATT|RIG_LEVEL_AGC|RIG_LEVEL_SQL|RIG_LEVEL_RAWSTR) +#define AR8000_LEVEL (RIG_LEVEL_ATT|RIG_LEVEL_RAWSTR) #define AR8000_PARM (RIG_PARM_APO|RIG_PARM_BACKLIGHT|RIG_PARM_BEEP) @@ -50,6 +50,12 @@ { 0xff, 60 } \ } } +static const struct aor_priv_caps ar8000_priv_caps = { + .format_mode = format8k_mode, + .parse_aor_mode = parse8k_aor_mode, + .bank_base1 = 'A', + .bank_base2 = 'a', +}; /* * ar8000 rig capabilities. @@ -62,9 +68,9 @@ const struct rig_caps ar8000_caps = { .rig_model = RIG_MODEL_AR8000, .model_name = "AR8000", .mfg_name = "AOR", -.version = BACKEND_VER, +.version = BACKEND_VER ".1", .copyright = "LGPL", -.status = RIG_STATUS_UNTESTED, +.status = RIG_STATUS_BETA, .rig_type = RIG_TYPE_SCANNER, .ptt_type = RIG_PTT_NONE, .dcd_type = RIG_DCD_RIG, @@ -90,7 +96,7 @@ const struct rig_caps ar8000_caps = { .ctcss_list = NULL, /* FIXME: CTCSS list */ .dcs_list = NULL, .preamp = { RIG_DBLST_END, }, -.attenuator = { 20, RIG_DBLST_END, }, /* TBC */ +.attenuator = { 10, RIG_DBLST_END, }, .max_rit = Hz(0), .max_xit = Hz(0), .max_ifshift = Hz(0), @@ -146,7 +152,8 @@ const struct rig_caps ar8000_caps = { RIG_FLT_END, }, -.priv = NULL, +.priv = (void*)&ar8000_priv_caps, + .rig_init = NULL, .rig_cleanup = NULL, .rig_open = NULL,