|
@@ -105,7 +105,6 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
|
|
|
shellmatta_ymodem_packet_counter = 0u;
|
|
|
shellmatta_ymodem_byte_counter = 0u;
|
|
|
- shellmatta_printf(handle, "SOH receive\r\n");
|
|
|
shellmatta_ymodem_set_state(handle, RECEIVE_PACKET);
|
|
|
shellmatta_ymodem_current_data_type = YMODEM_HEADER;
|
|
|
}
|
|
@@ -115,7 +114,6 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
if (recvRetCode == SOH_RECEIVED || recvRetCode == STX_RECEIVED)
|
|
|
{
|
|
|
shellmatta_ymodem_byte_counter = 0u;
|
|
|
- shellmatta_printf(handle, "SOH receive\r\n");
|
|
|
shellmatta_ymodem_set_state(handle, RECEIVE_PACKET);
|
|
|
shellmatta_ymodem_current_data_type = YMODEM_BODY;
|
|
|
}
|
|
@@ -126,7 +124,6 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
{
|
|
|
shellmatta_ymodem_byte_counter = 0u;
|
|
|
|
|
|
- shellmatta_printf(handle, "SOH receive\r\n");
|
|
|
shellmatta_ymodem_set_state(handle, RECEIVE_PACKET);
|
|
|
shellmatta_ymodem_current_data_type = YMODEM_BODY;
|
|
|
}
|
|
@@ -135,7 +132,6 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
{
|
|
|
shellmatta_ymodem_byte_counter = 0u;
|
|
|
|
|
|
- shellmatta_printf(handle, "EOT receive\r\n");
|
|
|
|
|
|
shellmatta_ymodem_ack(handle);
|
|
|
|
|
@@ -159,7 +155,6 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
shellmatta_ymodem_packet_counter = 0u;
|
|
|
|
|
|
shellmatta_ymodem_byte_counter = 0u;
|
|
|
- shellmatta_printf(handle, "EOT packet starting\r\n");
|
|
|
shellmatta_ymodem_set_state(handle, RECEIVE_PACKET);
|
|
|
}
|
|
|
break;
|
|
@@ -180,17 +175,16 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
|
|
|
case 0:
|
|
|
shellmatta_ymodem_packet.packetNumber = byteIn;
|
|
|
- shellmatta_printf(handle, "packet number = %u\r\n", shellmatta_ymodem_packet.packetNumber);
|
|
|
break;
|
|
|
case 1:
|
|
|
shellmatta_ymodem_packet.reversePacketNumber = byteIn;
|
|
|
- shellmatta_printf(handle, "reverse packet number = %u\r\n", shellmatta_ymodem_packet.reversePacketNumber);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- if (shellmatta_ymodem_byte_counter >= YMODEM_HEADER_DATA_OFFSET && shellmatta_ymodem_byte_counter < YMODEM_HEADER_CRC_POSITION)
|
|
|
+ if ((shellmatta_ymodem_byte_counter >= YMODEM_HEADER_DATA_OFFSET) &&
|
|
|
+ (shellmatta_ymodem_byte_counter < YMODEM_HEADER_CRC_POSITION))
|
|
|
{
|
|
|
shellmatta_ymodem_packet.packetData[shellmatta_ymodem_byte_counter - YMODEM_HEADER_DATA_OFFSET] = byteIn;
|
|
|
|
|
@@ -200,12 +194,12 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
if (byteIn == YMODEM_NULL)
|
|
|
{
|
|
|
fileNameDelimiterPosition = shellmatta_ymodem_byte_counter + 1;
|
|
|
- shellmatta_printf(handle, "%s\r\n", shellmatta_ymodem_packet.packetData);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
else
|
|
|
- if (shellmatta_ymodem_byte_counter >= fileNameDelimiterPosition && shellmatta_ymodem_byte_counter < fileSizeDelimiterPosition)
|
|
|
+ if (shellmatta_ymodem_byte_counter >= fileNameDelimiterPosition &&
|
|
|
+ (shellmatta_ymodem_byte_counter < fileSizeDelimiterPosition))
|
|
|
{
|
|
|
|
|
|
if (byteIn == YMODEM_SPACE)
|
|
@@ -214,7 +208,6 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
|
|
|
fileSize = utils_shellAsciiToUInt32(fileSizeStr, fileSizeDelimiterPosition - fileNameDelimiterPosition);
|
|
|
*shellmatta_ymodem_packet.fileSize = fileSize;
|
|
|
- shellmatta_printf(handle, "fileSize = %u\r\n", fileSize);
|
|
|
}
|
|
|
|
|
|
else
|
|
@@ -241,7 +234,6 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
|
|
|
shellmatta_ymodem_packet.packetCrc |= byteIn;
|
|
|
|
|
|
- shellmatta_printf(handle, "packetCrc = 0x%04x\r\n", shellmatta_ymodem_packet.packetCrc);
|
|
|
shellmatta_ymodem_check_packet(handle);
|
|
|
}
|
|
|
}
|
|
@@ -253,36 +245,33 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
{
|
|
|
case 0:
|
|
|
shellmatta_ymodem_packet.packetNumber = byteIn;
|
|
|
- shellmatta_printf(handle, "packet number = %u\r\n", shellmatta_ymodem_packet.packetNumber);
|
|
|
break;
|
|
|
case 1:
|
|
|
shellmatta_ymodem_packet.reversePacketNumber = byteIn;
|
|
|
- shellmatta_printf(handle, "reverse packet number = %u\r\n", shellmatta_ymodem_packet.reversePacketNumber);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
|
|
|
- if (shellmatta_ymodem_byte_counter > yModemPacketSize + 2)
|
|
|
+ if (shellmatta_ymodem_byte_counter >= yModemPacketSize + YMODEM_HEADER_DATA_OFFSET)
|
|
|
{
|
|
|
- if (shellmatta_ymodem_byte_counter == yModemPacketSize + 3)
|
|
|
+ if (shellmatta_ymodem_byte_counter == yModemPacketSize + YMODEM_HEADER_DATA_OFFSET)
|
|
|
{
|
|
|
|
|
|
shellmatta_ymodem_packet.packetCrc = byteIn << 8u;
|
|
|
}
|
|
|
- if (shellmatta_ymodem_byte_counter == yModemPacketSize + 4)
|
|
|
+ if (shellmatta_ymodem_byte_counter == yModemPacketSize + YMODEM_HEADER_DATA_OFFSET + 1)
|
|
|
{
|
|
|
|
|
|
shellmatta_ymodem_packet.packetCrc |= byteIn;
|
|
|
|
|
|
- shellmatta_printf(handle, "packetCrc = 0x%04x\r\n", shellmatta_ymodem_packet.packetCrc);
|
|
|
shellmatta_ymodem_check_packet(handle);
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
- if (shellmatta_ymodem_byte_counter > 1)
|
|
|
+ if ((shellmatta_ymodem_byte_counter > 1) &&
|
|
|
+ (shellmatta_ymodem_byte_counter < (yModemPacketSize + YMODEM_HEADER_DATA_OFFSET)))
|
|
|
{
|
|
|
shellmatta_ymodem_packet.packetData[shellmatta_ymodem_byte_counter - YMODEM_HEADER_DATA_OFFSET] = byteIn;
|
|
|
}
|
|
@@ -297,11 +286,9 @@ void shellmatta_ymodem_receive_packet(shellmatta_handle_t handle, uint8_t byteIn
|
|
|
{
|
|
|
case 0:
|
|
|
shellmatta_ymodem_packet.packetNumber = byteIn;
|
|
|
- shellmatta_printf(handle, "packet number = %u\r\n", shellmatta_ymodem_packet.packetNumber);
|
|
|
break;
|
|
|
case 1:
|
|
|
shellmatta_ymodem_packet.reversePacketNumber = byteIn;
|
|
|
- shellmatta_printf(handle, "reverse packet number = %u\r\n", shellmatta_ymodem_packet.reversePacketNumber);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
@@ -387,27 +374,23 @@ void shellmatta_ymodem_check_packet(shellmatta_handle_t handle)
|
|
|
uint8_t computedCrc = 0u;
|
|
|
if (shellmatta_ymodem_packet.packetNumber != (0xFF - shellmatta_ymodem_packet.reversePacketNumber))
|
|
|
{
|
|
|
- shellmatta_printf(handle, "wrong packet number pair\r\n");
|
|
|
shellmatta_ymodem_nak(handle);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (shellmatta_ymodem_packet.packetNumber != shellmatta_ymodem_packet_counter)
|
|
|
{
|
|
|
- shellmatta_printf(handle, "wrong packet number\r\n");
|
|
|
- shellmatta_printf(handle, "expected %u, got %u\r\n", shellmatta_ymodem_packet_counter, shellmatta_ymodem_packet.packetNumber);
|
|
|
shellmatta_ymodem_nak(handle);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
computedCrc = crc16Calc((const char*)shellmatta_ymodem_packet.packetData, yModemPacketSize);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+ if (shellmatta_ymodem_packet.packetCrc != computedCrc)
|
|
|
+ {
|
|
|
+ shellmatta_ymodem_nak(handle);
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
(void) computedCrc;
|
|
|
shellmatta_ymodem_total_bytes_received += shellmatta_ymodem_byte_counter;
|
|
@@ -495,9 +478,13 @@ void shellmatta_ymodem_nak(shellmatta_handle_t handle)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ * @brief forwards the given character to write-function without formatting
|
|
|
+ * @param[in] handle shellmatta handle of the instance
|
|
|
+ * @param[in] c character to be sent
|
|
|
+*/
|
|
|
void shellmatta_ymodem_control(shellmatta_handle_t handle, const char c)
|
|
|
{
|
|
|
- shellmatta_printf(handle, "0x%02x\r\n", c);
|
|
|
((shellmatta_instance_t*)handle)->write(&c, 1);
|
|
|
}
|
|
|
|