Работает:

- переделан ROM, теперь это 64-битное число, а не массив
- при замене датчиков на другие с уже записанной локацией - они автоматически определяются и подключаются в нужные структуры
- если что-то не определилось, то можно переписать локацию датчика через элементы в структуре UnknownSensors
This commit is contained in:
2025-02-13 14:56:43 +03:00
parent 971817fa2d
commit d73b65a286
5 changed files with 85 additions and 47 deletions

View File

@@ -34,7 +34,7 @@ HAL_StatusTypeDef PCHSens_FindUnknownSensors(OneWire_t *onewire, PCHSens_Unknown
if(result != HAL_OK)
__NOP();
if((IS_REG_PCH_LOCATION(location) == 0) ||
if((IS_REG_SENS_LOCATION(location) == 0) ||
(IS_REG_PCH_LOCATION(location) == 0) ||
(IS_REG_PCH_NUMB(location) == 0) )
{
@@ -182,15 +182,17 @@ HAL_StatusTypeDef PCHSens_ReadTemperature(PCHSens_ModuleTypeDef *module)
result = Dallas_ReadTemperature(&module->sens2.sens);
if(result != HAL_OK)
PCHSens_CheckSensor(module->onewire, &module->sens1);
PCHSens_CheckSensor(module->onewire, &module->sens2);
result = Dallas_ReadTemperature(&module->sens3.sens);
if(result != HAL_OK)
PCHSens_CheckSensor(module->onewire, &module->sens1);
PCHSens_CheckSensor(module->onewire, &module->sens3);
result = Dallas_ReadTemperature(&module->sens4.sens);
if(result != HAL_OK)
PCHSens_CheckSensor(module->onewire, &module->sens1);
PCHSens_CheckSensor(module->onewire, &module->sens4);
PCHSens_DefineUnknownSensor(&UnknownSensors, NULL);
return result;
}
@@ -216,7 +218,7 @@ HAL_StatusTypeDef PCHSens_CheckSensor(OneWire_t *onewire, PCHSens_SensorTypeDef*
}
else
{
sensor->not_found = 0;
sensor->not_found = 0;
}
}
return HAL_OK;
@@ -226,16 +228,30 @@ HAL_StatusTypeDef PCHSens_CheckSensor(OneWire_t *onewire, PCHSens_SensorTypeDef*
HAL_StatusTypeDef PCHSens_DefineUnknownSensor(PCHSens_UnknownSensorsTypeDef *unknowns, PCHSens_SensorTypeDef *sensor)
{
HAL_StatusTypeDef result;
if(unknowns->UnknownCnt == 0)
return HAL_OK;
// if(unknowns->UnknownCnt == 0)
// return HAL_OK;
if((unknowns->ROMtoDefine != NULL) && (unknowns->LocationtoDefine.all != NULL))
if((unknowns->ROMtoDefine != NULL) && (unknowns->LocationtoDefine.all != NULL) && (unknowns->senstoDefine != NULL))
{
result = PCHSens_InitNewSensor(unknowns->onewire, sensor, unknowns->ROMtoDefine, unknowns->LocationtoDefine.all);
result = PCHSens_InitNewSensor(unknowns->onewire, unknowns->senstoDefine, unknowns->ROMtoDefine, unknowns->LocationtoDefine.all);
unknowns->ROMtoDefine = 0;
unknowns->LocationtoDefine.all = 0;
unknowns->senstoDefine = 0;
return result;
}
return HAL_OK;
}
HAL_StatusTypeDef PCHSens_FullDeInitSensor(PCHSens_SensorTypeDef *sensor)
{
HAL_StatusTypeDef result;
// if(unknowns->UnknownCnt == 0)
// return HAL_OK;
result = PCHSens_InitNewSensor(sensor->onewire, sensor, unknowns->ROMtoDefine, unknowns->LocationtoDefine.all);
return result;
}
void PCHSens_FirstInit(void)
{
int init_find = 0;
@@ -249,6 +265,7 @@ void PCHSens_FirstInit(void)
PCHSens_InitModule(&OW, &module1, REG_PCH_NUMB_11|REG_PCH_DIODE_NUMB_1, init_find);
PCHSens_FindUnknownSensors(&OW, &UnknownSensors);
PCHSens_DefineUnknownSensor(&UnknownSensors, NULL);
// Dallas_SensorInitByInd(&OW, &AllSens.outdoor, 0);
// Dallas_SensorInitByInd(&OW, &AllSens.indoor, 2);
// Dallas_SensorInitByInd(&OW, &AllSens.bathroom, 1);