Thanks a lot for working on this, I know some of the comments below are likely inherited from existing code, but I’d appreciate it if you could address them. I can also help make some of the changes if need be.
+# SCRAMBLER = ["Off"] + ["0" + str(x) for x in range(1, 8)] +# memory slot 0 is not used, start at 1 (so need 1000 slots, not 999) +# structure elements whose name starts with x are currently unidentified +_MEM_FORMAT = “""
Should be a blank line before _MEM_FORMAT.
- def _write_record(self, cmd, payload=None):
# build the packet_header = '\x7a' + chr(cmd) + '\xff'_length = 0if payload:_length = len(payload)# update the length field_header += chr(_length)if payload:# calculate checksum then add it with the payload to the packet and encryptcrc = self._checksum(_header[1:]+payload)There are a lot of places in this file where an operator (+ in this case) needs to have whitespace around it. I’m not sure why our style checker isn’t complaining about that — I imagine it’s because we’re not fully clean in all our files. It’d be nice if we could try to be good about adding new stuff in proper format.
- def decrypt(self, data):
result = ''for i in range(len(data)-1,0,-1):result+=self.strxor(data[i],data[i-1])result+=self.strxor(data[0],'\x57')return result[::-1]I remember people claiming that this radio “encrypted” the conversation and I balked at the idea. Definitely looks like some intentional obscuring going on here though. Kudos to whoever figured that out.
- def encrypt(self, data):
result=self.strxor('\x57',data[0])for i in range(1,len(data),1):result+=self.strxor(result[i-1],data[i])return result- def strxor (self, xora, xorb):
return chr(ord(xora) ^ ord(xorb))+# Identify the radio
Needs another blank here.
- def _do_download(self, start, end, blocksize):
# allocate & fill memoryimage = ""for i in range(start, end, blocksize):#req = chr(95) + chr(i % 256) + chr(blocksize)Please remove commented code, especially if it’s not right. It’s just confusing later.
smuteset]))cfg_grp.append(rs)#_pwd = "".join(map(chr, _settings.mode_sw_pwd))#val = RadioSettingValueString(0, 6, _pwd)#val.set_mutable(True)#rs = RadioSetting("mode_sw_pwd", "Mode Switch Password", val)#cfg_grp.append(rs)#_pwd = "".join(map(chr, _settings.reset_pwd))#val = RadioSettingValueString(0, 6, _pwd)#val.set_mutable(True)#rs = RadioSetting("reset_pwd", "Reset Password", val)#cfg_grp.append(rs)Here too.
## Scan Group Settings## settings:# u8 scg_a;# u8 scg_b;## struct {# u16 lower;# u16 upper;# } scan_groups[10];Why is this here?
Thanks!
—Dan
Appreciate for that, Dan. I forgot to remove commented/unused lines and ofc I will fix the styling. Obscuring the transmission wasn't a big challenge :) Thanks to the basic binary operations I could find the algorithm they did use. Why they did this - who knows, definately that wasn't good idea. I belive they using the same for higher models like KG-UV9D but it's need to be checked.
Kind regards, Krystian _______________________________________________ chirp_devel mailing list chirp_devel@intrepid.danplanet.com http://intrepid.danplanet.com/mailman/listinfo/chirp_devel Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers