瀏覽代碼

Merge branch 'uart_dma_rx' into 'main'

use HAL_UARTEx_ReceiveToIdle_DMA in BAN

See merge request sensorical/fw/ban-module!2
Juraj Ďuďák 1 年之前
父節點
當前提交
1d70b95ca6
共有 12 個文件被更改,包括 151 次插入160 次删除
  1. 4 2
      Core/Inc/app_adc.h
  2. 1 4
      Core/Inc/app_interface.h
  3. 0 1
      Core/Inc/stm32l0xx_it.h
  4. 14 3
      Core/Src/app_adc.c
  5. 74 87
      Core/Src/main.c
  6. 20 28
      Core/Src/stm32l0xx_hal_msp.c
  7. 2 15
      Core/Src/stm32l0xx_it.c
  8. 1 1
      Modules/icm20948
  9. 1 1
      Modules/nbus
  10. 17 12
      baModule-slave.ioc
  11. 8 3
      test/app.py
  12. 9 3
      test/comm.py

+ 4 - 2
Core/Inc/app_adc.h

@@ -20,9 +20,11 @@ nBus_sensorType_t mcu_adc_getType(uint8_t sensor_index);
 uint8_t mcu_adc_getSensorCount();
 uint8_t mcu_adc_getData(uint8_t sensor_index, uint8_t *data);
 uint8_t mcu_adc_setData(uint8_t *data);
-uint8_t mcu_adc_getParam(uint8_t sensor_index, nBus_param_t param);
+int32_t mcu_adc_getParam(uint8_t sensor_index, nBus_param_t param);
 uint8_t mcu_adc_hasParam(uint8_t sensor_index, nBus_param_t param);
-nBus_param_t mcu_adc_setParam(uint8_t sensor_index, nBus_param_t param, uint8_t value);
+nBus_param_t mcu_adc_setParam(uint8_t sensor_index, nBus_param_t param, int32_t value);
 void mcu_adc_start(void);
 void mcu_adc_stop(void);
+void mcu_adc_read(void);
+uint8_t mcu_adc_store(void);
 #endif /* INC_APP_ADC_H_ */

+ 1 - 4
Core/Inc/app_interface.h

@@ -12,11 +12,8 @@
 void led_on();
 void led_off();
 void led_toggle();
-void uart_receive_it(uint8_t *data, int n);
-void uart_abort_receive();
-void timer_uart_start(int n);
-void timer_uart_stop();
 void uart_send(uint8_t *data, int n);
+void uart_receive(uint8_t *data, int n);
 void app_delay(uint8_t);
 
 #endif /* INC_APP_INTERFACE_H_ */

+ 0 - 1
Core/Inc/stm32l0xx_it.h

@@ -56,7 +56,6 @@ void DMA1_Channel1_IRQHandler(void);
 void DMA1_Channel4_5_6_7_IRQHandler(void);
 void ADC1_COMP_IRQHandler(void);
 void TIM21_IRQHandler(void);
-void TIM22_IRQHandler(void);
 void USART2_IRQHandler(void);
 /* USER CODE BEGIN EFP */
 

+ 14 - 3
Core/Src/app_adc.c

@@ -20,7 +20,9 @@ nBusAppInterface_t mcu_adc_driver = {
 	  mcu_adc_getParam,
 	  mcu_adc_setParam,
 	  mcu_adc_start,
-	  mcu_adc_stop
+	  mcu_adc_stop,
+	  mcu_adc_read,
+	  mcu_adc_store,
 };
 
 uint32_t mcu_adc_data[MCU_ADC_CHANNELS];
@@ -112,7 +114,7 @@ uint8_t mcu_adc_setData(uint8_t *data){
 	return 0;
 }
 
