Icom IC-7000 Memory Programmer


Transceiver Icom IC-7000 offers 5 memory banks, each of 99 memories. It’s very boring and time-consuming to store all parameters to memories “by hand”, so I tried to find some application on the internet, which can make this job instead of me. Several applications are available, but no one satisfied my requirements:

  • Radio Programming Software for the Icom IC-7000
    from RT systems Inc. – only windows version, not free software.
  • Icom ProMemEdit
    from DF4OR – only windows version, development stopped, not supporting new radios like IC-7000.
  • IcomProgrammer II
    from P. Lutus – good software, written in Python, but not exactly what I needed.

Because i am using only Linux in my home computer for many years, last software from P. Lutus, written in python, was the right piece of code, which I decided to modify, to meet my requirements. IcomProgrammer II was written under GNU licence, so no problem to modify and use this software. Original code can be downloaded on Paul Lutus web page. My modified application I call Icom IC-7000 Memory Programmer.

Main goal was write some application under Linux, that allows read memory data from simple file, and write them via CI-V interface to IC-7000’s memories. Paul’s solution was LibreOffice spreadsheed, where I can simply store all needed data for each memory channel and Icom IC-7000 Memory Programmer can read them. Main disadvantage of Paul’s Lutus Programmer is no possibility to set memory bank.  His software counts the number of frequencies to store and distribute them into memory banks by the number of memory channels in each bank. In my Icom IC-7000 Memory Programmer is possible to exactly set which memory bank to use to store each of frequencies.Next, I added support of DTCS, filter bandwidth and scan marking of memory channel. I my opinion, Paul uses complicated algorithm of storing data to memory channel, copying manual “by hand” process.  Icom IC-7000 Memory Programmer reads all necessary data from .ods  file, modify them for CI-V interface, and send them all directly  to memory place in TCVR. This CI-V command (0x1A 0x00) is not described in IC-7000 user manual , so I used reverse engineering and google searching to discover, how this command exactly works.

For connecting TCVR with computer can be used original Icom CT-17 usb interface, or some cheap CI-V usb interface for Icom from eBay.

This application can be probably run under python for windows environment.

Data file structure

Basic structure of LibreOffice file containing frequency data is like that:

Bank MemTag Mode RxFreq TxFreq TxOffset TxTone RxTone RxDCS TxDCS SQType RxFilter Scan
A OM0OVR fm 145.750 145.150 -0.6 67 88.5 NN073 NN073 TSQL 1 True
  • Bank – memmory bank used to store. One of [A,B,C,D,E]
  • MemTag – name of the memory channel. Max. 9 characters
  • Mode – modulation mode. One of [fm, am, lsb, usb, cw, rtty, wfm]
  • RxFreq – receiver frequency in MHz
  • TxFreq – transmitter frequency in MHz
  • TxOffset – duplex offset. In case of simplex channel, should be blank. This column is not necessary for programming. I use it just for counting TX frequency. So I do not must remember TX frequency. Icom IC-7000 Memory Programmer doesn’t use this column
  • RxTone – CTCSS tone of receiver
  • TxTone – CTCSS tone of transmitter
  • RxDCS – DTCS tone of receiver
  • TxDCS – DTCS tone oftransmitter
  • SqType – type of tone squelch.  One of [TONE, TSQL, TDCS] or blank if without tone squelch
  • RxFilter – bandwidth of RX filter.  One of [1,2,3]. For details, see in user manual of IC-7000.  Depends on modulation selected.
  • Scan – mark for memory scanning. Value of this should be True, TRUE, Y, y, or true. If left blank, memory channel will not be scanned.

Each row in table represents one memory channel in memory of TCVR.

Downloading and running Icom IC-7000 Memory Programmer

First downolad Icom IC-7000 Memory Programmer, and unpack it to some folder.

Run this command:


This file must be set executable, so it can be executed under Python interpreter.  It makes its own directory structure needed for specific files.

Icom IC-7000 Memory Programmer functions

You can have more different “configurations” of your radio.  For example one set of frequencies for home use, one for SOTA, one for boat, etc. Each set of frequencies must be in separate .ods file, and be written in source code of Icom IC-7000 Memory Programmer. Look at the example bellow:

# User configuration table
self.radio_configurations = {
‘IC-7000-Home’ : (‘IC-7000’,(‘home_frequencies’,)),
‘IC-7000-Car’ : (‘IC-7000’,(‘car_frequencies’,)),

It means, we have 2 different configuration, one for home use of IC-7000 and one for car usage.  Frequencies are in two different files:  home_frequencies.ods and car_frequencies.ods.  We can have as many files/configurations as we want.

Main menu of Icom IC-7000 Memory Programmer looks like this:

1: Program IC-7000-Home
2: Program IC-7000-car
3: Create All Radio Frequency Lists
4: Create All CSV/TSV Frequency Lists
5: Erase All Memories
6: Quit
Select (1 – 6):

First are listed options, for programming IC-7000 radio from different files.  How many files you have, so many options is in the main menu.  Next are two options for exporting your .ods files to different formats: CSV, TSV, PDF, HTML.  These functions are the same as in Paul’s Lutus programmer.  New option is Erase All Memories, that is not present in Paul’s programmer. Last one is Quit, for exit.


My Icom IC-7000 Memory Programmer is not written perfectly, but is working well for me. If is hepls someone, I will be happy.  If someone finds a bug, feel free to correct it. Anybody can improve functionality of application and send me a copy. Please do not contact me for assistance or support. Anybody can study the source code and make changes, that meets his requirements.

For more help it’s seriously recommended to read Paul’s Lutus webpage mentioned above.

Both comments and pings are currently closed.

Comments are closed.

Subscribe to RSS Feed Follow me on Twitter!