//
// Created by zx on 2020/4/28.
//

#ifndef AGV_ODOM_H
#define AGV_ODOM_H
#include <iostream>
#include "../common/dtype.h"
#include "../error_code/error_code.h"
#include "cifx_communicator.h"

namespace agv
{
    typedef void (*ODOM_CALLBACK)(Driver_data& data,void* pOwner);
    
    class Odom {
    public:
        // 无参构造
        Odom();
        // 析构
        ~Odom();
        // 初始化函数
        Error_manager init();
        // 设置通信卡读数据回调
        Error_manager set_driver_data_callback(ODOM_CALLBACK func,void* pOwner);
        // 向通信卡写入电机驱动器数据
        Error_manager write_driver_data(Driver_data& data);
        // 获取初始化状态
        bool is_initialized();
    private:
        // 向通信卡读数据回调
        static void get_cifx_data_callback(Cifx_communicator::AREA_DATA_BLOCK& read_data, void* pOwner);

    private:
        Cifx_communicator* mp_cifx_handle; // cifx 通信卡句柄
        ODOM_CALLBACK m_odom_callback; // odom 获取新消息回调
        void* mp_odom_callback_owner; // odom 回调拥有者
        bool mb_initialized; // 初始化状态

    };

}
#endif //AGV_ODOM_H
