|
|
@ -3,7 +3,7 @@ |
|
|
|
#include "base/device_info.hpp"
|
|
|
|
#include "zsdk/zcanreceiver/zcanreceiver.hpp"
|
|
|
|
#define TAG "PROTO"
|
|
|
|
|
|
|
|
using namespace iflytop; |
|
|
|
/***********************************************************************************************************************
|
|
|
|
* FUNCTION_LIST * |
|
|
|
***********************************************************************************************************************/ |
|
|
@ -18,13 +18,19 @@ static osThreadId PacketRxThreadId; |
|
|
|
/***********************************************************************************************************************
|
|
|
|
* FUNCTION_IMPL * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
|
|
|
|
#define GET_PARAM(buff, off) ((((int32_t*)(buff))[off]))
|
|
|
|
|
|
|
|
static void zcanbus_on_rx(uint8_t from, uint8_t to, uint8_t* rawpacket, size_t len) { //
|
|
|
|
zcanbus_packet_t* packet = (zcanbus_packet_t*)rawpacket; |
|
|
|
|
|
|
|
ZLOGI(TAG, "rx packet from %d to %d, function_id %d, len %d", from, to, packet->function_id, len); |
|
|
|
/***********************************************************************************************************************
|
|
|
|
* 系统方法 * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
// 读板子信息
|
|
|
|
if (packet->function_id == kcmd_read_board_info) { |
|
|
|
static ack_read_board_info_data_t ack; |
|
|
|
ack.boardType = deviceInfo_getBoardType(); |
|
|
|
|
|
|
|
ack.boardType = deviceInfo_getBoardType(); |
|
|
|
ack.projectId = deviceInfo_getProjectId(); |
|
|
|
ack.protcol_version = deviceInfo_getProtocolVersion(); |
|
|
|
ack.software_version = deviceInfo_getSoftwareVersion(); |
|
|
@ -32,6 +38,42 @@ static void zcanbus_on_rx(uint8_t from, uint8_t to, uint8_t* rawpacket, size_t l |
|
|
|
|
|
|
|
zcanbus_send_ack(packet, (uint8_t*)&ack, sizeof(ack)); |
|
|
|
} |
|
|
|
|
|
|
|
// 读系统信息
|
|
|
|
else if (packet->function_id == kcmd_read_sysinfo) { |
|
|
|
static ack_sysinfo_t ack; |
|
|
|
ack.free_heap_size = SysMgr::ins()->osGetMinimumEverFreeHeapSize(); |
|
|
|
ack.total_heap_size = SysMgr::ins()->osGetTotalHeapSize(); |
|
|
|
ack.taskNum = SysMgr::ins()->getTaskNum(); |
|
|
|
ack.sysHasRun = SysMgr::ins()->osGetSysRunTime() / 1000; |
|
|
|
zcanbus_send_ack(packet, (uint8_t*)&ack, sizeof(ack)); |
|
|
|
} |
|
|
|
|
|
|
|
// 读任务信息
|
|
|
|
else if (packet->function_id == kcmd_read_taskinfo) { |
|
|
|
static ask_taskinfo_t ack; |
|
|
|
int32_t taskoff = GET_PARAM(packet->params, 0); |
|
|
|
osThreadId taskId = SysMgr::ins()->osGetId(taskoff); |
|
|
|
SysMgr::ins()->osTaskName(taskId, (char*)ack.taskName, sizeof(ack.taskName)); |
|
|
|
SysMgr::ins()->osTaskStackRemainingSize(taskId, &ack.stackRemindSize); |
|
|
|
SysMgr::ins()->osTaskPriority(taskId, &ack.priority); |
|
|
|
SysMgr::ins()->osTaskGetState(taskId, (char*)&ack.state); |
|
|
|
|
|
|
|
zcanbus_send_ack(packet, (uint8_t*)&ack, sizeof(ack)); |
|
|
|
} |
|
|
|
|
|
|
|
else if (packet->function_id == kcmd_heart_ping) { |
|
|
|
static report_heatpacket_data_t heatpacket; |
|
|
|
heatpacket.boardType = deviceInfo_getBoardType(); |
|
|
|
heatpacket.heartIndex = GET_PARAM(packet->params, 0); |
|
|
|
zcanbus_send_report(kreport_heatpacket, (uint8_t*)&heatpacket, sizeof(heatpacket)); |
|
|
|
} |
|
|
|
/***********************************************************************************************************************
|
|
|
|
* 应用实现 * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
// 触发一次强制上报事件
|
|
|
|
else if (packet->function_id == kcmd_force_report) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void zcanbus_on_connected(bool connected) { |
|
|
@ -48,7 +90,7 @@ static void zcanbus_on_connected(bool connected) { |
|
|
|
static void onHeartReportTimer(void const* argument) { |
|
|
|
static report_heatpacket_data_t heatpacket; |
|
|
|
heatpacket.boardType = deviceInfo_getBoardType(); |
|
|
|
zcanbus_send_report(kreport_heatpacket, (uint8_t*)&heatpacket, sizeof(heatpacket)); |
|
|
|
// zcanbus_send_report(kreport_heatpacket, (uint8_t*)&heatpacket, sizeof(heatpacket));
|
|
|
|
} |
|
|
|
static void onPacketRxThreadStart(void const* argument) { |
|
|
|
while (true) { |
|
|
@ -69,6 +111,6 @@ void protocol_impl_service_init() { // |
|
|
|
HeartReportTimerId = osTimerCreate(osTimer(HeartReportTimer), osTimerPeriodic, NULL); |
|
|
|
osTimerStart(HeartReportTimerId, HEART_PACKET_PERIOD_MS); |
|
|
|
|
|
|
|
osThreadDef(PacketRxThread, onPacketRxThreadStart, osPriorityNormal, 1024, NULL); |
|
|
|
osThreadDef(PacketRxThread, onPacketRxThreadStart, osPriorityNormal, 0, 1024); |
|
|
|
PacketRxThreadId = osThreadCreate(osThread(PacketRxThread), NULL); |
|
|
|
} |