Project

General

Profile

Actions

New Model #2795

open

Icom IC-R6

Added by Johan Nilsson over 8 years ago. Updated about 1 month ago.

Status:
New
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
08/13/2015
Due date:
% Done:

0%

Estimated time:
Equipment Loan/Gift Offered:
No
I read the instructions above:
Yes

Description

Icom IC-R6


Related issues

Has duplicate New Model #4897: Icom IC-R6Closed06/11/2017

Actions
Actions #1

Updated by Eric Dropps over 8 years ago

Do you have a copy of the CS-R6 software? This would likely be needed (or a loaner receiver) to add support.

Actions #2

Updated by Johan Nilsson over 8 years ago

Eric Dropps wrote:

Do you have a copy of the CS-R6 software? This would likely be needed (or a loaner receiver) to add support.
Sorry i don't have , but i think it uses the CI-V protocol. Like some models you already support for example Icom 746.

Actions #3

Updated by Kristian Sørensen over 7 years ago

Any chance of the Icom IC-R6 being supported by Chirp?

In the paper manual for the IC-R6 it says it uses the CI-V "communication interface".

Just for a laugh I tried downloading from the IC-R6 telling Chirp it is an Icon 746 (because that one apparently also also uses CI-V(, and Chirp did do some downloading from the IC-R6 but with errors, and Chirp could not upload to the IC-R6.

Would it help matters if I offered to let you borrow my IC-R6 for some months?

Actions #4

Updated by Mark Schaffer over 1 year ago

I can loan my IC-R6 to a developer to get this added to CHIRP. Just let me know.

Actions #5

Updated by Steef Pieters 3 months ago

Johan Nilsson wrote:

Icom IC-R6

Hi guys, I own a R6, also CS-R6. I would reallyreally like support of Chirp with programming. CS6 sucks (sorry). Csv Importing and exporting is impossible. Exporting and directly importing = “illegal data”. Which shows exporting already corrupts.
How are things with support of Icom IC-R6 8 years later? Can I help with CS eg ?
Greetz Steef

Actions #6

Updated by John Bradshaw about 1 month ago

Hi everyone,

I've a IC-R6 and bought CS-R6... it's not great so keen to help with Chirp.

Have decoded the command that "clones out" the radio and written a small Python script which sends that command to the radio and captures the memory dump on stdout:

#!/usr/bin/python3

# pip install pexpect-serial
# Don't have "serial" package installed, use the above instead.
import serial
import sys
from pexpect_serial import SerialSpawn
from pexpect import TIMEOUT

with serial.Serial('/dev/ttyUSB0', 9600, timeout=0) as ser:
    ss = SerialSpawn(ser)

    ss.write(b'\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xee\xef\xe2\x32\x50\x00\x00\xfd')

    do_loop = True
    while do_loop:
        index = ss.expect(['.', TIMEOUT])
        if index == 0:
            a = ss.match.group(index)
            sys.stdout.write(f":{a.hex()}")
            if a == b'\xfd':
                sys.stdout.write("\n")
        elif index == 1:
            do_loop = False

    ser.close()

Have another Perl script that converts the output of the above to "ASCII encoded hexadecimal", it let me use diff and similar tools to compare small config changes... happy to share if anyone wants it (updating it as I learn more about the memory layout).

Started on the layout for the channels (they're 16 bytes each starting at location 0000).
Found some of the bytes that control frequency (see below) as well another higher block of memory that shows if a channel memory is enabled or not. There's other memory locations which change too - think they're display/name related but haven't tried decoding them as yet.

Sorted by freq low to high:
 88.000 MHz   WFM  50k  C0 44 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 89.000 MHz   WFM  50k  88 45 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 90.000 MHz   WFM  50k  10 27 F0 1A 00 00 00 08 00 72 00 00 00 00 00 00
 91.000 MHz   WFM  50k  18 47 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 92.000 MHz   WFM  50k  E0 47 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 93.000 MHz   WFM  50k  A8 48 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 94.000 MHz   WFM  50k  70 49 00 1A 00 00 00 08 00 72 00 00 00 00 00 00

 94.450 MHz   WFM  50k  CA 49 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 94.500 MHz   WFM  50k  04 29 F0 1A 00 00 00 08 00 72 00 00 00 00 00 00
 94.550 MHz   WFM  50k  DE 49 00 1A 00 00 00 08 00 72 00 00 00 00 00 00

 95.000 MHz   WFM  50k  38 4A 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 96.000 MHz   WFM  50k  00 4B 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 97.000 MHz   WFM  50k  C8 4B 00 1A 00 00 00 08 00 72 00 00 00 00 00 00

 97.350 MHz   WFM  50k  0E 4C 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 97.400 MHz   WFM  50k  18 4C 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 97.450 MHz   WFM  50k  22 4C 00 1A 00 00 00 08 00 72 00 00 00 00 00 00

 98.000 MHz   WFM  50k  90 4C 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 99.000 MHz   WFM  50k  F8 2A F0 1A 00 00 00 08 00 72 00 00 00 00 00 00

 99.650 MHz   WFM  50k  DA 4D 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 99.700 MHz   WFM  50k  E4 4D 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
 99.750 MHz   WFM  50k  EE 4D 00 1A 00 00 00 08 00 72 00 00 00 00 00 00

100.000 MHz   WFM  50k  20 4E 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
101.000 MHz   WFM  50k  E8 4E 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
102.000 MHz   WFM  50k  B0 4F 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
103.000 MHz   WFM  50k  78 50 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
104.000 MHz   WFM  50k  40 51 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
105.000 MHz   WFM  50k  08 52 00 1A 00 00 00 08 00 72 00 00 00 00 00 00

105.750 MHz   WFM  50k  E6 2D F0 1A 00 00 00 08 00 72 00 00 00 00 00 00
105.800 MHz   WFM  50k  A8 52 00 1A 00 00 00 08 00 72 00 00 00 00 00 00

106.000 MHz   WFM  50k  D0 52 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
107.000 MHz   WFM  50k  98 53 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
107.850 MHz   WFM  50k  42 54 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
144.975 MHz    FM  25k  43 71 00 08 00 78 00 08 00 72 00 00 00 00 00 00
145.000 MHz    FM  25k  48 71 00 08 00 78 00 08 00 72 00 00 00 00 00 00
145.025 MHz    FM  25k  4D 71 00 08 00 78 00 08 00 72 00 00 00 00 00 00

400.000 MHz    FM  25k  80 38 01 08 00 40 01 08 00 72 00 00 00 00 00 00

429.000 MHz    FM  25k  28 4F 01 08 00 40 01 08 00 72 00 00 00 00 00 00

429.975 MHz    FM  25k  EB 4F 01 08 00 40 01 08 00 72 00 00 00 00 00 00
430.000 MHz    FM  25k  F0 4F 01 08 00 40 01 08 00 72 00 00 00 00 00 00
430.025 MHz    FM  25k  F5 4F 01 08 00 40 01 08 00 72 00 00 00 00 00 00

The first byte of 16 is the frequency LSB, second byte is next most significant, etc.

Can anyone somebody explain why the second byte goes 49-29-49 while the third byte goes 00-F0-00?

                         B1 B2 B3
  94.450 MHz   WFM  50k  CA 49 00 1A 00 00 00 08 00 72 00 00 00 00 00 00
  94.500 MHz   WFM  50k  04 29 F0 1A 00 00 00 08 00 72 00 00 00 00 00 00
  94.550 MHz   WFM  50k  DE 49 00 1A 00 00 00 08 00 72 00 00 00 00 00 00

Something similar happens between 89, 90 and 91 MHz above too.

Thanks.

Actions #7

Updated by Dan Smith about 1 month ago

  • I read the instructions above set to Yes

ss.write(b'\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xee\xef\xe2\x32\x50\x00\x00\xfd')

This looks like standard ICF, so I suspect subclassing IcomCloneModeRadio will get you clone in and out fairly reliably, if you figure out and set _memsize. Once you do and you can attach a standard chirp .img file it will probably be easier to hash out some details. Also, chirp can load .ICF files in general, so you can probably also use that to save out from CS-R6 and tweak/test/repeat from the software instead of having to go through the device. Then you can more easily start with something clean, set a memory, then change as little as possible and suss out which bit changes. In developer mode, you can use the Radio->Reload operations to iterate quickly between CS-R6 save and load in chirp. Repeating like that is how you'll be able to figure out what each of the things does instead of just staring at a whole memory and guessing.

Once you figure out the start and offset of the memories (sounds like you're there) you can populate a memory object in chirp and then you can browse through it with the GUI and start to define bits you know about. Once you have that you can define two memories that are identical other than one thing and right-click "diff raw memories" and see only the bits that changed. Once you get to that point, you'll be able to decode all the things super fast.

Hope that helps a bit.

Actions #8

Updated by John Bradshaw about 1 month ago

Thanks Dan.

Yes, that's a great start.

Copied ict7h.py to icr6.py, set _memsize and made a few edits... it's now reading the radio and importing the ICF too. Was able to save out an.img file.
Need to play around with the memory structures (seem to be 3 different blocks - one with frequency, one with control bits and another I suspect is the displayed segments).

Actions

Also available in: Atom PDF