From ede49ce8ea42abaa8798cda70f70d0c34d538029 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sun, 12 May 2024 14:16:55 +0800 Subject: [PATCH] update --- usrc/protocol_impl/basic/fn_mgr.cpp | 28 ++++++++++++++++++++++++++-- usrc/protocol_impl/basic/fn_mgr.hpp | 2 +- zsdk | 2 +- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/usrc/protocol_impl/basic/fn_mgr.cpp b/usrc/protocol_impl/basic/fn_mgr.cpp index 2a6a9bc..d73a580 100644 --- a/usrc/protocol_impl/basic/fn_mgr.cpp +++ b/usrc/protocol_impl/basic/fn_mgr.cpp @@ -1,4 +1,28 @@ #include "fn_mgr.hpp" -void fn_map_reg(uint16_t function_id, protocol_impl_func_t funtion) {} -bool fn_map_process(uint16_t function_id, uint8_t from, uint8_t to, uint8_t* rawpacket, size_t len) { return true; } \ No newline at end of file +typedef struct { + uint16_t function_id; + protocol_impl_func_t fn; +} fn_map_t; + +fn_map_t fn_map[256]; +int fn_map_size = 0; + +void fn_map_reg(uint16_t function_id, protocol_impl_func_t fn) { + if (fn_map_size >= 256) { + printf("fn_map is full\n"); + return; + } + fn_map[fn_map_size].function_id = function_id; + fn_map[fn_map_size].fn = fn; + fn_map_size++; +} +bool fn_map_process(uint16_t function_id, uint8_t from, uint8_t to, uint8_t* rawpacket, size_t len) { + for (int i = 0; i < fn_map_size; i++) { + if (fn_map[i].function_id == function_id) { + fn_map[i].fn(from, to, (zcanbus_packet_t*)rawpacket, len); + return true; + } + } + return false; +} \ No newline at end of file diff --git a/usrc/protocol_impl/basic/fn_mgr.hpp b/usrc/protocol_impl/basic/fn_mgr.hpp index de63f72..70f2859 100644 --- a/usrc/protocol_impl/basic/fn_mgr.hpp +++ b/usrc/protocol_impl/basic/fn_mgr.hpp @@ -29,7 +29,7 @@ * FUNC * ***********************************************************************************************************************/ -typedef void(protocol_impl_func_t)(uint8_t from, uint8_t to, zcanbus_packet_t* rawpacket, size_t len); +typedef void(*protocol_impl_func_t)(uint8_t from, uint8_t to, zcanbus_packet_t* rawpacket, size_t len); void fn_map_reg(uint16_t function_id, protocol_impl_func_t funtion); bool fn_map_process(uint16_t function_id, uint8_t from, uint8_t to, uint8_t* rawpacket, size_t len); diff --git a/zsdk b/zsdk index d1fa524..450a918 160000 --- a/zsdk +++ b/zsdk @@ -1 +1 @@ -Subproject commit d1fa5248511a3d2ef1c85fbf8e4abac8eab63fc6 +Subproject commit 450a91850484e1e575c352aaf63d393055db8238