#include "wj_lidar_task.h" /** * 无参构造 * */ Wj_lidar_Task::Wj_lidar_Task() { m_task_type = Task_type::WJ_TASK; mb_result_flag = false; } /** * 析构 * */ Wj_lidar_Task::~Wj_lidar_Task() { } /** * 子类初始化函数 * */ Error_manager Wj_lidar_Task::init() { memset(&m_command, 0, sizeof(wj_command)); m_wj_measure_result.terminal_id = -1; m_wj_measure_result.correctness = false; m_wj_measure_result.x = 0; m_wj_measure_result.y = 0; m_wj_measure_result.angle = 0; m_wj_measure_result.length = 0; m_wj_measure_result.width = 0; m_wj_measure_result.height = 0; m_wj_measure_result.wheel_base = 0; m_task_statu = Task_statu::TASK_CREATED; return SUCCESS; } /** * 获取命令 * */ Error_manager Wj_lidar_Task::get_command(wj_command &command) { // 检查参数合法性 // 若终端编号小于零,或当前时间已经超时,则返回参数非法指令 if (m_command.terminal_id < 0 || std::chrono::duration_cast(std::chrono::steady_clock::now() - m_command.command_time).count() >= m_command.timeout_in_milliseconds) { return Error_manager(Error_code::WJ_LIDAR_TASK_INVALID_TASK); }else{ m_mutex.lock(); memcpy(&command, &m_command, sizeof(wj_command)); m_mutex.unlock(); return Error_manager(Error_code::SUCCESS); } } /** * 设置测量命令 * */ Error_manager Wj_lidar_Task::set_command(wj_command command) { // 检查参数合法性 // 若终端编号小于零,或当前时间已经超时,则返回参数非法指令 if (command.terminal_id < 0 || std::chrono::duration_cast(std::chrono::steady_clock::now() - command.command_time).count() >= command.timeout_in_milliseconds) { return Error_manager(Error_code::WJ_LIDAR_TASK_INVALID_TASK); }else{ m_mutex.lock(); memcpy(&m_command, &command, sizeof(wj_command)); m_mutex.unlock(); return Error_manager(Error_code::SUCCESS); } } /** * 获取万集测量结果 * 若结果未被更新则返回 WJ_LIDAR_TASK_RESULT_EMPTY * */ Error_manager Wj_lidar_Task::get_result(wj_measure_result &result) { if (mb_result_flag) { m_mutex.lock(); memcpy(&result, &m_wj_measure_result, sizeof(m_wj_measure_result)); m_mutex.unlock(); return Error_manager(Error_code::SUCCESS); } else { return Error_manager(Error_code::WJ_LIDAR_TASK_EMPTY_RESULT); } } /** * 设置万集测量结果 * */ Error_manager Wj_lidar_Task::set_result(wj_measure_result result) { m_mutex.lock(); memcpy(&m_wj_measure_result, &result, sizeof(result)); m_mutex.unlock(); mb_result_flag = true; return Error_manager(Error_code::SUCCESS); } bool Wj_lidar_Task::get_result_flag() { return mb_result_flag; }