| 117 | */ |
| 118 | |
| 119 | uint8_t Packet::parse(const uint8_t& recChar, const bool& valid) |
| 120 | { |
| 121 | bool packet_fresh = (packetStart == 0) || ((millis() - packetStart) < timeout); |
| 122 | |
| 123 | if(!packet_fresh) //packet is stale, start over. |
| 124 | { |
| 125 | if (debug) |
| 126 | debugPort->println("ERROR: STALE PACKET"); |
| 127 | |
| 128 | bytesRead = 0; |
| 129 | state = find_start_byte; |
| 130 | status = STALE_PACKET_ERROR; |
| 131 | packetStart = 0; |
| 132 | |
| 133 | return bytesRead; |
| 134 | } |
| 135 | |
| 136 | if (valid) |
| 137 | { |
| 138 | switch (state) |
| 139 | { |
| 140 | case find_start_byte: ///////////////////////////////////////// |
| 141 | { |
| 142 | if (recChar == START_BYTE) |
| 143 | { |
| 144 | state = find_id_byte; |
| 145 | packetStart = millis(); //start the timer |
| 146 | } |
| 147 | |
| 148 | break; |
| 149 | } |
| 150 | |
| 151 | case find_id_byte: //////////////////////////////////////////// |
| 152 | { |
| 153 | idByte = recChar; |
| 154 | state = find_overhead_byte; |
| 155 | break; |
| 156 | } |
| 157 | |
| 158 | case find_overhead_byte: ////////////////////////////////////// |
| 159 | { |
| 160 | recOverheadByte = recChar; |
| 161 | state = find_payload_len; |
| 162 | break; |
| 163 | } |
| 164 | |
| 165 | case find_payload_len: //////////////////////////////////////// |
| 166 | { |
| 167 | if ((recChar > 0) && (recChar <= MAX_PACKET_SIZE)) |
| 168 | { |
| 169 | bytesToRec = recChar; |
| 170 | payIndex = 0; |
| 171 | state = find_payload; |
| 172 | } |
| 173 | else |
| 174 | { |
| 175 | bytesRead = 0; |
| 176 | state = find_start_byte; |
no test coverage detected