You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.6 KiB
52 lines
1.6 KiB
#pragma once |
|
|
|
#include "AP_Proximity_Backend_Serial.h" |
|
|
|
#if HAL_PROXIMITY_ENABLED |
|
#define PROXIMITY_LIGHTWARE_PAYLOAD_LEN_MAX 256 // maximum payload size we can accept (in some configurations sensor may send as large as 1023) |
|
|
|
class AP_Proximity_LightWareSerial : public AP_Proximity_Backend_Serial |
|
{ |
|
|
|
public: |
|
// constructor |
|
using AP_Proximity_Backend_Serial::AP_Proximity_Backend_Serial; |
|
|
|
protected: |
|
|
|
// initialise sensor |
|
void initialise(); |
|
|
|
// send message to sensor |
|
void send_message(uint8_t msgid, bool write, const uint8_t *payload, uint16_t payload_len); |
|
|
|
// process one byte received on serial port |
|
// returns true if a complete message has been received |
|
// state is stored in _msg structure |
|
bool parse_byte(uint8_t b); |
|
|
|
enum class ParseState { |
|
HEADER = 0, |
|
FLAGS_L, |
|
FLAGS_H, |
|
MSG_ID, |
|
PAYLOAD, |
|
CRC_L, |
|
CRC_H |
|
} _parse_state; // state of incoming message processing |
|
uint16_t _payload_recv; // number of message's payload bytes received so far |
|
uint16_t _crc_expected; // latest message's expected crc |
|
|
|
// structure holding latest message contents |
|
struct { |
|
uint8_t flags_low; // flags low byte |
|
uint8_t flags_high; // flags high byte |
|
uint16_t payload_len; // latest message payload length (1+ bytes in payload) |
|
uint8_t payload[PROXIMITY_LIGHTWARE_PAYLOAD_LEN_MAX]; // payload |
|
uint8_t msgid; // latest message's message id |
|
uint8_t crc_low; // crc low byte |
|
uint8_t crc_high; // crc high byte |
|
} _msg; |
|
}; |
|
|
|
#endif // HAL_PROXIMITY_ENABLED
|
|
|