Pārlūkot izejas kodu

+ type updates and CMD_PARAM bug fix

DLIMIKO 11 mēneši atpakaļ
vecāks
revīzija
0ea70fc8eb

+ 2 - 2
include/app_bridge.h

@@ -103,8 +103,8 @@ typedef struct
     int32_t (*getParam)(uint8_t sensor_index, nBus_param_t param_name);
     nBus_statusType_t (*setParam)(uint8_t sensor_index, nBus_param_t param_name, int32_t param_value);
 
-    void (*start)(void);
-    void (*stop)(void);
+    nBus_statusType_t (*start)(void);
+    nBus_statusType_t (*stop)(void);
     void (*read)(void);
     uint8_t (*store)(void);
 

+ 2 - 2
include/app_dummy.h

@@ -31,8 +31,8 @@ extern "C"
     int32_t dummy_getParam(uint8_t sensor_index, nBus_param_t param_name);
     nBus_statusType_t dummy_setParam(uint8_t sensor_index, nBus_param_t param_name, int32_t param_value);
 
-    void dummy_start(void);
-    void dummy_stop(void);
+    nBus_statusType_t dummy_start(void);
+    nBus_statusType_t dummy_stop(void);
     void dummy_read(void);
     uint8_t dummy_store(void);
 

+ 10 - 7
src/app_dummy.c

@@ -35,7 +35,7 @@ uint8_t *dummy_data_actuators[DUMMY_ACTUATOR_COUNT] = {(uint8_t *)&dummy_data_le
 
 uint8_t dummy_data_actuator_lens[DUMMY_ACTUATOR_COUNT] = {sizeof(dummy_data_led), sizeof(dummy_data_motor)};
 
-uint32_t dummy_param = 0xABCD4567;
+uint32_t dummy_params[_NBUS_PARAM_COUNT];
 
 ////////////////////////////////////////////// Dummy test data structure //////////////////////////////////////////////
 
@@ -59,6 +59,9 @@ nBusAppInterface_t *getDummyDriver()
 void dummy_init(void *hw_interface, void *hw_config)
 {
     // init whole module
+
+    for (uint8_t i = 0; i < _NBUS_PARAM_COUNT; i++)
+        dummy_params[i] = 0xABCD1234;
 }
 
 void dummy_reset()
@@ -181,7 +184,7 @@ nBus_statusType_t dummy_setData(uint8_t *data, uint8_t count, uint8_t *response)
 
 int32_t dummy_getParam(uint8_t sensor_index, nBus_param_t param)
 {
-    return dummy_param;
+    return dummy_params[param];
 }
 
 uint8_t dummy_hasParam(uint8_t sensor_index, nBus_param_t param)
@@ -197,19 +200,19 @@ nBus_statusType_t dummy_setParam(uint8_t sensor_index, nBus_param_t param, int32
     if (param == PARAM_GAIN)
         return STATUS_NOT_SUPPORTED;
 
-    dummy_param = value;
+    dummy_params[param] = value;
 
     return STATUS_SUCCESS;
 }
 
-void dummy_start(void)
+nBus_statusType_t dummy_start(void)
 {
-    return;
+    return STATUS_SUCCESS;
 }
 
-void dummy_stop(void)
+nBus_statusType_t dummy_stop(void)
 {
-    return;
+    return STATUS_SUCCESS;
 }
 
 void dummy_read(void)

+ 13 - 15
src/nbus_slave_module_unicast.c

@@ -154,6 +154,11 @@ void nbus_slave_unicastToModuleGet(nBus_TypeDef *nbus)
         // module memory
         nbus->memoryInterface->getId(&nbus->tx_buffer[25]);
         nbus->tx_length += 8;
+        // sensor count
+        nBus_sensorCount_t sensor_count = nbus->interface->getSensorCount();
+        nbus->tx_buffer[33] = sensor_count.read_only_count;
+        nbus->tx_buffer[34] = sensor_count.read_write_count;
+        nbus->tx_length += 2;
     }
     break;
 
