I noticed that Downlink Data Fragment header generated by lora-app-server is backwards. According to specification it should be:
For example, 8th data fragment prepared by loraserver has header
08 09 00. In my opinion (and according to specs) it should be
08 00 09. This bug is also present in loramac-node, the header is parsed by this piece of code:
fragCounter = ( mcpsIndication->Buffer[cmdIndex++] << 0 ) & 0x00FF; fragCounter |= ( mcpsIndication->Buffer[cmdIndex++] << 8 ) & 0xFF00; fragIndex = ( fragCounter >> 14 ) & 0x03; fragCounter &= 0x3FFF;
So this two implementations are kind of ‘compatible’, both use wrong headers.
Correct fragmented data generator implementation can be found in this repository and is provided by semtech.
I also stumbled upon another issue (maybe this is not issue with loraserver). I can’t send file that is over 63kB. The fragmentation session is sending file like always but the LDPC frames are not reparing lost frames corectlly. I made some tests and even with same amount of frames lost and same indexes I could send <63kB file but not file >63kB. Repaired frames were just wrong