Explorar el Código

uprava callbackov

Juraj Ďuďák hace 1 año
padre
commit
da21298946
Se han modificado 4 ficheros con 52 adiciones y 35 borrados
  1. 25 16
      Core/Src/main.c
  2. 1 1
      Modules/nbus
  3. 25 18
      test/app.py
  4. 1 0
      test/comm.py

+ 25 - 16
Core/Src/main.c

@@ -109,6 +109,10 @@ inline void uart_send(uint8_t *data, int n)
 inline void uart_receive(uint8_t *dataNBUS, int n)
 {
 	dataUART = dataNBUS;
+	dataL = 0;
+	dataI = 0;
+	data[0] = 0;
+	uart_timeout = HAL_GetTick();
 	HAL_UARTEx_ReceiveToIdle_DMA(&huart2, data, n);
 }
 
@@ -128,24 +132,30 @@ inline void app_delay(uint8_t ms){
 	HAL_Delay(ms);
 }
 
-static inline uint8_t loop_callback() {
-
+static inline uint8_t loop_callback(nBusStateCallbackType_t state_check) {
+// traba kontrolovat kazdu stav (state_check) zvmlast. Moznost doplnit dalsie kontroly
+	if (state_check == CallbackType_SENSOR) {
 #if MODULE == MODULE_IMU
-	if(icm_data_ready == 1){
-		icm_data_ready = 0;
-		return 1;  // interrupt from external sensor: data ready
-	}
+		if(icm_data_ready == 1){
+			icm_data_ready = 0;
+			return 1;  // interrupt from external sensor: data ready
+		}
 #endif
+		return 0;
+	}
 
-	// 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
+	if (state_check == CallbackType_UART) {
+		// 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 1;  // UART receive timeout
+		}
+		return 0;
 	}
 
 	return 0;
@@ -225,7 +235,6 @@ int main(void)
   MX_TIM21_Init();
   MX_SPI1_Init();
   /* USER CODE BEGIN 2 */
-
   dataI=0;
   dataL=0;
 

+ 1 - 1
Modules/nbus

@@ -1 +1 @@
-Subproject commit c8ce08de5dfdfac620d81952868f2cbcff5abf18
+Subproject commit 1cb4aa770fc42b13afe4750d17513c1d0c0d133c

+ 25 - 18
test/app.py

@@ -18,16 +18,25 @@ if __name__ == "__main__":
     nbus = NbusSystem(False)
     s1_adr = 5
     s2_adr = 6
-    adrs = [s1_adr, s2_adr]
-    slave1 = nbus.create_slave(ImuSlave, s1_adr)
-    slave2 = nbus.create_slave(ImuSlave, s2_adr)
+    # adrs = [s1_adr, s2_adr]
+    adrs = [s1_adr]
 
-    if nbus.get_slave(s1_adr).cmd_echo([97, 98, 99, 100]) == 0:
-        print("Slave 1 not found")
-        sys.exit()
+    foundSlaves = {}
+    for adr in adrs:
+        slave1 = nbus.create_slave(ImuSlave, adr)
+        foundSlaves[adr] = True
+    # slave2 = nbus.create_slave(ImuSlave, s2_adr)
+
+    startCheck = True
+    for adr in adrs:
+        if nbus.get_slave(adr).cmd_echo([97, 98, 99, 100]) == 0:
+            foundSlaves[adr] = False
+    for s in foundSlaves:
+        startCheck = startCheck and foundSlaves[s]
 
-    if nbus.get_slave(s2_adr).cmd_echo([97, 98, 99, 100]) == 0:
-        print("Slave 2 not found")
+    print("Module presence:", foundSlaves)
+
+    if not startCheck:
         sys.exit()
 
     # app.cmd_reset()
@@ -51,15 +60,10 @@ if __name__ == "__main__":
             ee = nbus.get_slave(adr).cmd_get_param(s + 1, PARAM_GAIN)
             print(sr, r, lpf, ee)
 
-        sr = nbus.get_slave(adr).cmd_get_param(1, PARAM_SAMPLERATE)
+        # sr = nbus.get_slave(adr).cmd_get_param(1, PARAM_SAMPLERATE)
 
-        nbus.get_slave(adr).cmd_set_param(1, PARAM_RANGE, 1)
-        print(nbus.get_slave(adr).slave_params)
-
-    nbus.cmd_start()
-    time.sleep(0.1)
-    #nbus.cmd_stop()
-    #sys.exit()
+        # nbus.get_slave(adr).cmd_set_param(1, PARAM_RANGE, 1)
+        # print(nbus.get_slave(adr).slave_params)
 
     pocet = {}
     for adr in adrs:
@@ -67,6 +71,9 @@ if __name__ == "__main__":
         # sys.exit()
         print("pocet senzorov=", pocet)
 
+    nbus.cmd_start()
+    time.sleep(0.1)
+    #nbus.cmd_stop()
     #sys.exit()
 
     data_acc = {}
@@ -78,8 +85,8 @@ if __name__ == "__main__":
             acc = nbus.get_slave(adr).cmd_sensor_get_data_IMU(1)
             # gyr = nbus.get_slave(adr).cmd_sensor_get_data_IMU(2)
             data_acc[adr].append(acc)
-            # print(gyr)
-            print(".", end=" ")
+            print(acc)
+        print(".", end=" ")
     nbus.cmd_stop()
     show_data(data_acc)
 

+ 1 - 0
test/comm.py

@@ -155,6 +155,7 @@ class SerialComm:
 
     def receive_response(self):
         data = []
+        # time.sleep(0.005)
         response_l = self.port.read(1)
 
         if len(response_l) == 0: