|
@@ -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;
|