egzumer / uvtools

Web-based firmware patcher for various Quansheng radios
https://whosmatt.github.io/uvmod/
12 stars 6 forks source link

write flash packet: data length field inconsistency #1

Open qrp73 opened 4 months ago

qrp73 commented 4 months ago

I'm analyze source code and found some strange inconsistency.

Your uvtool utility uses write flash packet with data length fields 0x01,0x00, see this line: https://github.com/egzumer/uvtools/blob/7148b01f11357cb28e74fff3a9591b12a656ea13/js/tool_patcher.js#L178

// the length is fixed to 0x100 bytes
    const length_msb = 0x01;
    const length_lsb = 0x00;

    return new Uint8Array([0x19, 0x5, 0xc, 0x1, <...>, length_msb, length_lsb, 0x0, 0x0, ...data]); 

But k5prog flasher uses this packet with length in reversed order 0x00,0x01, see this line: https://github.com/sq5bpf/k5prog/blob/241ab18b61f6d8933fecf60643fe94322fbf4198/k5prog.c#L698

len=UVK5_FLASH_BLOCKSIZE=0x100;

writeflash[12]=len&0xff;
writeflash[13]=(len>>8)&0xff;

Could you please help to understand what is going on here? And which version is correct? Thanks

steve8x8 commented 2 months ago

Isn't this https://github.com/whosmatt/uvmod/issues/41 (awaiting merge here)?

qrp73 commented 1 month ago

I analyzed official updater code and it appears that both variants are incorrect, see packet structure here for details: https://github.com/qrp73/K5TOOL/blob/main/Packets/PacketFlashWriteReq.cs

K5TOOL now has fixed packet structure to be compatible with official updater.