Skip to content

Commit

Permalink
add a simple implementation of the dump_caps command. CQRLOG needs it…
Browse files Browse the repository at this point in the history
… version 2.6.0
  • Loading branch information
ftl committed Sep 18, 2022
1 parent 30fdcca commit 7c4dac9
Show file tree
Hide file tree
Showing 2 changed files with 264 additions and 3 deletions.
265 changes: 263 additions & 2 deletions adapter/adapter.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
tci "github.com/ftl/tci/client"
)

func Listen(localAddress string, tciHost *net.TCPAddr, trx int, done <-chan struct{}, traceHamlib, traceTCI bool, noDigimodes bool) (*Adapter, error) {
func Listen(localAddress string, tciHost *net.TCPAddr, trx int, done <-chan struct{}, traceHamlib, traceTCI bool, noDigimodes bool, version string) (*Adapter, error) {
listener, err := net.Listen("tcp", localAddress)
if err != nil {
return nil, fmt.Errorf("cannot open local port %s: %w", localAddress, err)
Expand All @@ -28,6 +28,7 @@ func Listen(localAddress string, tciHost *net.TCPAddr, trx int, done <-chan stru
traceHamlib: traceHamlib,
traceTCI: traceTCI,
noDigimodes: noDigimodes,
version: version,
}
result.tciClient = tci.KeepOpen(tciHost, 10*time.Second, traceTCI)
result.tciClient.Notify(result.trxData)
Expand Down Expand Up @@ -56,6 +57,7 @@ type Adapter struct {
traceHamlib bool
traceTCI bool
noDigimodes bool
version string
}

func (a *Adapter) run() {
Expand All @@ -81,6 +83,7 @@ func (a *Adapter) run() {
closed: make(chan struct{}),
trace: a.traceHamlib,
noDigimodes: a.noDigimodes,
version: a.version,
}
go conn.run()
go func() {
Expand Down Expand Up @@ -116,6 +119,7 @@ type inboundConnection struct {
closed chan struct{}
trace bool
noDigimodes bool
version string
}

func (c *inboundConnection) run() {
Expand Down Expand Up @@ -171,6 +175,8 @@ func (c *inboundConnection) handleRequest(req protocol.Request) (protocol.Respon
return protocol.ChkVFOResponse, nil
case "dump_state":
return protocol.DumpStateResponse, nil
case "dump_caps":
return dumpCapsResponse(c.version), nil
case "get_freq":
return protocol.GetFreqResponse(c.trxData.CurrentVFOFrequency()), nil
case "set_freq":
Expand Down Expand Up @@ -306,7 +312,8 @@ func (c *inboundConnection) handleRequest(req protocol.Request) (protocol.Respon
}
return protocol.OKResponse(req.Key()), nil
default:
return protocol.NoResponse, fmt.Errorf("unsupported request: %v", req.LongFormat())
log.Printf("unsupported request: %v", req.LongFormat())
return notImplementedResponse(req.Key()), nil
}
}

Expand Down Expand Up @@ -376,3 +383,257 @@ var tciToHamlibMode = map[tci.Mode]hamlib.Mode{
tci.ModeDIGL: hamlib.ModePKTLSB,
tci.ModeDIGU: hamlib.ModePKTUSB,
}

func notImplementedResponse(cmd protocol.CommandKey) protocol.Response {
return protocol.Response{Command: cmd, Result: "-4"}
}

func dumpCapsResponse(version string) protocol.Response {
return protocol.Response{
Command: "dump_caps",
Data: []string{`Caps dump for model: 1
Model name: tciadapter
Mfg name: dl3ney
Backend version: ` + version + `
Backend copyright: MIT
Backend status: Stable
Rig type: Other
PTT type: None
DCD type: Rig capable
Port type: None
Write delay: 0mS, timeout 0mS, 0 retry
Post Write delay: 0mS
Has targetable VFO: Y
Has async data support: N
Announce: 0x0
Max RIT: -9.990kHz/+9.990kHz
Max XIT: -9.990kHz/+9.990kHz
Max IF-SHIFT: -10.0kHz/+10.0kHz
Preamp: 10dB
Attenuator: 10dB 20dB 30dB
AGC levels: 0=OFF 1=SUPERFAST 2=FAST 5=MEDIUM 3=SLOW 6=AUTO 4=USER
CTCSS: 67.0 69.3 71.9 74.4 77.0 79.7 82.5 85.4 88.5 91.5 94.8 97.4 100.0 103.5 107.2 110.9 114.8 118.8 123.0 127.3 131.8 136.5 141.3 146.2 151.4 156.7 159.8 162.2 165.5 167.9 171.3 173.8 177.3 179.9 183.5 186.2 189.9 192.8 196.6 199.5 203.5 206.5 210.7 218.1 225.7 229.1 233.6 241.8 250.3 254.1 Hz, 50 tones
DCS: 17 23 25 26 31 32 36 43 47 50 51 53 54 65 71 72 73 74 114 115 116 122 125 131 132 134 143 145 152 155 156 162 165 172 174 205 212 223 225 226 243 244 245 246 251 252 255 261 263 265 266 271 274 306 311 315 325 331 332 343 346 351 356 364 365 371 411 412 413 423 431 432 445 446 452 454 455 462 464 465 466 503 506 516 523 526 532 546 565 606 612 624 627 631 632 654 662 664 703 712 723 731 732 734 743 754, 106 codes
Get functions: FAGC NB COMP VOX TONE TSQL SBKIN FBKIN ANF NR AIP APF MON MN RF ARO LOCK MUTE VSC REV SQL ABM BC MBC RIT AFC SATMODE SCOPE RESUME TBURST TUNER XIT NB2 CSQL AFLT ANL BC2 DUAL_WATCH DIVERSITY DSQL SCEN TRANSCEIVE SPECTRUM SPECTRUM_HOLD SEND_MORSE SEND_VOICE_MEM
Set functions: FAGC NB COMP VOX TONE TSQL SBKIN FBKIN ANF NR AIP APF MON MN RF ARO LOCK MUTE VSC REV SQL ABM BC MBC RIT AFC SATMODE SCOPE RESUME TBURST TUNER XIT NB2 CSQL AFLT ANL BC2 DUAL_WATCH DIVERSITY DSQL SCEN TRANSCEIVE SPECTRUM SPECTRUM_HOLD SEND_MORSE SEND_VOICE_MEM
Extra functions:
MGEF
Type: CHECKBUTTON
Default:
Label: Magic ext func
Tooltip: Magic ext function, as an example
Get level: PREAMP(0..0/0) ATT(0..0/0) VOXDELAY(0..0/0) AF(0..0/0) RF(0..0/0) SQL(0..0/0) IF(0..0/0) APF(0..0/0) NR(0..0/0) PBT_IN(0..0/0) PBT_OUT(0..0/0) CWPITCH(0..0/10) RFPOWER(0..0/0) MICGAIN(0..0/0) KEYSPD(0..0/0) NOTCHF(0..0/0) COMP(0..0/0) AGC(0..0/0) BKINDL(0..0/0) BAL(0..0/0) METER(0..0/0) VOXGAIN(0..0/0) ANTIVOX(0..0/0) SLOPE_LOW(0..0/0) SLOPE_HIGH(0..0/0) BKIN_DLYMS(0..0/0) RAWSTR(0..0/0) SWR(0..0/0) ALC(0..0/0) STRENGTH(0..0/0) RFPOWER_METER(0..0/0) COMP_METER(0..0/0) VD_METER(0..0/0) ID_METER(0..0/0) NOTCHF_RAW(0..0/0) MONITOR_GAIN(0..0/0) NB(0..0/0) RFPOWER_METER_WATTS(0..0/0) SPECTRUM_MODE(0..0/0) SPECTRUM_SPAN(0..0/0) SPECTRUM_EDGE_LOW(0..0/0) SPECTRUM_EDGE_HIGH(0..0/0) SPECTRUM_SPEED(0..2/1) SPECTRUM_REF(-30..10/0.5) SPECTRUM_AVG(0..3/1) SPECTRUM_ATT(0..0/0) TEMP_METER(0..0/0) BAND_SELECT(0..0/0)
Set level: PREAMP(0..0/0) ATT(0..0/0) VOXDELAY(0..0/0) AF(0..0/0) RF(0..0/0) SQL(0..0/0) IF(0..0/0) APF(0..0/0) NR(0..0/0) PBT_IN(0..0/0) PBT_OUT(0..0/0) CWPITCH(0..0/10) RFPOWER(0..0/0) MICGAIN(0..0/0) KEYSPD(0..0/0) NOTCHF(0..0/0) COMP(0..0/0) AGC(0..0/0) BKINDL(0..0/0) BAL(0..0/0) METER(0..0/0) VOXGAIN(0..0/0) ANTIVOX(0..0/0) SLOPE_LOW(0..0/0) SLOPE_HIGH(0..0/0) BKIN_DLYMS(0..0/0) NOTCHF_RAW(0..0/0) MONITOR_GAIN(0..0/0) NB(0..0/0) RFPOWER_METER_WATTS(0..0/0) SPECTRUM_MODE(0..0/0) SPECTRUM_SPAN(0..0/0) SPECTRUM_EDGE_LOW(0..0/0) SPECTRUM_EDGE_HIGH(0..0/0) SPECTRUM_SPEED(0..2/1) SPECTRUM_REF(-30..10/0.5) SPECTRUM_AVG(0..3/1) SPECTRUM_ATT(0..0/0) TEMP_METER(0..0/0) BAND_SELECT(0..0/0)
Extra levels:
MGL
Type: NUMERIC
Default:
Label: Magic level
Tooltip: Magic level, as an example
Range: 0..1/0.001
MGF
Type: CHECKBUTTON
Default:
Label: Magic func
Tooltip: Magic function, as an example
MGO
Type: BUTTON
Default:
Label: Magic Op
Tooltip: Magic Op, as an example
MGC
Type: COMBO
Default: VALUE1
Label: Magic combo
Tooltip: Magic combo, as an example
Values: 0="VALUE1" 1="VALUE2" 2="NONE"
Get parameters: ANN(0..0/0) APO(0..0/0) BACKLIGHT(0..0/0) BEEP(0..0/0) TIME(0..0/0) BAT(0..0/0) KEYLIGHT(0..0/0) SCREENSAVER(0..0/0)
Set parameters: ANN(0..0/0) APO(0..0/0) BACKLIGHT(0..0/0) BEEP(0..0/0) TIME(0..0/0) KEYLIGHT(0..0/0) SCREENSAVER(0..0/0)
Extra parameters:
MGP
Type: NUMERIC
Default:
Label: Magic parm
Tooltip: Magic parameter, as an example
Range: 0..1/0.001
Mode list: AM CW USB LSB RTTY FM WFM CWR RTTYR
VFO list: VFOA VFOB VFOC SubA SubB MainA MainB Sub Main MEM currVFO
VFO Ops: CPY XCHG FROM_VFO TO_VFO MCL UP DOWN BAND_UP BAND_DOWN LEFT RIGHT TUNE TOGGLE
Scan Ops: MEM SLCT PRIO PROG DELTA VFO PLT STOP
Number of banks: 0
Memory name desc size: 0
Memories:
0..18: MEM
Mem caps: BANK ANT FREQ MODE WIDTH TXFREQ TXMODE TXWIDTH SPLIT RPTRSHIFT RPTROFS TS RIT XIT FUNC LEVEL TONE CTCSS DCSCODE DCSSQL SCANGRP FLAG NAME EXTLVL
19..19: CALL
Mem caps:
20..21: EDGE
Mem caps:
TX ranges #1 for Dummy#1:
150000 Hz - 1500000000 Hz
VFO list: VFOA VFOB VFOC SubA SubB MainA MainB Sub Main MEM currVFO
Mode list: AM CW USB LSB RTTY FM WFM CWR RTTYR
Antenna list: ANT1 ANT2 ANT3 ANT4
Low power: 5 W, High power: 100 W
RX ranges #1 for Dummy#1:
150000 Hz - 1500000000 Hz
VFO list: VFOA VFOB VFOC SubA SubB MainA MainB Sub Main MEM currVFO
Mode list: AM CW USB LSB RTTY FM WFM CWR RTTYR
Antenna list: ANT1 ANT2 ANT3 ANT4
TX ranges #2 for Dummy#2:
RX ranges #2 for Dummy#2:
150000 Hz - 1500000000 Hz
VFO list: VFOA VFOB VFOC SubA SubB MainA MainB Sub Main MEM currVFO
Mode list: AM CW USB LSB RTTY FM WFM CWR RTTYR
Antenna list: ANT1 ANT2 ANT3 ANT4
TX ranges #3 for TBD:
RX ranges #3 for TBD:
TX ranges #4 for TBD:
RX ranges #4 for TBD:
TX ranges #5 for TBD:
RX ranges #5 for TBD:
TX ranges #1 status for Dummy#1: OK (0)
RX ranges #1 status for Dummy#1: OK (0)
TX ranges #2 status for Dummy#2: OK (0)
RX ranges #2 status for Dummy#2: OK (0)
TX ranges #3 status for TBD: OK (0)
RX ranges #3 status for TBD: OK (0)
TX ranges #4 status for TBD: OK (0)
RX ranges #4 status for TBD: OK (0)
TX ranges #5 status for TBD: OK (0)
RX ranges #5 status for TBD: OK (0)
Tuning steps:
1.0 Hz: AM CW USB LSB RTTY FM WFM CWR RTTYR
ANY: AM CW USB LSB RTTY FM WFM CWR RTTYR
Tuning steps status: OK (0)
Filters:
2.4000 kHz: USB LSB
1.8000 kHz: USB LSB
3.0000 kHz: USB LSB
ANY: USB LSB
500.0 Hz: CW
2.4000 kHz: CW
50.0 Hz: CW
ANY: CW
300.0 Hz: RTTY
2.4000 kHz: RTTY
50.0 Hz: RTTY
ANY: RTTY
8.0000 kHz: AM
2.4000 kHz: AM
10.0000 kHz: AM
15.0000 kHz: FM
8.0000 kHz: FM
230.0000 kHz: WFM
Bandwidths:
AM Normal: 8.0000 kHz, Narrow: 2.4000 kHz, Wide: 10.0000 kHz
CW Normal: 500.0 Hz, Narrow: 50.0 Hz, Wide: 2.4000 kHz
USB Normal: 2.4000 kHz, Narrow: 1.8000 kHz, Wide: 3.0000 kHz
LSB Normal: 2.4000 kHz, Narrow: 1.8000 kHz, Wide: 3.0000 kHz
RTTY Normal: 300.0 Hz, Narrow: 50.0 Hz, Wide: 2.4000 kHz
FM Normal: 15.0000 kHz, Narrow: 8.0000 kHz, Wide: 0.0 Hz
WFM Normal: 230.0000 kHz, Narrow: 0.0 Hz, Wide: 0.0 Hz
CWR Normal: 500.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
RTTYR Normal: 300.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
AMS Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
PKTLSB Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
PKTUSB Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
FM-D Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
ECSSUSB Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
ECSSLSB Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
FAX Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
SAM Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
SAL Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
SAH Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
DSB Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
FMN Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
AM-D Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
P25 Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
D-STAR Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
DPMR Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
NXDN-VN Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
NXDN-N Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
DCR Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
AMN Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
PSK Normal: 0.0 Hz, Narrow: 0.0 Hz, Wide: 0.0 Hz
Spectrum scopes: 0="Main" 1="Sub"
Spectrum modes: 1=CENTER 2=FIXED 3=CENTER_SCROLL 4=FIXED_SCROLL
Spectrum spans: 5000 10000 20000 50000 100000 200000 500000 1000000 2000000 5000000
Spectrum averaging modes: 0="OFF" 1="2" 2="3" 3="4"
Spectrum attenuator: 10dB 20dB 30dB
Has priv data: N
Has Init: N
Has Cleanup: N
Has Open: Y
Has Close: Y
Can set Conf: N
Can get Conf: N
Can set Frequency: Y
Can get Frequency: Y
Can set Mode: Y
Can get Mode: Y
Can set VFO: Y
Can get VFO: Y
Can set PTT: Y
Can get PTT: Y
Can get DCD: N
Can set Repeater Duplex: N
Can get Repeater Duplex: N
Can set Repeater Offset: N
Can get Repeater Offset: N
Can set Split Freq: Y
Can get Split Freq: Y
Can set Split Mode: Y
Can get Split Mode: Y
Can set Split VFO: Y
Can get Split VFO: Y
Can set Tuning Step: N
Can get Tuning Step: N
Can set RIT: N
Can get RIT: N
Can set XIT: N
Can get XIT: N
Can set CTCSS: N
Can get CTCSS: N
Can set DCS: N
Can get DCS: N
Can set CTCSS Squelch: N
Can get CTCSS Squelch: N
Can set DCS Squelch: N
Can get DCS Squelch: N
Can set Power Stat: N
Can get Power Stat: N
Can Reset: N
Can get Ant: N
Can set Ant: N
Can set Transceive: Y
Can get Transceive: Y
Can set Func: N
Can get Func: N
Can set Level: N
Can get Level: N
Can set Param: N
Can get Param: N
Can send DTMF: N
Can recv DTMF: N
Can send Morse: Y
Can send Voice: N
Can decode Events: N
Can set Bank: N
Can set Mem: N
Can get Mem: N
Can set Channel: N
Can get Channel: N
Can ctl Mem/VFO: N
Can Scan: N
Can get Info: N
Can get power2mW: N
Can get mW2power: N
Overall backend warnings: 0
`},
Keys: []string{""},
Result: "0",
}
}
2 changes: 1 addition & 1 deletion cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ func root(cmd *cobra.Command, args []string) {
signal.Notify(signals, syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
go handleCancelation(signals, cancel)

adapter, err := adapter.Listen(*rootFlags.localAddress, tciHost, *rootFlags.trx, ctx.Done(), *rootFlags.traceHamlib, *rootFlags.traceTCI, *rootFlags.noDigimodes)
adapter, err := adapter.Listen(*rootFlags.localAddress, tciHost, *rootFlags.trx, ctx.Done(), *rootFlags.traceHamlib, *rootFlags.traceTCI, *rootFlags.noDigimodes, cmd.Version)
if err != nil {
log.Fatalf("starting the adapter failed: %v", err)
}
Expand Down

0 comments on commit 7c4dac9

Please sign in to comment.