|
|
@ -0,0 +1,74 @@ |
|
|
|
#include "protocol_impl_service.hpp"
|
|
|
|
|
|
|
|
#include "base/device_info.hpp"
|
|
|
|
#include "zsdk/zcanreceiver/zcanreceiver.hpp"
|
|
|
|
#define TAG "PROTO"
|
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* FUNCTION_LIST * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* VAR_LIST * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
|
|
|
|
static osTimerId HeartReportTimerId; |
|
|
|
static osThreadId PacketRxThreadId; |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* FUNCTION_IMPL * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
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; |
|
|
|
|
|
|
|
if (packet->function_id == kcmd_read_board_info) { |
|
|
|
static ack_read_board_info_data_t ack; |
|
|
|
ack.boardType = deviceInfo_getBoardType(); |
|
|
|
|
|
|
|
ack.projectId = deviceInfo_getProjectId(); |
|
|
|
ack.protcol_version = deviceInfo_getProtocolVersion(); |
|
|
|
ack.software_version = deviceInfo_getSoftwareVersion(); |
|
|
|
ack.hardware_version = deviceInfo_getHardwareVersion(); |
|
|
|
|
|
|
|
zcanbus_send_ack(packet, (uint8_t*)&ack, sizeof(ack)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void zcanbus_on_connected(bool connected) { |
|
|
|
if (connected) { |
|
|
|
ZLOGI(TAG, "connected to host"); |
|
|
|
} else { |
|
|
|
ZLOGI(TAG, "disconnected from host"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* SCHEDULER * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
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)); |
|
|
|
} |
|
|
|
static void onPacketRxThreadStart(void const* argument) { |
|
|
|
while (true) { |
|
|
|
zcanbus_schedule(); |
|
|
|
osDelay(1); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/***********************************************************************************************************************
|
|
|
|
* EXT * |
|
|
|
***********************************************************************************************************************/ |
|
|
|
void protocol_impl_service_init() { //
|
|
|
|
zcanbus_init(deviceInfo_getBoardId()); |
|
|
|
zcanbus_reglistener(zcanbus_on_rx); |
|
|
|
zcanbus_reg_on_connected_listener(zcanbus_on_connected); |
|
|
|
|
|
|
|
osTimerDef(HeartReportTimer, onHeartReportTimer); |
|
|
|
HeartReportTimerId = osTimerCreate(osTimer(HeartReportTimer), osTimerPeriodic, NULL); |
|
|
|
osTimerStart(HeartReportTimerId, HEART_PACKET_PERIOD_MS); |
|
|
|
|
|
|
|
osThreadDef(PacketRxThread, onPacketRxThreadStart, osPriorityNormal, 1024, NULL); |
|
|
|
PacketRxThreadId = osThreadCreate(osThread(PacketRxThread), NULL); |
|
|
|
} |