Работает:
- переделан ROM, теперь это 64-битное число, а не массив - при замене датчиков на другие с уже записанной локацией - они автоматически определяются и подключаются в нужные структуры - если что-то не определилось, то можно переписать локацию датчика через элементы в структуре UnknownSensors
This commit is contained in:
@@ -90,14 +90,14 @@ HAL_StatusTypeDef Dallas_SensorInitByROM(OneWire_t *onewire, DALLAS_HandleTypeDe
|
||||
return HAL_ERROR;
|
||||
|
||||
uint8_t ROM[8] = {0};
|
||||
ROM[0] = (sensor->Init.ROM >> (7*8)) & 0xFF;
|
||||
ROM[1] = (sensor->Init.ROM >> (6*8)) & 0xFF;
|
||||
ROM[2] = (sensor->Init.ROM >> (5*8)) & 0xFF;
|
||||
ROM[3] = (sensor->Init.ROM >> (4*8)) & 0xFF;
|
||||
ROM[4] = (sensor->Init.ROM >> (3*8)) & 0xFF;
|
||||
ROM[5] = (sensor->Init.ROM >> (2*8)) & 0xFF;
|
||||
ROM[6] = (sensor->Init.ROM >> (1*8)) & 0xFF;
|
||||
ROM[7] = (sensor->Init.ROM) & 0xFF;
|
||||
ROM[0] = (sensor->Init.ROM >> (0*8)) & 0xFF;
|
||||
ROM[1] = (sensor->Init.ROM >> (1*8)) & 0xFF;
|
||||
ROM[2] = (sensor->Init.ROM >> (2*8)) & 0xFF;
|
||||
ROM[3] = (sensor->Init.ROM >> (3*8)) & 0xFF;
|
||||
ROM[4] = (sensor->Init.ROM >> (4*8)) & 0xFF;
|
||||
ROM[5] = (sensor->Init.ROM >> (5*8)) & 0xFF;
|
||||
ROM[6] = (sensor->Init.ROM >> (6*8)) & 0xFF;
|
||||
ROM[7] = (sensor->Init.ROM >> (7*8)) & 0xFF;
|
||||
|
||||
if(DS18B20_IsValidAddress(ROM) != HAL_OK)
|
||||
return HAL_ERROR;
|
||||
@@ -202,7 +202,7 @@ HAL_StatusTypeDef Dallas_SensorInitByUserBytes(OneWire_t *onewire, DALLAS_Handle
|
||||
}
|
||||
}
|
||||
|
||||
memset(&sensor->sensROM, 0, DALLAS_ROM_SIZE);
|
||||
sensor->sensROM = 0;
|
||||
memset(&sensor->scratchpad, 0, sizeof(DALLAS_ScratchpadTypeDef));
|
||||
/* Âîçâðàùàåì îøèáêó åñëè íå íàøëè */
|
||||
return HAL_ERROR;
|
||||
@@ -251,12 +251,13 @@ HAL_StatusTypeDef Dallas_SensorInit(OneWire_t *onewire, DALLAS_HandleTypeDef *se
|
||||
return HAL_ERROR;
|
||||
|
||||
sensor->onewire = onewire;
|
||||
|
||||
for(int i = 0; i < DALLAS_ROM_SIZE; i++)
|
||||
sensor->sensROM[i] = (*ROM)[i];
|
||||
sensor->sensROM = 0;
|
||||
sensor->sensROM = *(uint64_t *)(ROM);
|
||||
// for(int i = 0; i < DALLAS_ROM_SIZE; i++)
|
||||
// sensor->sensROM |= ((uint64_t)(*ROM)[i] << (56 - 8*i));
|
||||
|
||||
/* Ïðîâåðêà ïðèñóòñòâóåò ëè âûáðàííûé äàò÷èê íà ëèíèè */
|
||||
result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
||||
result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
||||
if (result == HAL_OK)
|
||||
{
|
||||
/* Óñòàíîâêà ðàçðåøåíèÿ */
|
||||
@@ -384,7 +385,7 @@ HAL_StatusTypeDef Dallas_ConvertT(DALLAS_HandleTypeDef *sensor, DALLAS_WaitConve
|
||||
return result;
|
||||
|
||||
// Îòïðàâêà êîìàíäû íà÷àëà ïðåîáðàçîâàíèÿ òåìïåðàòóðû
|
||||
result = DS18B20_StartConvT(sensor->onewire, (uint8_t *)sensor->sensROM);
|
||||
result = DS18B20_StartConvT(sensor->onewire, (uint8_t *)&sensor->sensROM);
|
||||
if(result != HAL_OK)
|
||||
{
|
||||
return result;
|
||||
@@ -461,7 +462,7 @@ HAL_StatusTypeDef Dallas_ReadTemperature(DALLAS_HandleTypeDef *sensor)
|
||||
return result;
|
||||
|
||||
|
||||
result = DS18B20_CalcTemperature(sensor->onewire, (uint8_t *)sensor->sensROM, (uint8_t *)&sensor->scratchpad, &sensor->temperature);
|
||||
result = DS18B20_CalcTemperature(sensor->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&sensor->scratchpad, &sensor->temperature);
|
||||
|
||||
if (result != HAL_OK)
|
||||
{
|
||||
@@ -484,7 +485,7 @@ HAL_StatusTypeDef Dallas_IsConnected(DALLAS_HandleTypeDef *sensor)
|
||||
if(sensor->isInitialized == 0)
|
||||
return HAL_ERROR;
|
||||
|
||||
result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
||||
result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
||||
|
||||
if (result == HAL_OK)
|
||||
{
|
||||
@@ -528,13 +529,13 @@ HAL_StatusTypeDef Dallas_WriteUserBytes(DALLAS_HandleTypeDef *sensor, uint16_t U
|
||||
if (result != HAL_OK)
|
||||
return result;
|
||||
|
||||
result = DS18B20_WriteUserBytes(sensor->onewire, (uint8_t *)sensor->sensROM, UserBytes12, UserBytes34, UserBytesMask);
|
||||
result = DS18B20_WriteUserBytes(sensor->onewire, (uint8_t *)&sensor->sensROM, UserBytes12, UserBytes34, UserBytesMask);
|
||||
if (result != HAL_OK)
|
||||
{
|
||||
sensor->f.other_err_cnt++;
|
||||
return result;
|
||||
}
|
||||
result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
||||
result = DS18B20_ReadScratchpad(sensor->onewire, (uint8_t *)&sensor->sensROM, (uint8_t *)&sensor->scratchpad);
|
||||
if (result != HAL_OK)
|
||||
{
|
||||
return result;
|
||||
|
||||
@@ -88,7 +88,7 @@ typedef struct
|
||||
unsigned isLost:1; ///< Ôëàã ïîòåðè ñâÿçè
|
||||
|
||||
OneWire_t *onewire; ///< Èíòåðôåéñ OneWire
|
||||
uint8_t sensROM[DALLAS_ROM_SIZE]; ///< ROM-êîä äàò÷èêà
|
||||
uint64_t sensROM; ///< ROM-êîä äàò÷èêà
|
||||
|
||||
DALLAS_ScratchpadTypeDef scratchpad; ///< Scratchpad äàò÷èêà
|
||||
float temperature; ///< Òåêóùàÿ òåìïåðàòóðà
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -147,6 +147,7 @@ typedef struct
|
||||
uint8_t UnknownCnt;
|
||||
uint64_t ROMtoDefine;
|
||||
PCHSens_LocationTypeDef LocationtoDefine;
|
||||
PCHSens_SensorTypeDef *senstoDefine;
|
||||
}PCHSens_UnknownSensorsTypeDef;
|
||||
|
||||
|
||||
@@ -157,6 +158,7 @@ HAL_StatusTypeDef PCHSens_AddSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* s
|
||||
HAL_StatusTypeDef PCHSens_InitModule(OneWire_t *onewire, PCHSens_ModuleTypeDef* module, uint16_t location, uint8_t init);
|
||||
HAL_StatusTypeDef PCHSens_ReadTemperature(PCHSens_ModuleTypeDef *module);
|
||||
HAL_StatusTypeDef PCHSens_CheckSensor(OneWire_t *onewire, PCHSens_SensorTypeDef* sensor);
|
||||
HAL_StatusTypeDef PCHSens_DefineUnknownSensor(PCHSens_UnknownSensorsTypeDef *unknowns, PCHSens_SensorTypeDef *sensor);
|
||||
|
||||
void PCHSens_FirstInit(void);
|
||||
#endif // #ifndef PCH_SENSORS_H
|
||||
@@ -145,10 +145,43 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||
<Name>-U53FF72064980555724221187 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL08000 -FP0($$Device:STM32F103C6$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
|
||||
<Name>-U53FF72064980555724221187 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL08000 -FP0($$Device:STM32F103C6$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2</Name>
|
||||
</SetRegEntry>
|
||||
</TargetDriverDllRegistry>
|
||||
<Breakpoint/>
|
||||
<Breakpoint>
|
||||
<Bp>
|
||||
<Number>0</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>236</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134229812</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>..\..\DS18B20\pch_sensors.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\ds18b20\../../DS18B20/pch_sensors.c\236</Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>1</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>70</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>134231004</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>1</BreakIfRCount>
|
||||
<Filename>..\..\DS18B20\pch_sensors.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression>\\ds18b20\../../DS18B20/pch_sensors.c\70</Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
<count>0</count>
|
||||
@@ -163,22 +196,7 @@
|
||||
<Ww>
|
||||
<count>2</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>ROM</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>3</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>sensor</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>4</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>initlocation</ItemText>
|
||||
</Ww>
|
||||
<Ww>
|
||||
<count>5</count>
|
||||
<WinNumber>1</WinNumber>
|
||||
<ItemText>scratchpad</ItemText>
|
||||
<ItemText>UnknownSensors</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow1>
|
||||
<WatchWindow2>
|
||||
@@ -190,7 +208,7 @@
|
||||
<Ww>
|
||||
<count>1</count>
|
||||
<WinNumber>2</WinNumber>
|
||||
<ItemText>init_find</ItemText>
|
||||
<ItemText>UnknownSensors</ItemText>
|
||||
</Ww>
|
||||
</WatchWindow2>
|
||||
<Tracepoint>
|
||||
|
||||
Reference in New Issue
Block a user