//
// Created by huli on 2020/7/29.
//

#ifndef CAN_TEST_MOTOR_COMMUNICATION_H
#define CAN_TEST_MOTOR_COMMUNICATION_H


#include "../tool/singleton.h"
#include "../communication_can/communication_can_base.h"


class Motor_communication:public Singleton<Motor_communication>, public Communication_can_base
{
// 子类必须把父类设定为友元函数，这样父类才能使用子类的私有构造函数。
   friend class Singleton<Motor_communication>;
private:
 // 父类的构造函数必须保护，子类的构造函数必须私有。
   Motor_communication();
public:
    //必须关闭拷贝构造和赋值构造，只能通过 get_instance 函数来进行操作唯一的实例。
    Motor_communication(const Motor_communication& other) = delete;
    Motor_communication& operator =(const Motor_communication& other) = delete;
    ~Motor_communication();
public://API functions
	//检查消息是否有效, 主要检查消息类型和接受者, 判断这条消息是不是给我的.
	virtual Error_manager check_msg(Can_message* p_msg);
	//检查执行者的状态, 判断能否处理这条消息, 需要子类重载
	virtual Error_manager check_executer(Can_message* p_msg);
	//处理消息, 需要子类重载
	virtual Error_manager execute_msg(Can_message* p_msg);

	//定时封装发送消息,
	virtual Error_manager encapsulate_send_data();
public://get or set member variable


protected://member variable


private:

};


#endif //CAN_TEST_MOTOR_COMMUNICATION_H