-uint8_t mcu_adc_getParam(uint8_t sensor_index, nBus_param_t param){
+int32_t mcu_adc_getParam(uint8_t sensor_index, nBus_param_t param){
 	return 0x00;
 }
 
@@ -120,6 +122,15 @@ uint8_t mcu_adc_hasParam(uint8_t sensor_index, nBus_param_t param){
 	return 0;
 }
 
-nBus_param_t mcu_adc_setParam(uint8_t sensor_index, nBus_param_t param, uint8_t value){
+nBus_param_t mcu_adc_setParam(uint8_t sensor_index, nBus_param_t param, int32_t value){
 	return PARAM_NONE;
 }
+
+void mcu_adc_read(void){
+
+}
+
+uint8_t mcu_adc_store(void){
+	return 0;
+}
+

+ 74 - 87
Core/Src/main.c

@@ -61,10 +61,10 @@ DMA_HandleTypeDef hdma_adc;
 SPI_HandleTypeDef hspi1;
 
 TIM_HandleTypeDef htim21;
-TIM_HandleTypeDef htim22;
 
 UART_HandleTypeDef huart2;
 DMA_HandleTypeDef hdma_usart2_tx;
+DMA_HandleTypeDef hdma_usart2_rx;
 
 /* USER CODE BEGIN PV */
 
@@ -75,7 +75,6 @@ void SystemClock_Config(void);
 static void MX_GPIO_Init(void);
 static void MX_DMA_Init(void);
 static void MX_USART2_UART_Init(void);
-static void MX_TIM22_Init(void);
 static void MX_TIM21_Init(void);
 static void MX_ADC_Init(void);
 static void MX_SPI1_Init(void);
@@ -85,6 +84,18 @@ static void MX_SPI1_Init(void);
 
 /* Private user code ---------------------------------------------------------*/
 /* USER CODE BEGIN 0 */
+#define MAX_SYSTICK  0xFFFFFFFF;
+uint8_t data[64];	// tmp read buffer
+uint8_t *dataUART;  // pointee for rx_buffer
+volatile uint8_t dataL;
+volatile uint8_t dataI;
+volatile uint32_t uart_timeout = MAX_SYSTICK;
+
+#if MODULE == MODULE_IMU
+volatile uint8_t icm_data_ready = 0;
+#endif
+
+
 inline void uart_send(uint8_t *data, int n)
 {
 #if USE_USART_DMA_TX == 1
@@ -94,6 +105,11 @@ inline void uart_send(uint8_t *data, int n)
 #endif
 }
 
+inline void uart_receive(uint8_t *dataNBUS, int n)
+{
+	dataUART = dataNBUS;
+	HAL_UARTEx_ReceiveToIdle_DMA(&huart2, data, n);
+}
 
 inline void led_on(){
 	HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
@@ -107,53 +123,72 @@ inline void led_toggle(){
 	HAL_GPIO_TogglePin(LD3_GPIO_Port, LD3_Pin);
 }
 
-inline void uart_receive_it(uint8_t *data, int n)
-{
-	HAL_UART_Receive_IT(&huart2, data, n);
+inline void app_delay(uint8_t ms){
+	HAL_Delay(ms);
 }
 
-inline void uart_abort_receive(){
-	HAL_UART_AbortReceive_IT(&huart2);
-}
+static inline uint8_t loop_callback() {
 
-inline void timer_uart_start(int n){
-	htim22.Instance->CNT = 1;
-	htim22.Instance->ARR = 40*n + 400; // (10*n + 100)us
-	HAL_TIM_Base_Start_IT(&htim22);
-}
+#if MODULE == MODULE_IMU
+	if(icm_data_ready == 1){
+		icm_data_ready = 0;
+		return 1;  // interrupt from external sensor: data ready
+	}
+#endif
 
-inline void timer_uart_stop(){
-	HAL_TIM_Base_Stop_IT(&htim22);
-}
+	// timemout: 1 - 2 ms
+	if(HAL_GetTick() - 1 > uart_timeout) {
+		dataL = 0;
+		dataI = 0;
+		data[0] = 0;
+		uart_timeout = MAX_SYSTICK;
+		led_off();
+		HAL_UARTEx_ReceiveToIdle_DMA(&huart2, data, 64);
+		return 2;  // UART receive timeout
+	}
 
-inline void app_delay(uint8_t ms){
-	HAL_Delay(ms);
+	return 0;
 }
 
-static inline void nbus_app_UART_RX(UART_HandleTypeDef *huart) {
-	nbus_cb_UART_RX();
-}
+//  Application callbacks
+void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size){
+
+	HAL_UARTEx_ReceiveToIdle_DMA(huart, data, 64);
+	uint8_t copy_offset = 0;
+	if (dataL == 0) {
+		uart_timeout = HAL_GetTick();
+		dataL = data[0];
+		dataI = 0;
+		led_on();
+		if (Size == 1) {
+			return;
+		}
+
+		Size--;
+		copy_offset = 1;
+	}
 
-static inline void nbus_app_TIM_periodElapsed(TIM_HandleTypeDef *htim) {
-	nbus_cb_TIM_periodElapsed();
-}
+	memcpy(&dataUART[dataI], &data[copy_offset], Size);
 
+	dataI += Size;
+	if(dataI >= dataL){
+		led_off();
+		nbus_cb_UART_RX(dataI);
+		dataL=0;
+		dataI=0;
+		data[0]=0;
+		uart_timeout = MAX_SYSTICK;
+	}
 
-volatile uint8_t icm_data_ready = 0;
+}
 
 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
+#if MODULE == MODULE_IMU
 	icm_data_ready = 1;
+#endif
 }
 
 
-static inline uint8_t loop_callback() {
-	if(icm_data_ready == 1){
-		icm_data_ready = 0;
-		return 1;
-	}
-	return 0;
-}
-
 /* USER CODE END 0 */
 
 /**
@@ -186,11 +221,13 @@ int main(void)
   MX_GPIO_Init();
   MX_DMA_Init();
   MX_USART2_UART_Init();
-  MX_TIM22_Init();
   MX_TIM21_Init();
   MX_SPI1_Init();
   /* USER CODE BEGIN 2 */
 
+  dataI=0;
+  dataL=0;
+
 #ifdef MODULE_INIT_IP_ADC
   MX_ADC_Init();
 #endif
@@ -205,14 +242,11 @@ int main(void)
 #endif
 
   nBusPlatformInterface_t hw_platform = {
-		  uart_receive_it,
+		  uart_receive,
 		  uart_send,
-		  uart_abort_receive,
 		  led_on,
 		  led_off,
 		  led_toggle,
-		  timer_uart_start,
-		  timer_uart_stop,
 		  app_delay,
 		  loop_callback,
   };
@@ -248,11 +282,8 @@ int main(void)
 
 	 nbus_init(getImuDriver(), &hw_platform);
 	 nbus_init_app(&hspi1, &config);
-	// nbus_set_app_callback(loop_callback);
-#endif
 
-  HAL_UART_RegisterCallback(&huart2, HAL_UART_RX_COMPLETE_CB_ID, nbus_app_UART_RX);
-  HAL_TIM_RegisterCallback(&htim22, HAL_TIM_PERIOD_ELAPSED_CB_ID, nbus_app_TIM_periodElapsed);
+#endif
 
   nBus_MemoryDriver memory_ec20 = {
   		DS28EC20_init,
@@ -263,6 +294,7 @@ int main(void)
 		DS28EC20_getId
   };
 
+
   memory_ec20.init(ONE_WIRE_GPIO_Port, ONE_WIRE_Pin);
   nbus_init_memory_driver(&memory_ec20,16);
 
@@ -526,51 +558,6 @@ static void MX_TIM21_Init(void)
 
 }
 
-/**
-  * @brief TIM22 Initialization Function
-  * @param None
-  * @retval None
-  */
-static void MX_TIM22_Init(void)
-{
-
-  /* USER CODE BEGIN TIM22_Init 0 */
-
-  /* USER CODE END TIM22_Init 0 */
-
-  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
-  TIM_MasterConfigTypeDef sMasterConfig = {0};
-
-  /* USER CODE BEGIN TIM22_Init 1 */
-
-  /* USER CODE END TIM22_Init 1 */
-  htim22.Instance = TIM22;
-  htim22.Init.Prescaler = UART_TIMER_PRESCALER;
-  htim22.Init.CounterMode = TIM_COUNTERMODE_UP;
-  htim22.Init.Period = 65535;
-  htim22.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
-  htim22.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
-  if (HAL_TIM_Base_Init(&htim22) != HAL_OK)
-  {
-    Error_Handler();
-  }
-  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
-  if (HAL_TIM_ConfigClockSource(&htim22, &sClockSourceConfig) != HAL_OK)
-  {
-    Error_Handler();
-  }
-  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
-  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
-  if (HAL_TIMEx_MasterConfigSynchronization(&htim22, &sMasterConfig) != HAL_OK)
-  {
-    Error_Handler();
-  }
-  /* USER CODE BEGIN TIM22_Init 2 */
-
-  /* USER CODE END TIM22_Init 2 */
-
-}
-
 /**
   * @brief USART2 Initialization Function
   * @param None

+ 20 - 28
Core/Src/stm32l0xx_hal_msp.c

@@ -28,6 +28,8 @@ extern DMA_HandleTypeDef hdma_adc;
 
 extern DMA_HandleTypeDef hdma_usart2_tx;
 
+extern DMA_HandleTypeDef hdma_usart2_rx;
+
 /* Private typedef -----------------------------------------------------------*/
 /* USER CODE BEGIN TD */
 
@@ -290,20 +292,6 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
 
   /* USER CODE END TIM21_MspInit 1 */
   }
-  else if(htim_base->Instance==TIM22)
-  {
-  /* USER CODE BEGIN TIM22_MspInit 0 */
-
-  /* USER CODE END TIM22_MspInit 0 */
-    /* Peripheral clock enable */
-    __HAL_RCC_TIM22_CLK_ENABLE();
-    /* TIM22 interrupt Init */
-    HAL_NVIC_SetPriority(TIM22_IRQn, 0, 0);
-    HAL_NVIC_EnableIRQ(TIM22_IRQn);
-  /* USER CODE BEGIN TIM22_MspInit 1 */
-
-  /* USER CODE END TIM22_MspInit 1 */
-  }
 
 }
 
