123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #pragma once
- #include "AP_Proximity.h"
- #include "AP_Proximity_Backend.h"
- #define PROXIMITY_SF40C_TIMEOUT_MS 200
- class AP_Proximity_LightWareSF40C : public AP_Proximity_Backend
- {
- public:
-
- AP_Proximity_LightWareSF40C(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 RequestType {
- RequestType_None = 0,
- RequestType_Health,
- RequestType_MotorSpeed,
- RequestType_MotorDirection,
- RequestType_ForwardDirection,
- RequestType_DistanceMeasurement
- };
-
- bool initialise();
- void init_sectors();
- void set_motor_speed(bool on_off);
- void set_motor_direction();
- void set_forward_direction();
-
- void request_new_data();
- void send_request_for_health();
- bool send_request_for_distance();
-
- bool check_for_reply();
- bool process_reply();
- void clear_buffers();
-
- AP_HAL::UARTDriver *uart = nullptr;
- char element_buf[2][10];
- uint8_t element_len[2];
- uint8_t element_num;
- bool ignore_reply;
- bool wait_for_space;
-
- enum RequestType _last_request_type;
- uint8_t _last_sector;
- uint32_t _last_request_ms;
- uint32_t _last_distance_received_ms;
- uint8_t _request_count;
-
- union {
- struct PACKED {
- uint16_t motor_stopped : 1;
- uint16_t motor_dir : 1;
- uint16_t motor_fault : 1;
- uint16_t torque_control : 1;
- uint16_t laser_fault : 1;
- uint16_t low_battery : 1;
- uint16_t flat_battery : 1;
- uint16_t system_restarting : 1;
- uint16_t no_results_available : 1;
- uint16_t power_saving : 1;
- uint16_t user_flag1 : 1;
- uint16_t user_flag2 : 1;
- uint16_t unused1 : 1;
- uint16_t unused2 : 1;
- uint16_t spare_input : 1;
- uint16_t major_system_abnormal : 1;
- } _flags;
- uint16_t value;
- } _sensor_status;
-
- uint8_t _motor_speed;
- uint8_t _motor_direction = 99;
- int16_t _forward_direction = 999;
- bool _sector_initialised = false;
- };
|