CHIRP - New Model # 1667
Status: Closed Priority: Normal
Author: Pat Colagreco Category:
Created: 05/30/2014 Assignee: Ron Wellsted
Updated: 02/25/2020 Due date:
Chirp Version: daily
Equipment Loan Offered:Yes
Subject: Wouxun KG-UV8D
Description
Requesting development of compatibility for the Wouxun KG-UV8D
I have had the radio for a few weeks now.
The included factory Wouxun software is practically unuseable.
It corrupts the functionality of the radio when saving information into the radio. Needs factory reset at that point in time.
Related issues:
duplicated by New Model # 1711: Wouxun KG-UV8D Rejected 06/22/2014
duplicated by New Model # 1723: KG-UV8D Rejected 06/29/2014
duplicated by New Model # 1725: Wouxun KG-UV8D Rejected 06/30/2014
Associated revisions
Revision 2268:803d27c5cb2a - 09/29/2014 02:20 am - Ron Wellsted
Issue #1667 New Model Wouxun KG-UV8D
Basic support for the Wouxun KG-UV6D HT.
At present this can read and write all 999 memories and
will show (but not write!) some of the radio's settings.
Revision 2270:3438820c4164 - 09/29/2014 02:20 am - Ron Wellsted
Issue #1667 New Model Wouxun KG-UV8D
Basic support for the Wouxun KG-UV6D HT.
At present this can read and write all 999 memories and
will show (but not write!) some of the radio's settings.
Revision 2269:fb766366f2c9 - 10/14/2014 12:00 pm - Dan Smith
Revert accidental commit to stable branch
#1667
Revision 2285:c24441dfee76 - 11/25/2014 11:32 am - Ron Wellsted
issue #1667
code corrected for memory/vfo power setting
force the mute mode to QT instead of a random value
07/04/2021 1/12
Revision 2649:9752a42d4a0d - 02/08/2016 06:14 am - Ron Wellsted
[kg-uv8d] Expanded the configuration options support, Fixes #1667
History
#1 - 09/13/2014 08:01 am - Ron Wellsted
- File KGUV8D-Read.txt added
- File KGUV8D-Write.txt added
- File KGUV8D-FrequencyLimit.txt added
- File KG-UV8D.pdf added
I have one of these radios and have started to get chirp to work with it.
The attached files are the ones I am using to revese engineer the protocol and memory locations.
#2 - 09/13/2014 08:15 am - Ron Wellsted
What has been decoded so far:
Serial coms are at 19200 baud and the data is passed in variable length
records with a checksum.
Record structure:
Offset Usage
0 start of record (\x7d)
1 Command (\x80 Identify \x81 End/Reboot \x82 Read \x83 Write)
2 direction (\xff PC-> Radio, \x00 Radio -> PC)
3 length of payload (excluding header/checksum) (n)
4 payload (n bytes)
4+n+1 checksum - byte sum (% 256) of bytes 1 -> 4+n
Memory Read Records:
the request payload is 3 bytes, first 2 are offset (big endian), 3rd is
number of bytes to read
Memory Write Records:
The maximum payload size (from the Wouxun software) seems to be 66 bytes
(2 bytes location + 64 bytes data).
I have got as far as getting Chirp to successfully identify the radio.
A Gotcha: the first identify packet returns a bad checksum, subsequent
attempts return the correct checksum... (well it does on my radio!)
The ID record returned by the radio also includes the current frequency
range as 4 bytes big endian in 10Hz increments
Offset
00:10 Model, zero padded (Use first 7 chars for 'KG-UV8D')
11:14 UHF lower limit 1 (in units of 10Hz)
15:18 UHF upper limit 1
07/04/2021 2/12
19:22 UHF lower limit 2
23:26 UHF upper limit 2
27:30 VHF lower limit 1
31:34 VHF upper limit 1
35:38 VHF lower limit 2
39:42 VHF upper limit 2
Limit 1 = Rx and Limit 2 = Tx (just my guess!)
#3 - 09/20/2014 01:38 am - Ron Wellsted
Present status:
I have got support for identifying and reading the memory from the radio. By a long process of changing either 1 menu item or factory software setting
at a time and downloading the memory, I have determined the following memory layout: (Structure member names starting with an x e.g. x0845, are
ones I have not been able to determine yet)
#seekto 0x0044;
struct {
u32 rx_freq;
u32 tx_freq;
} uhf_limits;
#seekto 0x0054;
struct {
u32 rx_freq;
u32 tx_freq;
} vhf_limits;
#seekto 0x0400;
struct {
char model[8];
char unknown[2];
char oem1[10];
char oem2[10];
char unknown2[8];
char version[10];
u8 unknown3[6];
char date[8];
} oem_info;
#seekto 0x0480;
struct {
u16 lower;
u16 upper;
} scan_groups[10];
#seekto 0x0500;
struct {
u8 call_code[6];
} call_groups[20];
#seekto 0x0580;
struct {
char call_name[6];
} call_group_name[20];
#seekto 0x0800;
struct {
u8 ponmsg;
07/04/2021 3/12
char dispstr[15];
u8 voice;
u8 timeout;
u8 toalarm;
u8 channel_menu;
u8 save;
u8 autolock;
u8 keylock;
u8 beep;
u8 stopwatch;
u8 vox;
u8 scan_rev;
u8 backlight;
u8 roger_beep;
u8 mode_sw_pwd[6];
u8 reset_pwd[6];
u16 pri_ch;
u8 ani_sw;
u8 ptt_delay;
u8 ani[6];
u8 dtmf_st;
u8 bcl_a;
u8 bcl_b;
u8 ptt_id;
u8 prich_sw;
u8 rpt_set;
u8 rpt_spk;
u8 rpt_ptt;
u8 alert;
u8 pf1_func;
u8 pf3_func;
u8 workmode_a;
u8 workmode_b;
u8 x0845;
u8 dtmf_tx_time;
u8 dtmf_interval;
u8 main_ab;
u16 work_cha;
u16 work_chb;
u8 x084d;
u8 x084e;
u8 x084f;
u8 x0850;
u8 x0851;
u8 x0852;
u8 x0853;
u8 x0854;
u8 rpt_mode;
u8 language;
u8 x0857;
u8 x0858;
u8 x0859;
u8 x085a;
07/04/2021 4/12
u8 x085b;
u8 x085c;
u8 x085d;
u8 x085e;
u8 single_display;
u8 ring;
u8 scg_a;
u8 scg_b;
u8 x0863;
u8 rpt_tone;
u8 rpt_hold;
u8 scan_det;
u8 sc_qt;
u8 x0868;
u8 smuteset;
u8 callcode;
} settings;
#seekto 0x0880;
struct {
u32 rxfreq;
u32 txoffset;
u16 rxtone;
u16 txtone;
u8 unknown1:4,
scan:1
power:1,
unknown2:1;
u8 unknown3:1,
shift_dir:2
unknown4:2,
mute_mode:2,
wide_fm:1;
u8 step;
u8 squelch;
} vfoa;
#seekto 0x08c0;
struct {
u32 rxfreq;
u32 txoffset;
u16 rxtone;
u16 txtone;
u8 unknown1:4,
scan:1
power:1,
unknown2:1;
u8 unknown3:1,
shift_dir:2
unknown4:2,
mute_mode:2,
wide_fm:1;
u8 step;
u8 squelch;
} vfob;
07/04/2021 5/12
#seekto 0x0900;
struct {
u32 rxfreq;
u32 txfreq;
u16 rxtone;
u16 txtone;
u8 unknown1:4,
scan:1
power:1,
unknown2:1;
u8 unknown3:2,
scan_add:1,
unknown4:2,
mute_mode:2,
wide_fm:1;
u16 padding;
} memory[1000];
#seekto 0x4780;
struct {
char name[8];
} names[1000];
#seekto 0x6700;
u8 valid[1000];
#4 - 09/22/2014 05:07 am - Ron Wellsted
Corrected memory layout:
#seekto 0x0044;
struct {
u32 rx_start;
u32 rx_stop;
u32 tx_start;
u32 tx_stop;
} uhf_limits;
#seekto 0x0054;
struct {
u32 rx_start;
u32 rx_stop;
u32 tx_start;
u32 tx_stop;
} vhf_limits;
#seekto 0x0400;
struct {
char model[8];
u8 unknown[2];
char oem1[10];
char oem2[10];
char unknown2[8];
char version[10];
u8 unknown3[6];
char date[8];
} oem_info;
07/04/2021 6/12
#seekto 0x0480;
struct {
u16 lower;
u16 upper;
} scan_groups[10];
#seekto 0x0500;
struct {
u8 call_code[6];
} call_groups[20];
#seekto 0x0580;
struct {
char call_name[6];
} call_group_name[20];
#seekto 0x0800;
struct {
u8 ponmsg;
char dispstr[15];
u8 x0810;
u8 x0811;
u8 x0812;
u8 x0813;
u8 x0814;
u8 voice;
u8 timeout;
u8 toalarm;
u8 channel_menu;
u8 power_save;
u8 autolock;
u8 keylock;
u8 beep;
u8 stopwatch;
u8 vox;
u8 scan_rev;
u8 backlight;
u8 roger_beep;
u8 mode_sw_pwd[6];
u8 reset_pwd[6];
u16 pri_ch;
u8 ani_sw;
u8 ptt_delay;
u8 ani[6];
u8 dtmf_st;
u8 bcl_a;
u8 bcl_b;
u8 ptt_id;
u8 prich_sw;
u8 rpt_set;
u8 rpt_spk;
u8 rpt_ptt;
u8 alert;
u8 pf1_func;
u8 pf3_func;
u8 workmode_a;
07/04/2021 7/12
u8 workmode_b;
u8 x0845;
u8 dtmf_tx_time;
u8 dtmf_interval;
u8 main_ab;
u16 work_cha;
u16 work_chb;
u8 x084d;
u8 x084e;
u8 x084f;
u8 x0850;
u8 x0851;
u8 x0852;
u8 x0853;
u8 x0854;
u8 rpt_mode;
u8 language;
u8 x0857;
u8 x0858;
u8 x0859;
u8 x085a;
u8 x085b;
u8 x085c;
u8 x085d;
u8 x085e;
u8 single_display;
u8 ring;
u8 scg_a;
u8 scg_b;
u8 x0863;
u8 rpt_tone;
u8 rpt_hold;
u8 scan_det;
u8 sc_qt;
u8 x0868;
u8 smuteset;
u8 callcode;
} settings;
#seekto 0x0880;
struct {
u32 rxfreq;
u32 txoffset;
u16 rxtone;
u16 txtone;
u8 unknown1:5,
power:1,
unknown2:2;
u8 unknown3:1,
shift_dir:2
unknown4:2,
mute_mode:2,
iswide:1;
u8 step;
07/04/2021 8/12
u8 squelch;
} vfoa;
#seekto 0x08c0;
struct {
u32 rxfreq;
u32 txoffset;
u16 rxtone;
u16 txtone;
u8 unknown1:5,
power:1,
unknown2:2;
u8 unknown3:1,
shift_dir:2,
unknown4:2,
mute_mode:2,
iswide:1;
u8 step;
u8 squelch;
} vfob;
#seekto 0x0900;
struct {
u32 rxfreq;
u32 txfreq;
u16 rxtone;
u16 txtone;
u8 unknown1:5,
power:1,
unknown2:2;
u8 unknown3:2,
scan_add:1,
unknown4:2,
mute_mode:2,
iswide:1;
u16 padding;
} memory[1000];
#seekto 0x4780;
struct {
char name[8];
} names[1000];
#seekto 0x6700;
u8 valid[1000];
#5 - 10/15/2014 06:29 am - Dan Smith
- Assignee set to Ron Wellsted
#6 - 10/15/2014 08:50 am - Ron Wellsted
- Status changed from New to In Progress
- Target version set to 0.5.0
- % Done changed from 0 to 20
Alpha test version
07/04/2021 9/12
#7 - 10/15/2014 08:54 am - John LaMartina
This mornings beta ...
.
Although CHIRP shows Wouxun UV8D in the selection menu,
CHIRP will not allow the Download to take place.
John
http://www.miklor.com
#8 - 10/16/2014 07:10 am - Jim Bergstresser
- File debug.log added
Error when importing from data source. Chirp never adds selected frequencies to import.
#9 - 10/16/2014 07:12 am - Dan Smith
Jim, that looks like a separate issue. Could you open a separate bug (assigned to Ron) for that?
Thanks!
#10 - 11/04/2014 01:07 pm - Stephen Cavilia
This seems to be mostly working, however I noticed a few issues trying to add new memory channels that were otherwise empty from chirp. Most
settings are stored correctly except high/low power (always reads as L on channels that are are actually H) and some weird mute mode gets
programmed on the new channels which can be cleared on the radio's menu (but it takes a couple extra button clicks to let you change it, it's as if the
firmware is confused by an invalid value in memory at first and doesn't enter the menu correctly). Has anyone else noticed this? My radio has V1.05
"Sain Sonic" firmware dated 20141013.
I'll do some more poking around with memory dumps when I have more time.
A few times I would get "string index out of range" errors trying to connect:
File "/usr/lib64/python2.7/site-packages/chirp/kguv8d.py", line 397, in _download
raise errors.RadioError("Failed to communicate with radio: %s" % e)
RadioError: Failed to communicate with radio: string index out of range
Also does anyone know if this model has a transmit disable setting? On the UV6D you could set the duplex column to "off" to block transmitting on a
certain memory channel, useful for receive-only frequencies like weather channels.
#11 - 11/06/2014 07:44 am - Stephen Cavilia
Looks like the power setting is actually the high bit of "unknown2"
(first channel dump is high, second is low, both show up as low in chirp)
struct {
rxfreq: 0x00DF9260
07/04/2021 10/12
http://www.miklor.com
txfreq: 0x00DF9260
rxtone: 0x0000
txtone: 0x0000
unknown1: 0x00 (...00000b)
power: 0x00 (.......0b)
unknown2: 0x02 (......10b)
unknown3: 0x00 (......00b)
scan_add: 0x01 (.......1b)
unknown4: 0x03 (......11b)
mute_mode: 0x00 (......00b)
iswide: 0x01 (.......1b)
padding: 0x0000
} memory (16 bytes at 0x09A0)
struct {
rxfreq: 0x00DF9260
txfreq: 0x00DF9260
rxtone: 0x0000
txtone: 0x0000
unknown1: 0x00 (...00000b)
power: 0x00 (.......0b)
unknown2: 0x00 (......00b)
unknown3: 0x00 (......00b)
scan_add: 0x01 (.......1b)
unknown4: 0x03 (......11b)
mute_mode: 0x00 (......00b)
iswide: 0x01 (.......1b)
padding: 0x0000
} memory (16 bytes at 0x09B0)
#12 - 11/16/2014 09:16 pm - Srini Sankaran
Stephen Cavilia wrote:
[...]This seems to be mostly working, however I noticed a few issues trying to add new memory channels that were otherwise empty from chirp.
Most settings are stored correctly except high/low power (always reads as L on channels that are are actually H) and some weird mute mode gets
programmed on the new channels which can be cleared on the radio's menu (but it takes a couple extra button clicks to let you change it, it's as if
the firmware is confused by an invalid value in memory at first and doesn't enter the menu correctly). Has anyone else noticed this? My radio has
V1.05 "Sain Sonic" firmware dated 20141013.[...]
Yes, I have noticed the odd mute mode issue as well. The "T" icon to the left of the bandwidth "N/W" icon lights up, which according to Page 06 of
Wouxun manual is "QT Mute Mode". Not quite sure what that means, but I get no audio unless I turn it off by going to menu 31 (SP-MUTE) and set it
to QT. Yes, I also see the same behavior you see at first when entering menu 31. The firmware doesn't display any value, but you can change the
value with the arrow keys.
My radio is v1.03 dated 20140617. I bought the radio less than a month ago at my local Ham Radio Outlet store.
#13 - 11/17/2014 12:52 pm - Srini Sankaran
After writing to the radio with Chirp on my Mac and reading the radio back with the Wouxun supplied software on Windows, I see that every channel is
07/04/2021 11/12
set to "QT*DTMF" for mute mode. Changing that to "QT" on the Wouxun software and writing it all back to the radio fixed the mute problem. So I
guess whatever Chirp is writing to the radio is making all these channels QT*DTMF mode.
Regarding the Narrow vs Wide band issue, I think Chirp sets the exact opposite of what I specify. My narrow channels get set as wide and vice versa.
#14 - 11/25/2014 11:22 am - Ron Wellsted
Code corrected for Power setting (I made a mistake in interpreting the memory structure!) and have forced the mute mode to QT instead of allowing a
random value (which seemed to always be QT*DTMF).
#15 - 12/02/2014 07:20 am - Srini Sankaran
Ron Wellsted wrote:
Code corrected for Power setting (I made a mistake in interpreting the memory structure!) and have forced the mute mode to QT instead of
allowing a random value (which seemed to always be QT*DTMF).
Thanks. I think the mute mode works ok now (daily-20141202)
But it seems that power is always set to H irrespective of whether I set L or H.
#16 - 02/10/2016 02:04 am - Ron Wellsted
- % Done changed from 20 to 80
Support is now mostly complete.
Items not yet implemented are:
CTCSS/DCS on VFOs
Scan groups
Call settings
#17 - 02/25/2020 04:04 pm - Bernhard Hailer
- Status changed from In Progress to Closed
- % Done changed from 80 to 100
- Chirp Version changed from 0.4.0 to daily
This appears to be complete.
Files
KGUV8D-Read.txt 227 kB 09/13/2014 Ron Wellsted
KGUV8D-Write.txt 201 kB 09/13/2014 Ron Wellsted
KGUV8D-FrequencyLimit.txt 3.1 kB 09/13/2014 Ron Wellsted
KG-UV8D.pdf 14.2 kB 09/13/2014 Ron Wellsted
debug.log 23.4 kB 10/16/2014 Jim Bergstresser
07/04/2021 12/12
Top Related