Browse Source

footer needs to be written to packetData as well otherwise the resulting crc will not match

Simon Fischer 2 years ago
parent
commit
3962dfdadd
1 changed files with 22 additions and 2 deletions
  1. 22 2
      src/shellmatta_ymodem.c

+ 22 - 2
src/shellmatta_ymodem.c

@@ -294,9 +294,29 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
                     break;
                 }
 
-                if (shellmatta_ymodem_byte_counter == YMODEM_PACKET_SIZE)
+                /* after data field, crc begins */
+                if (shellmatta_ymodem_byte_counter >= yModemPacketSize + YMODEM_HEADER_DATA_OFFSET)
                 {
-                    shellmatta_ymodem_check_packet(handle);
+                    if (shellmatta_ymodem_byte_counter == yModemPacketSize + YMODEM_HEADER_DATA_OFFSET)
+                    {
+                        /* upper byte */
+                        shellmatta_ymodem_packet.packetCrc = byteIn << 8u;
+                    }
+                    if (shellmatta_ymodem_byte_counter == yModemPacketSize + YMODEM_HEADER_DATA_OFFSET + 1)
+                    {
+                        /* lower byte */
+                        shellmatta_ymodem_packet.packetCrc |= byteIn;
+                        /* change ymodem state to check packet */
+                        shellmatta_ymodem_check_packet(handle);
+                    }
+                }
+                else
+                if ((shellmatta_ymodem_byte_counter > 1) && 
+                    (shellmatta_ymodem_byte_counter < (yModemPacketSize + YMODEM_HEADER_DATA_OFFSET)))
+                {
+                    /* save data */
+                    shellmatta_ymodem_packet.packetData[shellmatta_ymodem_byte_counter - YMODEM_HEADER_DATA_OFFSET] = byteIn;
+                }
                 }
                 shellmatta_ymodem_byte_counter++;
                 break;