35 #include "ErriezOregonTHN128.h"
42 #define SET_ROL_ADDR(x) (((x) & 0x07) << 0)
44 #define GET_ROL_ADDR(x) (((x) & 0x07) << 0)
47 #define SET_CHANNEL(x) ((((x) - 1) & 0x03) << 6)
49 #define GET_CHANNEL(x) ((((x) >> 6) & 0x03) + 1)
52 #define SET_TEMP(x) ((((((uint32_t)(x) / 100) % 10)) << 16) | \
53 ((((uint32_t)(x) / 10) % 10) << 12) | \
56 #define GET_TEMP(x) (((((x) >> 16) & 0x0f) * 100) + \
57 ((((x) >> 12) & 0x0f) * 10) + \
61 #define SIGN_BIT (1UL << 21)
64 #define LOW_BAT_BIT (1UL << 23)
67 #define SET_CRC(x) ((uint32_t)(x) << 24)
69 #define GET_CRC(x) ((x) >> 24)
81 static uint8_t calcCrc(uint32_t rawData)
86 crc = ((rawData >> 16) & 0xff) + ((rawData >> 8) & 0xff) + ((rawData >> 0) & 0xff);
88 crc = (crc >> 8) + (crc & 0xff);
103 return calcCrc(rawData) ==
GET_CRC(rawData);
120 bool tempNegative =
false;
124 tempAbs = temperature;
125 if (temperature < 0) {
130 snprintf(temperatureStr, temperatureStrLen,
"%s%d.%d",
131 tempNegative ?
"-" :
"", (tempAbs / 10), tempAbs % 10);
165 rawData |=
SET_CRC(calcCrc(rawData));
195 return calcCrc(rawData) ==
GET_CRC(rawData);
uint32_t OregonTHN128_DataToRaw(OregonTHN128Data_t *data)
Convert data structure to 32-bit raw data.
bool OregonTHN128_RawToData(uint32_t rawData, OregonTHN128Data_t *data)
Cnonvert 32-bit raw data to OregonTHN128Data_t structure.
void OregonTHN128_TempToString(char *temperatureStr, uint8_t temperatureStrLen, int16_t temperature)
Convert temperature to string.
bool OregonTHN128_CheckCRC(uint32_t rawData)
Verify checksum.