@@ -329,20 +317,6 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
 
   /* USER CODE END TIM21_MspDeInit 1 */
   }
-  else if(htim_base->Instance==TIM22)
-  {
-  /* USER CODE BEGIN TIM22_MspDeInit 0 */
-
-  /* USER CODE END TIM22_MspDeInit 0 */
-    /* Peripheral clock disable */
-    __HAL_RCC_TIM22_CLK_DISABLE();
-
-    /* TIM22 interrupt DeInit */
-    HAL_NVIC_DisableIRQ(TIM22_IRQn);
-  /* USER CODE BEGIN TIM22_MspDeInit 1 */
-
-  /* USER CODE END TIM22_MspDeInit 1 */
-  }
 
 }
 
@@ -401,6 +375,23 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
 
     __HAL_LINKDMA(huart,hdmatx,hdma_usart2_tx);
 
+    /* USART2_RX Init */
+    hdma_usart2_rx.Instance = DMA1_Channel5;
+    hdma_usart2_rx.Init.Request = DMA_REQUEST_4;
+    hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
+    hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE;
+    hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE;
+    hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
+    hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
+    hdma_usart2_rx.Init.Mode = DMA_NORMAL;
+    hdma_usart2_rx.Init.Priority = DMA_PRIORITY_HIGH;
+    if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK)
+    {
+      Error_Handler();
+    }
+
+    __HAL_LINKDMA(huart,hdmarx,hdma_usart2_rx);
+
     /* USART2 interrupt Init */
     HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
     HAL_NVIC_EnableIRQ(USART2_IRQn);
