12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- /**
- * @file shellmatta_transport.h
- * @brief transport layer functions of shellmatta
- * @author Simon Fischer <fischer.simon.1991@gmail.com>
- */
- #include "shellmatta_transport.h"
- shellmatta_retCode_t shellmatta_init_transport_inst()
- {
- transportLayerInst.h2s_sequenceCnt = 0;
- transportLayerInst.s2h_sequenceCnt = 0;
- transportLayerInst.state = STATE_GET_SOH;
- transportLayerInst.mandatory = false;
- transportLayerInst.active = false;
- return SHELLMATTA_OK;
- }
- shellmatta_retCode_t shellmatta_handle_transport_fsm(shellmatta_transport_layer_t *transportLayer, char *data)
- {
- switch (transportLayer->state)
- {
- case STATE_GET_SOH:
- if (SHELLMATTA_START_OF_HEADER == *data)
- {
- transportLayer->state = STATE_GET_PROTOCOL_VERSION;
- transportLayer->active = true;
- }
- else
- {
- transportLayer->active = false;
- transportLayer->state = STATE_GET_PAYLOAD;
- }
- break;
- case STATE_GET_PROTOCOL_VERSION:
- transportLayer->state = STATE_GET_PACKET_TYPE;
- break;
- case STATE_GET_PACKET_TYPE:
- transportLayer->state = STATE_GET_PAYLOAD_LENGTH;
- break;
- case STATE_GET_PAYLOAD_LENGTH:
- transportLayer->state = STATE_GET_SOURCE;
- break;
- case STATE_GET_SOURCE:
- transportLayer->state = STATE_GET_DESTINATION;
- break;
- case STATE_GET_DESTINATION:
- transportLayer->state = STATE_GET_H2S_SEQUENCE_CNT;
- break;
- case STATE_GET_H2S_SEQUENCE_CNT:
- transportLayer->state = STATE_GET_S2H_SEQUENCE_CNT;
- break;
- case STATE_GET_S2H_SEQUENCE_CNT:
- transportLayer->state = STATE_GET_PAYLOAD;
- break;
- case STATE_GET_PAYLOAD:
- if ( (payloadLength == payloadCounter)
- && (true == transportLayer->active))
- {
- transportLayer->state = STATE_GET_CRC;
- }
- break;
- case STATE_GET_CRC:
- if (SHELLMATTA_LENGTH_CRC == crcCounter)
- {
- transportLayer->state = STATE_GET_SOH;
- protocolVersion = 0u;
- packetType = 0u;
- payloadLength = 0u;
- source = 0u;
- destination = 0u;
- crc32 = 0u;
- payloadCounter = 0u;
- crcCounter = 0u;
- transportLayer->active = false;
- }
- break;
-
- default:
- break;
- }
- return SHELLMATTA_OK;
- }
|