|
@@ -187,10 +187,23 @@ static shellmatta_retCode_t ymodem_stateMachine(shellmatta_handle_t handle, uint
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- if(((0xffu - byte) != inst->ymodem.packet.packetNumber) ||
|
|
|
- (inst->ymodem.packetCounter % 256u != inst->ymodem.packet.packetNumber))
|
|
|
+ if((0xffu - byte) != inst->ymodem.packet.packetNumber)
|
|
|
{
|
|
|
- /** -# return error on packet number mismatch or on unexpected packet numbers */
|
|
|
+ /** -# return error on packet number complement mismatch */
|
|
|
+ inst->ymodem.state = SHELLMATTA_YMODEM_WAIT_FOR_START;
|
|
|
+ shellmatta_ymodem_control(handle, YMODEM_NAK);
|
|
|
+ ret = SHELLMATTA_ERROR;
|
|
|
+ }
|
|
|
+ else if((1u == inst->ymodem.packetCounter) &&
|
|
|
+ (0 == inst->ymodem.packet.packetNumber))
|
|
|
+ {
|
|
|
+ /** -# ignore duplicate header packets after first successful reception during */
|
|
|
+ inst->ymodem.state = SHELLMATTA_YMODEM_WAIT_FOR_START;
|
|
|
+ ret = SHELLMATTA_OK;
|
|
|
+ }
|
|
|
+ else if(inst->ymodem.packetCounter % 256u != inst->ymodem.packet.packetNumber)
|
|
|
+ {
|
|
|
+ /** -# return error on unexpected packet numbers */
|
|
|
inst->ymodem.state = SHELLMATTA_YMODEM_WAIT_FOR_START;
|
|
|
shellmatta_ymodem_control(handle, YMODEM_NAK);
|
|
|
ret = SHELLMATTA_ERROR;
|