@@ -201,28 +206,18 @@ void nbus_slave_unicastToModuleSet(nBus_TypeDef *nbus)
 {
     switch (nbus->function_code.function)
     {
-    case CMD_FIND: {
-        if (nbus->rx_buffer[RX_DT] > 1) // if wrong parameter {0, 1}
-        {
-            setErrorResponse(nbus, ILLEGAL_FUNCTION_PARAM);
-            break;
-        }
-
-        nbus->tx_buffer[TX_DT] = nbus->interface->find(nbus->rx_buffer[RX_DT]);
-        nbus->tx_length += 1;
-    }
-    break;
-
     case CMD_STOP: {
         nbus->measure_active = MEASURE_STOPPED;
-        nbus->interface->stop();
+        nbus->tx_buffer[TX_DT] = nbus->interface->stop();
+        nbus->tx_length++;
         nbus->hw_platform->led_off();
     }
     break;
 
     case CMD_START: {
         nbus->measure_active = MEASURE_RUNNING;
-        nbus->interface->start();
+        nbus->tx_buffer[TX_DT] = nbus->interface->start();
+        nbus->tx_length++;
         nbus->hw_platform->led_on();
     }
     break;
@@ -242,7 +237,9 @@ void nbus_slave_unicastToModuleSet(nBus_TypeDef *nbus)
             uint8_t param_id;
             uint32_t param_value;
 
-            for (uint8_t i = 0; i < rx_payload; i++)
+            uint8_t i = 0;
+
+            for (; rx_payload > 0; rx_payload -= 5)
             {
                 param_id = nbus->rx_buffer[3 + 5 * i];
                 param_value = *(int32_t *)&nbus->rx_buffer[4 + 5 * i];
@@ -250,6 +247,7 @@ void nbus_slave_unicastToModuleSet(nBus_TypeDef *nbus)
                 nbus->tx_buffer[4 + 2 * i] = param_id;
                 nbus->tx_buffer[5 + 2 * i] = nbus->interface->setParam(0, param_id, param_value);
                 nbus->tx_length += 2;
+                i++;
             }
         }
     }

+ 16 - 1
src/nbus_slave_sensor_unicast.c

@@ -119,6 +119,18 @@ void nbus_slave_unicastToSensorSet(nBus_TypeDef *nbus)
 
     switch (nbus->function_code.function)
     {
+    case CMD_FIND: {
+        if (nbus->rx_buffer[RX_DT] > 1) // if wrong parameter {0, 1}
+        {
+            setErrorResponse(nbus, ILLEGAL_FUNCTION_PARAM);
+            break;
+        }
+
+        nbus->tx_buffer[TX_DT] = nbus->interface->find(nbus->rx_buffer[RX_DT]);
+        nbus->tx_length += 1;
+    }
+    break;
+
     case CMD_PARAM: {
 
         uint8_t rx_payload = nbus->rx_length - RX_META;
@@ -134,7 +146,9 @@ void nbus_slave_unicastToSensorSet(nBus_TypeDef *nbus)
             uint8_t param_id;
             uint32_t param_value;
 
-            for (uint8_t i = 0; i < rx_payload; i++)
+            uint8_t i = 0;
+
+            for (; rx_payload > 0; rx_payload -= 5)
             {
                 param_id = nbus->rx_buffer[3 + 5 * i];
                 param_value = *(int32_t *)&nbus->rx_buffer[4 + 5 * i];
@@ -142,6 +156,7 @@ void nbus_slave_unicastToSensorSet(nBus_TypeDef *nbus)
                 nbus->tx_buffer[4 + 2 * i] = param_id;
                 nbus->tx_buffer[5 + 2 * i] = nbus->interface->setParam(nbus->rx_buffer[RX_SA], param_id, param_value);
                 nbus->tx_length += 2;
+                i++;
             }
         }
     }