[chirp_devel] [PATCH]

Dan Smith
Tue Nov 21 07:21:52 PST 2017


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 = 0
> +        if 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 encrypt
> +            crc = 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 memory
> +        image = ""
> +        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


More information about the chirp_devel mailing list