@@ -436,6 +427,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
 
     /* USART2 DMA DeInit */
     HAL_DMA_DeInit(huart->hdmatx);
+    HAL_DMA_DeInit(huart->hdmarx);
 
     /* USART2 interrupt DeInit */
     HAL_NVIC_DisableIRQ(USART2_IRQn);

+ 2 - 15
Core/Src/stm32l0xx_it.c

@@ -58,8 +58,8 @@
 extern DMA_HandleTypeDef hdma_adc;
 extern ADC_HandleTypeDef hadc;
 extern TIM_HandleTypeDef htim21;
-extern TIM_HandleTypeDef htim22;
 extern DMA_HandleTypeDef hdma_usart2_tx;
+extern DMA_HandleTypeDef hdma_usart2_rx;
 extern UART_HandleTypeDef huart2;
 /* USER CODE BEGIN EV */
 
@@ -182,6 +182,7 @@ void DMA1_Channel4_5_6_7_IRQHandler(void)
 
   /* USER CODE END DMA1_Channel4_5_6_7_IRQn 0 */
   HAL_DMA_IRQHandler(&hdma_usart2_tx);
+  HAL_DMA_IRQHandler(&hdma_usart2_rx);
   /* USER CODE BEGIN DMA1_Channel4_5_6_7_IRQn 1 */
 
   /* USER CODE END DMA1_Channel4_5_6_7_IRQn 1 */
