@@ -221,6 +221,18 @@ uint8_t WP_Message_VerifyPayload(WP_Message *message)
221221 return true;
222222}
223223
224+ void WP_ReportBadPacket (uint32_t flag )
225+ {
226+ WP_Message msg ;
227+ uint32_t flags = flag | WP_Flags_c_NonCritical | WP_Flags_c_NACK ;
228+
229+ WP_Message_Initialize (& msg );
230+
231+ WP_Message_PrepareRequest (& msg , 0 , flags , 0 , NULL );
232+
233+ WP_TransmitMessage (& msg );
234+ }
235+
224236void WP_Message_Process ()
225237{
226238 uint32_t len ;
@@ -336,20 +348,20 @@ void WP_Message_Process()
336348 {
337349 if (_inboundMessage .m_header .m_size != 0 )
338350 {
339- if (_inboundMessage .m_payload = = NULL )
351+ if (_inboundMessage .m_payload ! = NULL )
340352 {
341- // Bad, no buffer...
342- _rxState = ReceiveState_Initialize ;
343- break ;
344- }
345-
346- _receiveExpiryTicks = HAL_Time_CurrentSysTicks () + c_PayloadTimeout ;
347- _pos = _inboundMessage .m_payload ;
348- _size = _inboundMessage .m_header .m_size ;
353+ _receiveExpiryTicks = HAL_Time_CurrentSysTicks () + c_PayloadTimeout ;
354+ _pos = _inboundMessage .m_payload ;
355+ _size = _inboundMessage .m_header .m_size ;
349356
350- _rxState = ReceiveState_ReadingPayload ;
357+ _rxState = ReceiveState_ReadingPayload ;
351358
352- break ;
359+ break ;
360+ }
361+ else
362+ {
363+ // Bad, no buffer...
364+ }
353365 }
354366 else
355367 {
@@ -360,7 +372,10 @@ void WP_Message_Process()
360372 }
361373 }
362374
363- // one the verifications above failed, return
375+ // one the verifications above failed, report...
376+ WP_ReportBadPacket (WP_Flags_c_BadHeader );
377+
378+ //... and restart state machine
364379 _rxState = ReceiveState_Initialize ;
365380 return ;
366381
@@ -402,11 +417,12 @@ void WP_Message_Process()
402417 else
403418 {
404419 TRACE_WP_HEADER (WP_RXMSG_NAK , & _inboundMessage );
420+ WP_ReportBadPacket (WP_Flags_c_BadPayload );
405421 }
406422
407423 _rxState = ReceiveState_Initialize ;
408424
409- break ;
425+ return ;
410426
411427 default :
412428 // unknown state
0 commit comments