Victor 3 лет назад
Родитель
Сommit
3a91422f5e
2 измененных файлов с 13 добавлено и 6 удалено
  1. 5 3
      interfaces/OneWireSensor.c
  2. 8 3
      views/SensorEdit_view.c

+ 5 - 3
interfaces/OneWireSensor.c

@@ -15,9 +15,11 @@ const SensorType DS18x2x = {
     .deinitializer = unitemp_onewire_sensor_deinit,
     .deinitializer = unitemp_onewire_sensor_deinit,
     .updater = unitemp_onewire_sensor_update};
     .updater = unitemp_onewire_sensor_update};
 
 
-// Переменные для хранения промежуточного результата поиска
-uint8_t onewire_enum[8]; // найденный восьмибайтовый адрес
-uint8_t onewire_enum_fork_bit; // последний нулевой бит, где была неоднозначность (нумеруя с единицы)
+// Переменные для хранения промежуточного результата сканирования шины
+// найденный восьмибайтовый адрес
+static uint8_t onewire_enum[8] = {0};
+// последний нулевой бит, где была неоднозначность (нумеруя с единицы)
+uint8_t onewire_enum_fork_bit = 65;
 
 
 OneWireBus* uintemp_onewire_bus_alloc(const GPIO* gpio) {
 OneWireBus* uintemp_onewire_bus_alloc(const GPIO* gpio) {
     if(gpio == NULL) {
     if(gpio == NULL) {

+ 8 - 3
views/SensorEdit_view.c

@@ -43,15 +43,20 @@ static void _onewire_scan(void) {
         ow_sensor->bus->device_count);
         ow_sensor->bus->device_count);
     //Сканирование шины one wire
     //Сканирование шины one wire
     unitemp_onewire_bus_init(ow_sensor->bus);
     unitemp_onewire_bus_init(ow_sensor->bus);
-    unitemp_onewire_bus_enum_init();
-    uint8_t* id;
+    uint8_t* id = NULL;
     do {
     do {
         id = unitemp_onewire_bus_enum_next(ow_sensor->bus);
         id = unitemp_onewire_bus_enum_next(ow_sensor->bus);
     } while(_onewire_id_exist(id));
     } while(_onewire_id_exist(id));
 
 
     if(id == NULL) {
     if(id == NULL) {
+        unitemp_onewire_bus_enum_init();
         id = unitemp_onewire_bus_enum_next(ow_sensor->bus);
         id = unitemp_onewire_bus_enum_next(ow_sensor->bus);
-        if(id == NULL || _onewire_id_exist(id)) {
+        if(_onewire_id_exist(id)) {
+            do {
+                id = unitemp_onewire_bus_enum_next(ow_sensor->bus);
+            } while(_onewire_id_exist(id) && id != NULL);
+        }
+        if(id == NULL) {
             memset(ow_sensor->deviceID, 0, 8);
             memset(ow_sensor->deviceID, 0, 8);
             ow_sensor->familyCode = 0;
             ow_sensor->familyCode = 0;
             unitemp_onewire_bus_deinit(ow_sensor->bus);
             unitemp_onewire_bus_deinit(ow_sensor->bus);