hooks模块
在控制系统特定的操作可触发对应的回调,可在插件实现对应的逻辑。
控制系统执行这些逻辑的时候就会自动执行插件的逻辑。例如pp2main等事件
使用例子:
/**
* @brief 事件列表
*/
enum HookEventAPI{
INVALID_EVENT,
POINT_CHANGE, ///< 点位增加删除修改事件回调
PP_TO_MAIN, ///< pp2main回调
PP_TO_LINE, ///< pp2line事件回调
B_START_RUN, ///< 开始运行事件回调
B_PAUSE_RUN, ///< 暂停运行事件回调
E_STOP_RUN ///< 急停事件回调
};
/**
* @brief 指定hook回调的运行方式
*/
enum RunTypeAPI:short{
SYNC_RUN, ///< 同步运行,会阻塞控制器对应的事件
ASYNC_RUN_IN_THREAD_POOL, ///< 在普通线程池运行
ASYNC_RUN_IN_RT_THREAD ///< 在rt线程运行
};
/**
* @brief 测试pp2line带参数的hook
*/
void TestPP2LineHooks(){
namespace xhooks = xcore_api::hooks;
xhooks::HookDataAPI data;
data.SetEvent(xhooks::PP_TO_LINE);
auto func = [](const std::shared_ptr<const xhooks::HookArgsBaseAPI> p){
LOG_INFO<<"this is pp2line callback:";
const auto ptr = std::dynamic_pointer_cast<const xhooks::HookPPToLineArgsAPI>(p);
if(ptr == nullptr){
LOG_INFO<<"pp2line callback: nullptr";
} else {
LOG_INFO<<ptr->GetTaskName()<<" : "<<ptr->GetFileName()<<" : "<<ptr->GetFileLine();
}
};
data.SetHook(func);
int id = xhooks::RegisterHooksAPI(data);
LOG_INFO<<"register pp2line hook id:"<<id;
}
在HMI使用printq指令,执行到该指令会在日志中打印四元数。用户可使用客户端插件在辅助编程中将该指令注入,即可方便使用新注册的指令。

