2003-10-12 18:04:02 +00:00
/*
* hamlib - ( C ) Stephane Fillod 2002 , 2003 ( fillods at users . sourceforge . net )
*
2003-11-28 15:45:19 +00:00
* ft990 . h - ( C ) Berndt Josef Wulf ( wulf at ping . net . au )
2003-10-12 18:04:02 +00:00
*
* This shared library provides an API for communicating
* via serial interface to an FT - 990 using the " CAT " interface
*
*
2011-08-23 02:26:44 +00:00
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2.1 of the License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2003-10-12 18:04:02 +00:00
*
*/
# ifndef _FT990_H
# define _FT990_H 1
2003-11-28 15:45:19 +00:00
// Global Definitions
# define TRUE 1
# define FALSE 0
# define ON TRUE
# define OFF FALSE
2003-10-12 18:04:02 +00:00
2006-02-26 06:17:39 +00:00
/* RX caps */
2003-10-12 18:04:02 +00:00
2006-02-26 06:17:39 +00:00
# define FT990_ALL_RX_MODES (RIG_MODE_LSB|RIG_MODE_USB|RIG_MODE_CW|RIG_MODE_AM|RIG_MODE_FM|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_PKTFM|RIG_MODE_PKTLSB)
# define FT990_SSB_CW_RX_MODES (RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_PKTLSB)
2003-11-28 15:45:19 +00:00
# define FT990_RTTY_RX_MODES (RIG_MODE_RTTY|RIG_MODE_RTTYR)
2003-10-12 18:04:02 +00:00
# define FT990_AM_RX_MODES (RIG_MODE_AM)
2006-02-26 06:17:39 +00:00
# define FT990_FM_RX_MODES (RIG_MODE_FM|RIG_MODE_PKTFM)
2003-10-12 18:04:02 +00:00
/* TX caps */
2006-02-26 06:17:39 +00:00
# define FT990_OTHER_TX_MODES (RIG_MODE_CW|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_RTTY|RIG_MODE_RTTYR|RIG_MODE_FM|RIG_MODE_PKTFM|RIG_MODE_PKTLSB) /* 100 W class */
2003-10-12 18:04:02 +00:00
# define FT990_AM_TX_MODES (RIG_MODE_AM ) /* set 25W max */
2003-11-28 15:45:19 +00:00
# define FT990_FUNC_ALL (RIG_FUNC_FAGC|RIG_FUNC_NB|RIG_FUNC_COMP|RIG_FUNC_VOX|RIG_FUNC_TONE|RIG_FUNC_TSQL|RIG_FUNC_SBKIN|RIG_FUNC_FBKIN|RIG_FUNC_LOCK|RIG_FUNC_TUNER) /* fix */
2003-10-12 18:04:02 +00:00
2003-11-28 15:45:19 +00:00
/* Other features */
2003-10-12 18:04:02 +00:00
2003-11-28 15:45:19 +00:00
# define FT990_VFO_ALL (RIG_VFO_A|RIG_VFO_B)
2003-10-12 18:04:02 +00:00
# define FT990_ANTS 0
2003-11-28 15:45:19 +00:00
# define FT990_VFO_OPS (RIG_OP_TO_VFO|RIG_OP_FROM_VFO|RIG_OP_CPY|RIG_OP_UP|RIG_OP_DOWN)
2003-10-12 18:04:02 +00:00
/* Returned data length in bytes */
2003-11-28 15:45:19 +00:00
# define FT990_ALL_DATA_LENGTH 1508 /* 0x10 P1 = 00 return size */
2003-10-12 18:04:02 +00:00
# define FT990_MEM_CHNL_LENGTH 1 /* 0x10 P1 = 01 return size */
2003-11-28 15:45:19 +00:00
# define FT990_OP_DATA_LENGTH 32 /* 0x10 P1 = 02 return size */
# define FT990_VFO_DATA_LENGTH 32 /* 0x10 P1 = 03 return size -- A & B returned */
# define FT990_MEM_CHNL_DATA_LENGTH 16 /* 0x10 P1 = 04, P4 = 0x00-0x59 return size */
# define FT990_READ_METER_LENGTH 5 /* 0xf7 return size */
# define FT990_STATUS_FLAGS_LENGTH 5 /* 0xfa return size */
/* BCD coded frequency length */
# define FT990_BCD_DIAL 8
# define FT990_BCD_RIT 3
2003-11-30 22:46:01 +00:00
# define FT990_BCD_RPTR_OFFSET 6
2003-10-12 18:04:02 +00:00
/* Timing values in mS */
2003-11-28 15:45:19 +00:00
# define FT990_PACING_INTERVAL 5
# define FT990_PACING_DEFAULT_VALUE 0
# define FT990_WRITE_DELAY 50
2003-10-12 18:04:02 +00:00
/* Delay sequential fast writes */
2003-11-28 15:45:19 +00:00
# define FT990_POST_WRITE_DELAY 5
2003-10-12 18:04:02 +00:00
/* Rough safe value for default timeout */
2003-11-28 15:45:19 +00:00
# define FT990_DEFAULT_READ_TIMEOUT FT990_ALL_DATA_LENGTH * ( 5 + (FT990_PACING_INTERVAL * FT990_PACING_DEFAULT_VALUE))
// FT990 native commands
typedef enum ft990_native_cmd_e {
FT990_NATIVE_SPLIT_OFF = 0 ,
FT990_NATIVE_SPLIT_ON ,
FT990_NATIVE_RECALL_MEM ,
FT990_NATIVE_VFO_TO_MEM ,
FT990_NATIVE_LOCK_OFF ,
FT990_NATIVE_LOCK_ON ,
FT990_NATIVE_VFO_A ,
FT990_NATIVE_VFO_B ,
FT990_NATIVE_MEM_TO_VFO ,
FT990_NATIVE_VFO_STEP_UP ,
FT990_NATIVE_VFO_STEP_UP_FAST ,
FT990_NATIVE_VFO_STEP_DOWN ,
FT990_NATIVE_VFO_STEP_DOWN_FAST ,
FT990_NATIVE_RX_CLARIFIER_OFF ,
FT990_NATIVE_RX_CLARIFIER_ON ,
FT990_NATIVE_TX_CLARIFIER_OFF ,
FT990_NATIVE_TX_CLARIFIER_ON ,
FT990_NATIVE_CLEAR_CLARIFIER_OFFSET ,
FT990_NATIVE_CLARIFIER_OPS ,
FT990_NATIVE_FREQ_SET ,
FT990_NATIVE_MODE_SET_LSB ,
FT990_NATIVE_MODE_SET_USB ,
FT990_NATIVE_MODE_SET_CW_W ,
FT990_NATIVE_MODE_SET_CW_N ,
FT990_NATIVE_MODE_SET_AM_W ,
FT990_NATIVE_MODE_SET_AM_N ,
FT990_NATIVE_MODE_SET_FM ,
FT990_NATIVE_MODE_SET_RTTY_LSB ,
FT990_NATIVE_MODE_SET_RTTY_USB ,
FT990_NATIVE_MODE_SET_PKT_LSB ,
FT990_NATIVE_MODE_SET_PKT_FM ,
FT990_NATIVE_PACING ,
FT990_NATIVE_PTT_OFF ,
FT990_NATIVE_PTT_ON ,
FT990_NATIVE_UPDATE_ALL_DATA ,
FT990_NATIVE_UPDATE_MEM_CHNL ,
FT990_NATIVE_UPDATE_OP_DATA ,
FT990_NATIVE_UPDATE_VFO_DATA ,
FT990_NATIVE_UPDATE_MEM_CHNL_DATA ,
FT990_NATIVE_TUNER_OFF ,
FT990_NATIVE_TUNER_ON ,
FT990_NATIVE_TUNER_START ,
FT990_NATIVE_RPTR_SHIFT_NONE ,
FT990_NATIVE_RPTR_SHIFT_MINUS ,
FT990_NATIVE_RPTR_SHIFT_PLUS ,
FT990_NATIVE_VFO_TO_VFO ,
FT990_NATIVE_BANDWIDTH ,
FT990_NATIVE_OP_FREQ_STEP_UP ,
FT990_NATIVE_OP_FREQ_STEP_DOWN ,
FT990_NATIVE_READ_METER ,
2003-11-30 22:46:01 +00:00
FT990_NATIVE_DIM_LEVEL ,
FT990_NATIVE_RPTR_OFFSET ,
2003-11-28 15:45:19 +00:00
FT990_NATIVE_READ_FLAGS ,
FT990_NATIVE_SIZE
} ft990_native_cmd_t ;
/* HAMLIB API implementation */
2004-08-17 20:07:20 +00:00
int ft990_init ( RIG * rig ) ;
int ft990_cleanup ( RIG * rig ) ;
int ft990_open ( RIG * rig ) ;
int ft990_close ( RIG * rig ) ;
int ft990_set_freq ( RIG * rig , vfo_t vfo , freq_t freq ) ;
int ft990_get_freq ( RIG * rig , vfo_t vfo , freq_t * freq ) ;
int ft990_set_mode ( RIG * rig , vfo_t vfo , rmode_t mode , pbwidth_t width ) ;
int ft990_get_mode ( RIG * rig , vfo_t vfo , rmode_t * mode , pbwidth_t * width ) ;
int ft990_set_vfo ( RIG * rig , vfo_t vfo ) ;
int ft990_get_vfo ( RIG * rig , vfo_t * vfo ) ;
int ft990_set_ptt ( RIG * rig , vfo_t vfo , ptt_t ptt ) ;
int ft990_get_ptt ( RIG * rig , vfo_t vfo , ptt_t * ptt ) ;
int ft990_set_rptr_shift ( RIG * rig , vfo_t vfo , rptr_shift_t rptr_shift ) ;
int ft990_get_rptr_shift ( RIG * rig , vfo_t vfo , rptr_shift_t * rptr_shift ) ;
int ft990_set_rptr_offs ( RIG * rig , vfo_t vfo , shortfreq_t offs ) ;
int ft990_set_split_vfo ( RIG * rig , vfo_t vfo , split_t split , vfo_t tx_vfo ) ;
int ft990_get_split_vfo ( RIG * rig , vfo_t vfo , split_t * split , vfo_t * tx_vfo ) ;
int ft990_set_rit ( RIG * rig , vfo_t vfo , shortfreq_t rit ) ;
int ft990_get_rit ( RIG * rig , vfo_t vfo , shortfreq_t * rit ) ;
int ft990_set_func ( RIG * rig , vfo_t vfo , setting_t func , int status ) ;
int ft990_get_func ( RIG * rig , vfo_t vfo , setting_t func , int * status ) ;
int ft990_set_parm ( RIG * rig , setting_t parm , value_t val ) ;
int ft990_set_xit ( RIG * rig , vfo_t vfo , shortfreq_t xit ) ;
int ft990_get_xit ( RIG * rig , vfo_t vfo , shortfreq_t * xit ) ;
int ft990_get_level ( RIG * rig , vfo_t vfo , setting_t level , value_t * val ) ;
int ft990_vfo_op ( RIG * rig , vfo_t vfo , vfo_op_t op ) ;
int ft990_set_mem ( RIG * rig , vfo_t vfo , int ch ) ;
int ft990_get_mem ( RIG * rig , vfo_t vfo , int * ch ) ;
int ft990_set_channel ( RIG * rig , const channel_t * chan ) ;
int ft990_get_channel ( RIG * rig , channel_t * chan ) ;
2003-11-28 15:45:19 +00:00
/*
* The definitions below are copied from the kft990
* project and are hereby made available to the
* hamlib project . [ BJW ]
*/
// OpCode Declarations
# define FT990_CMD_SPLIT 0x01
# define FT990_CMD_RECALLMEM 0x02
# define FT990_CMD_VFO2MEM 0x03
# define FT990_CMD_LOCK 0x04
# define FT990_CMD_SELVFOAB 0x05
# define FT990_CMD_MEM2VFO 0x06
# define FT990_CMD_UP 0x07
# define FT990_CMD_DOWN 0x08
# define FT990_CMD_CLARIFIER 0x09
# define FT990_CMD_SETVFOA 0x0a
# define FT990_CMD_SELOPMODE 0x0c
# define FT990_CMD_PACING 0x0e
# define FT990_CMD_PTT 0x0f
# define FT990_CMD_UPDATE 0x10
# define FT990_CMD_TUNER 0x81
# define FT990_CMD_START 0x82
# define FT990_CMD_RPT 0x84
# define FT990_CMD_VFOA2B 0x85
# define FT990_CMD_BW 0x8c
# define FT990_CMD_MEMSCANSKIP 0x8d
# define FT990_CMD_STEPVFO 0x8e
# define FT990_CMD_RDMETER 0xf7
# define FT990_CMD_DIMLEVEL 0xf8
# define FT990_CMD_RPTROFFSET 0xf9
# define FT990_CMD_RDFLAGS 0xfa
// Bandwidth Filter
# define FT990_BW_F2400 0x00
# define FT990_BW_F2000 0x01
# define FT990_BW_F500 0x02
# define FT990_BW_F250 0x03
# define FT990_BW_F6000 0x04
# define FT990_BW_FMPKTRTTY 0x80
// Operating Mode Status
# define FT990_MODE_LSB 0x00
# define FT990_MODE_USB 0x01
# define FT990_MODE_CW 0x02
# define FT990_MODE_AM 0x03
# define FT990_MODE_FM 0x04
# define FT990_MODE_RTTY 0x05
# define FT990_MODE_PKT 0x06
// Operation Mode Selection
# define FT990_OP_MODE_LSB 0x00
# define FT990_OP_MODE_USB 0x01
# define FT990_OP_MODE_CW2400 0x02
# define FT990_OP_MODE_CW500 0x03
# define FT990_OP_MODE_AM6000 0x04
# define FT990_OP_MODE_AM2400 0x05
# define FT990_OP_MODE_FM 0x06
# define FT990_OP_MODE_RTTYLSB 0x08
# define FT990_OP_MODE_RTTYUSB 0x09
# define FT990_OP_MODE_PKTLSB 0x0a
# define FT990_OP_MODE_PKTFM 0x0b
// Clarifier Operation
# define FT990_CLAR_TX_EN 0x01
# define FT990_CLAR_RX_EN 0x02
# define FT990_CLAR_RX_OFF 0x00
# define FT990_CLAR_RX_ON 0x01
# define FT990_CLAR_TX_OFF 0x80
# define FT990_CLAR_TX_ON 0x81
# define FT990_CLAR_CLEAR 0xff
# define FT990_CLAR_TUNE_UP 0x00
# define FT990_CLAR_TUNE_DOWN 0xff
// Repeater Shift Enable
# define FT990_RPT_POS_EN 0x04
# define FT990_RPT_NEG_EN 0x08
# define FT990_RPT_MASK 0x0C
// Status Flag 1 Masks
# define FT990_SF_SPLIT 0x01
# define FT990_SF_VFOB 0x02
# define FT990_SF_FAST 0x04
# define FT990_SF_CAT 0x08
# define FT990_SF_TUNING 0x10
# define FT990_SF_KEY_ENTRY 0x20
# define FT990_SF_MEM_EMPTY 0x40
# define FT990_SF_XMIT 0x80
// Status Flag 2 Masks
# define FT990_SF_MEM_SCAN_PAUSE 0x01
# define FT990_SF_MEM_CHECK 0x02
# define FT990_SF_MEM_SCAN 0x04
# define FT990_SF_LOCKED 0x08
# define FT990_SF_MTUNE 0x10
# define FT990_SF_VFO 0x20
# define FT990_SF_MEM 0x40
# define FT990_SF_GEN 0x80
// Status Flag 3 Masks
# define FT990_SF_PTT 0x01
# define FT990_SF_TX_INHIBIT 0x02
# define FT990_SF_KEY_TIMER 0x04
# define FT990_SF_MEM_TIMER 0x08
# define FT990_SF_PTT_INHIBIT 0x10
# define FT990_SF_XMIT_MON 0x20
# define FT990_SF_TUNER_ON 0x40
# define FT990_SF_SIDETONE 0x80
# define FT990_EMPTY_MEM 0x80
# define FT990_AMFILTER2400 0x80
// Flags Byte 1
typedef struct _ft990_flags1_t {
unsigned split : 1 ;
unsigned vfob : 1 ;
unsigned fast : 1 ;
unsigned cat : 1 ;
unsigned tuning : 1 ;
unsigned keyentry : 1 ;
unsigned memempty : 1 ;
unsigned xmit : 1 ;
} ft990_flags1_t ;
// Flags Byte 2
typedef struct _ft990_flags2_t {
unsigned memscanpause : 1 ;
unsigned memcheck : 1 ;
unsigned memscan : 1 ;
unsigned locked : 1 ;
unsigned mtune : 1 ;
unsigned vfo : 1 ;
unsigned mem : 1 ;
unsigned gen : 1 ;
} ft990_flags2_t ;
// Flags Byte 3
typedef struct _ft990_status3_t {
unsigned ptt : 1 ;
unsigned txinhibit : 1 ;
unsigned keytimer : 1 ;
unsigned memtimer : 1 ;
unsigned pttinhibit : 1 ;
unsigned xmitmon : 1 ;
unsigned tuneron : 1 ;
unsigned sidetone : 1 ;
} ft990_flags3_t ;
typedef union _ft990_flags1_u {
ft990_flags1_t bits ;
unsigned char byte ;
} ft990_flags1_u ;
typedef union _ft990_flags2_u {
ft990_flags2_t bits ;
unsigned char byte ;
} ft990_flags2_u ;
typedef union _ft990_flags3_u {
ft990_flags3_t bits ;
unsigned char byte ;
} ft990_flags3_u ;
typedef struct _ft990_status_data_t {
ft990_flags1_u flags1 ;
ft990_flags2_u flags2 ;
ft990_flags3_u flags3 ;
unsigned char id1 ;
unsigned char id2 ;
} ft990_status_data_t ;
typedef struct _ft990_meter_data_t {
unsigned char mdata1 ;
unsigned char mdata2 ;
unsigned char mdata3 ;
unsigned char mdata4 ;
unsigned char id1 ;
} ft990_meter_data_t ;
typedef struct _ft990_op_data_t {
unsigned char bpf ;
unsigned char basefreq [ 3 ] ;
unsigned char status ;
unsigned char coffset [ 2 ] ;
unsigned char mode ;
unsigned char filter ;
unsigned char lastssbfilter ;
unsigned char lastcwfilter ;
unsigned char lastrttyfilter ;
unsigned char lastpktfilter ;
unsigned char lastclariferstate ;
unsigned char skipscanamfilter ;
unsigned char amfm100 ;
} ft990_op_data_t ;
// Update Data Structure
typedef struct _ft990_update_data_t {
unsigned char flag1 ;
unsigned char flag2 ;
unsigned char flag3 ;
unsigned char channelnumber ;
ft990_op_data_t current_front ;
ft990_op_data_t current_rear ;
ft990_op_data_t vfoa ;
ft990_op_data_t vfob ;
ft990_op_data_t channel [ 90 ] ;
} ft990_update_data_t ;
2003-10-12 18:04:02 +00:00
2003-11-28 15:45:19 +00:00
// Command Structure
typedef struct _ft990_command_t {
unsigned char data [ 4 ] ;
unsigned char opcode ;
} ft990_command_t ;
2003-10-12 18:04:02 +00:00
# endif /* _FT990_H */