From 14654f98532a65013384eb1582845af08c9cf327 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 11 Nov 2023 11:39:01 +0800 Subject: [PATCH] update --- chip/chip.cpp | 6 +- chip/chip_tim_irq_shceduler.cpp | 2 +- chip/zgpio.cpp | 2 +- .../step_motor_45/step_motor_45_scheduler.cpp | 2 +- components/subcanmodule/dep.hpp | 7 ++ .../subcanmodule/zcancmder_subboard_initer.cpp | 90 ++++++++++++++++++++++ .../subcanmodule/zcancmder_subboard_initer.hpp | 39 ++++++++++ os/delay.cpp | 4 +- os/mutex.cpp | 10 +-- os/mutex.hpp | 2 +- os/osbasic_h.hpp | 2 +- os/ticket.cpp | 2 +- 12 files changed, 152 insertions(+), 16 deletions(-) create mode 100644 components/subcanmodule/dep.hpp create mode 100644 components/subcanmodule/zcancmder_subboard_initer.cpp create mode 100644 components/subcanmodule/zcancmder_subboard_initer.hpp diff --git a/chip/chip.cpp b/chip/chip.cpp index 7ca203b..f7c309a 100644 --- a/chip/chip.cpp +++ b/chip/chip.cpp @@ -40,9 +40,9 @@ void chip_init(chip_cfg_t *cfg) { 50); ZEARLY_LOGI("SYS", "chip init ok"); - ZEARLY_LOGI("SYS", "= manufacturer : %s", MANUFACTURER); - ZEARLY_LOGI("SYS", "= project name : %s", PROJECT_NAME); - ZEARLY_LOGI("SYS", "= version : %s", VERSION); + ZEARLY_LOGI("SYS", "= manufacturer : %s", PC_MANUFACTURER); + ZEARLY_LOGI("SYS", "= project name : %s", PC_PROJECT_NAME); + ZEARLY_LOGI("SYS", "= version : %s", PC_VERSION); ZEARLY_LOGI("SYS", "= freq : %d", HAL_RCC_GetSysClockFreq()); ZEARLY_LOGI("SYS", "= build time : %s", __DATE__ " " __TIME__); } diff --git a/chip/chip_tim_irq_shceduler.cpp b/chip/chip_tim_irq_shceduler.cpp index 32ec28c..bfd3b93 100644 --- a/chip/chip_tim_irq_shceduler.cpp +++ b/chip/chip_tim_irq_shceduler.cpp @@ -41,7 +41,7 @@ void ChipTimIrqShceduler::simpleTimer_startByFreq(float freq) { m_htim->Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_Base_Init(m_htim); - HAL_NVIC_SetPriority(chip_tim_get_irq(m_htim), IFLYTOP_PREEMPTPRIORITY_DEFAULT, 0); + HAL_NVIC_SetPriority(chip_tim_get_irq(m_htim), PC_IRQ_PREEMPTPRIORITY_DEFAULT, 0); HAL_NVIC_EnableIRQ(chip_tim_get_irq(m_htim)); HAL_TIM_Base_Start_IT(m_htim); diff --git a/chip/zgpio.cpp b/chip/zgpio.cpp index bd4742d..fe75fec 100644 --- a/chip/zgpio.cpp +++ b/chip/zgpio.cpp @@ -181,7 +181,7 @@ void ZGPIO::initAsInput(Pin_t pin, GPIOMode_t mode, GPIOIrqType_t irqtype, bool if (m_irqtype != kIRQ_noIrq) { regIRQGPIO(this); lastLevel = getState(); - HAL_NVIC_SetPriority(getEXTIIRQn(), IFLYTOP_PREEMPTPRIORITY_DEFAULT, 0); + HAL_NVIC_SetPriority(getEXTIIRQn(), PC_IRQ_PREEMPTPRIORITY_DEFAULT, 0); HAL_NVIC_EnableIRQ(getEXTIIRQn()); } diff --git a/components/step_motor_45/step_motor_45_scheduler.cpp b/components/step_motor_45/step_motor_45_scheduler.cpp index 4555087..b770339 100644 --- a/components/step_motor_45/step_motor_45_scheduler.cpp +++ b/components/step_motor_45/step_motor_45_scheduler.cpp @@ -18,7 +18,7 @@ void StepMotor45Scheduler::initialize(zchip_tim_t* tim) { m_htim->Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_Base_Init(m_htim); - HAL_NVIC_SetPriority(chip_tim_get_irq(m_htim), IFLYTOP_PREEMPTPRIORITY_DEFAULT, 0); + HAL_NVIC_SetPriority(chip_tim_get_irq(m_htim), PC_IRQ_PREEMPTPRIORITY_DEFAULT, 0); HAL_NVIC_EnableIRQ(chip_tim_get_irq(m_htim)); // HAL_TIM_Base_Start_IT(m_htim); diff --git a/components/subcanmodule/dep.hpp b/components/subcanmodule/dep.hpp new file mode 100644 index 0000000..f4a8b99 --- /dev/null +++ b/components/subcanmodule/dep.hpp @@ -0,0 +1,7 @@ +#pragma once +#include "sdk\components\cmdscheduler\cmd_scheduler_v2.hpp" +#include "sdk\components\hardware\uart\zuart_dma_receiver.hpp" +#include "sdk\components\zcancmder\zcan_board_module.hpp" +#include "sdk\components\zprotocol_helper\micro_computer_module_device_script_cmder_paser.hpp" +#include "sdk\components\zprotocols\zcancmder_v2\protocol_parser.hpp" +#include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_manager.hpp" \ No newline at end of file diff --git a/components/subcanmodule/zcancmder_subboard_initer.cpp b/components/subcanmodule/zcancmder_subboard_initer.cpp new file mode 100644 index 0000000..a1e2546 --- /dev/null +++ b/components/subcanmodule/zcancmder_subboard_initer.cpp @@ -0,0 +1,90 @@ +#include "zcancmder_subboard_initer.hpp" +// +#include "sdk\components\flash\znvs.hpp" +// +#include +#include + +#include "project_configs.h" +using namespace iflytop; +const char* TAG = PC_PROJECT_NAME; + +__weak void nvs_init_cb() {} +extern DMA_HandleTypeDef PC_DEBUG_UART_DMA_HANDLER; + +int32_t ZCancmderSubboardIniter::get_module_id(int32_t moduleIndex) { return m_cfg.deviceId * 100 + moduleIndex; } + +void ZCancmderSubboardIniter::init(cfg_t* cfg) { + m_cfg = *cfg; + + chip_cfg_t chipcfg = {}; + chipcfg.us_dleay_tim = &PC_SYS_DELAY_US_TIMER; + chipcfg.tim_irq_scheduler_tim = &PC_SYS_TIM_IRQ_SCHEDULER_TIMER; + chipcfg.huart = &PC_DEBUG_UART; + chipcfg.debuglight = PC_DEBUG_LIGHT_GPIO; + + chip_init(&chipcfg); + + zos_cfg_t zoscfg; + zos_init(&zoscfg); + + ZLOGI(TAG, "boardId:%d", m_cfg.deviceId); + + /******************************************************************************* + * NVSINIT * + *******************************************************************************/ + + if (PC_NVS_ENABLE) { + ZNVS::ins().initialize(PC_NVS_CONFIG_FLASH_SECTOR); + nvs_init_cb(); + ZNVS::ins().init_config(); + } + + auto zcanCmder_cfg = zcanCmder.createCFG(m_cfg.deviceId); + zcanCmder.init(zcanCmder_cfg); + ziProtocolParser.initialize(&zcanCmder); + + { + static ZUARTDmaReceiver dmaUartReceiver; + static ZUARTDmaReceiver::hardware_config_t cfg = { + .huart = &PC_DEBUG_UART, + .dma_rx = &PC_DEBUG_UART_DMA_HANDLER, + .rxbuffersize = PC_DEBUG_UART_RX_BUF_SIZE, + .rxovertime_ms = 10, + }; + dmaUartReceiver.initialize(&cfg); + cmder.initialize(&dmaUartReceiver); + zModuleDeviceManager.initialize(nullptr); + zModuleDeviceScriptCmderPaser.initialize(&cmder, &zModuleDeviceManager); + } + + initmodule(); +} + +void ZCancmderSubboardIniter::initmodule() { + static ZCanBoardModule boardmodule; + + ZCanBoardModule::hardware_config_t hcfg = {}; + static_assert(ZARRAY_SIZE(hcfg.input) == ZARRAY_SIZE(m_cfg.input_gpio)); + static_assert(ZARRAY_SIZE(hcfg.output) == ZARRAY_SIZE(m_cfg.output_gpio)); + + memcpy(&hcfg.input, &m_cfg.input_gpio, sizeof(m_cfg.input_gpio)); + memcpy(&hcfg.output, &m_cfg.output_gpio, sizeof(m_cfg.output_gpio)); + + boardmodule.initialize(get_module_id(0), &hcfg); + ziProtocolParser.registerModule(&boardmodule); + zModuleDeviceManager.registerModule(&boardmodule); +} + +void ZCancmderSubboardIniter::register_module(ZIModule* module) { + ziProtocolParser.registerModule(module); + zModuleDeviceManager.registerModule(module); +} + +void ZCancmderSubboardIniter::loop() { + while (true) { + OSDefaultSchduler::getInstance()->loop(); + zcanCmder.loop(); + cmder.schedule(); + } +} \ No newline at end of file diff --git a/components/subcanmodule/zcancmder_subboard_initer.hpp b/components/subcanmodule/zcancmder_subboard_initer.hpp new file mode 100644 index 0000000..4e128da --- /dev/null +++ b/components/subcanmodule/zcancmder_subboard_initer.hpp @@ -0,0 +1,39 @@ +#pragma once +#include "sdk\components\cmdscheduler\cmd_scheduler_v2.hpp" +#include "sdk\components\hardware\uart\zuart_dma_receiver.hpp" +#include "sdk\components\zcancmder\zcan_board_module.hpp" +#include "sdk\components\zcancmder\zcanreceiver.hpp" +#include "sdk\components\zprotocol_helper\micro_computer_module_device_script_cmder_paser.hpp" +#include "sdk\components\zprotocols\zcancmder_v2\protocol_parser.hpp" +#include "sdk\components\zprotocols\zcancmder_v2\zmodule_device_manager.hpp" + +namespace iflytop { +class ZCancmderSubboardIniter { + public: + typedef struct { + int32_t deviceId; + ZGPIO::InputGpioCfg_t input_gpio[10]; + ZGPIO::OutputGpioCfg_t output_gpio[10]; + } cfg_t; + + private: + ZCanCmder zcanCmder; + ZIProtocolParser ziProtocolParser; + ZModuleDeviceManager zModuleDeviceManager; + MicroComputerModuleDeviceScriptCmderPaser zModuleDeviceScriptCmderPaser; + CmdSchedulerV2 cmder; + + cfg_t m_cfg; + + public: + void init(cfg_t* cfg); + void register_module(ZIModule* module); + int32_t get_module_id(int32_t moduleIndex); + // + void loop(); + + private: + int32_t getDeviceId(); + void initmodule(); +}; +} // namespace iflytop \ No newline at end of file diff --git a/os/delay.cpp b/os/delay.cpp index 98905fd..aaa9401 100644 --- a/os/delay.cpp +++ b/os/delay.cpp @@ -1,6 +1,6 @@ #include "delay.hpp" -#ifdef IFLYTOP_ENABLE_OS +#ifdef PC_IFLYTOP_ENABLE_OS #include "cmsis_os.h" #endif @@ -11,7 +11,7 @@ void zos_early_delay(int ms) { zos_early_delayus(1000); } } -#ifdef IFLYTOP_ENABLE_OS +#ifdef PC_IFLYTOP_ENABLE_OS void zos_delay(int ms) { osDelay(ms); } #else void zos_delay(int ms) { z_early_delay(ms); } diff --git a/os/mutex.cpp b/os/mutex.cpp index 4d964c6..4385d02 100644 --- a/os/mutex.cpp +++ b/os/mutex.cpp @@ -8,19 +8,19 @@ using namespace iflytop; *******************************************************************************/ zmutex::zmutex() {} zmutex::~zmutex() { -#ifdef IFLYTOP_ENABLE_OS +#ifdef PC_IFLYTOP_ENABLE_OS vSemaphoreDelete(recursiveMutex); #endif } void zmutex::init() { -#ifdef IFLYTOP_ENABLE_OS +#ifdef PC_IFLYTOP_ENABLE_OS recursiveMutex = xSemaphoreCreateRecursiveMutex(); #endif } bool zmutex::isInit() { -#ifdef IFLYTOP_ENABLE_OS +#ifdef PC_IFLYTOP_ENABLE_OS return recursiveMutex != NULL; #else return true; @@ -28,7 +28,7 @@ bool zmutex::isInit() { } void zmutex::lock() { -#ifdef IFLYTOP_ENABLE_OS +#ifdef PC_IFLYTOP_ENABLE_OS ZEARLY_ASSERT(recursiveMutex != NULL); xSemaphoreTakeRecursive(recursiveMutex, portMAX_DELAY); #else @@ -36,7 +36,7 @@ void zmutex::lock() { #endif } void zmutex::unlock() { -#ifdef IFLYTOP_ENABLE_OS +#ifdef PC_IFLYTOP_ENABLE_OS xSemaphoreGiveRecursive(recursiveMutex); #else chip_critical_exit(); diff --git a/os/mutex.hpp b/os/mutex.hpp index 2648019..aa0778b 100644 --- a/os/mutex.hpp +++ b/os/mutex.hpp @@ -5,7 +5,7 @@ using namespace std; class zmutex { public: -#ifdef IFLYTOP_ENABLE_OS +#ifdef PC_IFLYTOP_ENABLE_OS SemaphoreHandle_t recursiveMutex; #endif diff --git a/os/osbasic_h.hpp b/os/osbasic_h.hpp index 5df3a0c..8b4e756 100644 --- a/os/osbasic_h.hpp +++ b/os/osbasic_h.hpp @@ -1,6 +1,6 @@ #pragma once #include "../chip/chip.hpp" // -#ifdef IFLYTOP_ENABLE_OS +#ifdef PC_IFLYTOP_ENABLE_OS #include "cmsis_os.h" #endif \ No newline at end of file diff --git a/os/ticket.cpp b/os/ticket.cpp index f020c9c..2ca1a9a 100644 --- a/os/ticket.cpp +++ b/os/ticket.cpp @@ -2,7 +2,7 @@ extern "C" { uint32_t zos_get_tick(void) { - // #ifdef IFLYTOP_ENABLE_OS + // #ifdef PC_IFLYTOP_ENABLE_OS // return osKernelSysTick(); // #else return HAL_GetTick();