[chirp_devel] IC-P7 .ICF format

SASANO Takayoshi
Mon Mar 20 02:54:29 PDT 2017


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,

-- 
SASANO Takayoshi (JG1UAA) <uaa at mx5.nisiq.net>



More information about the chirp_devel mailing list