diff --git a/.cproject b/.cproject
index ee64bc8..5c269f5 100644
--- a/.cproject
+++ b/.cproject
@@ -25,8 +25,8 @@
-
-
+
+
diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml
index 5e8ee27..34e6a9d 100644
--- a/.settings/language.settings.xml
+++ b/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
diff --git a/Core/Inc/stm32f4xx_it.h b/Core/Inc/stm32f4xx_it.h
index cdee066..b8d88d6 100644
--- a/Core/Inc/stm32f4xx_it.h
+++ b/Core/Inc/stm32f4xx_it.h
@@ -60,6 +60,7 @@ void CAN1_TX_IRQHandler(void);
void CAN1_RX0_IRQHandler(void);
void CAN1_RX1_IRQHandler(void);
void CAN1_SCE_IRQHandler(void);
+void USART1_IRQHandler(void);
void USART3_IRQHandler(void);
/* USER CODE BEGIN EFP */
diff --git a/Core/Src/stm32f4xx_it.c b/Core/Src/stm32f4xx_it.c
index 4042caf..b5e63fa 100644
--- a/Core/Src/stm32f4xx_it.c
+++ b/Core/Src/stm32f4xx_it.c
@@ -57,6 +57,7 @@
/* External variables --------------------------------------------------------*/
extern ADC_HandleTypeDef hadc1;
extern CAN_HandleTypeDef hcan1;
+extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart3;
/* USER CODE BEGIN EV */
@@ -271,6 +272,20 @@ void CAN1_SCE_IRQHandler(void)
}
/**
+ * @brief This function handles USART1 global interrupt.
+ */
+void USART1_IRQHandler(void)
+{
+ /* USER CODE BEGIN USART1_IRQn 0 */
+
+ /* USER CODE END USART1_IRQn 0 */
+ HAL_UART_IRQHandler(&huart1);
+ /* USER CODE BEGIN USART1_IRQn 1 */
+
+ /* USER CODE END USART1_IRQn 1 */
+}
+
+/**
* @brief This function handles USART3 global interrupt.
*/
void USART3_IRQHandler(void)
diff --git a/Core/Src/usart.c b/Core/Src/usart.c
index b34f79f..e87c8f0 100644
--- a/Core/Src/usart.c
+++ b/Core/Src/usart.c
@@ -110,6 +110,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ /* USART1 interrupt Init */
+ HAL_NVIC_SetPriority(USART1_IRQn, 0, 0);
+ HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspInit 1 */
/* USER CODE END USART1_MspInit 1 */
@@ -160,6 +163,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
*/
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_9|GPIO_PIN_10);
+ /* USART1 interrupt Deinit */
+ HAL_NVIC_DisableIRQ(USART1_IRQn);
/* USER CODE BEGIN USART1_MspDeInit 1 */
/* USER CODE END USART1_MspDeInit 1 */
diff --git a/little_disinfection_high_power_ctrl_prj Debug.cfg b/little_disinfection_high_power_ctrl_prj Debug.cfg
new file mode 100644
index 0000000..ef37116
--- /dev/null
+++ b/little_disinfection_high_power_ctrl_prj Debug.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/little_disinfection_high_power_ctrl_prj Debug.launch b/little_disinfection_high_power_ctrl_prj Debug.launch
new file mode 100644
index 0000000..e80df3e
--- /dev/null
+++ b/little_disinfection_high_power_ctrl_prj Debug.launch
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/little_disinfection_high_power_ctrl_prj.ioc b/little_disinfection_high_power_ctrl_prj.ioc
index aff356b..9249aa5 100644
--- a/little_disinfection_high_power_ctrl_prj.ioc
+++ b/little_disinfection_high_power_ctrl_prj.ioc
@@ -90,6 +90,7 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
+NVIC.USART1_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.USART3_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA0-WKUP.Locked=true
diff --git a/sdk b/sdk
index 7a8a3c0..f6f7900 160000
--- a/sdk
+++ b/sdk
@@ -1 +1 @@
-Subproject commit 7a8a3c0c76c859f725b97a668bd96d166b245d68
+Subproject commit f6f7900b876e6a4a6b2c5ebe6bd26b5f1b1fbe0a
diff --git a/usrc/hardware.cpp b/usrc/hardware.cpp
index a95b77a..04ac82c 100644
--- a/usrc/hardware.cpp
+++ b/usrc/hardware.cpp
@@ -25,12 +25,6 @@
using namespace iflytop;
#define TAG "main"
-#define PROCESS_CMD(cmd, id) \
- if ((cmdheader->cmdid == (uint16_t)cmd) && (cmdheader->subcmdid == 0) && cmdheader->data[0] == id) { \
- matching = true; \
- } \
- if ((cmdheader->cmdid == (uint16_t)cmd) && (cmdheader->subcmdid == 0) && cmdheader->data[0] == id)
-
ZGPIO AirCompressorCtrl1;
ZGPIO AirCompressorCtrl2;
@@ -95,108 +89,123 @@ void dumphpp272data(hpp272_data_t *data) {
printf("water_vapor_saturation_pressure_h2o_h2o2: %d\n", data->water_vapor_saturation_pressure_h2o_h2o2);
}
-void Hardware::initialize(int deviceId) { m_device_id = deviceId; }
+void Hardware::initialize(int deviceId) {
+ m_device_id = deviceId;
+
+ AirCompressorCtrl1.initAsOutput(PC2, ZGPIO::kMode_nopull, true, false);
+ AirCompressorCtrl2.initAsOutput(PC3, ZGPIO::kMode_nopull, true, false);
+
+ AirBlowerCtrl1.initAsOutput(PC4, ZGPIO::kMode_nopull, true, false);
+ AirBlowerCtrl2.initAsOutput(PC5, ZGPIO::kMode_nopull, true, false);
+
+ HeatingStripCtrl1.initAsOutput(PC6, ZGPIO::kMode_nopull, true, false);
+ HeatingStripCtrl2.initAsOutput(PC7, ZGPIO::kMode_nopull, true, false);
+
+ hpp272.initialize(&huart3, 0xf0);
+}
int32_t Hardware::process_rx_packet(from_where_t fromwhere, uint8_t *packet, int32_t len, uint8_t *receipt, int32_t &receiptsize, bool &matching) {
Cmdheader_t *cmdheader = (Cmdheader_t *)packet;
-
+ if (fromwhere == kuart) printf("==== rx: cmdid:%d subcmdid:%d id:%d\n", cmdheader->cmdid, cmdheader->subcmdid, cmdheader->data[0]);
+ uint8_t *pdata = cmdheader->data;
/**
* @brief Ping
*/
- PROCESS_CMD(kcmd_ping, m_device_id) {
+ PROCESS_CMD(kcmd_ping, 0, m_device_id) {
receipt[0] = cmdheader->data[0];
receiptsize = 1;
return 0;
}
- PROCESS_CMD(kcmd_set_io, 0) { //
- AirCompressorCtrl1.setState(packet[1]);
- memcpy(receipt, packet, 2);
+ PROCESS_CMD(kcmd_set_io, 0, 0) { //
+ if (fromwhere == kuart) printf("==== aircompressor1 set io:%d", pdata[1]);
+ AirCompressorCtrl1.setState(pdata[1]);
+ memcpy(receipt, pdata, 2);
receiptsize = 2;
return 0;
}
- PROCESS_CMD(kcmd_set_io, 1) { //
- AirCompressorCtrl2.setState(packet[1]);
- memcpy(receipt, packet, 2);
+ PROCESS_CMD(kcmd_set_io, 0, 1) { //
+ AirCompressorCtrl2.setState(pdata[1]);
+ memcpy(receipt, pdata, 2);
receiptsize = 2;
return 0;
}
- PROCESS_CMD(kcmd_set_io, 2) { //
- AirBlowerCtrl1.setState(packet[1]);
- memcpy(receipt, packet, 2);
+ PROCESS_CMD(kcmd_set_io, 0, 2) { //
+ AirBlowerCtrl1.setState(pdata[1]);
+ memcpy(receipt, pdata, 2);
receiptsize = 2;
return 0;
}
- PROCESS_CMD(kcmd_set_io, 3) { //
- AirBlowerCtrl2.setState(packet[1]);
- memcpy(receipt, packet, 2);
+ PROCESS_CMD(kcmd_set_io, 0, 3) { //
+ AirBlowerCtrl2.setState(pdata[1]);
+ memcpy(receipt, pdata, 2);
receiptsize = 2;
return 0;
}
- PROCESS_CMD(kcmd_set_io, 4) { //
- HeatingStripCtrl1.setState(packet[1]);
- memcpy(receipt, packet, 2);
+ PROCESS_CMD(kcmd_set_io, 0, 4) { //
+ HeatingStripCtrl1.setState(pdata[1]);
+ memcpy(receipt, pdata, 2);
receiptsize = 2;
return 0;
}
- PROCESS_CMD(kcmd_set_io, 5) { //
- HeatingStripCtrl2.setState(packet[1]);
- memcpy(receipt, packet, 2);
+ PROCESS_CMD(kcmd_set_io, 0, 5) { //
+ HeatingStripCtrl2.setState(pdata[1]);
+ memcpy(receipt, pdata, 2);
receiptsize = 2;
return 0;
}
- PROCESS_CMD(kcmd_set_io, 8) { return 0; }
- PROCESS_CMD(kcmd_set_io, 9) { return 0; }
+ PROCESS_CMD(kcmd_set_io, 0, 8) { return 0; }
+ PROCESS_CMD(kcmd_set_io, 0, 9) { return 0; }
- PROCESS_CMD(kcmd_readadc_raw, 0) {
+ PROCESS_CMD(kcmd_readadc_raw, 0, 0) {
uint32_t adc_val = ADC_Get_Average(0, 12);
receipt[0] = cmdheader->data[0];
*(int32_t *)(&receipt[2]) = adc_val;
receiptsize = 6;
- if (fromwhere == kuart) printf("adc_val0: %d\n", adc_val);
+ if (fromwhere == kuart) printf("==== adc_val0: %d\n", adc_val);
return 0;
}
- PROCESS_CMD(kcmd_readadc_raw, 1) {
+ PROCESS_CMD(kcmd_readadc_raw, 0, 1) {
uint32_t adc_val = ADC_Get_Average(1, 12);
receipt[0] = cmdheader->data[0];
*(int32_t *)(&receipt[2]) = adc_val;
receiptsize = 6;
- if (fromwhere == kuart) printf("adc_val1: %d\n", adc_val);
+ if (fromwhere == kuart) printf("==== adc_val1: %d\n", adc_val);
return 0;
}
- PROCESS_CMD(kcmd_readadc_raw, 2) {
+ PROCESS_CMD(kcmd_readadc_raw, 0, 2) {
uint32_t adc_val = ADC_Get_Average(2, 12);
receipt[0] = cmdheader->data[0];
*(int32_t *)(&receipt[2]) = adc_val;
receiptsize = 6;
- if (fromwhere == kuart) printf("adc_val2: %d\n", adc_val);
+ if (fromwhere == kuart) printf("==== adc_val2: %d\n", adc_val);
return 0;
}
- PROCESS_CMD(kcmd_readadc_raw, 3) {
+ PROCESS_CMD(kcmd_readadc_raw, 0, 3) {
uint32_t adc_val = ADC_Get_Average(3, 12);
receipt[0] = cmdheader->data[0];
*(int32_t *)(&receipt[2]) = adc_val;
receiptsize = 6;
- if (fromwhere == kuart) printf("adc_val3: %d\n", adc_val);
+ if (fromwhere == kuart) printf("==== adc_val3: %d\n", adc_val);
return 0;
}
- PROCESS_CMD(kcmd_readadc_raw, 8) {
+ PROCESS_CMD(kcmd_readadc_raw, 0, 8) {
uint32_t adc_val = ADC_Get_Average(8, 12);
receipt[0] = cmdheader->data[0];
*(int32_t *)(&receipt[2]) = adc_val;
receiptsize = 6;
- if (fromwhere == kuart) printf("adc_val8: %d\n", adc_val);
+ if (fromwhere == kuart) printf("==== adc_val8: %d\n", adc_val);
return 0;
}
- PROCESS_CMD(kcmd_readadc_raw, 9) {
+ PROCESS_CMD(kcmd_readadc_raw, 0, 9) {
uint32_t adc_val = ADC_Get_Average(9, 12);
receipt[0] = cmdheader->data[0];
*(int32_t *)(&receipt[2]) = adc_val;
receiptsize = 6;
- if (fromwhere == kuart) printf("adc_val9: %d\n", adc_val);
+ if (fromwhere == kuart) printf("==== adc_val9: %d\n", adc_val);
return 0;
}
- PROCESS_CMD(kcmd_m211887_operation, 1) {
+ PROCESS_CMD(kcmd_m211887_operation, 0, 1) {
hpp272_data_t *hpp272data = hpp272.readVal();
if (hpp272data) {
receipt[0] = 1;
diff --git a/usrc/main.cpp b/usrc/main.cpp
index 099f7e2..97a8d8e 100644
--- a/usrc/main.cpp
+++ b/usrc/main.cpp
@@ -18,6 +18,7 @@
//
#include "hardware.hpp"
#include "sdk\components\huacheng_sensor\dp600_pressure_sensor.hpp"
+#include "sdk\components\string_utils.hpp"
#include "sdk\components\zcan_module\huacheng_pressure_sensor.hpp"
#include "sdk\components\zcan_module\zcan_basic_order_module.hpp"
#include "sdk\components\zcan_module\zcan_pump_ctrl_module.hpp"
@@ -30,68 +31,6 @@ Main gmain;
using namespace iflytop;
-/*******************************************************************************
- * TOOLS *
- *******************************************************************************/
-static uint8_t *hex_str_to_bytes(char *data, int32_t len, int32_t &bytelen) {
- /**
- * @brief
- * data:
- * 12 34 56 78 90 ab cd ef
- *
- */
- static uint8_t bytes_cache[1024] = {0};
- static uint8_t data_cache[1024] = {0};
-
- int32_t data_len = 0;
-
- memset(bytes_cache, 0, sizeof(bytes_cache));
- memset(data_cache, 0, sizeof(data_cache));
-
- for (int32_t i = 0; i < len; i++) {
- if (data[i] == ' ') continue;
- if (data[i] == '\r' || data[i] == '\n') break;
- data_cache[i] = data[i];
- data_len++;
- }
-
- if (data_len % 2 != 0) {
- ZLOGE(TAG, "data_len %d", data_len);
- return NULL;
- }
-
- for (int32_t i = 0; i < data_len; i += 2) {
- char c1 = data_cache[i];
- char c2 = data_cache[i + 1];
- if (c1 >= '0' && c1 <= '9') {
- c1 = c1 - '0';
- } else if (c1 >= 'a' && c1 <= 'f') {
- c1 = c1 - 'a' + 10;
- } else if (c1 >= 'A' && c1 <= 'F') {
- c1 = c1 - 'A' + 10;
- } else {
- ZLOGE(TAG, "c1 %c", c1);
- return NULL;
- }
-
- if (c2 >= '0' && c2 <= '9') {
- c2 = c2 - '0';
- } else if (c2 >= 'a' && c2 <= 'f') {
- c2 = c2 - 'a' + 10;
- } else if (c2 >= 'A' && c2 <= 'F') {
- c2 = c2 - 'A' + 10;
- } else {
- ZLOGE(TAG, "c2 %c", c2);
- return NULL;
- }
-
- bytes_cache[i / 2] = (c1 << 4) | c2;
- }
-
- bytelen = data_len / 2;
- return bytes_cache;
-}
-
void dumphexdata(uint8_t *data, int32_t len) {
for (int32_t i = 0; i < len; i++) {
printf("%02X ", data[i]);
@@ -126,29 +65,55 @@ void Main::onRceivePacket(CanPacketRxBuffer *rxbuf, uint8_t *packet, size_t len)
if (ecode != 0) {
m_canReceiver.sendErrorAck(cmdheader, ecode);
} else {
- m_canReceiver.sendAck(cmdheader, rxdata, sizeof(rxdata));
+ m_canReceiver.sendAck(cmdheader, rxdata, sizeof(receipt_size));
}
}
}
/**
* @brief 处理串口接收到的消息
*/
-static void processUartRX(uint8_t *packet, size_t len) {
+
+static void processUARTEachLine(char *packet, size_t len) {
static uint8_t rxdata[1024] = {0};
int32_t receipt_size = 0;
bool match = false;
memset(rxdata, 0, sizeof(rxdata));
+
//
int32_t bytelen = 0;
- uint8_t *hexbytes = hex_str_to_bytes((char *)packet, len, bytelen);
+ uint8_t *hexbytes = StringUtils::hex_str_to_bytes((char *)packet, len, bytelen);
if (hexbytes == NULL) {
ZLOGE(TAG, "hex_str_to_bytes failed");
return;
}
dumphexdata(hexbytes, bytelen);
+ int32_t ecode = m_hardware.process_rx_packet(Hardware::kuart, hexbytes, bytelen, rxdata, receipt_size, match);
+ if (match) {
+ printf("match\n");
+ if (ecode < 0) {
+ printf("ecode :%d\n", ecode);
+ return;
+ }
+ dumphexdata(rxdata, receipt_size);
+ }
+ printf("\n");
+}
+
+static void processUartRX(uint8_t *packet, size_t len) {
+ for (size_t i = 0; i < len; i++) {
+ if (packet[i] == '\n' || packet[i] == '\r') {
+ packet[i] = '\0';
+ }
+ }
- m_hardware.process_rx_packet(Hardware::kuart, packet, len, rxdata, receipt_size, match);
+ for (size_t i = 0; i < len; i++) {
+ if (i == 0) {
+ processUARTEachLine((char *)packet, strlen((char *)packet));
+ } else if (packet[i - 1] == '\0' && packet[i] != '\0') {
+ processUARTEachLine((char *)packet + i, strlen((char *)packet + i));
+ }
+ }
}
/*******************************************************************************
@@ -161,8 +126,7 @@ void Main::run() {
};
ZHALCORE::getInstance()->initialize(oscfg);
- ZLOGI(TAG, "zapp:%s", VERSION);
- printf("int32_t %d int %d longint %d\n", sizeof(int32_t), sizeof(int), sizeof(long int));
+ ZLOGI(TAG, "little_disinfection_liquid_path_control:%s", VERSION);
debuglight.initAsOutput(DEBUG_LIGHT_GPIO, ZGPIO::kMode_nopull, false, false);
ZHAL_CORE_REG(200, { debuglight.toggleState(); });
@@ -178,6 +142,7 @@ void Main::run() {
};
uartreceiver.initialize(&uartreceiver_cfg);
uartreceiver.setrxcb([this](uint8_t *data, size_t len) { processUartRX(data, len); });
+ uartreceiver.startRxIt();
ZCanReceiver::CFG *cfg = m_canReceiver.createCFG(DEVICE_ID);
m_canReceiver.init(cfg);
@@ -187,5 +152,6 @@ void Main::run() {
while (1) {
ZHALCORE::getInstance()->loop();
m_hardware.loop();
+ uartreceiver.forceCchedule();
}
}