/**
 * @file CanBusTTL.h
 * @brief 使用CAN转TTL模块的CAN通信接口
 * 
 * 本文件暂时保留作为参考
 */

#ifndef _CanBusTTL_H
#define _CanBusTTL_H

#include <Arduino.h>

#define CAN_TTL_UART_SPEED  115200
#define CAN_BUS_SPEED       500000

#define CAN_UPLINK_BASE     0x101
#define CAN_DOWNLINK_PWM    0x201
#define CAN_DOWNLINK_ROS    0x202
#define CAN_DOWNLINK_BRAKE  0x203   // 刹车指令

typedef void (*CanRxCallback)(uint16_t canId, const uint8_t* data, uint8_t len);

class CanBusTTL
{
private:
    CanRxCallback _callback;
    uint8_t rx_buffer[64];
    uint8_t rx_index = 0;
    bool initialized = false;

public:
    CanBusTTL();
    bool begin(CanRxCallback callback);
    void update();
    bool sendFrame(uint16_t canId, const uint8_t* data, uint8_t len);
    bool sendPoseData(float voltage, int16_t angleZ, int16_t linearX, int16_t linearY, int16_t angularZ);
    bool sendMotorRpm(int16_t rpm1, int16_t rpm2, int16_t rpm3);
    bool sendEncoderTicks(int32_t tick1, int32_t tick2, int32_t tick3, int32_t tick4);
};

#endif