From a715a9a1569503fba4bc0a95f1a9579e06ec15e3 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sun, 12 May 2024 17:31:34 +0800 Subject: [PATCH] update --- .project | 2 +- .settings/language.settings.xml | 4 +- .vscode/settings.json | 3 +- Core/Src/usart.c | 4 +- README.md | 2 + dbdb_power_control_mini_board Debug.launch | 83 ----- dbdb_power_control_mini_board.cfg | 44 --- dbdb_power_control_mini_board.ioc | 382 -------------------- dbdb_power_control_mini_board.launch | 98 ------ iflytop_canbus_protocol | 2 +- ..._disinfection__power_control_board Debug.launch | 83 +++++ large_space_disinfection__power_control_board.cfg | 44 +++ large_space_disinfection__power_control_board.ioc | 383 +++++++++++++++++++++ ..._space_disinfection__power_control_board.launch | 98 ++++++ usrc/base/hardware.cpp | 227 ++++++++---- usrc/base/hardware.hpp | 2 + usrc/project_configs.h | 56 +-- usrc/protocol_impl/basic/fn_mgr.cpp | 28 ++ usrc/protocol_impl/basic/fn_mgr.hpp | 35 ++ usrc/protocol_impl/basic/report_flag_mgr.cpp | 16 + usrc/protocol_impl/basic/report_flag_mgr.hpp | 32 ++ .../protocol_impl/function_impl/afunction_impl.hpp | 35 ++ usrc/protocol_impl/function_impl/basic_fn.cpp | 91 +++++ usrc/protocol_impl/function_impl/h2o2_fn_impl.cpp | 43 +++ .../protocol_impl/function_impl/heater_fn_impl.cpp | 29 ++ usrc/protocol_impl/protocol_impl_service.cpp | 243 ++----------- usrc/protocol_impl/report_flag_mgr.cpp | 16 - usrc/protocol_impl/report_flag_mgr.hpp | 32 -- zsdk | 2 +- 29 files changed, 1143 insertions(+), 976 deletions(-) delete mode 100644 dbdb_power_control_mini_board Debug.launch delete mode 100644 dbdb_power_control_mini_board.cfg delete mode 100644 dbdb_power_control_mini_board.ioc delete mode 100644 dbdb_power_control_mini_board.launch create mode 100644 large_space_disinfection__power_control_board Debug.launch create mode 100644 large_space_disinfection__power_control_board.cfg create mode 100644 large_space_disinfection__power_control_board.ioc create mode 100644 large_space_disinfection__power_control_board.launch create mode 100644 usrc/protocol_impl/basic/fn_mgr.cpp create mode 100644 usrc/protocol_impl/basic/fn_mgr.hpp create mode 100644 usrc/protocol_impl/basic/report_flag_mgr.cpp create mode 100644 usrc/protocol_impl/basic/report_flag_mgr.hpp create mode 100644 usrc/protocol_impl/function_impl/afunction_impl.hpp create mode 100644 usrc/protocol_impl/function_impl/basic_fn.cpp create mode 100644 usrc/protocol_impl/function_impl/h2o2_fn_impl.cpp create mode 100644 usrc/protocol_impl/function_impl/heater_fn_impl.cpp delete mode 100644 usrc/protocol_impl/report_flag_mgr.cpp delete mode 100644 usrc/protocol_impl/report_flag_mgr.hpp diff --git a/.project b/.project index 1c0225c..b077a63 100644 --- a/.project +++ b/.project @@ -1,6 +1,6 @@ - dbdb_power_control_mini_board + large_space_disinfection__power_control_board diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index f8ac9b4..eda5a3c 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/.vscode/settings.json b/.vscode/settings.json index debe77c..b3143ce 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -112,7 +112,8 @@ "zaf_delay.h": "c", "string.h": "c", "zlog.h": "c", - "zbase.h": "c" + "zbase.h": "c", + "*.bak": "c" }, "files.autoGuessEncoding": false } \ No newline at end of file diff --git a/Core/Src/usart.c b/Core/Src/usart.c index e7b3bfc..c578b4a 100644 --- a/Core/Src/usart.c +++ b/Core/Src/usart.c @@ -103,9 +103,9 @@ void MX_USART3_UART_Init(void) /* USER CODE END USART3_Init 1 */ huart3.Instance = USART3; - huart3.Init.BaudRate = 9600; + huart3.Init.BaudRate = 19200; huart3.Init.WordLength = UART_WORDLENGTH_8B; - huart3.Init.StopBits = UART_STOPBITS_1; + huart3.Init.StopBits = UART_STOPBITS_2; huart3.Init.Parity = UART_PARITY_NONE; huart3.Init.Mode = UART_MODE_TX_RX; huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; diff --git a/README.md b/README.md index cb025b5..de972bd 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,6 @@ V2: 完成需求 + +large_space_disinfection__power_control_board ``` \ No newline at end of file diff --git a/dbdb_power_control_mini_board Debug.launch b/dbdb_power_control_mini_board Debug.launch deleted file mode 100644 index 8008d52..0000000 --- a/dbdb_power_control_mini_board Debug.launch +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dbdb_power_control_mini_board.cfg b/dbdb_power_control_mini_board.cfg deleted file mode 100644 index ef37116..0000000 --- a/dbdb_power_control_mini_board.cfg +++ /dev/null @@ -1,44 +0,0 @@ -# This is an genericBoard board with a single STM32F407VETx chip -# -# Generated by STM32CubeIDE -# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s) - -source [find interface/stlink-dap.cfg] - - -set WORKAREASIZE 0x8000 - -transport select "dapdirect_swd" - -set CHIPNAME STM32F407VETx -set BOARDNAME genericBoard - -# Enable debug when in low power modes -set ENABLE_LOW_POWER 1 - -# Stop Watchdog counters when halt -set STOP_WATCHDOG 1 - -# STlink Debug clock frequency -set CLOCK_FREQ 8000 - -# Reset configuration -# use hardware reset, connect under reset -# connect_assert_srst needed if low power mode application running (WFI...) -reset_config srst_only srst_nogate connect_assert_srst -set CONNECT_UNDER_RESET 1 -set CORE_RESET 0 - -# ACCESS PORT NUMBER -set AP_NUM 0 -# GDB PORT -set GDB_PORT 3333 - - - - - -# BCTM CPU variables - -source [find target/stm32f4x.cfg] - diff --git a/dbdb_power_control_mini_board.ioc b/dbdb_power_control_mini_board.ioc deleted file mode 100644 index de2eb25..0000000 --- a/dbdb_power_control_mini_board.ioc +++ /dev/null @@ -1,382 +0,0 @@ -#MicroXplorer Configuration settings - do not modify -ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_0 -ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,master -ADC1.NbrOfConversionFlag=1 -ADC1.Rank-0\#ChannelRegularConversion=1 -ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES -ADC1.master=1 -CAD.formats= -CAD.pinconfig= -CAD.provider= -CAN1.ABOM=ENABLE -CAN1.BS1=CAN_BS1_14TQ -CAN1.BS2=CAN_BS2_3TQ -CAN1.CalculateBaudRate=500000 -CAN1.CalculateTimeBit=2000 -CAN1.CalculateTimeQuantum=111.11111111111111 -CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,BS2,SJW,TTCM,ABOM,NART,RFLM -CAN1.NART=ENABLE -CAN1.Prescaler=4 -CAN1.RFLM=ENABLE -CAN1.SJW=CAN_SJW_3TQ -CAN1.TTCM=ENABLE -Dma.Request0=USART3_RX -Dma.Request1=USART3_TX -Dma.Request2=USART2_RX -Dma.Request3=USART2_TX -Dma.RequestsNb=4 -Dma.USART2_RX.2.Direction=DMA_PERIPH_TO_MEMORY -Dma.USART2_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART2_RX.2.Instance=DMA1_Stream5 -Dma.USART2_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART2_RX.2.MemInc=DMA_MINC_ENABLE -Dma.USART2_RX.2.Mode=DMA_NORMAL -Dma.USART2_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART2_RX.2.PeriphInc=DMA_PINC_DISABLE -Dma.USART2_RX.2.Priority=DMA_PRIORITY_LOW -Dma.USART2_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.USART2_TX.3.Direction=DMA_MEMORY_TO_PERIPH -Dma.USART2_TX.3.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART2_TX.3.Instance=DMA1_Stream6 -Dma.USART2_TX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART2_TX.3.MemInc=DMA_MINC_ENABLE -Dma.USART2_TX.3.Mode=DMA_NORMAL -Dma.USART2_TX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART2_TX.3.PeriphInc=DMA_PINC_DISABLE -Dma.USART2_TX.3.Priority=DMA_PRIORITY_LOW -Dma.USART2_TX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.USART3_RX.0.Direction=DMA_PERIPH_TO_MEMORY -Dma.USART3_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART3_RX.0.Instance=DMA1_Stream1 -Dma.USART3_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART3_RX.0.MemInc=DMA_MINC_ENABLE -Dma.USART3_RX.0.Mode=DMA_NORMAL -Dma.USART3_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART3_RX.0.PeriphInc=DMA_PINC_DISABLE -Dma.USART3_RX.0.Priority=DMA_PRIORITY_LOW -Dma.USART3_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -Dma.USART3_TX.1.Direction=DMA_MEMORY_TO_PERIPH -Dma.USART3_TX.1.FIFOMode=DMA_FIFOMODE_DISABLE -Dma.USART3_TX.1.Instance=DMA1_Stream3 -Dma.USART3_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE -Dma.USART3_TX.1.MemInc=DMA_MINC_ENABLE -Dma.USART3_TX.1.Mode=DMA_NORMAL -Dma.USART3_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE -Dma.USART3_TX.1.PeriphInc=DMA_PINC_DISABLE -Dma.USART3_TX.1.Priority=DMA_PRIORITY_LOW -Dma.USART3_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode -FREERTOS.FootprintOK=true -FREERTOS.INCLUDE_uxTaskGetStackHighWaterMark=1 -FREERTOS.IPParameters=Tasks01,FootprintOK,configUSE_NEWLIB_REENTRANT,configUSE_RECURSIVE_MUTEXES,configUSE_COUNTING_SEMAPHORES,configRECORD_STACK_HIGH_ADDRESS,configENABLE_FPU,configTOTAL_HEAP_SIZE,configMINIMAL_STACK_SIZE,INCLUDE_uxTaskGetStackHighWaterMark,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,configUSE_TIMERS,configTIMER_TASK_PRIORITY,configUSE_TRACE_FACILITY,configGENERATE_RUN_TIME_STATS,configUSE_STATS_FORMATTING_FUNCTIONS,configUSE_IDLE_HOOK,configUSE_TICK_HOOK -FREERTOS.Tasks01=defaultTask,-3,1024,StartDefaultTask,As weak,NULL,Dynamic,NULL,NULL -FREERTOS.configCHECK_FOR_STACK_OVERFLOW=1 -FREERTOS.configENABLE_FPU=1 -FREERTOS.configGENERATE_RUN_TIME_STATS=1 -FREERTOS.configMINIMAL_STACK_SIZE=512 -FREERTOS.configRECORD_STACK_HIGH_ADDRESS=1 -FREERTOS.configTIMER_TASK_PRIORITY=3 -FREERTOS.configTOTAL_HEAP_SIZE=50000 -FREERTOS.configUSE_COUNTING_SEMAPHORES=1 -FREERTOS.configUSE_IDLE_HOOK=1 -FREERTOS.configUSE_MALLOC_FAILED_HOOK=1 -FREERTOS.configUSE_NEWLIB_REENTRANT=1 -FREERTOS.configUSE_RECURSIVE_MUTEXES=1 -FREERTOS.configUSE_STATS_FORMATTING_FUNCTIONS=1 -FREERTOS.configUSE_TICK_HOOK=1 -FREERTOS.configUSE_TIMERS=1 -FREERTOS.configUSE_TRACE_FACILITY=1 -File.Version=6 -GPIO.groupedBy=Group By Peripherals -IWDG.IPParameters=Prescaler,Reload -IWDG.Prescaler=IWDG_PRESCALER_256 -IWDG.Reload=501 -KeepUserPlacement=false -Mcu.CPN=STM32F407VET6 -Mcu.Family=STM32F4 -Mcu.IP0=ADC1 -Mcu.IP1=CAN1 -Mcu.IP10=SYS -Mcu.IP11=TIM1 -Mcu.IP12=TIM3 -Mcu.IP13=TIM6 -Mcu.IP14=TIM7 -Mcu.IP15=USART1 -Mcu.IP16=USART2 -Mcu.IP17=USART3 -Mcu.IP2=CRC -Mcu.IP3=DMA -Mcu.IP4=FREERTOS -Mcu.IP5=IWDG -Mcu.IP6=NVIC -Mcu.IP7=RCC -Mcu.IP8=RNG -Mcu.IP9=SPI1 -Mcu.IPNb=18 -Mcu.Name=STM32F407V(E-G)Tx -Mcu.Package=LQFP100 -Mcu.Pin0=PH0-OSC_IN -Mcu.Pin1=PH1-OSC_OUT -Mcu.Pin10=PC4 -Mcu.Pin11=PB0 -Mcu.Pin12=PB1 -Mcu.Pin13=PB10 -Mcu.Pin14=PB11 -Mcu.Pin15=PC8 -Mcu.Pin16=PC9 -Mcu.Pin17=PA9 -Mcu.Pin18=PA10 -Mcu.Pin19=PA11 -Mcu.Pin2=PC0 -Mcu.Pin20=PA12 -Mcu.Pin21=PA13 -Mcu.Pin22=PA14 -Mcu.Pin23=PD5 -Mcu.Pin24=PD6 -Mcu.Pin25=VP_CRC_VS_CRC -Mcu.Pin26=VP_FREERTOS_VS_CMSIS_V1 -Mcu.Pin27=VP_IWDG_VS_IWDG -Mcu.Pin28=VP_RNG_VS_RNG -Mcu.Pin29=VP_SYS_VS_tim11 -Mcu.Pin3=PA0-WKUP -Mcu.Pin30=VP_TIM1_VS_ClockSourceINT -Mcu.Pin31=VP_TIM3_VS_ClockSourceINT -Mcu.Pin32=VP_TIM6_VS_ClockSourceINT -Mcu.Pin33=VP_TIM7_VS_ClockSourceINT -Mcu.Pin4=PA1 -Mcu.Pin5=PA2 -Mcu.Pin6=PA3 -Mcu.Pin7=PA5 -Mcu.Pin8=PA6 -Mcu.Pin9=PA7 -Mcu.PinsNb=34 -Mcu.ThirdPartyNb=0 -Mcu.UserConstants= -Mcu.UserName=STM32F407VETx -MxCube.Version=6.11.0 -MxDb.Version=DB.6.0.110 -NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.CAN1_RX0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.CAN1_RX1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.CAN1_SCE_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.CAN1_TX_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true -NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.ForceEnableDMAVector=true -NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false -NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 -NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false -NVIC.SavedPendsvIrqHandlerGenerated=true -NVIC.SavedSvcallIrqHandlerGenerated=true -NVIC.SavedSystickIrqHandlerGenerated=true -NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false -NVIC.TIM1_TRG_COM_TIM11_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true -NVIC.TIM6_DAC_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.TIM7_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.TimeBase=TIM1_TRG_COM_TIM11_IRQn -NVIC.TimeBaseIP=TIM11 -NVIC.USART2_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.USART3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true -NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false -PA0-WKUP.Locked=true -PA0-WKUP.Signal=ADCx_IN0 -PA1.Locked=true -PA1.Signal=ADCx_IN1 -PA10.Mode=Asynchronous -PA10.Signal=USART1_RX -PA11.Locked=true -PA11.Mode=CAN_Activate -PA11.Signal=CAN1_RX -PA12.Locked=true -PA12.Mode=CAN_Activate -PA12.Signal=CAN1_TX -PA13.Mode=Serial_Wire -PA13.Signal=SYS_JTMS-SWDIO -PA14.Mode=Serial_Wire -PA14.Signal=SYS_JTCK-SWCLK -PA2.Locked=true -PA2.Signal=ADCx_IN2 -PA3.Locked=true -PA3.Signal=ADCx_IN3 -PA5.Mode=Full_Duplex_Master -PA5.Signal=SPI1_SCK -PA6.Mode=Full_Duplex_Master -PA6.Signal=SPI1_MISO -PA7.Mode=Full_Duplex_Master -PA7.Signal=SPI1_MOSI -PA9.Locked=true -PA9.Mode=Asynchronous -PA9.Signal=USART1_TX -PB0.Locked=true -PB0.Signal=ADCx_IN8 -PB1.Locked=true -PB1.Signal=ADCx_IN9 -PB10.Locked=true -PB10.Mode=Asynchronous -PB10.Signal=USART3_TX -PB11.Locked=true -PB11.Mode=Asynchronous -PB11.Signal=USART3_RX -PC0.Locked=true -PC0.Signal=GPXTI0 -PC4.Locked=true -PC4.Signal=GPXTI4 -PC8.Locked=true -PC8.Signal=S_TIM3_CH3 -PC9.Locked=true -PC9.Mode=Clock-out-2 -PC9.Signal=RCC_MCO_2 -PD5.Locked=true -PD5.Mode=Asynchronous -PD5.Signal=USART2_TX -PD6.Locked=true -PD6.Mode=Asynchronous -PD6.Signal=USART2_RX -PH0-OSC_IN.Mode=HSE-External-Oscillator -PH0-OSC_IN.Signal=RCC_OSC_IN -PH1-OSC_OUT.Mode=HSE-External-Oscillator -PH1-OSC_OUT.Signal=RCC_OSC_OUT -PinOutPanel.RotationAngle=0 -ProjectManager.AskForMigrate=true -ProjectManager.BackupPrevious=false -ProjectManager.CompilerOptimize=6 -ProjectManager.ComputerToolchain=false -ProjectManager.CoupleFile=true -ProjectManager.CustomerFirmwarePackage= -ProjectManager.DefaultFWLocation=true -ProjectManager.DeletePrevious=false -ProjectManager.DeviceId=STM32F407VETx -ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.28.0 -ProjectManager.FreePins=true -ProjectManager.HalAssertFull=true -ProjectManager.HeapSize=0x0000 -ProjectManager.KeepUserCode=true -ProjectManager.LastFirmware=true -ProjectManager.LibraryCopy=1 -ProjectManager.MainLocation=Core/Src -ProjectManager.MultiThreaded=true -ProjectManager.NoMain=false -ProjectManager.PreviousToolchain=STM32CubeIDE -ProjectManager.ProjectBuild=false -ProjectManager.ProjectFileName=dbdb_power_control_mini_board.ioc -ProjectManager.ProjectName=dbdb_power_control_mini_board -ProjectManager.ProjectStructure= -ProjectManager.RegisterCallBack= -ProjectManager.StackSize=0x2000 -ProjectManager.TargetToolchain=STM32CubeIDE -ProjectManager.ThreadSafeStrategy=Cortex-M4NS\:FreeRtosStrategy4, -ProjectManager.ToolChainLocation= -ProjectManager.UAScriptAfterPath= -ProjectManager.UAScriptBeforePath= -ProjectManager.UnderRoot=true -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_RNG_Init-RNG-false-HAL-true,8-MX_TIM7_Init-TIM7-false-HAL-true,9-MX_TIM6_Init-TIM6-false-HAL-true,10-MX_TIM1_Init-TIM1-false-HAL-true,11-MX_USART3_UART_Init-USART3-false-HAL-true,12-MX_CAN1_Init-CAN1-false-HAL-true,13-MX_SPI1_Init-SPI1-false-HAL-true,14-MX_ADC1_Init-ADC1-false-HAL-true,15-MX_USART2_UART_Init-USART2-false-HAL-true,16-MX_IWDG_Init-IWDG-false-HAL-true -RCC.48MHZClocksFreq_Value=48000000 -RCC.AHBFreq_Value=144000000 -RCC.APB1CLKDivider=RCC_HCLK_DIV4 -RCC.APB1Freq_Value=36000000 -RCC.APB1TimFreq_Value=72000000 -RCC.APB2CLKDivider=RCC_HCLK_DIV2 -RCC.APB2Freq_Value=72000000 -RCC.APB2TimFreq_Value=144000000 -RCC.CortexFreq_Value=144000000 -RCC.EthernetFreq_Value=144000000 -RCC.FCLKCortexFreq_Value=144000000 -RCC.FamilyName=M -RCC.HCLKFreq_Value=144000000 -RCC.HSE_VALUE=8000000 -RCC.HSI_VALUE=16000000 -RCC.I2SClocksFreq_Value=64000000 -RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SN,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLSourceVirtual,RCC_MCO1Source,RCC_MCO2Source,RCC_MCODiv1,RCC_MCODiv2,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S -RCC.LSE_VALUE=32768 -RCC.LSI_VALUE=32000 -RCC.MCO1PinFreq_Value=36000000 -RCC.MCO2PinFreq_Value=16000000 -RCC.PLLCLKFreq_Value=144000000 -RCC.PLLI2SN=64 -RCC.PLLM=4 -RCC.PLLN=144 -RCC.PLLQ=6 -RCC.PLLQCLKFreq_Value=48000000 -RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE -RCC.RCC_MCO1Source=RCC_MCO1SOURCE_PLLCLK -RCC.RCC_MCO2Source=RCC_MCO2SOURCE_PLLI2SCLK -RCC.RCC_MCODiv1=RCC_MCODIV_4 -RCC.RCC_MCODiv2=RCC_MCODIV_4 -RCC.RTCFreq_Value=32000 -RCC.RTCHSEDivFreq_Value=4000000 -RCC.SYSCLKFreq_VALUE=144000000 -RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK -RCC.VCOI2SOutputFreq_Value=128000000 -RCC.VCOInputFreq_Value=2000000 -RCC.VCOOutputFreq_Value=288000000 -RCC.VcooutputI2S=64000000 -SH.ADCx_IN0.0=ADC1_IN0,IN0 -SH.ADCx_IN0.ConfNb=1 -SH.ADCx_IN1.0=ADC1_IN1,IN1 -SH.ADCx_IN1.ConfNb=1 -SH.ADCx_IN2.0=ADC1_IN2,IN2 -SH.ADCx_IN2.ConfNb=1 -SH.ADCx_IN3.0=ADC1_IN3,IN3 -SH.ADCx_IN3.ConfNb=1 -SH.ADCx_IN8.0=ADC1_IN8,IN8 -SH.ADCx_IN8.ConfNb=1 -SH.ADCx_IN9.0=ADC1_IN9,IN9 -SH.ADCx_IN9.ConfNb=1 -SH.GPXTI0.0=GPIO_EXTI0 -SH.GPXTI0.ConfNb=1 -SH.GPXTI4.0=GPIO_EXTI4 -SH.GPXTI4.ConfNb=1 -SH.S_TIM3_CH3.0=TIM3_CH3,PWM Generation3 CH3 -SH.S_TIM3_CH3.ConfNb=1 -SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_128 -SPI1.CalculateBaudRate=562.5 KBits/s -SPI1.Direction=SPI_DIRECTION_2LINES -SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler -SPI1.Mode=SPI_MODE_MASTER -SPI1.VirtualType=VM_MASTER -TIM1.IPParameters=Period,Prescaler -TIM1.Period=9999 -TIM1.Prescaler=143 -TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 -TIM3.IPParameters=Prescaler,Period,Channel-PWM Generation3 CH3 -TIM3.Period=9999 -TIM3.Prescaler=143 -TIM6.IPParameters=Prescaler -TIM6.Prescaler=71 -TIM7.IPParameters=Prescaler -TIM7.Prescaler=81 -USART1.BaudRate=460800 -USART1.IPParameters=VirtualMode,BaudRate -USART1.VirtualMode=VM_ASYNC -USART2.BaudRate=19200 -USART2.IPParameters=VirtualMode,BaudRate -USART2.VirtualMode=VM_ASYNC -USART3.BaudRate=9600 -USART3.IPParameters=VirtualMode,BaudRate -USART3.VirtualMode=VM_ASYNC -VP_CRC_VS_CRC.Mode=CRC_Activate -VP_CRC_VS_CRC.Signal=CRC_VS_CRC -VP_FREERTOS_VS_CMSIS_V1.Mode=CMSIS_V1 -VP_FREERTOS_VS_CMSIS_V1.Signal=FREERTOS_VS_CMSIS_V1 -VP_IWDG_VS_IWDG.Mode=IWDG_Activate -VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG -VP_RNG_VS_RNG.Mode=RNG_Activate -VP_RNG_VS_RNG.Signal=RNG_VS_RNG -VP_SYS_VS_tim11.Mode=TIM11 -VP_SYS_VS_tim11.Signal=SYS_VS_tim11 -VP_TIM1_VS_ClockSourceINT.Mode=Internal -VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT -VP_TIM3_VS_ClockSourceINT.Mode=Internal -VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT -VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer -VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT -VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer -VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT -board=custom -rtos.0.ip=FREERTOS -isbadioc=false diff --git a/dbdb_power_control_mini_board.launch b/dbdb_power_control_mini_board.launch deleted file mode 100644 index 34468c0..0000000 --- a/dbdb_power_control_mini_board.launch +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iflytop_canbus_protocol b/iflytop_canbus_protocol index bd49987..955c39e 160000 --- a/iflytop_canbus_protocol +++ b/iflytop_canbus_protocol @@ -1 +1 @@ -Subproject commit bd49987090f3666d4d68713f0ba4ca4d31cc3a5f +Subproject commit 955c39e8b8aa1480b0846a1ae26aaa6ba4e38ce0 diff --git a/large_space_disinfection__power_control_board Debug.launch b/large_space_disinfection__power_control_board Debug.launch new file mode 100644 index 0000000..0666ca3 --- /dev/null +++ b/large_space_disinfection__power_control_board Debug.launch @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/large_space_disinfection__power_control_board.cfg b/large_space_disinfection__power_control_board.cfg new file mode 100644 index 0000000..ef37116 --- /dev/null +++ b/large_space_disinfection__power_control_board.cfg @@ -0,0 +1,44 @@ +# This is an genericBoard board with a single STM32F407VETx chip +# +# Generated by STM32CubeIDE +# Take care that such file, as generated, may be overridden without any early notice. Please have a look to debug launch configuration setup(s) + +source [find interface/stlink-dap.cfg] + + +set WORKAREASIZE 0x8000 + +transport select "dapdirect_swd" + +set CHIPNAME STM32F407VETx +set BOARDNAME genericBoard + +# Enable debug when in low power modes +set ENABLE_LOW_POWER 1 + +# Stop Watchdog counters when halt +set STOP_WATCHDOG 1 + +# STlink Debug clock frequency +set CLOCK_FREQ 8000 + +# Reset configuration +# use hardware reset, connect under reset +# connect_assert_srst needed if low power mode application running (WFI...) +reset_config srst_only srst_nogate connect_assert_srst +set CONNECT_UNDER_RESET 1 +set CORE_RESET 0 + +# ACCESS PORT NUMBER +set AP_NUM 0 +# GDB PORT +set GDB_PORT 3333 + + + + + +# BCTM CPU variables + +source [find target/stm32f4x.cfg] + diff --git a/large_space_disinfection__power_control_board.ioc b/large_space_disinfection__power_control_board.ioc new file mode 100644 index 0000000..cde5cfd --- /dev/null +++ b/large_space_disinfection__power_control_board.ioc @@ -0,0 +1,383 @@ +#MicroXplorer Configuration settings - do not modify +ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_0 +ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,master +ADC1.NbrOfConversionFlag=1 +ADC1.Rank-0\#ChannelRegularConversion=1 +ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_3CYCLES +ADC1.master=1 +CAD.formats= +CAD.pinconfig= +CAD.provider= +CAN1.ABOM=ENABLE +CAN1.BS1=CAN_BS1_14TQ +CAN1.BS2=CAN_BS2_3TQ +CAN1.CalculateBaudRate=500000 +CAN1.CalculateTimeBit=2000 +CAN1.CalculateTimeQuantum=111.11111111111111 +CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,BS2,SJW,TTCM,ABOM,NART,RFLM +CAN1.NART=ENABLE +CAN1.Prescaler=4 +CAN1.RFLM=ENABLE +CAN1.SJW=CAN_SJW_3TQ +CAN1.TTCM=ENABLE +Dma.Request0=USART3_RX +Dma.Request1=USART3_TX +Dma.Request2=USART2_RX +Dma.Request3=USART2_TX +Dma.RequestsNb=4 +Dma.USART2_RX.2.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART2_RX.2.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART2_RX.2.Instance=DMA1_Stream5 +Dma.USART2_RX.2.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_RX.2.MemInc=DMA_MINC_ENABLE +Dma.USART2_RX.2.Mode=DMA_NORMAL +Dma.USART2_RX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_RX.2.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_RX.2.Priority=DMA_PRIORITY_LOW +Dma.USART2_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART2_TX.3.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART2_TX.3.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART2_TX.3.Instance=DMA1_Stream6 +Dma.USART2_TX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_TX.3.MemInc=DMA_MINC_ENABLE +Dma.USART2_TX.3.Mode=DMA_NORMAL +Dma.USART2_TX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_TX.3.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_TX.3.Priority=DMA_PRIORITY_LOW +Dma.USART2_TX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART3_RX.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART3_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART3_RX.0.Instance=DMA1_Stream1 +Dma.USART3_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART3_RX.0.MemInc=DMA_MINC_ENABLE +Dma.USART3_RX.0.Mode=DMA_NORMAL +Dma.USART3_RX.0.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART3_RX.0.PeriphInc=DMA_PINC_DISABLE +Dma.USART3_RX.0.Priority=DMA_PRIORITY_LOW +Dma.USART3_RX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +Dma.USART3_TX.1.Direction=DMA_MEMORY_TO_PERIPH +Dma.USART3_TX.1.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.USART3_TX.1.Instance=DMA1_Stream3 +Dma.USART3_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART3_TX.1.MemInc=DMA_MINC_ENABLE +Dma.USART3_TX.1.Mode=DMA_NORMAL +Dma.USART3_TX.1.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART3_TX.1.PeriphInc=DMA_PINC_DISABLE +Dma.USART3_TX.1.Priority=DMA_PRIORITY_LOW +Dma.USART3_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode +FREERTOS.FootprintOK=true +FREERTOS.INCLUDE_uxTaskGetStackHighWaterMark=1 +FREERTOS.IPParameters=Tasks01,FootprintOK,configUSE_NEWLIB_REENTRANT,configUSE_RECURSIVE_MUTEXES,configUSE_COUNTING_SEMAPHORES,configRECORD_STACK_HIGH_ADDRESS,configENABLE_FPU,configTOTAL_HEAP_SIZE,configMINIMAL_STACK_SIZE,INCLUDE_uxTaskGetStackHighWaterMark,configUSE_MALLOC_FAILED_HOOK,configCHECK_FOR_STACK_OVERFLOW,configUSE_TIMERS,configTIMER_TASK_PRIORITY,configUSE_TRACE_FACILITY,configGENERATE_RUN_TIME_STATS,configUSE_STATS_FORMATTING_FUNCTIONS,configUSE_IDLE_HOOK,configUSE_TICK_HOOK +FREERTOS.Tasks01=defaultTask,-3,1024,StartDefaultTask,As weak,NULL,Dynamic,NULL,NULL +FREERTOS.configCHECK_FOR_STACK_OVERFLOW=1 +FREERTOS.configENABLE_FPU=1 +FREERTOS.configGENERATE_RUN_TIME_STATS=1 +FREERTOS.configMINIMAL_STACK_SIZE=512 +FREERTOS.configRECORD_STACK_HIGH_ADDRESS=1 +FREERTOS.configTIMER_TASK_PRIORITY=3 +FREERTOS.configTOTAL_HEAP_SIZE=50000 +FREERTOS.configUSE_COUNTING_SEMAPHORES=1 +FREERTOS.configUSE_IDLE_HOOK=1 +FREERTOS.configUSE_MALLOC_FAILED_HOOK=1 +FREERTOS.configUSE_NEWLIB_REENTRANT=1 +FREERTOS.configUSE_RECURSIVE_MUTEXES=1 +FREERTOS.configUSE_STATS_FORMATTING_FUNCTIONS=1 +FREERTOS.configUSE_TICK_HOOK=1 +FREERTOS.configUSE_TIMERS=1 +FREERTOS.configUSE_TRACE_FACILITY=1 +File.Version=6 +GPIO.groupedBy=Group By Peripherals +IWDG.IPParameters=Prescaler,Reload +IWDG.Prescaler=IWDG_PRESCALER_256 +IWDG.Reload=501 +KeepUserPlacement=false +Mcu.CPN=STM32F407VET6 +Mcu.Family=STM32F4 +Mcu.IP0=ADC1 +Mcu.IP1=CAN1 +Mcu.IP10=SYS +Mcu.IP11=TIM1 +Mcu.IP12=TIM3 +Mcu.IP13=TIM6 +Mcu.IP14=TIM7 +Mcu.IP15=USART1 +Mcu.IP16=USART2 +Mcu.IP17=USART3 +Mcu.IP2=CRC +Mcu.IP3=DMA +Mcu.IP4=FREERTOS +Mcu.IP5=IWDG +Mcu.IP6=NVIC +Mcu.IP7=RCC +Mcu.IP8=RNG +Mcu.IP9=SPI1 +Mcu.IPNb=18 +Mcu.Name=STM32F407V(E-G)Tx +Mcu.Package=LQFP100 +Mcu.Pin0=PH0-OSC_IN +Mcu.Pin1=PH1-OSC_OUT +Mcu.Pin10=PC4 +Mcu.Pin11=PB0 +Mcu.Pin12=PB1 +Mcu.Pin13=PB10 +Mcu.Pin14=PB11 +Mcu.Pin15=PC8 +Mcu.Pin16=PC9 +Mcu.Pin17=PA9 +Mcu.Pin18=PA10 +Mcu.Pin19=PA11 +Mcu.Pin2=PC0 +Mcu.Pin20=PA12 +Mcu.Pin21=PA13 +Mcu.Pin22=PA14 +Mcu.Pin23=PD5 +Mcu.Pin24=PD6 +Mcu.Pin25=VP_CRC_VS_CRC +Mcu.Pin26=VP_FREERTOS_VS_CMSIS_V1 +Mcu.Pin27=VP_IWDG_VS_IWDG +Mcu.Pin28=VP_RNG_VS_RNG +Mcu.Pin29=VP_SYS_VS_tim11 +Mcu.Pin3=PA0-WKUP +Mcu.Pin30=VP_TIM1_VS_ClockSourceINT +Mcu.Pin31=VP_TIM3_VS_ClockSourceINT +Mcu.Pin32=VP_TIM6_VS_ClockSourceINT +Mcu.Pin33=VP_TIM7_VS_ClockSourceINT +Mcu.Pin4=PA1 +Mcu.Pin5=PA2 +Mcu.Pin6=PA3 +Mcu.Pin7=PA5 +Mcu.Pin8=PA6 +Mcu.Pin9=PA7 +Mcu.PinsNb=34 +Mcu.ThirdPartyNb=0 +Mcu.UserConstants= +Mcu.UserName=STM32F407VETx +MxCube.Version=6.11.0 +MxDb.Version=DB.6.0.110 +NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.CAN1_RX0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.CAN1_RX1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.CAN1_SCE_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.CAN1_TX_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream3_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.ForceEnableDMAVector=true +NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.PendSV_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:false\:false +NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 +NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:false\:false\:false\:false\:false +NVIC.SavedPendsvIrqHandlerGenerated=true +NVIC.SavedSvcallIrqHandlerGenerated=true +NVIC.SavedSystickIrqHandlerGenerated=true +NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true\:false +NVIC.TIM1_TRG_COM_TIM11_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true\:true +NVIC.TIM6_DAC_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.TIM7_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.TimeBase=TIM1_TRG_COM_TIM11_IRQn +NVIC.TimeBaseIP=TIM11 +NVIC.USART2_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.USART3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true +NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +PA0-WKUP.Locked=true +PA0-WKUP.Signal=ADCx_IN0 +PA1.Locked=true +PA1.Signal=ADCx_IN1 +PA10.Mode=Asynchronous +PA10.Signal=USART1_RX +PA11.Locked=true +PA11.Mode=CAN_Activate +PA11.Signal=CAN1_RX +PA12.Locked=true +PA12.Mode=CAN_Activate +PA12.Signal=CAN1_TX +PA13.Mode=Serial_Wire +PA13.Signal=SYS_JTMS-SWDIO +PA14.Mode=Serial_Wire +PA14.Signal=SYS_JTCK-SWCLK +PA2.Locked=true +PA2.Signal=ADCx_IN2 +PA3.Locked=true +PA3.Signal=ADCx_IN3 +PA5.Mode=Full_Duplex_Master +PA5.Signal=SPI1_SCK +PA6.Mode=Full_Duplex_Master +PA6.Signal=SPI1_MISO +PA7.Mode=Full_Duplex_Master +PA7.Signal=SPI1_MOSI +PA9.Locked=true +PA9.Mode=Asynchronous +PA9.Signal=USART1_TX +PB0.Locked=true +PB0.Signal=ADCx_IN8 +PB1.Locked=true +PB1.Signal=ADCx_IN9 +PB10.Locked=true +PB10.Mode=Asynchronous +PB10.Signal=USART3_TX +PB11.Locked=true +PB11.Mode=Asynchronous +PB11.Signal=USART3_RX +PC0.Locked=true +PC0.Signal=GPXTI0 +PC4.Locked=true +PC4.Signal=GPXTI4 +PC8.Locked=true +PC8.Signal=S_TIM3_CH3 +PC9.Locked=true +PC9.Mode=Clock-out-2 +PC9.Signal=RCC_MCO_2 +PD5.Locked=true +PD5.Mode=Asynchronous +PD5.Signal=USART2_TX +PD6.Locked=true +PD6.Mode=Asynchronous +PD6.Signal=USART2_RX +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT +PinOutPanel.RotationAngle=0 +ProjectManager.AskForMigrate=true +ProjectManager.BackupPrevious=false +ProjectManager.CompilerOptimize=6 +ProjectManager.ComputerToolchain=false +ProjectManager.CoupleFile=true +ProjectManager.CustomerFirmwarePackage= +ProjectManager.DefaultFWLocation=true +ProjectManager.DeletePrevious=false +ProjectManager.DeviceId=STM32F407VETx +ProjectManager.FirmwarePackage=STM32Cube FW_F4 V1.28.0 +ProjectManager.FreePins=true +ProjectManager.HalAssertFull=true +ProjectManager.HeapSize=0x0000 +ProjectManager.KeepUserCode=true +ProjectManager.LastFirmware=true +ProjectManager.LibraryCopy=1 +ProjectManager.MainLocation=Core/Src +ProjectManager.MultiThreaded=true +ProjectManager.NoMain=false +ProjectManager.PreviousToolchain=STM32CubeIDE +ProjectManager.ProjectBuild=false +ProjectManager.ProjectFileName=large_space_disinfection__power_control_board.ioc +ProjectManager.ProjectName=large_space_disinfection__power_control_board +ProjectManager.ProjectStructure= +ProjectManager.RegisterCallBack= +ProjectManager.StackSize=0x2000 +ProjectManager.TargetToolchain=STM32CubeIDE +ProjectManager.ThreadSafeStrategy=Cortex-M4NS\:FreeRtosStrategy4, +ProjectManager.ToolChainLocation= +ProjectManager.UAScriptAfterPath= +ProjectManager.UAScriptBeforePath= +ProjectManager.UnderRoot=true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_TIM3_Init-TIM3-false-HAL-true,6-MX_CRC_Init-CRC-false-HAL-true,7-MX_RNG_Init-RNG-false-HAL-true,8-MX_TIM7_Init-TIM7-false-HAL-true,9-MX_TIM6_Init-TIM6-false-HAL-true,10-MX_TIM1_Init-TIM1-false-HAL-true,11-MX_USART3_UART_Init-USART3-false-HAL-true,12-MX_CAN1_Init-CAN1-false-HAL-true,13-MX_SPI1_Init-SPI1-false-HAL-true,14-MX_ADC1_Init-ADC1-false-HAL-true,15-MX_USART2_UART_Init-USART2-false-HAL-true,16-MX_IWDG_Init-IWDG-false-HAL-true +RCC.48MHZClocksFreq_Value=48000000 +RCC.AHBFreq_Value=144000000 +RCC.APB1CLKDivider=RCC_HCLK_DIV4 +RCC.APB1Freq_Value=36000000 +RCC.APB1TimFreq_Value=72000000 +RCC.APB2CLKDivider=RCC_HCLK_DIV2 +RCC.APB2Freq_Value=72000000 +RCC.APB2TimFreq_Value=144000000 +RCC.CortexFreq_Value=144000000 +RCC.EthernetFreq_Value=144000000 +RCC.FCLKCortexFreq_Value=144000000 +RCC.FamilyName=M +RCC.HCLKFreq_Value=144000000 +RCC.HSE_VALUE=8000000 +RCC.HSI_VALUE=16000000 +RCC.I2SClocksFreq_Value=64000000 +RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSE_VALUE,LSI_VALUE,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLI2SN,PLLM,PLLN,PLLQ,PLLQCLKFreq_Value,PLLSourceVirtual,RCC_MCO1Source,RCC_MCO2Source,RCC_MCODiv1,RCC_MCODiv2,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S +RCC.LSE_VALUE=32768 +RCC.LSI_VALUE=32000 +RCC.MCO1PinFreq_Value=36000000 +RCC.MCO2PinFreq_Value=16000000 +RCC.PLLCLKFreq_Value=144000000 +RCC.PLLI2SN=64 +RCC.PLLM=4 +RCC.PLLN=144 +RCC.PLLQ=6 +RCC.PLLQCLKFreq_Value=48000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.RCC_MCO1Source=RCC_MCO1SOURCE_PLLCLK +RCC.RCC_MCO2Source=RCC_MCO2SOURCE_PLLI2SCLK +RCC.RCC_MCODiv1=RCC_MCODIV_4 +RCC.RCC_MCODiv2=RCC_MCODIV_4 +RCC.RTCFreq_Value=32000 +RCC.RTCHSEDivFreq_Value=4000000 +RCC.SYSCLKFreq_VALUE=144000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.VCOI2SOutputFreq_Value=128000000 +RCC.VCOInputFreq_Value=2000000 +RCC.VCOOutputFreq_Value=288000000 +RCC.VcooutputI2S=64000000 +SH.ADCx_IN0.0=ADC1_IN0,IN0 +SH.ADCx_IN0.ConfNb=1 +SH.ADCx_IN1.0=ADC1_IN1,IN1 +SH.ADCx_IN1.ConfNb=1 +SH.ADCx_IN2.0=ADC1_IN2,IN2 +SH.ADCx_IN2.ConfNb=1 +SH.ADCx_IN3.0=ADC1_IN3,IN3 +SH.ADCx_IN3.ConfNb=1 +SH.ADCx_IN8.0=ADC1_IN8,IN8 +SH.ADCx_IN8.ConfNb=1 +SH.ADCx_IN9.0=ADC1_IN9,IN9 +SH.ADCx_IN9.ConfNb=1 +SH.GPXTI0.0=GPIO_EXTI0 +SH.GPXTI0.ConfNb=1 +SH.GPXTI4.0=GPIO_EXTI4 +SH.GPXTI4.ConfNb=1 +SH.S_TIM3_CH3.0=TIM3_CH3,PWM Generation3 CH3 +SH.S_TIM3_CH3.ConfNb=1 +SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_128 +SPI1.CalculateBaudRate=562.5 KBits/s +SPI1.Direction=SPI_DIRECTION_2LINES +SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler +SPI1.Mode=SPI_MODE_MASTER +SPI1.VirtualType=VM_MASTER +TIM1.IPParameters=Period,Prescaler +TIM1.Period=9999 +TIM1.Prescaler=143 +TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM3.IPParameters=Prescaler,Period,Channel-PWM Generation3 CH3 +TIM3.Period=9999 +TIM3.Prescaler=143 +TIM6.IPParameters=Prescaler +TIM6.Prescaler=71 +TIM7.IPParameters=Prescaler +TIM7.Prescaler=81 +USART1.BaudRate=460800 +USART1.IPParameters=VirtualMode,BaudRate +USART1.VirtualMode=VM_ASYNC +USART2.BaudRate=19200 +USART2.IPParameters=VirtualMode,BaudRate +USART2.VirtualMode=VM_ASYNC +USART3.BaudRate=19200 +USART3.IPParameters=VirtualMode,BaudRate,StopBits +USART3.StopBits=STOPBITS_2 +USART3.VirtualMode=VM_ASYNC +VP_CRC_VS_CRC.Mode=CRC_Activate +VP_CRC_VS_CRC.Signal=CRC_VS_CRC +VP_FREERTOS_VS_CMSIS_V1.Mode=CMSIS_V1 +VP_FREERTOS_VS_CMSIS_V1.Signal=FREERTOS_VS_CMSIS_V1 +VP_IWDG_VS_IWDG.Mode=IWDG_Activate +VP_IWDG_VS_IWDG.Signal=IWDG_VS_IWDG +VP_RNG_VS_RNG.Mode=RNG_Activate +VP_RNG_VS_RNG.Signal=RNG_VS_RNG +VP_SYS_VS_tim11.Mode=TIM11 +VP_SYS_VS_tim11.Signal=SYS_VS_tim11 +VP_TIM1_VS_ClockSourceINT.Mode=Internal +VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT +VP_TIM3_VS_ClockSourceINT.Mode=Internal +VP_TIM3_VS_ClockSourceINT.Signal=TIM3_VS_ClockSourceINT +VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT +VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT +board=custom +rtos.0.ip=FREERTOS +isbadioc=false diff --git a/large_space_disinfection__power_control_board.launch b/large_space_disinfection__power_control_board.launch new file mode 100644 index 0000000..34468c0 --- /dev/null +++ b/large_space_disinfection__power_control_board.launch @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/usrc/base/hardware.cpp b/usrc/base/hardware.cpp index e6f7310..90def62 100644 --- a/usrc/base/hardware.cpp +++ b/usrc/base/hardware.cpp @@ -3,6 +3,7 @@ #include "adc.h" #include "tim.h" #include "zsdk/hmp110/hmp110.hpp" +#include "zsdk/hpp272/hpp272.hpp" #include "zsdk/zcanreceiver/zcanreceiver.hpp" #define TAG "HARD" using namespace iflytop; @@ -14,74 +15,130 @@ using namespace iflytop; static osThreadId H2O2CaptureThreadId; static osThreadId AdcCaptureThreadId; -// MINI_PWM 鼓风机 -static TIM_HandleTypeDef* m_miniPwmBlower_htim; -static uint32_t m_miniPwmBlower_channle; -static ZGPIO m_miniPwmBlower_enGpio; -static ZGPIO m_miniPwmBlower_fbGpio; - // 加热片控制 -static ZGPIO m_Heater_ctrlGpio; -static ZGPIO m_Heater_safeCtrlGpio; -static ZADC m_Heater_electricCurrentAdc; -static ZADC m_Heater_temperatureAdc; +ZGPIO m_Heater_ctrlGpio; +ZGPIO m_Heater_safeCtrlGpio; +ZADC m_Heater_electricCurrentAdc; +ZADC m_Heater_temperatureAdc; + +// 鼓风机 +ZGPIO m_Blowser_ctrlGpio; +ZGPIO m_Blowser_safeCtrlGpio; +ZADC m_Blowser_electricCurrentAdc; + +// 空压机 +ZGPIO m_AirCompressor_ctrlGpio; +ZGPIO m_AirCompressor_safeCtrlGpio; +ZADC m_AirCompressor_electricCurrentAdc; // H2O2过氧化氢 -static ModbusBlockHost m_H2o2Sensor_TempSensorModbusBlockHost; // -static ZADC m_H2o2Sensor_H2O2Adc; // H2O2传感器控制 -static HMP110 m_H2o2Sensor_HMP110; // H2O2传感器 -static int32_t m_hmp100_detectId = -1; +#ifdef H2O2_SENSOR_TYPE_HMP110 +static ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; // +static ZADC m_H2o2Sensor_H2O2Adc; // H2O2传感器控制 +static HMP110 m_H2o2Sensor_HMP110; // H2O2传感器 +static int32_t m_h2o2sensor_detectId = -1; + +#endif + +#ifdef H2O2_SENSOR_TYPE_HPP272 +static ModbusBlockHost m_H2o2Sensor_ModbusBlockHost; // +static HPP272 m_H2o2Sensor_HPP272; // H2O2传感器 +static int32_t m_h2o2sensor_detectId = -1; +#endif + +/*********************************************************************************************************************** + * FUNC * + ***********************************************************************************************************************/ static void onAdcCaptureThreadId(void const* argument) { while (1) { osDelay(30); - m_Heater_electricCurrentAdc.updateAdcValToCache(); - m_Heater_temperatureAdc.updateAdcValToCache(); + // m_Heater_electricCurrentAdc.updateAdcValToCache(); + // m_Heater_temperatureAdc.updateAdcValToCache(); + // m_Blowser_electricCurrentAdc.updateAdcValToCache(); + // m_AirCompressor_electricCurrentAdc.updateAdcValToCache(); } } static void onH2O2CaptureThreadId(void const* argument) { while (1) { osDelay(1000); - if (m_hmp100_detectId > 0) { + +#ifdef H2O2_SENSOR_TYPE_HMP110 + if (m_h2o2sensor_detectId > 0) { m_H2o2Sensor_H2O2Adc.updateAdcValToCache(); m_H2o2Sensor_HMP110.updateSensorDataAndErrorcode(); - - // float mv = adcv / 4095.0 * 3.3 * 1000; - // float ma = mv / 150.0; - // float ppm = (ma - 4) / (20 - 4) * 2000; } +#endif } } void Hardware::init() { - m_miniPwmBlower_htim = &htim3; - m_miniPwmBlower_channle = TIM_CHANNEL_3; - m_miniPwmBlower_enGpio.initAsOutput(PC10, kxs_gpio_nopull, true, false); - m_miniPwmBlower_fbGpio.initAsInput(PC9, kxs_gpio_nopull, kxs_gpio_rising_irq, false); + /*********************************************************************************************************************** + * 加热片 * + ***********************************************************************************************************************/ + m_Heater_ctrlGpio.initAsOutput(HEATER_CTRL_GPIO, kxs_gpio_nopull, true, false); + m_Heater_safeCtrlGpio.initAsOutput(HEATER_SAFE_CTRL_GPIO, kxs_gpio_nopull, true, false); + m_Heater_electricCurrentAdc.initialize(&hadc1, HEATER_ELECTRIC_CURRENT_ADC_CH); + m_Heater_temperatureAdc.initialize(&hadc1, HEATER_TEMPERATURE_ADC_CH); + /*********************************************************************************************************************** + * 鼓风机 * + ***********************************************************************************************************************/ - m_Heater_ctrlGpio.initAsOutput(PC6, kxs_gpio_nopull, true, false); - m_Heater_safeCtrlGpio.initAsOutput(PC7, kxs_gpio_nopull, true, false); - // m_Heater_electricCurrentAdc.initialize(&hadc1, ADC_CHANNEL_0); //暂时注释掉,板子少了一个ADC,该ADC用于H2O2浓度 - m_Heater_temperatureAdc.initialize(&hadc1, ADC_CHANNEL_1); // PA0 + m_Blowser_ctrlGpio.initAsOutput(BLOWER_CTRL_GPIO, kxs_gpio_nopull, true, false); + m_Blowser_safeCtrlGpio.initAsOutput(BLOWER_SAFE_CTRL_GPIO, kxs_gpio_nopull, true, false); + m_Blowser_electricCurrentAdc.initialize(&hadc1, BLOWER_ELECTRIC_CURRENT_ADC_CH); - ZASSERT(huart2.Init.BaudRate == 19200); - m_H2o2Sensor_TempSensorModbusBlockHost.initialize(&huart2); - m_H2o2Sensor_H2O2Adc.initialize(&hadc1, ADC_CHANNEL_0); // PA0 - m_H2o2Sensor_HMP110.init(&m_H2o2Sensor_TempSensorModbusBlockHost); + /*********************************************************************************************************************** + * 空压机 * + ***********************************************************************************************************************/ + m_AirCompressor_ctrlGpio.initAsOutput(AIRCOMPRESSOR_CTRL_GPIO, kxs_gpio_nopull, true, false); + m_AirCompressor_safeCtrlGpio.initAsOutput(AIRCOMPRESSOR_SAFE_CTRL_GPIO, kxs_gpio_nopull, true, false); + m_AirCompressor_electricCurrentAdc.initialize(&hadc1, AIRCOMPRESSOR_ELECTRIC_CURRENT_ADC_CH); + /*********************************************************************************************************************** + * H2O2传感器 * + ***********************************************************************************************************************/ /** * @brief 探测HMP110 */ osDelay(2000); // 等待传感器上电 + +#ifdef H2O2_SENSOR_TYPE_HMP110 + + ZASSERT(huart2.Init.BaudRate == 19200); + m_H2o2Sensor_ModbusBlockHost.initialize(&huart2); + m_H2o2Sensor_H2O2Adc.initialize(&hadc1, ADC_CHANNEL_0); // PA0 + m_H2o2Sensor_HMP110.init(&m_H2o2Sensor_ModbusBlockHost); + if (m_H2o2Sensor_HMP110.ping(1)) { - m_hmp100_detectId = 1; + m_h2o2sensor_detectId = 1; } if (m_H2o2Sensor_HMP110.ping(240)) { - m_hmp100_detectId = 240; + m_h2o2sensor_detectId = 240; } - m_H2o2Sensor_HMP110.setid(m_hmp100_detectId); - ZLOGI(TAG, "H2O2 Sensor detect id: %d", m_hmp100_detectId); + m_H2o2Sensor_HMP110.setid(m_h2o2sensor_detectId); + ZLOGI(TAG, "H2O2 HMP110 Sensor detect id: %d", m_h2o2sensor_detectId); +#endif + +#ifdef H2O2_SENSOR_TYPE_HPP272 + + ZASSERT(huart3.Init.BaudRate == 19200); + ZASSERT(huart3.Init.StopBits == UART_STOPBITS_2); + m_H2o2Sensor_ModbusBlockHost.initialize(&huart3); + m_H2o2Sensor_HPP272.init(&m_H2o2Sensor_ModbusBlockHost); + + if (m_H2o2Sensor_HPP272.ping(1)) { + m_h2o2sensor_detectId = 1; + } + if (m_H2o2Sensor_HPP272.ping(240)) { + m_h2o2sensor_detectId = 240; + } + + m_H2o2Sensor_HPP272.setid(m_h2o2sensor_detectId); + ZLOGI(TAG, "H2O2 HPP272 Sensor detect id: %d", m_h2o2sensor_detectId); + +#endif osThreadDef(AdcCaptureThread, onAdcCaptureThreadId, osPriorityNormal, 0, 1024); AdcCaptureThreadId = osThreadCreate(osThread(AdcCaptureThread), NULL); @@ -93,62 +150,62 @@ void Hardware::init() { /*********************************************************************************************************************** * FUMP_IMPL * ***********************************************************************************************************************/ -void Hardware::mini_pwm_blower_ctrl(int32_t duty) { - duty = 100 - duty; - if (duty < 0) duty = 0; - if (duty > 100) duty = 100; - - TIM_OC_InitTypeDef sConfigOC = {0}; - sConfigOC.OCMode = TIM_OCMODE_PWM1; - sConfigOC.Pulse = duty / 100.0 * __HAL_TIM_GET_AUTORELOAD(m_miniPwmBlower_htim); - sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; - sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; - sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; - sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; - - HAL_TIM_PWM_ConfigChannel(m_miniPwmBlower_htim, &sConfigOC, m_miniPwmBlower_channle); - HAL_TIM_PWM_Stop(m_miniPwmBlower_htim, m_miniPwmBlower_channle); - HAL_TIM_PWM_Start(m_miniPwmBlower_htim, m_miniPwmBlower_channle); - - m_miniPwmBlower_enGpio.write(duty != 0); -} -int32_t Hardware::mini_pwm_blower_read_fbcount() { // - return 0; -} - void Hardware::heater_ctrl(int32_t val) { m_Heater_ctrlGpio.write(val); } void Hardware::heater_ctrl_safe_valve(int32_t val) { m_Heater_safeCtrlGpio.write(val); } int32_t Hardware::heater_read_electric_current() { - // float mv = adcv / 4095.0 * 3.3 * 1000; - // float ma = mv / 150.0; int32_t adcv = m_Heater_electricCurrentAdc.getCacheVal(); int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0; return ma; } int32_t Hardware::heater_read_temperature_data() { - // float mv = adcv / 4095.0 * 3.3 * 1000; - // float ma = mv / 150.0; - // float ppm = (ma - 4) / (20 - 4) * 2000; int32_t adcv = m_Heater_temperatureAdc.getCacheVal(); int32_t ma = (adcv / 4095.0 * 3.3 * 1000) / 150.0; int32_t temp = (ma - 4) / (20 - 4) * (3000 - 0) + 0; return temp; // C*10 } +/*********************************************************************************************************************** + * H2O2 * + ***********************************************************************************************************************/ + bool Hardware::h2o2_sensor_is_online() { - if (m_hmp100_detectId <= 0) { - return false; - } +#ifdef H2O2_SENSOR_TYPE_HMP110 + if (m_h2o2sensor_detectId <= 0) return false; int32_t ecode = m_H2o2Sensor_HMP110.read_cache_errorcode(); - if (ecode == -1) { - return false; - } + if (ecode == -1) return false; +#endif + +#ifdef H2O2_SENSOR_TYPE_HPP272 + if (m_h2o2sensor_detectId <= 0) return false; + int32_t ecode = m_H2o2Sensor_HPP272.read_cache_errorcode(); + if (ecode == -1) return false; +#endif + return true; } -int32_t Hardware::h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day) { return 0; } -int32_t Hardware::h2o2_sensor_read_sub_ic_errorcode() { return m_H2o2Sensor_HMP110.read_cache_errorcode(); } -int32_t Hardware::h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len) { return m_H2o2Sensor_HMP110.read_reg(add, val, len); } +int32_t Hardware::h2o2_sensor_read_calibration_date(int32_t* year, int32_t* month, int32_t* day) { // + return 0; +} +int32_t Hardware::h2o2_sensor_read_sub_ic_errorcode() { // +#ifdef H2O2_SENSOR_TYPE_HPP272 + return m_H2o2Sensor_HPP272.read_cache_errorcode(); +#endif + +#ifdef H2O2_SENSOR_TYPE_HMP110 + return m_H2o2Sensor_HMP110.read_cache_errorcode(); +#endif +} +int32_t Hardware::h2o2_sensor_read_sub_ic_reg(int32_t add, uint16_t* val, size_t len) { // +#ifdef H2O2_SENSOR_TYPE_HPP272 + return m_H2o2Sensor_HPP272.read_reg(add, val, len); +#endif + +#ifdef H2O2_SENSOR_TYPE_HMP110 + return m_H2o2Sensor_HMP110.read_reg(add, val, len); +#endif +} int32_t Hardware::h2o2_sensor_data(report_h2o2_data_t* readdata) { +#ifdef H2O2_SENSOR_TYPE_HMP110 int32_t ecode = m_H2o2Sensor_HMP110.read_cache_errorcode(); int32_t h2o2adcVal = m_H2o2Sensor_H2O2Adc.getCacheVal(); HMP110::hmp110_sensordata_t sensordata; @@ -178,4 +235,26 @@ int32_t Hardware::h2o2_sensor_data(report_h2o2_data_t* readdata) { sensordata.enthalpy); return 0; +#endif +#ifdef H2O2_SENSOR_TYPE_HPP272 + + int32_t ecode = m_H2o2Sensor_HPP272.read_cache_errorcode(); + HPP272::hpp272_data_t sensordata; + m_H2o2Sensor_HPP272.read_cache_sensor_data(&sensordata); + + readdata->subid = 0; + readdata->sensor_error = ecode != 0; + readdata->h2o2 = sensordata.hydrogen_peroxide_volume / 10.0; + readdata->humid = sensordata.relative_humidity / 10.0; + readdata->temp = sensordata.temperature1 / 10.0; + readdata->saturation = sensordata.h2o_h2o2_rs / 10.0; + + ZLOGI(TAG, "h2o2 %d, humid %d, temp %d, sat %d", + sensordata.hydrogen_peroxide_volume / 10, // + sensordata.relative_humidity / 10, // + sensordata.temperature1 / 10, // + sensordata.h2o_h2o2_rs / 10); + + return 0; +#endif } \ No newline at end of file diff --git a/usrc/base/hardware.hpp b/usrc/base/hardware.hpp index b69591f..c3b2bd4 100644 --- a/usrc/base/hardware.hpp +++ b/usrc/base/hardware.hpp @@ -15,6 +15,8 @@ void hardware_init(); namespace iflytop { class Hardware { + + public: static Hardware& ins() { static Hardware ins; diff --git a/usrc/project_configs.h b/usrc/project_configs.h index 1fe6536..d822788 100644 --- a/usrc/project_configs.h +++ b/usrc/project_configs.h @@ -2,6 +2,15 @@ #include "iflytop_canbus_protocol/iflytop_canbus_protocol.hpp" /*********************************************************************************************************************** + * SDK_CONFIG * + ***********************************************************************************************************************/ +#define SDK_DELAY_US_TIMER htim6 // 微秒延迟定时器,注意该延时定时器需要按照以下文档进行配置 http://192.168.1.3:3000/zwikipedia/iflytop_wikipedia/src/branch/master/doc/stm32cubemx_us_timer.md +#define SDK_IRQ_PREEMPTPRIORITY_DEFAULT 5 // IO中断默认中断等级 +#define SDK_CFG__CFG_FLASH_ADDR 0x080C0000 // +#define SDK_CFG__SN_FLASH_ADDR 0x080E0000 // +#define SDK_MAX_TASK 10 + +/*********************************************************************************************************************** * PROJECT_CONFIG * ***********************************************************************************************************************/ @@ -9,29 +18,28 @@ * @brief 基础配置 * */ -#define SOFTWARE_VERSION 2 -#define HARDWARE_VERSION 1 -#define PROJECT "dbdb_power_control_mini_board" -#define SN_HEADER "SN" -#define DEVICE_ID (kFixBoardId_PowerControlMiniBoard) -#define DEBUG_UART huart1 // 调试串口 -#define DEBUG_LIGHT_GPIO PE8 // 调试指示灯 +#define SOFTWARE_VERSION 1 // 软件版本 +#define HARDWARE_VERSION 1 // 硬件版本 +#define PROJECT "large_space_disinfection__power_control_board" // 工程名称 +#define SN_HEADER "SN" // SN号前缀 +#define DEVICE_ID (kFixBoardId_PowerControl) // 设备ID +#define PROJECT_ID klarge_space_disinfection_machine // 项目ID +#define BOARD_TYPE kBoardType_PowerControl // 板子类型 +#define DEBUG_UART huart1 // 调试串口 +#define DEBUG_LIGHT_GPIO PE8 // 调试指示灯 -/** - * @brief 驱动器配置 - */ -#define MOTOR_SPI hspi1 -#define MOTOR_CH(n) (n) -#define MOTOR2_CSN PA4 // -#define MOTOR2_ENN PE11 -#define MOTOR1_CSN PC4 // -#define MOTOR1_ENN PE12 +#define HEATER_CTRL_GPIO PC6 +#define HEATER_SAFE_CTRL_GPIO PC7 +#define HEATER_ELECTRIC_CURRENT_ADC_CH ADC_CHANNEL_0 +#define HEATER_TEMPERATURE_ADC_CH ADC_CHANNEL_8 -/*********************************************************************************************************************** - * SDK_CONFIG * - ***********************************************************************************************************************/ -#define SDK_DELAY_US_TIMER htim6 // 微秒延迟定时器,注意该延时定时器需要按照以下文档进行配置 http://192.168.1.3:3000/zwikipedia/iflytop_wikipedia/src/branch/master/doc/stm32cubemx_us_timer.md -#define SDK_IRQ_PREEMPTPRIORITY_DEFAULT 5 // IO中断默认中断等级 -#define SDK_CFG__CFG_FLASH_ADDR 0x080C0000 // -#define SDK_CFG__SN_FLASH_ADDR 0x080E0000 // -#define SDK_MAX_TASK 10 \ No newline at end of file +#define BLOWER_CTRL_GPIO PC4 +#define BLOWER_SAFE_CTRL_GPIO PC5 +#define BLOWER_ELECTRIC_CURRENT_ADC_CH ADC_CHANNEL_1 + +#define AIRCOMPRESSOR_CTRL_GPIO PC2 +#define AIRCOMPRESSOR_SAFE_CTRL_GPIO PC3 +#define AIRCOMPRESSOR_ELECTRIC_CURRENT_ADC_CH ADC_CHANNEL_2 + +#define H2O2_SENSOR_TYPE_HPP272 +// #define H2O2_SENSOR_TYPE_HMP110 diff --git a/usrc/protocol_impl/basic/fn_mgr.cpp b/usrc/protocol_impl/basic/fn_mgr.cpp new file mode 100644 index 0000000..d73a580 --- /dev/null +++ b/usrc/protocol_impl/basic/fn_mgr.cpp @@ -0,0 +1,28 @@ +#include "fn_mgr.hpp" + +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 new file mode 100644 index 0000000..1b16dd6 --- /dev/null +++ b/usrc/protocol_impl/basic/fn_mgr.hpp @@ -0,0 +1,35 @@ +#include +#include + +#include "base/config_service.hpp" +#include "zsdk/zsdk.hpp" + +/*********************************************************************************************************************** + * MARCO * + ***********************************************************************************************************************/ + +#define CHECK_PARAM_LEN(_paramNum, expectNum) \ + if (_paramNum != expectNum) { \ + zcanbus_send_errorack(packet, kerr_invalid_param_num); \ + return; \ + } + +#define CHECK_MOTOR_INDEX(_subindex) \ + if (_subindex > Hardware::ins().motorNum()) { \ + zcanbus_send_errorack(packet, kerr_invalid_param); \ + return; \ + } +#define GET_PARAM(buff, off) ((((int32_t*)(buff))[off])) +#define PARAM_LEN() ((len - sizeof(zcanbus_packet_t)) / 4) + +#define ZCLEAR_BIT(val, bit) (val &= ~(1 << bit)) +#define ZSET_BIT(val, bit) (val |= (1 << bit)) + +/*********************************************************************************************************************** + * FUNC * + ***********************************************************************************************************************/ + +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/usrc/protocol_impl/basic/report_flag_mgr.cpp b/usrc/protocol_impl/basic/report_flag_mgr.cpp new file mode 100644 index 0000000..ee889d2 --- /dev/null +++ b/usrc/protocol_impl/basic/report_flag_mgr.cpp @@ -0,0 +1,16 @@ +#include "report_flag_mgr.hpp" +using namespace iflytop; + +ForceReportFlagMgr* ForceReportFlagMgr::ins() { + static ForceReportFlagMgr instance; + return &instance; +} + +void ForceReportFlagMgr::init() { + m_lock.init(); + memset(&m_flag, 0, sizeof(m_flag)); +} +void ForceReportFlagMgr::trigger() { + zlock_guard lock(m_lock); + memset(&m_flag, 1, sizeof(m_flag)); +} \ No newline at end of file diff --git a/usrc/protocol_impl/basic/report_flag_mgr.hpp b/usrc/protocol_impl/basic/report_flag_mgr.hpp new file mode 100644 index 0000000..275416b --- /dev/null +++ b/usrc/protocol_impl/basic/report_flag_mgr.hpp @@ -0,0 +1,32 @@ +#include +#include +#include + +#include "base/config_service.hpp" +#include "zsdk/zsdk.hpp" + +namespace iflytop { + +class ForceReportFlagMgr { + private: + typedef struct { + bool pad; + } flag_t; + + zmutex m_lock; + flag_t m_flag; + + public: + static ForceReportFlagMgr* ins(); + + void init(); + + void trigger(); + + void clearPad() { + zlock_guard lock(m_lock); + m_flag.pad = false; + } +}; + +} // namespace iflytop diff --git a/usrc/protocol_impl/function_impl/afunction_impl.hpp b/usrc/protocol_impl/function_impl/afunction_impl.hpp new file mode 100644 index 0000000..19fe2d2 --- /dev/null +++ b/usrc/protocol_impl/function_impl/afunction_impl.hpp @@ -0,0 +1,35 @@ +#pragma once +#include +#include + +#include "../basic/fn_mgr.hpp" +#include "../basic/report_flag_mgr.hpp" +// +#include "base/device_info.hpp" +#include "base/hardware.hpp" +#include "zsdk/modbus/modbus_block_host.hpp" +#include "zsdk/zcanreceiver/zcanreceiver.hpp" + +/*********************************************************************************************************************** + * basic_fn * + ***********************************************************************************************************************/ + +void fn_cmd_read_board_info(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_read_sysinfo(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_read_taskinfo(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_heart_ping(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_clear_reset_flag(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); + +void basic_fn_init(); + +void fn_cmd_heater_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_heater_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_heater_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_heater_read_temperature_data(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); + +void heater_fn_impl_init(); + +void fn_cmd_h2o2_sensor_read_calibration_date(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_h2o2_sensor_read_sub_ic_errorcode(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void fn_cmd_h2o2_sensor_read_sub_ic_reg(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len); +void h2o2_fn_impl_init(); diff --git a/usrc/protocol_impl/function_impl/basic_fn.cpp b/usrc/protocol_impl/function_impl/basic_fn.cpp new file mode 100644 index 0000000..cd31bce --- /dev/null +++ b/usrc/protocol_impl/function_impl/basic_fn.cpp @@ -0,0 +1,91 @@ + +#include "afunction_impl.hpp" +using namespace iflytop; + +static uint8_t m_boardflag; // 0: 重启标志 + +/** + * @brief 读取板子信息 + * + * @param from + * @param to + * @param packet + * @param len + */ +void fn_cmd_read_board_info(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + 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)); +} +/** + * @brief 读取系统信息 + * + * @param from + * @param to + * @param packet + * @param len + */ +void fn_cmd_read_sysinfo(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + 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)); +} +/** + * @brief 读取线程信息 + * + * @param from + * @param to + * @param packet + * @param len + */ +void fn_cmd_read_taskinfo(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + 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)); +} +/** + * @brief PING + * + * @param from + * @param to + * @param packet + * @param len + */ +void fn_cmd_heart_ping(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + static report_heatpacket_data_t heatpacket; + heatpacket.boardType = deviceInfo_getBoardType(); + heatpacket.heartIndex = GET_PARAM(packet->params, 0); + heatpacket.flag = m_boardflag; + zcanbus_send_report(kreport_heatpacket_pong, (uint8_t*)&heatpacket, sizeof(heatpacket), 30); +} +/** + * @brief 清除板子复位标志位 + * + * @param from + * @param to + * @param packet + * @param len + */ +void fn_cmd_clear_reset_flag(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + ZCLEAR_BIT(m_boardflag, 0); + zcanbus_send_ack(packet, NULL, 0); +} + +void basic_fn_init() { + m_boardflag = 0x00; + ZSET_BIT(m_boardflag, 0); +} \ No newline at end of file diff --git a/usrc/protocol_impl/function_impl/h2o2_fn_impl.cpp b/usrc/protocol_impl/function_impl/h2o2_fn_impl.cpp new file mode 100644 index 0000000..1746578 --- /dev/null +++ b/usrc/protocol_impl/function_impl/h2o2_fn_impl.cpp @@ -0,0 +1,43 @@ + +#include "afunction_impl.hpp" +using namespace iflytop; + +#define TAG "PROTO-H2O2" +static osTimerId PacketReportTimerId; + +static void onPacketReportTimer(void const* argument) { + static report_h2o2_data_t data; + memset(&data, 0, sizeof(data)); + Hardware::ins().h2o2_sensor_data(&data); + zcanbus_send_report(kreport_h2o2_sensor_data, (uint8_t*)&data, sizeof(data), 30); +} + +void fn_cmd_h2o2_sensor_read_calibration_date(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + CHECK_PARAM_LEN(PARAM_LEN(), 1); + int32_t subic = GET_PARAM(packet->params, 0); + int32_t data[3]; + Hardware::ins().h2o2_sensor_read_calibration_date(&data[0], &data[1], &data[2]); + zcanbus_send_ack(packet, (uint8_t*)&data, sizeof(data)); +} +void fn_cmd_h2o2_sensor_read_sub_ic_errorcode(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + int32_t ecode = Hardware::ins().h2o2_sensor_read_sub_ic_errorcode(); + zcanbus_send_ack(packet, (uint8_t*)&ecode, sizeof(ecode)); +} +void fn_cmd_h2o2_sensor_read_sub_ic_reg(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + CHECK_PARAM_LEN(PARAM_LEN(), 3); + int32_t subic = GET_PARAM(packet->params, 0); + int32_t addr = GET_PARAM(packet->params, 1); + int32_t regNum = GET_PARAM(packet->params, 2); + if (regNum > 10) regNum = 10; // 最多读10个寄存器 + static uint16_t data[10]; + memset(data, 0, sizeof(data)); + + Hardware::ins().h2o2_sensor_read_sub_ic_reg(addr, data, regNum); + zcanbus_send_ack(packet, (uint8_t*)&data, regNum * 2); +} + +void h2o2_fn_impl_init() { + osTimerDef(PacketReportTimer, onPacketReportTimer); + PacketReportTimerId = osTimerCreate(osTimer(PacketReportTimer), osTimerPeriodic, NULL); + osTimerStart(PacketReportTimerId, 5000); +} diff --git a/usrc/protocol_impl/function_impl/heater_fn_impl.cpp b/usrc/protocol_impl/function_impl/heater_fn_impl.cpp new file mode 100644 index 0000000..e8e546b --- /dev/null +++ b/usrc/protocol_impl/function_impl/heater_fn_impl.cpp @@ -0,0 +1,29 @@ + +#include "afunction_impl.hpp" +using namespace iflytop; + +#define TAG "PROTO-HEATER" + +void fn_cmd_heater_ctrl(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + CHECK_PARAM_LEN(PARAM_LEN(), 1); + Hardware::ins().heater_ctrl(GET_PARAM(packet->params, 0)); + zcanbus_send_ack(packet, NULL, 0); +} + +void fn_cmd_heater_ctrl_safe_valve(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + CHECK_PARAM_LEN(PARAM_LEN(), 1); + Hardware::ins().heater_ctrl_safe_valve(GET_PARAM(packet->params, 0)); + zcanbus_send_ack(packet, NULL, 0); +} + +void fn_cmd_heater_read_electric_current(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + int32_t current = Hardware::ins().heater_read_electric_current(); + zcanbus_send_ack(packet, (uint8_t*)¤t, sizeof(current)); +} + +void fn_cmd_heater_read_temperature_data(uint8_t from, uint8_t to, zcanbus_packet_t* packet, size_t len) { + int32_t temp = Hardware::ins().heater_read_temperature_data(); + zcanbus_send_ack(packet, (uint8_t*)&temp, sizeof(temp)); +} + +void heater_fn_impl_init() {} \ No newline at end of file diff --git a/usrc/protocol_impl/protocol_impl_service.cpp b/usrc/protocol_impl/protocol_impl_service.cpp index c7b0e0f..db1aae3 100644 --- a/usrc/protocol_impl/protocol_impl_service.cpp +++ b/usrc/protocol_impl/protocol_impl_service.cpp @@ -1,231 +1,30 @@ #include "protocol_impl_service.hpp" -#include "base/device_info.hpp" -#include "base/hardware.hpp" -#include "report_flag_mgr.hpp" -#include "zsdk/modbus/modbus_block_host.hpp" -#include "zsdk/zcanreceiver/zcanreceiver.hpp" +#include "function_impl/afunction_impl.hpp" + #define TAG "PROTO" using namespace iflytop; -/*********************************************************************************************************************** - * FUNCTION_LIST * - ***********************************************************************************************************************/ - -#define CHECK_PARAM_LEN(_paramNum, expectNum) \ - if (_paramNum != expectNum) { \ - zcanbus_send_errorack(packet, kerr_invalid_param_num); \ - return true; \ - } - -#define CHECK_MOTOR_INDEX(_subindex) \ - if (_subindex > Hardware::ins().motorNum()) { \ - zcanbus_send_errorack(packet, kerr_invalid_param); \ - return true; \ - } -#define GET_PARAM(buff, off) ((((int32_t*)(buff))[off])) - -#define ZCLEAR_BIT(val, bit) (val &= ~(1 << bit)) -#define ZSET_BIT(val, bit) (val |= (1 << bit)) /*********************************************************************************************************************** * VAR_LIST * ***********************************************************************************************************************/ -static osTimerId PacketReportTimerId; static osThreadId PacketRxThreadId; -static osTimerId PressureSensorDataReportTimerId; // 压力传感器数值上报 -static uint32_t m_pressureSensorDataReportPeriodMs = 3000; - -static osTimerId MotorMonitorTimerId; // 压力传感器数值上报 - -static uint8_t m_dflag; - -/*********************************************************************************************************************** - * FUNCTION_IMPL * - ***********************************************************************************************************************/ - -static bool basic_func_impl(uint8_t from, uint8_t to, uint8_t* rawpacket, size_t len) { - zcanbus_packet_t* packet = (zcanbus_packet_t*)rawpacket; - int32_t paramLen = (len - sizeof(zcanbus_packet_t)) / 4; - - // 读板子信息 - 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)); - return true; - } - - // 读系统信息 - 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)); - return true; - - } - - // 读任务信息 - 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)); - return true; - - } - // 心跳 ping pong - 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); - heatpacket.flag = m_dflag; - zcanbus_send_report(kreport_heatpacket_pong, (uint8_t*)&heatpacket, sizeof(heatpacket), 30); - return true; - - } - - else if (packet->function_id == kcmd_clear_reset_flag) { - ZCLEAR_BIT(m_dflag, 0); - zcanbus_send_ack(packet, NULL, 0); - return true; - } - // 触发一次强制上报事件 - if (packet->function_id == kcmd_force_report) { - ForceReportFlagMgr::ins()->trigger(); - if (from != 0xff) zcanbus_send_ack(packet, NULL, 0); - return true; - } - return false; -} - -static bool heater_func_impl(uint8_t from, uint8_t to, uint8_t* rawpacket, size_t len) { - zcanbus_packet_t* packet = (zcanbus_packet_t*)rawpacket; - int32_t paramNum = (len - sizeof(zcanbus_packet_t)) / 4; - // 加热棒 - if (packet->function_id == kcmd_heater_ctrl) { - CHECK_PARAM_LEN(paramNum, 1); - Hardware::ins().heater_ctrl(GET_PARAM(packet->params, 0)); - zcanbus_send_ack(packet, NULL, 0); - return true; - } - - else if (packet->function_id == kcmd_heater_ctrl_safe_valve) { - CHECK_PARAM_LEN(paramNum, 1); - Hardware::ins().heater_ctrl_safe_valve(GET_PARAM(packet->params, 0)); - zcanbus_send_ack(packet, NULL, 0); - return true; - } - - else if (packet->function_id == kcmd_heater_read_electric_current) { - int32_t current = Hardware::ins().heater_read_electric_current(); - zcanbus_send_ack(packet, (uint8_t*)¤t, sizeof(current)); - return true; - } - - else if (packet->function_id == kcmd_heater_read_temperature_data) { - int32_t temp = Hardware::ins().heater_read_temperature_data(); - zcanbus_send_ack(packet, (uint8_t*)&temp, sizeof(temp)); - return true; - } - return false; -} - -static bool h2o2_func_impl(uint8_t from, uint8_t to, uint8_t* rawpacket, size_t len) { - zcanbus_packet_t* packet = (zcanbus_packet_t*)rawpacket; - int32_t paramNum = (len - sizeof(zcanbus_packet_t)) / 4; - // H2O2 - if (packet->function_id == kcmd_h2o2_sensor_read_calibration_date) { - CHECK_PARAM_LEN(paramNum, 1); - int32_t subic = GET_PARAM(packet->params, 0); - int32_t data[3]; - Hardware::ins().h2o2_sensor_read_calibration_date(&data[0], &data[1], &data[2]); - zcanbus_send_ack(packet, (uint8_t*)&data, sizeof(data)); - return true; - } else if (packet->function_id == kcmd_h2o2_sensor_read_sub_ic_errorcode) { - int32_t ecode = Hardware::ins().h2o2_sensor_read_sub_ic_errorcode(); - zcanbus_send_ack(packet, (uint8_t*)&ecode, sizeof(ecode)); - return true; - } else if (packet->function_id == kcmd_h2o2_sensor_read_sub_ic_reg) { - CHECK_PARAM_LEN(paramNum, 3); - int32_t subic = GET_PARAM(packet->params, 0); - int32_t addr = GET_PARAM(packet->params, 1); - int32_t regNum = GET_PARAM(packet->params, 2); - if (regNum > 10) regNum = 10; // 最多读10个寄存器 - static uint16_t data[10]; - memset(data, 0, sizeof(data)); - - Hardware::ins().h2o2_sensor_read_sub_ic_reg(addr, data, regNum); - zcanbus_send_ack(packet, (uint8_t*)&data, regNum * 2); - return true; - } - return false; -} - -static bool others_func_impl(uint8_t from, uint8_t to, uint8_t* rawpacket, size_t len) { - zcanbus_packet_t* packet = (zcanbus_packet_t*)rawpacket; - int32_t paramNum = (len - sizeof(zcanbus_packet_t)) / 4; - - // MINI鼓风机 - if (packet->function_id == kcmd_mini_pwm_blower_ctrl) { - CHECK_PARAM_LEN(paramNum, 1); - Hardware::ins().mini_pwm_blower_ctrl(GET_PARAM(packet->params, 0)); - zcanbus_send_ack(packet, NULL, 0); - return true; - - } - - else if (packet->function_id == kcmd_mini_pwm_blower_read_fbcount) { - int32_t fbcount = Hardware::ins().mini_pwm_blower_read_fbcount(); - zcanbus_send_ack(packet, (uint8_t*)&fbcount, sizeof(fbcount)); - return true; - } - - return false; -} - -/*********************************************************************************************************************** - * SCHEDULER * - ***********************************************************************************************************************/ static void onPacketRxThreadStart(void const* argument) { while (true) { zcanbus_schedule(); osDelay(1); } } -static void onPacketReportTimer(void const* argument) { - static report_h2o2_data_t data; - memset(&data, 0, sizeof(data)); - Hardware::ins().h2o2_sensor_data(&data); - zcanbus_send_report(kreport_h2o2_sensor_data, (uint8_t*)&data, sizeof(data), 30); -} 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, "process packet from %d to %d, function_id %d, len %d", from, to, packet->function_id, len); - - if (basic_func_impl(from, to, rawpacket, len)) { - } else if (heater_func_impl(from, to, rawpacket, len)) { - } else if (h2o2_func_impl(from, to, rawpacket, len)) { - } else if (others_func_impl(from, to, rawpacket, len)) { - } else { + bool processed = fn_map_process(packet->function_id, from, to, rawpacket, len); + if (!processed) { zcanbus_send_errorack(packet, kerr_function_not_support); } - ZLOGI(TAG, "process end"); } @@ -237,23 +36,37 @@ static void zcanbus_on_connected(bool connected) { } } -/*********************************************************************************************************************** - * EXT * - ***********************************************************************************************************************/ - void protocol_impl_service_init() { // Hardware::ins().init(); ForceReportFlagMgr::ins()->init(); - m_dflag = 0x00; - ZSET_BIT(m_dflag, 0); zcanbus_init(deviceInfo_getBoardId()); zcanbus_reglistener(zcanbus_on_rx); zcanbus_reg_on_connected_listener(zcanbus_on_connected); - - osTimerDef(PacketReportTimer, onPacketReportTimer); - PacketReportTimerId = osTimerCreate(osTimer(PacketReportTimer), osTimerPeriodic, NULL); - osTimerStart(PacketReportTimerId, 5000); + + { + basic_fn_init(); + fn_map_reg(kcmd_read_board_info, fn_cmd_read_board_info); + fn_map_reg(kcmd_read_sysinfo, fn_cmd_read_sysinfo); + fn_map_reg(kcmd_read_taskinfo, fn_cmd_read_taskinfo); + fn_map_reg(kcmd_heart_ping, fn_cmd_heart_ping); + fn_map_reg(kcmd_clear_reset_flag, fn_cmd_clear_reset_flag); + } + + { + h2o2_fn_impl_init(); + fn_map_reg(kcmd_h2o2_sensor_read_calibration_date, fn_cmd_h2o2_sensor_read_calibration_date); + fn_map_reg(kcmd_h2o2_sensor_read_sub_ic_errorcode, fn_cmd_h2o2_sensor_read_sub_ic_errorcode); + fn_map_reg(kcmd_h2o2_sensor_read_sub_ic_reg, fn_cmd_h2o2_sensor_read_sub_ic_reg); + } + + { + heater_fn_impl_init(); + fn_map_reg(kcmd_heater_ctrl, fn_cmd_heater_ctrl); + fn_map_reg(kcmd_heater_ctrl_safe_valve, fn_cmd_heater_ctrl_safe_valve); + fn_map_reg(kcmd_heater_read_electric_current, fn_cmd_heater_read_electric_current); + fn_map_reg(kcmd_heater_read_temperature_data, fn_cmd_heater_read_temperature_data); + } osThreadDef(PacketRxThread, onPacketRxThreadStart, osPriorityNormal, 0, 1024); PacketRxThreadId = osThreadCreate(osThread(PacketRxThread), NULL); diff --git a/usrc/protocol_impl/report_flag_mgr.cpp b/usrc/protocol_impl/report_flag_mgr.cpp deleted file mode 100644 index ee889d2..0000000 --- a/usrc/protocol_impl/report_flag_mgr.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "report_flag_mgr.hpp" -using namespace iflytop; - -ForceReportFlagMgr* ForceReportFlagMgr::ins() { - static ForceReportFlagMgr instance; - return &instance; -} - -void ForceReportFlagMgr::init() { - m_lock.init(); - memset(&m_flag, 0, sizeof(m_flag)); -} -void ForceReportFlagMgr::trigger() { - zlock_guard lock(m_lock); - memset(&m_flag, 1, sizeof(m_flag)); -} \ No newline at end of file diff --git a/usrc/protocol_impl/report_flag_mgr.hpp b/usrc/protocol_impl/report_flag_mgr.hpp deleted file mode 100644 index 275416b..0000000 --- a/usrc/protocol_impl/report_flag_mgr.hpp +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include - -#include "base/config_service.hpp" -#include "zsdk/zsdk.hpp" - -namespace iflytop { - -class ForceReportFlagMgr { - private: - typedef struct { - bool pad; - } flag_t; - - zmutex m_lock; - flag_t m_flag; - - public: - static ForceReportFlagMgr* ins(); - - void init(); - - void trigger(); - - void clearPad() { - zlock_guard lock(m_lock); - m_flag.pad = false; - } -}; - -} // namespace iflytop diff --git a/zsdk b/zsdk index d2e04bf..5995529 160000 --- a/zsdk +++ b/zsdk @@ -1 +1 @@ -Subproject commit d2e04bf8ba4c394816866555f3cda296bd664b16 +Subproject commit 59955298ef676c401438a09236f699520d114f86