mirror of
https://github.com/Hamlib/Hamlib.git
synced 2024-09-21 10:27:18 +00:00
Add ADAT ADT-200A backend
Signed-off-by: Stephane Fillod <fillods@users.sf.net>
This commit is contained in:
parent
1a77ef9eb9
commit
f6ea9f1246
3
AUTHORS
3
AUTHORS
@ -28,6 +28,9 @@ S: Status, one of the following:
|
||||
|
||||
Backends:
|
||||
|
||||
[adat: ADT-200A]
|
||||
M: Frank Goenninger DG1SBG
|
||||
|
||||
[alinco: DX77-T]
|
||||
M: Ben Coleman NJ8J
|
||||
|
||||
|
@ -16,7 +16,7 @@ SUBDIRS = macros include lib $(subdirs) src @BACKEND_LIST@ @ROT_BACKEND_LIST@ \
|
||||
# perl and kylix subdirs are no longer distributed
|
||||
DIST_SUBDIRS = macros include lib $(subdirs) src c++ bindings tests doc \
|
||||
icom kenwood aor yaesu dummy pcr alinco uniden tentec kachina jrc \
|
||||
rpcrig winradio easycomm fodtrack rpcrot drake rotorez \
|
||||
rpcrig winradio adat easycomm fodtrack rpcrot drake rotorez \
|
||||
flexradio sartek lowe rft rs tapr kit skanti prm80 wj racal tuner \
|
||||
gs232a heathkit spid ars m2 amsat scripts ts7400 celestron
|
||||
|
||||
|
2
NEWS
2
NEWS
@ -6,7 +6,7 @@ Copyright (C) 2000-2012 Stephane Fillod, and others
|
||||
Please send Hamlib bug reports to hamlib-developer@lists.sourceforge.net
|
||||
|
||||
Version 1.2.15
|
||||
* New models: TT-599 Eagle, IC-RX7, IC-1275
|
||||
* New models: TT-599 Eagle, IC-RX7, IC-1275, HiQSDR, ADAT ADT-200A
|
||||
* New rotator backends: Celestron (telescope mount)
|
||||
* Fixes and features: K3
|
||||
|
||||
|
8
adat/Makefile.am
Normal file
8
adat/Makefile.am
Normal file
@ -0,0 +1,8 @@
|
||||
ADATSRC = adt_200a.c adat.c
|
||||
|
||||
pkglib_LTLIBRARIES = hamlib-adat.la
|
||||
hamlib_adat_la_SOURCES = $(ADATSRC)
|
||||
hamlib_adat_la_LDFLAGS = -no-undefined -module -avoid-version
|
||||
hamlib_adat_la_LIBADD = $(top_builddir)/src/libhamlib.la
|
||||
|
||||
noinst_HEADERS = adat.h adt_200a.h
|
3745
adat/adat.c
Normal file
3745
adat/adat.c
Normal file
File diff suppressed because it is too large
Load Diff
586
adat/adat.h
Normal file
586
adat/adat.h
Normal file
@ -0,0 +1,586 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADAT
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// adat.h
|
||||
//
|
||||
// Created by Frank Goenninger DG1SBG.
|
||||
// Copyright © 2011, 2012 Frank Goenninger. Creative Commons License.
|
||||
//
|
||||
// $Header$
|
||||
|
||||
#if !defined( __ADAT_INCLUDED__ )
|
||||
#define __ADAT_INCLUDED__
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// SYSTEM INCLUDES
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// HAMLIB INCLUDES
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include "hamlib/rig.h"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// GLOBAL DEFINITIONS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#define ADAT_BUFSZ 256
|
||||
#define ADAT_RESPSZ 256
|
||||
|
||||
#define ADAT_CR "\x0d"
|
||||
#define ADAT_EOL "\x0a"
|
||||
#define ADAT_BOM "$" // Begin of message
|
||||
#define ADAT_EOM ADAT_CR // End of message
|
||||
|
||||
#define ADAT_ON 1
|
||||
#define ADAT_OFF 0
|
||||
|
||||
#define ADAT_TOGGLE_ON ADAT_ON
|
||||
#define ADAT_TOGGLE_OFF ADAT_OFF
|
||||
|
||||
#define ADAT_FREQ_UNIT_HZ "Hz"
|
||||
#define ADAT_FREQ_UNIT_HZ_LEN 2
|
||||
|
||||
#define ADAT_FREQ_UNIT_KHZ "kHz"
|
||||
#define ADAT_FREQ_UNIT_KHZ_LEN 3
|
||||
|
||||
#define ADAT_FREQ_UNIT_MHZ "MHz"
|
||||
#define ADAT_FREQ_UNIT_MHZ_LEN 3
|
||||
|
||||
#define ADAT_FREQ_UNIT_GHZ "GHz"
|
||||
#define ADAT_FREQ_UNIT_GHZ_LEN 3
|
||||
|
||||
#define TOKEN_ADAT_PRODUCT_NAME TOKEN_BACKEND(1)
|
||||
|
||||
#define ADAT_SLEEP_MICROSECONDS_BETWEEN_CMDS (11*1000) // = 11 ms
|
||||
#define ADAT_SLEEP_AFTER_RIG_CLOSE 2 // unit: seconds
|
||||
#define ADAT_SLEEP_AFTER_RIG_OPEN 2 // unit: seconds
|
||||
|
||||
// ADAT VFO SET/GET DEFINITIONS
|
||||
|
||||
#define ADAT_NR_VFOS 3
|
||||
|
||||
// Each mode is defined by three values:
|
||||
// ADAT_VFO_STR_... -> The string as given back by TRX when asked by
|
||||
// $VFO?
|
||||
// ADAT_VFO_RNR_... -> The Hamlib number of the mode: RIG_VFO_...
|
||||
// ADAT_VFO_ANR_... -> The ADAT Nr representing the VFO when setting it
|
||||
|
||||
#define ADAT_VFO_STR_A "A"
|
||||
#define ADAT_VFO_RNR_A RIG_VFO_A
|
||||
#define ADAT_VFO_ANR_A 1
|
||||
|
||||
#define ADAT_VFO_STR_B "B"
|
||||
#define ADAT_VFO_RNR_B RIG_VFO_B
|
||||
#define ADAT_VFO_ANR_B 2
|
||||
|
||||
#define ADAT_VFO_STR_C "C"
|
||||
#define ADAT_VFO_RNR_C RIG_VFO_C
|
||||
#define ADAT_VFO_ANR_C 3
|
||||
|
||||
// ADAT MODE DEFINITIONS
|
||||
|
||||
#define ADAT_MODE_LENGTH 5
|
||||
#define ADAT_NR_MODES 8
|
||||
|
||||
// Each mode is defined by three values:
|
||||
// ADAT_MODE_STR_... -> The string as given back by TRX when asked by
|
||||
// $MOD?
|
||||
// ADAT_MODE_RNR_... -> The Hamlib number of the mode: RIG_MODE_...
|
||||
// ADAT_MODE_ANR_... -> The ADAT Nr representing the mode when setting it
|
||||
|
||||
#define ADAT_MODE_STR_CW_R "CW-R"
|
||||
#define ADAT_MODE_RNR_CW_R RIG_MODE_CWR
|
||||
#define ADAT_MODE_ANR_CW_R 0
|
||||
|
||||
#define ADAT_MODE_STR_CW "CW"
|
||||
#define ADAT_MODE_RNR_CW RIG_MODE_CW
|
||||
#define ADAT_MODE_ANR_CW 1
|
||||
|
||||
#define ADAT_MODE_STR_LSB "LSB"
|
||||
#define ADAT_MODE_RNR_LSB RIG_MODE_LSB
|
||||
#define ADAT_MODE_ANR_LSB 2
|
||||
|
||||
#define ADAT_MODE_STR_USB "USB"
|
||||
#define ADAT_MODE_RNR_USB RIG_MODE_USB
|
||||
#define ADAT_MODE_ANR_USB 3
|
||||
|
||||
#define ADAT_MODE_STR_AM "AM"
|
||||
#define ADAT_MODE_RNR_AM RIG_MODE_AM
|
||||
#define ADAT_MODE_ANR_AM 5
|
||||
|
||||
#define ADAT_MODE_STR_AM_SL "AM-SL"
|
||||
#define ADAT_MODE_RNR_AM_SL RIG_MODE_SAL
|
||||
#define ADAT_MODE_ANR_AM_SL 6
|
||||
|
||||
#define ADAT_MODE_STR_AM_SU "AM-SU"
|
||||
#define ADAT_MODE_RNR_AM_SU RIG_MODE_SAH
|
||||
#define ADAT_MODE_ANR_AM_SU 7
|
||||
|
||||
#define ADAT_MODE_STR_FM "FM"
|
||||
#define ADAT_MODE_RNR_FM RIG_MODE_FM
|
||||
#define ADAT_MODE_ANR_FM 8
|
||||
|
||||
// ADAT PTT DEFINITIONS
|
||||
|
||||
#define ADAT_PTT_STATUS_ANR_ON ADAT_ON
|
||||
#define ADAT_PTT_STATUS_RNR_ON RIG_PTT_ON
|
||||
|
||||
#define ADAT_PTT_STATUS_ANR_OFF ADAT_OFF
|
||||
#define ADAT_PTT_STATUS_RNR_OFF RIG_PTT_OFF
|
||||
|
||||
// ADAT POWER LEVEL DEFINITIONS
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_00 0
|
||||
#define ADAT_PWR_LVL_RNR_00 100 // 100 mW
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_01 1
|
||||
#define ADAT_PWR_LVL_RNR_01 300 // 300 mW
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_02 2
|
||||
#define ADAT_PWR_LVL_RNR_02 1000 // ...
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_03 3
|
||||
#define ADAT_PWR_LVL_RNR_03 2000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_04 4
|
||||
#define ADAT_PWR_LVL_RNR_04 3000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_05 5
|
||||
#define ADAT_PWR_LVL_RNR_05 5000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_06 6
|
||||
#define ADAT_PWR_LVL_RNR_06 7000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_07 7
|
||||
#define ADAT_PWR_LVL_RNR_07 10000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_08 8
|
||||
#define ADAT_PWR_LVL_RNR_08 15000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_09 9
|
||||
#define ADAT_PWR_LVL_RNR_09 20000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_10 10
|
||||
#define ADAT_PWR_LVL_RNR_10 25000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_11 11
|
||||
#define ADAT_PWR_LVL_RNR_11 30000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_12 12
|
||||
#define ADAT_PWR_LVL_RNR_12 35000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_13 13
|
||||
#define ADAT_PWR_LVL_RNR_13 40000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_14 14 // Default value after reset
|
||||
#define ADAT_PWR_LVL_RNR_14 45000
|
||||
|
||||
#define ADAT_PWR_LVL_ANR_15 15
|
||||
#define ADAT_PWR_LVL_RNR_15 50000 // 50 W
|
||||
|
||||
#define ADAT_MAX_POWER_IN_mW ADAT_PWR_LVL_RNR_15
|
||||
|
||||
// ADAT CHANNEL CAPS
|
||||
|
||||
#define ADAT_MEM_CAPS \
|
||||
{ \
|
||||
.vfo = 1, \
|
||||
.ant = 1, \
|
||||
.freq = 1, \
|
||||
.mode = 1, \
|
||||
.width = 1, \
|
||||
.tx_freq = 1, \
|
||||
.tx_mode = 1, \
|
||||
.tx_width = 1, \
|
||||
.tx_vfo = 1, \
|
||||
.rit = 1, \
|
||||
.xit = 1, \
|
||||
.tuning_step = 1, \
|
||||
.channel_desc = 1 \
|
||||
}
|
||||
|
||||
#define ADAT_MEM_DESC_SIZE 64
|
||||
|
||||
// ADAT OPCODES - Kind of an internal command within ADAT Hamlib Backend
|
||||
|
||||
#define ADAT_OPCODE_BASE_PTT 110000
|
||||
|
||||
#define ADAT_OPCODE_PTT_SWITCH_ON (ADAT_OPCODE_BASE_PTT + 1)
|
||||
#define ADAT_OPCODE_PTT_SWITCH_OFF (ADAT_OPCODE_BASE_PTT + 2)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Individual ADAT CAT commands
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#define ADAT_CMD_DEF_ADAT_SPECIAL (1<<30)
|
||||
|
||||
// -- NIL -- (Marks the end of a cmd list)
|
||||
|
||||
#define ADAT_CMD_DEF_NIL 0
|
||||
|
||||
// -- ADAT SPECIAL: DISPLAY OFF --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_DISPLAY_OFF "$VRU>"ADAT_CR
|
||||
|
||||
// -- ADAT SPECIAL: DISPLAY ON --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_DISPLAY_ON "$VRU<"ADAT_CR
|
||||
|
||||
// -- ADAT SPECIAL: GET SERIAL NR --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_GET_SERIAL_NR "$CIS?"ADAT_CR
|
||||
|
||||
// -- ADAT SPECIAL: GET FIRMWARE VERSION --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_GET_FW_VERSION "$CIF?"ADAT_CR
|
||||
|
||||
// -- ADAT SPECIAL: GET HARDWARE VERSION --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_GET_HW_VERSION "$CIH?"ADAT_CR
|
||||
|
||||
// -- ADAT SPECIAL: GET FIRMWARE VERSION --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_GET_ID_CODE "$CID?"ADAT_CR
|
||||
|
||||
// -- ADAT SPECIAL: GET GUI FIRMWARE VERSION --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_GET_GUI_FW_VERSION "$CIG?"ADAT_CR
|
||||
|
||||
// -- ADAT SPECIAL: GET OPTIONS --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_GET_OPTIONS "$CIO?"ADAT_CR
|
||||
|
||||
// -- ADAT SPECIAL: GET CALLSIGN --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_GET_CALLSIGN "$CAL?"ADAT_CR
|
||||
|
||||
// -- ADAT SPECIAL: SET CALLSIGN --
|
||||
|
||||
#define ADAT_CMD_DEF_STRING_SET_CALLSIGN "$CAL:"
|
||||
|
||||
// -- HAMLIB DEFINED COMMANDS --
|
||||
|
||||
// -- GET FREQ --
|
||||
|
||||
#define ADAT_CMD_DEF_GET_FREQ (1<<0)
|
||||
#define ADAT_CMD_DEF_STRING_GET_FREQ "$FRA?"ADAT_CR
|
||||
|
||||
// -- SET FREQ --
|
||||
|
||||
#define ADAT_CMD_DEF_SET_FREQ (1<<1)
|
||||
#define ADAT_CMD_DEF_STRING_SET_FREQ "$FR1:"
|
||||
|
||||
// -- GET VFO --
|
||||
|
||||
// -- GET MODE --
|
||||
|
||||
#define ADAT_CMD_DEF_GET_MODE (1<<2)
|
||||
#define ADAT_CMD_DEF_STRING_GET_MODE "$MOD?"ADAT_CR
|
||||
|
||||
// -- SET VFO --
|
||||
|
||||
#define ADAT_CMD_DEF_SET_VFO (1<<3)
|
||||
#define ADAT_CMD_DEF_STRING_SWITCH_ON_VFO "$VO%1d>%s"
|
||||
#define ADAT_CMD_DEF_STRING_SET_VFO_AS_MAIN_VFO "$VO%1d%%%s"
|
||||
|
||||
// -- SET MODE --
|
||||
|
||||
#define ADAT_CMD_DEF_SET_MODE (1<<4)
|
||||
#define ADAT_CMD_DEF_STRING_SET_MODE "$MOD:"
|
||||
|
||||
// -- SET PTT --
|
||||
|
||||
#define ADAT_CMD_DEF_SET_PTT (1<<5)
|
||||
#define ADAT_CMD_DEF_STRING_SET_PTT "$MOX%s%s"
|
||||
#define ADAT_CMD_PTT_STR_OFF "<"
|
||||
#define ADAT_CMD_PTT_STR_ON ">"
|
||||
|
||||
// -- GET PTT --
|
||||
|
||||
#define ADAT_CMD_DEF_GET_PTT (1<<6)
|
||||
#define ADAT_CMD_DEF_STRING_GET_PTT "$MTR?"ADAT_CR
|
||||
|
||||
// -- GET POWER STATUS --
|
||||
|
||||
// -- GET INFO --
|
||||
|
||||
// -- OPEN ADAT --
|
||||
|
||||
// -- ADAT SPECIAL: RECOVER FROM ERROR --
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADAT PRIVATE DATA
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
typedef struct _adat_priv_data
|
||||
{
|
||||
int nOpCode;
|
||||
|
||||
char *pcProductName; // Future use (USB direct I/O)
|
||||
|
||||
// ADAT device info
|
||||
|
||||
char *pcSerialNr;
|
||||
char *pcIDCode;
|
||||
char *pcOptions;
|
||||
char *pcFWVersion;
|
||||
char *pcHWVersion;
|
||||
char *pcGUIFWVersion;
|
||||
|
||||
char *pcCallsign;
|
||||
|
||||
// ADAT Operational Settings: will change during TRX use
|
||||
|
||||
int nCurrentVFO;
|
||||
vfo_t nRIGVFONr;
|
||||
|
||||
freq_t nFreq;
|
||||
char acRXFreq[ ADAT_BUFSZ ];
|
||||
char acTXFreq[ ADAT_BUFSZ ];
|
||||
|
||||
rmode_t nRIGMode;
|
||||
char acADATMode[ ADAT_MODE_LENGTH + 1 ];
|
||||
int nADATMode;
|
||||
|
||||
pbwidth_t nWidth;
|
||||
|
||||
int nADATPTTStatus;
|
||||
ptt_t nRIGPTTStatus;
|
||||
|
||||
|
||||
value_t mNB1;
|
||||
value_t mNB2;
|
||||
|
||||
value_t mAGC;
|
||||
value_t mRFGain;
|
||||
value_t mIFShift;
|
||||
value_t mRawStr;
|
||||
|
||||
// ADAT Command-related Values
|
||||
|
||||
char *pcCmd;
|
||||
int nCmdKind;
|
||||
|
||||
char *pcResult;
|
||||
int nRC;
|
||||
|
||||
} adat_priv_data_t,
|
||||
* adat_priv_data_ptr;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADAT CAT COMMAND DATA TYPE DECLARATIONS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
typedef unsigned long long adat_cmd_id_t; // Bit mask for commands. Each command
|
||||
// is represented by 1 bit.
|
||||
|
||||
// adat_cmd_def : ADAT COMMAND DEFINITION.
|
||||
// Basic idea: Each command can be made of several strings to be sent
|
||||
// to the ADAT device. Therefore it is possible to build aggregated
|
||||
// commands which will be executed as a set of individual commands
|
||||
// executed by adat_transaction(). The last value as returned by the
|
||||
// commands will be set as overall command result.
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ADAT_CMD_KIND_WITH_RESULT = 0, // After sending a command to the ADAT,
|
||||
// a result has to be read.
|
||||
ADAT_CMD_KIND_WITHOUT_RESULT = 1
|
||||
|
||||
} adat_cmd_kind_t;
|
||||
|
||||
typedef struct _adat_cmd_def_t
|
||||
{
|
||||
adat_cmd_id_t nCmdId; // Bit indicating this cmd
|
||||
adat_cmd_kind_t nCmdKind; // Defines if result expected
|
||||
|
||||
int (*pfCmdFn)( RIG *pRig ); // Fn to be called to execute this cmd
|
||||
|
||||
int nNrCmdStrs; // Oh my, C as a language ... I'd love to
|
||||
// switch to Common Lisp ... What a hack here ...
|
||||
char *pacCmdStrs[]; // Commands to be executed if no CmdFn given
|
||||
|
||||
} adat_cmd_def_t,
|
||||
* adat_cmd_def_ptr;
|
||||
|
||||
typedef struct _adat_cmd_table_t
|
||||
{
|
||||
int nNrCmds;
|
||||
adat_cmd_def_ptr adat_cmds[];
|
||||
|
||||
} adat_cmd_table_t,
|
||||
* adat_cmd_table_ptr;
|
||||
|
||||
typedef struct _adat_cmd_list_t
|
||||
{
|
||||
int nNrCmds;
|
||||
adat_cmd_def_ptr adat_cmds[];
|
||||
|
||||
} adat_cmd_list_t,
|
||||
* adat_cmd_list_ptr;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// OTHER ADAT DATA TYPES
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ADAT_FREQ_PARSE_MODE_WITH_VFO = 0,
|
||||
ADAT_FREQ_PARSE_MODE_WITHOUT_VFO = 1
|
||||
|
||||
} adat_freq_parse_mode_t;
|
||||
|
||||
// ADAT MODE DEFINITION
|
||||
|
||||
typedef struct _adat_mode_def
|
||||
{
|
||||
char *pcADATModeStr;
|
||||
rmode_t nRIGMode;
|
||||
int nADATMode;
|
||||
|
||||
} adat_mode_def_t,
|
||||
* adat_mode_def_ptr;
|
||||
|
||||
typedef struct _adat_mode_list
|
||||
{
|
||||
int nNrModes;
|
||||
|
||||
adat_mode_def_t adat_modes[ ADAT_NR_MODES ];
|
||||
|
||||
} adat_mode_list_t,
|
||||
* adat_mode_list_ptr;
|
||||
|
||||
// ADAT VFO DEFINITION
|
||||
|
||||
typedef struct _adat_vfo_def
|
||||
{
|
||||
char *pcADATVFOStr;
|
||||
vfo_t nRIGVFONr;
|
||||
int nADATVFONr;
|
||||
|
||||
} adat_vfo_def_t,
|
||||
* adat_vfo_def_ptr;
|
||||
|
||||
typedef struct _adat_vfo_list
|
||||
{
|
||||
int nNrVFOs;
|
||||
|
||||
adat_vfo_def_t adat_vfos[ ADAT_NR_VFOS ];
|
||||
|
||||
} adat_vfo_list_t,
|
||||
* adat_vfo_list_ptr;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADAT INTERNAL FUNCTION DECLARATIONS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Helper functions
|
||||
|
||||
size_t trimwhitespace( char *, size_t, const char * );
|
||||
int adat_print_cmd( adat_cmd_def_ptr );
|
||||
|
||||
int adat_parse_freq( char *, adat_freq_parse_mode_t, int *, freq_t * );
|
||||
|
||||
int adat_parse_mode( char *, rmode_t *, char * );
|
||||
int adat_mode_rnr2anr( rmode_t, int * );
|
||||
int adat_mode_anr2rnr( int, rmode_t * );
|
||||
|
||||
int adat_parse_vfo( char *, vfo_t *, int * );
|
||||
int adat_vfo_rnr2anr( vfo_t, int * );
|
||||
int adat_vfo_anr2rnr( int, vfo_t * );
|
||||
|
||||
int adat_parse_ptt( char *, int * );
|
||||
int adat_ptt_rnr2anr( ptt_t, int * );
|
||||
int adat_ptt_anr2rnr( int, ptt_t * );
|
||||
|
||||
|
||||
int adat_send( RIG *, char * );
|
||||
int adat_receive( RIG *, char * );
|
||||
|
||||
int adat_priv_set_cmd( RIG *, char *, int );
|
||||
int adat_priv_set_result( RIG *, char * );
|
||||
int adat_priv_clear_result( RIG * );
|
||||
|
||||
int adat_get_single_cmd_result( RIG * );
|
||||
|
||||
int adat_cmd_recover_from_error( RIG *, int );
|
||||
|
||||
int adat_transaction( RIG *, adat_cmd_list_ptr );
|
||||
|
||||
adat_priv_data_ptr adat_new_priv_data( RIG * );
|
||||
void adat_del_priv_data( adat_priv_data_t ** );
|
||||
|
||||
// Command implementation
|
||||
|
||||
int adat_cmd_fn_get_serial_nr( RIG * );
|
||||
int adat_cmd_fn_get_fw_version( RIG * );
|
||||
int adat_cmd_fn_get_hw_version( RIG * );
|
||||
int adat_cmd_fn_get_gui_fw_version( RIG * );
|
||||
int adat_cmd_fn_get_id_code( RIG * );
|
||||
int adat_cmd_fn_get_options( RIG * );
|
||||
|
||||
int adat_cmd_fn_set_callsign( RIG * );
|
||||
int adat_cmd_fn_get_callsign( RIG * );
|
||||
|
||||
int adat_cmd_fn_set_freq( RIG * );
|
||||
int adat_cmd_fn_get_freq( RIG * );
|
||||
|
||||
int adat_cmd_fn_get_mode( RIG * );
|
||||
int adat_cmd_fn_set_mode( RIG * );
|
||||
|
||||
int adat_cmd_fn_get_vfo( RIG * );
|
||||
int adat_cmd_fn_set_vfo( RIG * );
|
||||
|
||||
int adat_cmd_fn_get_ptt( RIG * );
|
||||
int adat_cmd_fn_set_ptt( RIG * );
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADAT FUNCTION DECLARATIONS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
int adat_init( RIG * );
|
||||
int adat_cleanup( RIG * );
|
||||
int adat_reset( RIG *, reset_t );
|
||||
int adat_open( RIG * );
|
||||
|
||||
int adat_set_conf( RIG *, token_t, const char *val );
|
||||
int adat_get_conf( RIG *, token_t, char *val );
|
||||
|
||||
int adat_set_freq( RIG *, vfo_t, freq_t );
|
||||
int adat_get_freq( RIG *, vfo_t, freq_t * );
|
||||
|
||||
int adat_set_vfo( RIG *, vfo_t );
|
||||
int adat_get_vfo( RIG *, vfo_t * );
|
||||
|
||||
int adat_set_ptt( RIG *, vfo_t, ptt_t );
|
||||
int adat_get_ptt( RIG *, vfo_t, ptt_t * );
|
||||
|
||||
int adat_set_mode( RIG *, vfo_t, rmode_t, pbwidth_t );
|
||||
int adat_get_mode( RIG *, vfo_t, rmode_t *, pbwidth_t * );
|
||||
|
||||
int adat_set_func( RIG *, vfo_t, setting_t func, int );
|
||||
int adat_get_func( RIG *, vfo_t, setting_t func, int * );
|
||||
|
||||
int adat_set_level( RIG *, vfo_t, setting_t level, value_t );
|
||||
int adat_get_level( RIG *, vfo_t, setting_t level, value_t * );
|
||||
|
||||
int adat_handle_event( RIG * );
|
||||
|
||||
const char * adat_get_info( RIG * );
|
||||
|
||||
int adat_mW2power( RIG *, float *, unsigned int, freq_t, rmode_t );
|
||||
int adat_power2mW( RIG *, unsigned int *, float, freq_t, rmode_t );
|
||||
|
||||
int adat_get_powerstat( RIG *, powerstat_t * );
|
||||
|
||||
extern const struct rig_caps adt_200a_caps;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// END OF FILE
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#endif
|
201
adat/adt_200a.c
Normal file
201
adat/adt_200a.c
Normal file
@ -0,0 +1,201 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADT-200A HAMLIB BACKEND
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// adt_200a.c
|
||||
//
|
||||
// Created by Frank Goenninger DG1SBG.
|
||||
// Copyright © 2011, 2012 Frank Goenninger. Creative Commons License.
|
||||
//
|
||||
// $Header$
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADT-200A INCLUDES
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include "adt_200a.h"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// GLOBAL DEFINITIONS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// GLOBAL VARS
|
||||
|
||||
// static const struct confparams adt_200a_cfg_params[] =
|
||||
// {
|
||||
// { TOKEN_PRODUCT_NAME, "usb_product_name", "USB Product Name", "USB Product Name (DSP Bo
|
||||
// Model + ' Serial '+ ID Code, e.g. 'TRX3C Serial C945D5B' )",
|
||||
// ADT_200A_PRODUCT_NAME, RIG_CONF_STRING, { .n = { 0,0,0 } }
|
||||
// },
|
||||
//
|
||||
// { RIG_CONF_END, NULL, }
|
||||
//};
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADT-200A HAMLIB CAPS / DESCRIPTION
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
const struct rig_caps adt_200a_caps =
|
||||
{
|
||||
.rig_model = RIG_MODEL_ADT_200A,
|
||||
.model_name = "ADT-200A",
|
||||
.mfg_name = "ADAT www.adat.ch",
|
||||
.version = "1.36",
|
||||
.copyright = "Frank Goenninger, DG1SBG. License: Creative Commons",
|
||||
.status = RIG_STATUS_BETA,
|
||||
.rig_type = RIG_TYPE_TRANSCEIVER,
|
||||
.ptt_type = RIG_PTT_RIG,
|
||||
.dcd_type = RIG_DCD_NONE,
|
||||
.port_type = RIG_PORT_SERIAL,
|
||||
.serial_rate_min = 115200,
|
||||
.serial_rate_max = 115200,
|
||||
.serial_data_bits = 8,
|
||||
.serial_stop_bits = 1,
|
||||
.serial_parity = RIG_PARITY_NONE,
|
||||
.serial_handshake = RIG_HANDSHAKE_NONE,
|
||||
.write_delay = 0,
|
||||
.post_write_delay = 20,
|
||||
.timeout = 250,
|
||||
.retry = 3,
|
||||
|
||||
.has_get_func = ADT_200A_FUNCS,
|
||||
.has_set_func = ADT_200A_FUNCS,
|
||||
.has_get_level = ADT_200A_GET_LEVEL,
|
||||
.has_set_level = RIG_LEVEL_SET(ADT_200A_SET_LEVEL),
|
||||
.has_get_parm = RIG_PARM_NONE,
|
||||
.has_set_parm = RIG_PARM_NONE,
|
||||
.level_gran = {},
|
||||
.parm_gran = {},
|
||||
.ctcss_list = NULL,
|
||||
.dcs_list = NULL,
|
||||
.preamp = { 5, 10, RIG_DBLST_END, },
|
||||
.attenuator = { 5, 10, 15, 20, 25, RIG_DBLST_END, },
|
||||
.max_rit = ADT_200A_RIT,
|
||||
.max_xit = ADT_200A_XIT,
|
||||
.max_ifshift = Hz(500),
|
||||
.targetable_vfo = RIG_TARGETABLE_NONE,
|
||||
.transceive = 0,
|
||||
.bank_qty = 1,
|
||||
|
||||
.chan_desc_sz = ADAT_MEM_DESC_SIZE,
|
||||
.chan_list =
|
||||
{
|
||||
{ 0, 99, RIG_MTYPE_MEM, ADAT_MEM_CAPS },
|
||||
RIG_CHAN_END,
|
||||
},
|
||||
|
||||
.rx_range_list1 =
|
||||
{
|
||||
{ kHz(10), MHz(30), ADT_200A_MODES, -1, -1, ADT_200A_VFO },
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
.tx_range_list1 =
|
||||
{
|
||||
{ kHz(10), MHz(30), ADT_200A_MODES, mW(100), W(50), ADT_200A_VFO },
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
.rx_range_list2 =
|
||||
{
|
||||
{ kHz(10), MHz(30), ADT_200A_MODES, -1, -1, ADT_200A_VFO },
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
.tx_range_list2 =
|
||||
{
|
||||
{ kHz(10), MHz(30), ADT_200A_MODES, mW(100), W(50), ADT_200A_VFO },
|
||||
RIG_FRNG_END,
|
||||
},
|
||||
|
||||
.tuning_steps =
|
||||
{
|
||||
{ ADT_200A_MODES, RIG_TS_ANY }, // TODO: get actual list here
|
||||
RIG_TS_END,
|
||||
},
|
||||
|
||||
.filters =
|
||||
{
|
||||
{ RIG_MODE_CW|RIG_MODE_CWR, Hz(50) },
|
||||
{ RIG_MODE_CW|RIG_MODE_CWR, Hz(75) },
|
||||
{ RIG_MODE_CW|RIG_MODE_CWR, Hz(100) },
|
||||
{ RIG_MODE_CW|RIG_MODE_CWR, Hz(150) },
|
||||
{ RIG_MODE_CW|RIG_MODE_CWR, Hz(200) },
|
||||
{ RIG_MODE_CW|RIG_MODE_CWR, Hz(300) },
|
||||
{ RIG_MODE_CW|RIG_MODE_CWR, Hz(750) },
|
||||
{ RIG_MODE_CW|RIG_MODE_CWR, Hz(1000) },
|
||||
{ RIG_MODE_CW|RIG_MODE_CWR, Hz(1200) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(300) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(500) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(750) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(1000) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(1200) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(1500) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(1800) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(2000) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(2200) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(2400) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(2700) },
|
||||
{ RIG_MODE_LSB|RIG_MODE_USB, Hz(3500) },
|
||||
{ RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_SAH, Hz(3000) },
|
||||
{ RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_SAH, Hz(3500) },
|
||||
{ RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_SAH, Hz(4000) },
|
||||
{ RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_SAH, Hz(4500) },
|
||||
{ RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_SAH, Hz(5000) },
|
||||
{ RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_SAH, Hz(6000) },
|
||||
{ RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_SAH, Hz(7000) },
|
||||
{ RIG_MODE_AM|RIG_MODE_SAL|RIG_MODE_SAH, Hz(8000) },
|
||||
{ RIG_MODE_FM, Hz(6000) },
|
||||
{ RIG_MODE_FM, Hz(7000) },
|
||||
{ RIG_MODE_FM, Hz(8000) },
|
||||
{ RIG_MODE_FM, Hz(9000) },
|
||||
{ RIG_MODE_FM, Hz(10000) },
|
||||
{ RIG_MODE_FM, Hz(11000) },
|
||||
{ RIG_MODE_FM, Hz(12000) },
|
||||
RIG_FLT_END,
|
||||
},
|
||||
|
||||
// .cfgparams = adt_200a_cfg_params,
|
||||
|
||||
.rig_init = adat_init,
|
||||
.rig_cleanup = adat_cleanup,
|
||||
.rig_open = adat_open,
|
||||
.reset = adat_reset,
|
||||
|
||||
.set_conf = adat_set_conf,
|
||||
.get_conf = adat_get_conf,
|
||||
|
||||
.set_freq = adat_set_freq,
|
||||
.get_freq = adat_get_freq,
|
||||
|
||||
.get_level = adat_get_level,
|
||||
.set_level = adat_set_level,
|
||||
|
||||
.set_mode = adat_set_mode,
|
||||
.get_mode = adat_get_mode,
|
||||
|
||||
.get_vfo = adat_get_vfo,
|
||||
.set_vfo = adat_set_vfo,
|
||||
|
||||
.get_ptt = adat_get_ptt,
|
||||
.set_ptt = adat_set_ptt,
|
||||
|
||||
.decode_event = adat_handle_event,
|
||||
|
||||
.get_info = adat_get_info,
|
||||
|
||||
.power2mW = adat_power2mW,
|
||||
.mW2power = adat_mW2power,
|
||||
|
||||
.get_powerstat = adat_get_powerstat
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// END OF FILE
|
||||
// ---------------------------------------------------------------------------
|
105
adat/adt_200a.h
Normal file
105
adat/adt_200a.h
Normal file
@ -0,0 +1,105 @@
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADT-200A
|
||||
// ---------------------------------------------------------------------------
|
||||
//
|
||||
// adt_200a.h
|
||||
//
|
||||
// Created by Frank Goenninger DG1SBG.
|
||||
// Copyright © 2011, 2012 Frank Goenninger. Creative Commons License.
|
||||
//
|
||||
// $Header$
|
||||
|
||||
#if !defined( __ADT_200A_INCLUDED__ )
|
||||
#define __ADT_200A_INCLUDED__
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADAT INCLUDES
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#include "adat.h"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADT-200A USB DEFINITIONS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#define ADT_200A_VENDOR_ID 0x0403
|
||||
#define ADT_200A_PRODUCT_ID 0x6001
|
||||
|
||||
#define ADT_200A_VENDOR_NAME "FTDI"
|
||||
#define ADT_200A_PRODUCT_NAME "TRX3C Serial C945D5B"
|
||||
|
||||
#define ADT_200A_USB_INTERFACE_NR 0x00
|
||||
#define ADT_200A_USB_CONFIGURATION_VALUE 0x01
|
||||
#define ADT_200A_ALTERNATE_SETTIMG 0x00
|
||||
|
||||
#define ADT_200A_USB_INPUT_ENDPOINT 0x81
|
||||
#define ADT_200A_USB_INPUT_MAX_PACKET_SIZE 64
|
||||
|
||||
#define ADT_200A_USB_OUTPUT_ENDPOINT b0x02
|
||||
#define ADT_200A_USB_OUTPUT_MAX_PACKET_SIZE 64
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// ADT-200A CAPS DEFINITIONS
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#define ADT_200A_GET_LEVEL \
|
||||
( \
|
||||
RIG_LEVEL_PREAMP | \
|
||||
RIG_LEVEL_ATT | \
|
||||
RIG_LEVEL_AF | \
|
||||
RIG_LEVEL_NR | \
|
||||
RIG_LEVEL_CWPITCH | \
|
||||
RIG_LEVEL_RFPOWER | \
|
||||
RIG_LEVEL_MICGAIN | \
|
||||
RIG_LEVEL_KEYSPD | \
|
||||
RIG_LEVEL_METER | \
|
||||
RIG_LEVEL_BKIN_DLYMS | \
|
||||
RIG_LEVEL_RAWSTR | \
|
||||
RIG_LEVEL_SWR | \
|
||||
RIG_LEVEL_ALC )
|
||||
|
||||
#define ADT_200A_SET_LEVEL \
|
||||
( \
|
||||
RIG_LEVEL_PREAMP | \
|
||||
RIG_LEVEL_ATT | \
|
||||
RIG_LEVEL_AF | \
|
||||
RIG_LEVEL_NR | \
|
||||
RIG_LEVEL_CWPITCH | \
|
||||
RIG_LEVEL_RFPOWER | \
|
||||
RIG_LEVEL_MICGAIN | \
|
||||
RIG_LEVEL_KEYSPD | \
|
||||
RIG_LEVEL_METER | \
|
||||
RIG_LEVEL_BKIN_DLYMS | \
|
||||
RIG_LEVEL_ALC )
|
||||
|
||||
#define ADT_200A_MODES \
|
||||
( \
|
||||
RIG_MODE_AM | \
|
||||
RIG_MODE_CW | \
|
||||
RIG_MODE_USB | \
|
||||
RIG_MODE_LSB | \
|
||||
RIG_MODE_FM | \
|
||||
RIG_MODE_CWR | \
|
||||
RIG_MODE_SAL | \
|
||||
RIG_MODE_SAH )
|
||||
|
||||
// ADT-200A VFO #defines
|
||||
|
||||
#define ADT_200A_FRA RIG_VFO_N(0)
|
||||
#define ADT_200A_FRB RIG_VFO_N(1)
|
||||
#define ADT_200A_FRC RIG_VFO_N(2)
|
||||
|
||||
#define ADT_200A_VFO (ADT_200A_FRA|ADT_200A_FRB|ADT_200A_FRC)
|
||||
|
||||
#define ADT_200A_RIT 9999
|
||||
#define ADT_200A_XIT 9999
|
||||
|
||||
// ADT-200A FUNCs
|
||||
|
||||
#define ADT_200A_FUNCS (RIG_FUNC_VOX|RIG_FUNC_NB|RIG_FUNC_NR)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// END OF FILE
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#endif
|
@ -63,6 +63,8 @@
|
||||
%ignore RIG_BACKEND_TUNER;
|
||||
%ignore RIG_RS;
|
||||
%ignore RIG_BACKEND_RS;
|
||||
%ignore RIG_ADAT;
|
||||
%ignore RIG_BACKEND_ADAT;
|
||||
|
||||
%ignore ROT_DUMMY;
|
||||
%ignore ROT_BACKEND_DUMMY;
|
||||
|
@ -257,7 +257,7 @@ fi
|
||||
AC_SUBST(RIGMATRIX)
|
||||
|
||||
|
||||
BACKEND_LIST="icom kenwood aor yaesu dummy pcr alinco uniden tentec kachina jrc drake lowe rft rs kit skanti prm80 tapr flexradio wj racal tuner"
|
||||
BACKEND_LIST="icom kenwood aor yaesu dummy pcr alinco uniden tentec kachina jrc drake lowe rft rs kit skanti prm80 tapr flexradio wj racal tuner adat"
|
||||
ROT_BACKEND_LIST="dummy easycomm fodtrack gs232a heathkit kit rotorez sartek spid ars m2 amsat ts7400 celestron"
|
||||
BINDINGS=""
|
||||
BINDING_ALL=""
|
||||
@ -538,6 +538,7 @@ rotorez/Makefile
|
||||
flexradio/Makefile
|
||||
m2/Makefile
|
||||
amsat/Makefile
|
||||
adat/Makefile
|
||||
ts7400/Makefile
|
||||
celestron/Makefile
|
||||
scripts/Makefile
|
||||
|
@ -507,6 +507,14 @@
|
||||
#define RIG_MODEL_PRM8060 RIG_MAKE_MODEL(RIG_PRM80, 1)
|
||||
#define RIG_MODEL_PRM8070 RIG_MAKE_MODEL(RIG_PRM80, 2)
|
||||
|
||||
/*
|
||||
* ADAT by HB9CBU
|
||||
*
|
||||
* ADDED: frgo (DG1SBG), 2012-01-01
|
||||
*/
|
||||
#define RIG_ADAT 29
|
||||
#define RIG_BACKEND_ADAT "adat"
|
||||
#define RIG_MODEL_ADT_200A RIG_MAKE_MODEL(RIG_ADAT, 1)
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
@ -554,6 +562,7 @@ typedef int rig_model_t;
|
||||
{ RIG_TUNER, RIG_BACKEND_TUNER }, \
|
||||
{ RIG_RS, RIG_BACKEND_RS }, \
|
||||
{ RIG_PRM80, RIG_BACKEND_PRM80 }, \
|
||||
{ RIG_ADAT, RIG_BACKEND_ADAT }, \
|
||||
{ 0, NULL }, /* end */ \
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user