@@ -215,20 +216,6 @@ void TIM21_IRQHandler(void)
   /* USER CODE END TIM21_IRQn 1 */
 }
 
-/**
-  * @brief This function handles TIM22 global interrupt.
-  */
-void TIM22_IRQHandler(void)
-{
-  /* USER CODE BEGIN TIM22_IRQn 0 */
-
-  /* USER CODE END TIM22_IRQn 0 */
-  HAL_TIM_IRQHandler(&htim22);
-  /* USER CODE BEGIN TIM22_IRQn 1 */
-
-  /* USER CODE END TIM22_IRQn 1 */
-}
-
 /**
   * @brief This function handles USART2 global interrupt / USART2 wake-up interrupt through EXTI line 26.
   */

+ 1 - 1
Modules/icm20948

@@ -1 +1 @@
-Subproject commit afabaea4a749ab11a4d11d0c4fde1ea4df257af5
+Subproject commit 9fa1b82af75c7e11acfae01da92b422799f131a4

+ 1 - 1
Modules/nbus

@@ -1 +1 @@
-Subproject commit 5e72d669952141f67c40a36ad9f4b2be840886fd
+Subproject commit 4aa585d4416f25e8b5032dbd110dac2222a0d9b5

+ 17 - 12
baModule-slave.ioc

@@ -18,7 +18,17 @@ Dma.ADC.0.Priority=DMA_PRIORITY_MEDIUM
 Dma.ADC.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
 Dma.Request0=ADC
 Dma.Request1=USART2_TX
-Dma.RequestsNb=2
+Dma.Request2=USART2_RX
+Dma.RequestsNb=3
+Dma.USART2_RX.2.Direction=DMA_PERIPH_TO_MEMORY
+Dma.USART2_RX.2.Instance=DMA1_Channel5
+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_HIGH
+Dma.USART2_RX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
 Dma.USART2_TX.1.Direction=DMA_MEMORY_TO_PERIPH
 Dma.USART2_TX.1.Instance=DMA1_Channel4
 Dma.USART2_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE
@@ -40,9 +50,8 @@ Mcu.IP3=RCC
 Mcu.IP4=SPI1
 Mcu.IP5=SYS
 Mcu.IP6=TIM21
-Mcu.IP7=TIM22
-Mcu.IP8=USART2
-Mcu.IPNb=9
+Mcu.IP7=USART2
+Mcu.IPNb=8
 Mcu.Name=STM32L031K(4-6)Tx
 Mcu.Package=LQFP32
 Mcu.Pin0=PC14-OSC32_IN
@@ -62,8 +71,8 @@ Mcu.Pin20=PB4
 Mcu.Pin21=PB5
 Mcu.Pin22=PB6
 Mcu.Pin23=PB7
