123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #pragma once
- #include "AP_Proximity.h"
- #include "AP_Proximity_Backend.h"
- #include <AP_HAL/AP_HAL.h> ///< for UARTDriver
- class AP_Proximity_RPLidarA2 : public AP_Proximity_Backend
- {
- public:
-
- AP_Proximity_RPLidarA2(AP_Proximity &_frontend, AP_Proximity::Proximity_State &_state, AP_SerialManager &serial_manager);
-
- static bool detect(AP_SerialManager &serial_manager);
-
- void update(void) override;
-
- float distance_max() const override;
- float distance_min() const override;
- private:
- enum rp_state {
- rp_unknown = 0,
- rp_resetted,
- rp_responding,
- rp_measurements,
- rp_health
- };
- enum ResponseType {
- ResponseType_Descriptor = 0,
- ResponseType_SCAN,
- ResponseType_EXPRESS,
- ResponseType_Health
- };
-
- bool initialise();
- void init_sectors();
- void set_scan_mode();
-
- void send_request_for_health();
- void parse_response_data();
- void parse_response_descriptor();
- void get_readings();
- void reset_rplidar();
-
- AP_HAL::UARTDriver *_uart;
- uint8_t _descriptor[7];
- char _rp_systeminfo[63];
- bool _descriptor_data;
- bool _information_data;
- bool _resetted;
- bool _initialised;
- bool _sector_initialised;
- uint8_t _payload_length;
- uint8_t _cnt;
- uint8_t _sync_error ;
- uint16_t _byte_count;
-
- enum ResponseType _response_type;
- enum rp_state _rp_state;
- uint8_t _last_sector;
- uint32_t _last_request_ms;
- uint32_t _last_distance_received_ms;
- uint32_t _last_reset_ms;
-
- float _angle_deg_last;
- float _distance_m_last;
- struct PACKED _sensor_scan {
- uint8_t startbit : 1;
- uint8_t not_startbit : 1;
- uint8_t quality : 6;
- uint8_t checkbit : 1;
- uint16_t angle_q6 : 15;
- uint16_t distance_q2 : 16;
- };
- struct PACKED _sensor_health {
- uint8_t status;
- uint16_t error_code;
- };
- union PACKED {
- DEFINE_BYTE_ARRAY_METHODS
- _sensor_scan sensor_scan;
- _sensor_health sensor_health;
- } payload;
- };
|