|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <AP_HAL/AP_HAL.h>
|
|
|
|
#include "AP_BattMonitor.h"
|
|
|
|
#include "AP_BattMonitor_Backend.h"
|
|
|
|
|
|
|
|
#define AP_BATTMONITOR_SERIAL_TIMEOUT_MICROS 5000000
|
|
|
|
#define BATTGO_CMD_REQUEST_INFO 0x40
|
|
|
|
#define BATTGO_CMD_REQUEST_ACTUAL_DATA 0x42
|
|
|
|
#define BATTGO_CMD_REQUEST_HISTORY 0x44
|
|
|
|
class AP_BattMonitor_Serial_BattGo : public AP_BattMonitor_Backend
|
|
|
|
{
|
|
|
|
|
|
|
|
public:
|
|
|
|
AP_BattMonitor_Serial_BattGo(AP_BattMonitor &mon,
|
|
|
|
AP_BattMonitor::BattMonitor_State &mon_state,
|
|
|
|
AP_BattMonitor_Params ¶ms,
|
|
|
|
uint8_t serial_instance);
|
|
|
|
|
|
|
|
// enum BattMonitor_Serial_BattGo_Type
|
|
|
|
// {
|
|
|
|
// SERIAL_BATTGO_INFO = 0
|
|
|
|
// };
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
rsWaitSync,
|
|
|
|
rsWaitAddres,
|
|
|
|
rsWaitLength,
|
|
|
|
rsWaitData,
|
|
|
|
rsWaitChkSumL,
|
|
|
|
rsWaitChkSumH,
|
|
|
|
}eComunicainot_t;
|
|
|
|
|
|
|
|
// ~AP_BattMonitor_Serial_BattGo();
|
|
|
|
|
|
|
|
bool has_current() const override
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
void init() override;
|
|
|
|
|
|
|
|
/// Read the battery voltage and current. Should be called at 10hz
|
|
|
|
void read() override;
|
|
|
|
|
|
|
|
void request_info(void) override;
|
|
|
|
void request_history(void) override;
|
|
|
|
|
|
|
|
bool _has_cell_voltages;
|
|
|
|
bool has_cell_voltages() const override { return _has_cell_voltages; }
|
|
|
|
|
|
|
|
// static detection function
|
|
|
|
static bool detect(uint8_t serial_instance);
|
|
|
|
void update_battgo_param_mavlink(mavlink_channel_t chan,mavlink_battgo_info_t &mavlink_battgo_info_t);
|
|
|
|
void notice_to_send_battgo_param();
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
AP_HAL::UARTDriver *uart = nullptr;
|
|
|
|
|
|
|
|
AP_BattMonitor::BattMonitor_State _interim_state; //TODO may need to fix
|
|
|
|
|
|
|
|
char linebuf[10];
|
|
|
|
uint8_t linebuf_len = 0;
|
|
|
|
const int Head1 = 0x55; //数据包帧头
|
|
|
|
uint8_t data_buf[116];
|
|
|
|
|
|
|
|
uint8_t step;
|
|
|
|
uint8_t addr;
|
|
|
|
uint8_t payload_length;
|
|
|
|
uint8_t payload_counter;
|
|
|
|
uint16_t check_sum;
|
|
|
|
|
|
|
|
uint16_t m_SyncByteCount = 0;
|
|
|
|
uint8_t m_eRxStatus = 0;
|
|
|
|
uint8_t m_u08RXCnt;
|
|
|
|
|
|
|
|
void requestBattData(uint8_t data);
|
|
|
|
|
|
|
|
bool get_reading();
|
|
|
|
uint8_t crc_crc8(const uint8_t *p, uint8_t len);
|
|
|
|
//void gotoStepAddr(uint8_t &data);
|
|
|
|
//void setPayLoadData(uint8_t &usart_data);
|
|
|
|
bool parseBattGo();
|
|
|
|
void rxProcess(uint8_t data);
|
|
|
|
//void AP_BattMonitor_Serial_BattGo::doWithReadHeaderData(uint8_t &usart_data,uint8_t target_data,uint8_t step,uint8_t &payload_length,uint8_t &payload_count,uint8_t * data_buf,bool &is_read_header);
|
|
|
|
};
|