-Mcu.Pin24=VP_TIM21_VS_ClockSourceINT
-Mcu.Pin25=VP_TIM22_VS_ClockSourceINT
+Mcu.Pin24=VP_SYS_VS_Systick
+Mcu.Pin25=VP_TIM21_VS_ClockSourceINT
 Mcu.Pin3=PA1
 Mcu.Pin4=PA2
 Mcu.Pin5=PA3
@@ -88,7 +97,6 @@ NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.SVC_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
 NVIC.SysTick_IRQn=true\:0\:0\:true\:false\:true\:true\:true\:false
 NVIC.TIM21_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
-NVIC.TIM22_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
 PA0-CK_IN.Mode=IN0
 PA0-CK_IN.Signal=ADC_IN0
@@ -250,18 +258,15 @@ SPI1.VirtualType=VM_MASTER
 TIM21.IPParameters=Prescaler,Period
 TIM21.Period=100
 TIM21.Prescaler=32000
-TIM22.IPParameters=Prescaler
-TIM22.IPParametersWithoutCheck=Prescaler
-TIM22.Prescaler=UART_TIMER_PRESCALER
 USART2.BaudRate=UART_BAUDRATE
 USART2.IPParameters=VirtualMode-Asynchronous,VirtualMode-Hardware Flow Control (RS485),BaudRate
 USART2.IPParametersWithoutCheck=BaudRate
 USART2.VirtualMode-Asynchronous=VM_ASYNC
 USART2.VirtualMode-Hardware\ Flow\ Control\ (RS485)=VM_ASYNC
+VP_SYS_VS_Systick.Mode=SysTick
+VP_SYS_VS_Systick.Signal=SYS_VS_Systick
 VP_TIM21_VS_ClockSourceINT.Mode=Internal
 VP_TIM21_VS_ClockSourceINT.Signal=TIM21_VS_ClockSourceINT
-VP_TIM22_VS_ClockSourceINT.Mode=Internal
-VP_TIM22_VS_ClockSourceINT.Signal=TIM22_VS_ClockSourceINT
 board=NUCLEO-L031K6
 boardIOC=true
 isbadioc=false

+ 8 - 3
test/app.py

@@ -18,11 +18,15 @@ class AppTest:
         print("Version: "+version)
 
     def cmd_echo(self, msg):        
-        resp = self.serial_port.request(self.module, 0, CMD_ECHO,msg)
+        resp = self.serial_port.request(self.module, 0, CMD_ECHO,msg)        
         echo = ""
+        if len(resp) == 0:
+            print("No ECHO (0-size resp)")
+            return 0
         for r in range(len(msg)):
             echo = echo + chr(resp[3+r])
         print("Echo:"+echo)
+        return len(resp)
 
     def cmd_set_param(self, sensor, param, value):                
         print("SET param:", PARAM_NAME[param], "[", param, "]=>", value)
@@ -137,8 +141,9 @@ if __name__ == "__main__":
     #app.cmd_version()
     #app.cmd_version()
     # app.cmd_module_stop()
-    app.cmd_echo([65])
-    app.cmd_echo([97,98,99,100])
+    
+    if app.cmd_echo([97,98,99,100]) == 0:
+        sys.exit()
 
     app.cmd_set_param(1, PARAM_SAMPLERATE, 10)
     app.cmd_set_param(1, PARAM_RANGE, 1)

+ 9 - 3
test/comm.py

@@ -177,15 +177,21 @@ class SerialComm:
         has_response = False
         counter = 0
         while has_response == False:
-            self.port.write([m[0]]) # send legth of message
-            # usleep(5)
-            self.port.write(m[1:]) # send body of message
+            # self.port.write([m[0]]) # send legth of message
+            # self.port.write(m[1:]) # send body of message
+
+            self.port.write(m) # send body of message
+
             data = self.receive_response()
             if len(data)>0:
                 has_response = True
             counter = counter + 1
             if counter > 5:
                 return []
+        
+        if len(data) == 0:
+            return []
+
         if data[2] & 0x80 != 0:
             print("Chyba", hex(data[3]))
             return [data[3]]