Hello,
Recently I bought ICOM's IC-P7 transceiver and CS-P7 software. I want to use CHIRP with this rig and I tried to analyze .ICF file.
I am not familiar with Python (because I was C programmer), so I write the result here for developer's help.
- - - - - - - -
*** memory layout
0x0000 memory settings (1251 channels, 21bytes/channel) ch #0~999 normal memory ch.0~999 ch #1000~1049 Prog.scan edge 00A, 00B ... 24A, 24B ch #1050~1249 auto write (?) ch #1250 CALL0 ch #1251 CALL1
0x6922 skip flag (bitmap, 1056 bits) (ch #0~1049) 0x69a6 pskip flag (bitmap, 1056 bits) (ch #0~1049) bit position = byte[(ch# / 8)] & (1 << (ch# % 8))
skip pskip 0 0 off 1 0 skip 1 1 pskip 0 1 unknown
0x6b1e memory bank settings {uint8_t bank_group (0x00~0x11, 0xff: unused) uint8_t bank_index (0x00~0x63) } x 1050 channels
0x7352 bank name {char bank_name[6]} x 18 entries
*** channel entry
21bytes/channel, all values are little-endian.
{uint32_t freq uint32_t offset uint16_t train_sql uint16_t tone_setting uint16_t dtcs_mode uint8_t dtcs_polarity uint8_t name[6]}
freq and offset: Values are specified in 1/3Hz. i.e. 3000000(0x002dc6c0) means 1.0MHz. freq range is 0.495~999.99MHz and offset is 0~159.995MHz.
train_sql: bit[15:14] 00 Train SQL: off 01 Train SQL: tone eliminate (use bit[8:0]) 10 Train SQL: MSK bit[13:11] 000 no tone 001 Tone enable 010 TSQL enable 100 DTCS enable bit[10:9] 00 duplex: off 01 duplex: on (-) 10 duplex: on (+) bit[8:0] Train SQL tone frequency (300~3000Hz) the value is specified in 10Hz. For example: 228(0xe4) means 2280Hz.
- In Japan, train radio sends simple tone or MSK signal when no conversation. Train SQL suppress these tone/signal to listen easy.
tone_setting: bit[15:12] 0000 TS: 5.0kHz 0001 TS: 6.25kHz 0010 TS: 8.33kHz 0011 TS: 9.0kHz 0100 TS: 10.0kHz 0101 TS: 12.5kHz 0110 TS: 15.0kHz 0111 TS: 20.0kHz 1000 TS: 25.0kHz 1001 TS: 30.0kHz 1010 TS: 50.0kHz 1011 TS: 100.0kHz 1100 TS: 200.0kHz 1101 TS: Auto bit[11:6] 000000 TSQL tone: 67.0Hz 000001 TSQL tone: 69.3Hz 000010 TSQL tone: 71.9Hz : 101111 TSQL tone: 241.8Hz 110000 TSQL tone: 250.3Hz 110001 TSQL tone: 254.1Hz bit[5:0] CTCSS tone, format is same as TSQL tone
dtcs_mode: bit[15:9] unknown, '0000000' bit[8:7] 00 mode: FM 01 mode: WFM 10 mode: AM 11 mode: Auto bit[6:0] 000000 DTCS code: 023 000001 DTCS code: 025 000010 DTCS code: 026 : 110101 DTCS code: 734 110110 DTCS code: 743 110111 DTCS code: 754
dtcs_polarity: bit[7:2] unknown, '111111' bit[1:0] 00 DTCS polarity: Both-N 01 DTCS polarity: TN-RR 10 DTCS polarity: TR-RN 11 DTCS polarity: Both-R
- When channel entry is empty, these values are set: freq 0x3a98 (499.5kHz) offset 0x1c9bfd68 (159.995MHz) train_sql 0xffff tone_setting 0xffff dtcs_mode 0x03ff dtcs_polarity 0xff name {0x20, 0x20, 0x20, 0x20, 0x20, 0x20}
skip and pskip "11"
- - - - - - - -
.ICF contains current rig status such as VFO frequency, power (Lo/Hi), beep volume and so on, but I don't check yet because these are not fundamental.
And some stuff:
_model = "\x28\x69\x00\x01"
The first line of .ICF and CHIRP's message says "ERROR: Unknown radio type 28690001" same code.
_memsize = 0x7500
_endframe = "Icom Inc\x2e\x41\x38"
What does \x41\x38 means? Is there any reason not to simply use "Icom Inc." ??
Regards,