From c576493b74a5383c0271b7cf19dad88274d88f83 Mon Sep 17 00:00:00 2001 From: Aolgeirson Date: Fri, 13 Mar 2026 17:54:19 -0400 Subject: [PATCH 1/5] fixed p3t bitshift --- general/src/p3t1755.c | 299 +++++++++++++++++++----------------------- 1 file changed, 137 insertions(+), 162 deletions(-) diff --git a/general/src/p3t1755.c b/general/src/p3t1755.c index 3dbccf1e..b5f85a8c 100644 --- a/general/src/p3t1755.c +++ b/general/src/p3t1755.c @@ -7,222 +7,197 @@ #include "c_utils.h" void p3t1755_init(p3t1755_t *p3t, WritePtr write, ReadPtr read, - uint16_t dev_addr) -{ - p3t->write = write; - p3t->read = read; - p3t->dev_addr = dev_addr; + uint16_t dev_addr) { + p3t->write = write; + p3t->read = read; + p3t->dev_addr = dev_addr << 1; } int p3t1755_write_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, - uint8_t length) -{ - return p3t->write(p3t->dev_addr, reg, data, length); + uint8_t length) { + return p3t->write(p3t->dev_addr, reg, data, length); } int p3t1755_read_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, - uint8_t length) -{ - return p3t->read(p3t->dev_addr, reg, data, length); + uint8_t length) { + return p3t->read(p3t->dev_addr, reg, data, length); } -int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c) -{ - uint8_t temp_reg[2]; +int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c) { + uint8_t temp_reg[2]; - int status = p3t1755_read_reg(p3t, p3t1755_TEMPERATURE, temp_reg, - sizeof(temp_reg)); - if (status != 0) { - return status; - } + int status = + p3t1755_read_reg(p3t, p3t1755_TEMPERATURE, temp_reg, sizeof(temp_reg)); + if (status != 0) { + return status; + } - *temp_c = p3t1755_RAW_TO_CELSIUS( - uint8_to_uint16(temp_reg[0], temp_reg[1])); - return status; + *temp_c = p3t1755_RAW_TO_CELSIUS(uint8_to_uint16(temp_reg[0], temp_reg[1])); + return status; } int p3t1755_configure(p3t1755_t *p3t, uint8_t shutdown, uint8_t thermostat, - uint8_t polarity, uint8_t fault_queue, - uint8_t conversion_time) -{ - uint8_t config = 0; - - if (shutdown) { - config |= p3t1755_SHUTDOWN_MODE_MASK; - } - if (thermostat) { - config |= p3t1755_THERMOSTAT_MODE_MASK; - } - if (polarity) { - config |= p3t1755_POLARITY_MASK; - } - config |= (fault_queue & p3t1755_FAULT_QUEUE_MASK); - config |= (conversion_time & p3t1755_CONVERSION_TIME_MASK); - - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); + uint8_t polarity, uint8_t fault_queue, + uint8_t conversion_time) { + uint8_t config = 0; + + if (shutdown) { + config |= p3t1755_SHUTDOWN_MODE_MASK; + } + if (thermostat) { + config |= p3t1755_THERMOSTAT_MODE_MASK; + } + if (polarity) { + config |= p3t1755_POLARITY_MASK; + } + config |= (fault_queue & p3t1755_FAULT_QUEUE_MASK); + config |= (conversion_time & p3t1755_CONVERSION_TIME_MASK); + + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); } -int p3t1755_set_shutdown_mode(p3t1755_t *p3t, uint8_t enable) -{ - uint8_t config; +int p3t1755_set_shutdown_mode(p3t1755_t *p3t, uint8_t enable) { + uint8_t config; - int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); - if (status != 0) { - return status; - } + int status = + p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + if (status != 0) { + return status; + } - if (enable != 0) { - config |= p3t1755_SHUTDOWN_MODE_MASK; - } else { - config &= ~p3t1755_SHUTDOWN_MODE_MASK; - } + if (enable != 0) { + config |= p3t1755_SHUTDOWN_MODE_MASK; + } else { + config &= ~p3t1755_SHUTDOWN_MODE_MASK; + } - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); } -int p3t1755_set_thermostat_mode(p3t1755_t *p3t, uint8_t enable) -{ - uint8_t config; +int p3t1755_set_thermostat_mode(p3t1755_t *p3t, uint8_t enable) { + uint8_t config; - int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); - if (status != 0) { - return status; - } + int status = + p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + if (status != 0) { + return status; + } - if (enable != 0) { - config |= p3t1755_THERMOSTAT_MODE_MASK; - } else { - config &= ~p3t1755_THERMOSTAT_MODE_MASK; - } + if (enable != 0) { + config |= p3t1755_THERMOSTAT_MODE_MASK; + } else { + config &= ~p3t1755_THERMOSTAT_MODE_MASK; + } - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); } -int p3t1755_set_one_shot_mode(p3t1755_t *p3t, uint8_t enable) -{ - uint8_t config; +int p3t1755_set_one_shot_mode(p3t1755_t *p3t, uint8_t enable) { + uint8_t config; - int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); - if (status != 0) { - return status; - } + int status = + p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + if (status != 0) { + return status; + } - if (enable != 0) { - config |= p3t1755_ONE_SHOT_MASK; - } else { - config &= ~p3t1755_ONE_SHOT_MASK; - } + if (enable != 0) { + config |= p3t1755_ONE_SHOT_MASK; + } else { + config &= ~p3t1755_ONE_SHOT_MASK; + } - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); } -int p3t1755_set_polarity(p3t1755_t *p3t, uint8_t setting) -{ - uint8_t config; +int p3t1755_set_polarity(p3t1755_t *p3t, uint8_t setting) { + uint8_t config; - int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); - if (status != 0) { - return status; - } + int status = + p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + if (status != 0) { + return status; + } - if (setting != 0) { - config |= p3t1755_POLARITY_MASK; - } else { - config &= ~p3t1755_POLARITY_MASK; - } + if (setting != 0) { + config |= p3t1755_POLARITY_MASK; + } else { + config &= ~p3t1755_POLARITY_MASK; + } - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); } -int p3t1755_set_fault_queue(p3t1755_t *p3t, uint8_t data) -{ - uint8_t config; +int p3t1755_set_fault_queue(p3t1755_t *p3t, uint8_t data) { + uint8_t config; - int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); - if (status != 0) { - return status; - } + int status = + p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + if (status != 0) { + return status; + } - config &= ~p3t1755_FAULT_QUEUE_MASK; - config |= (data & p3t1755_FAULT_QUEUE_MASK); + config &= ~p3t1755_FAULT_QUEUE_MASK; + config |= (data & p3t1755_FAULT_QUEUE_MASK); - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); } -int p3t1755_set_conversion_time(p3t1755_t *p3t, uint8_t data) -{ - uint8_t config; +int p3t1755_set_conversion_time(p3t1755_t *p3t, uint8_t data) { + uint8_t config; - int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); - if (status != 0) { - return status; - } + int status = + p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + if (status != 0) { + return status; + } - config &= ~p3t1755_CONVERSION_TIME_MASK; - config |= (data & p3t1755_CONVERSION_TIME_MASK); + config &= ~p3t1755_CONVERSION_TIME_MASK; + config |= (data & p3t1755_CONVERSION_TIME_MASK); - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, - sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); } -int p3t1755_read_high_temp(p3t1755_t *p3t, float *temp_c) -{ - uint8_t high_temp_reg[2]; +int p3t1755_read_high_temp(p3t1755_t *p3t, float *temp_c) { + uint8_t high_temp_reg[2]; - int status = p3t1755_read_reg(p3t, p3t1755_T_HIGH, high_temp_reg, - sizeof(high_temp_reg)); - if (status != 0) { - return status; - } + int status = p3t1755_read_reg(p3t, p3t1755_T_HIGH, high_temp_reg, + sizeof(high_temp_reg)); + if (status != 0) { + return status; + } - *temp_c = p3t1755_RAW_TO_CELSIUS( - uint8_to_uint16(high_temp_reg[0], high_temp_reg[1])); - return status; + *temp_c = p3t1755_RAW_TO_CELSIUS( + uint8_to_uint16(high_temp_reg[0], high_temp_reg[1])); + return status; } -int p3t1755_read_low_temp(p3t1755_t *p3t, float *temp_c) -{ - uint8_t low_temp_reg[2]; +int p3t1755_read_low_temp(p3t1755_t *p3t, float *temp_c) { + uint8_t low_temp_reg[2]; - int status = p3t1755_read_reg(p3t, p3t1755_T_LOW, low_temp_reg, - sizeof(low_temp_reg)); - if (status != 0) { - return status; - } + int status = + p3t1755_read_reg(p3t, p3t1755_T_LOW, low_temp_reg, sizeof(low_temp_reg)); + if (status != 0) { + return status; + } - *temp_c = p3t1755_RAW_TO_CELSIUS( - uint8_to_uint16(low_temp_reg[0], low_temp_reg[1])); - return status; + *temp_c = + p3t1755_RAW_TO_CELSIUS(uint8_to_uint16(low_temp_reg[0], low_temp_reg[1])); + return status; } -int p3t1755_set_high_temp(p3t1755_t *p3t, float temp_c) -{ - uint16_t raw_temp = p3t1755_CELSIUS_TO_RAW(temp_c); - uint8_t temp_data[2]; - uint16_to_uint8(raw_temp, temp_data); +int p3t1755_set_high_temp(p3t1755_t *p3t, float temp_c) { + uint16_t raw_temp = p3t1755_CELSIUS_TO_RAW(temp_c); + uint8_t temp_data[2]; + uint16_to_uint8(raw_temp, temp_data); - return p3t1755_write_reg(p3t, p3t1755_T_HIGH, temp_data, - sizeof(temp_data)); + return p3t1755_write_reg(p3t, p3t1755_T_HIGH, temp_data, sizeof(temp_data)); } -int p3t1755_set_low_temp(p3t1755_t *p3t, float temp_c) -{ - uint16_t raw_temp = p3t1755_CELSIUS_TO_RAW(temp_c); - uint8_t temp_data[2]; - uint16_to_uint8(raw_temp, temp_data); +int p3t1755_set_low_temp(p3t1755_t *p3t, float temp_c) { + uint16_t raw_temp = p3t1755_CELSIUS_TO_RAW(temp_c); + uint8_t temp_data[2]; + uint16_to_uint8(raw_temp, temp_data); - return p3t1755_write_reg(p3t, p3t1755_T_LOW, temp_data, - sizeof(temp_data)); -} \ No newline at end of file + return p3t1755_write_reg(p3t, p3t1755_T_LOW, temp_data, sizeof(temp_data)); +} From 6dbd2775abd4aec77ca18a0ca17ed3d02275bcba Mon Sep 17 00:00:00 2001 From: Aolgeirson Date: Sun, 15 Mar 2026 18:10:37 -0400 Subject: [PATCH 2/5] progress on raw to temp --- general/include/p3t1755.h | 60 +++++++++++++++++++++------------------ general/src/p3t1755.c | 13 ++++++++- 2 files changed, 45 insertions(+), 28 deletions(-) diff --git a/general/include/p3t1755.h b/general/include/p3t1755.h index 7ecf3b3f..f5924fc4 100644 --- a/general/include/p3t1755.h +++ b/general/include/p3t1755.h @@ -5,18 +5,22 @@ #ifndef p3t1755_H #define p3t1755_H -#include #include +#include // REGISTERS -// Temperature register: contains two 8-bit data bytes; to store the measured Temp data. +// Temperature register: contains two 8-bit data bytes; to store the measured +// Temp data. #define p3t1755_TEMPERATURE 0x00 // read only -// Configuration register: contains a single 8-bit data byte; to set the device operating condition +// Configuration register: contains a single 8-bit data byte; to set the device +// operating condition #define p3t1755_CONFIGURATION 0x01 -// T_low register: Hysteresis register, it contains two 8-bit data bytes to store the hysteresis T_low limit; default = 75 °C. +// T_low register: Hysteresis register, it contains two 8-bit data bytes to +// store the hysteresis T_low limit; default = 75 °C. #define p3t1755_T_LOW 0x02 -// T_high register: Overtemperature shut down threshold register, it contains two 8-bit data bytes to -// store the overtemperature shutdown T_high limit; default = 80 °C. +// T_high register: Overtemperature shut down threshold register, it contains +// two 8-bit data bytes to store the overtemperature shutdown T_high limit; +// default = 80 °C. #define p3t1755_T_HIGH 0x03 // TEMPERATURE REGISTER FORMAT @@ -26,56 +30,58 @@ #define p3t1755_TEMP_MAX 125.0f #define p3t1755_RAW_TO_CELSIUS(raw) (((int16_t)(raw)) * p3t1755_TEMP_RESOLUTION) -#define p3t1755_CELSIUS_TO_RAW(temp) \ - ((uint16_t)((int16_t)((temp) / p3t1755_TEMP_RESOLUTION))) +#define p3t1755_CELSIUS_TO_RAW(temp) \ + ((uint16_t)((int16_t)((temp) / p3t1755_TEMP_RESOLUTION))) // CONFIGURATION MASKS -#define p3t1755_SHUTDOWN_MODE_MASK 0x01 // Bit 0 +#define p3t1755_SHUTDOWN_MODE_MASK 0x01 // Bit 0 #define p3t1755_THERMOSTAT_MODE_MASK 0x02 // Bit 1 -#define p3t1755_POLARITY_MASK 0x04 // Bit 2 -#define p3t1755_FAULT_QUEUE_MASK 0x18 // Bits 4-3 +#define p3t1755_POLARITY_MASK 0x04 // Bit 2 +#define p3t1755_FAULT_QUEUE_MASK 0x18 // Bits 4-3 #define p3t1755_CONVERSION_TIME_MASK 0x60 // Bits 6-5 -#define p3t1755_ONE_SHOT_MASK 0x80 // Bit 7 +#define p3t1755_ONE_SHOT_MASK 0x80 // Bit 7 // FAULT QUEUE SETTINGS -#define p3t1755_1_CONSECUTIVE_FAULT 0x00 +#define p3t1755_1_CONSECUTIVE_FAULT 0x00 #define p3t1755_2_CONSECUTIVE_FAULTS 0x08 // default #define p3t1755_4_CONSECUTIVE_FAULTS 0x10 #define p3t1755_6_CONSECUTIVE_FAULTS 0x18 // CONVERSION TIME SETTINGS #define p3t1755_27_5MS_CONVERSION_TIME 0x00 -#define p3t1755_55MS_CONVERSION_TIME 0x20 // default -#define p3t1755_110MS_CONVERSION_TIME 0x40 -#define p3t1755_220MS_CONVERSION_TIME 0x60 +#define p3t1755_55MS_CONVERSION_TIME 0x20 // default +#define p3t1755_110MS_CONVERSION_TIME 0x40 +#define p3t1755_220MS_CONVERSION_TIME 0x60 // Function Pointers typedef int32_t (*WritePtr)(uint16_t dev_addr, uint16_t reg, uint8_t *data, - uint8_t length); + uint8_t length); typedef int32_t (*ReadPtr)(uint16_t dev_addr, uint16_t reg, uint8_t *data, - uint8_t length); + uint8_t length); typedef struct { - uint16_t dev_addr; - WritePtr write; - ReadPtr read; + uint16_t dev_addr; + WritePtr write; + ReadPtr read; } p3t1755_t; +static inline int16_t p3t1755_raw_to_celsius(uint16_t raw); + void p3t1755_init(p3t1755_t *p3t, WritePtr write, ReadPtr read, - uint16_t dev_addr); + uint16_t dev_addr); int p3t1755_read_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, - uint8_t length); + uint8_t length); int p3t1755_write_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, - uint8_t length); + uint8_t length); // Reads current temp in celcius int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c); // Config functions int p3t1755_configure(p3t1755_t *p3t, uint8_t shutdown, uint8_t thermostat, - uint8_t polarity, uint8_t fault_queue, - uint8_t conversion_time); + uint8_t polarity, uint8_t fault_queue, + uint8_t conversion_time); int p3t1755_set_shutdown_mode(p3t1755_t *p3t, uint8_t enable); int p3t1755_set_thermostat_mode(p3t1755_t *p3t, uint8_t enable); int p3t1755_set_one_shot_mode(p3t1755_t *p3t, uint8_t enable); @@ -90,4 +96,4 @@ int p3t1755_read_low_temp(p3t1755_t *p3t, float *temp_c); int p3t1755_set_high_temp(p3t1755_t *p3t, float temp_c); int p3t1755_set_low_temp(p3t1755_t *p3t, float temp_c); -#endif \ No newline at end of file +#endif diff --git a/general/src/p3t1755.c b/general/src/p3t1755.c index b5f85a8c..7aeea227 100644 --- a/general/src/p3t1755.c +++ b/general/src/p3t1755.c @@ -5,6 +5,8 @@ #include "p3t1755.h" #include "c_utils.h" +#include "u_tx_debug.h" +#include void p3t1755_init(p3t1755_t *p3t, WritePtr write, ReadPtr read, uint16_t dev_addr) { @@ -23,6 +25,14 @@ int p3t1755_read_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, return p3t->read(p3t->dev_addr, reg, data, length); } +inline int16_t p3t1755_raw_to_celsius(uint16_t raw) { + PRINTLN_INFO("raw temp: %d", raw); + if (raw & 1 << 11) { // Check if sign bit is set |-> t<0 + return -(int16_t)(raw * p3t1755_TEMP_RESOLUTION); + } else + return (int16_t)(raw * p3t1755_TEMP_RESOLUTION); +} + int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c) { uint8_t temp_reg[2]; @@ -32,7 +42,8 @@ int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c) { return status; } - *temp_c = p3t1755_RAW_TO_CELSIUS(uint8_to_uint16(temp_reg[0], temp_reg[1])); + *temp_c = p3t1755_raw_to_celsius( + uint8_to_uint16(temp_reg[0] >> 4, temp_reg[1] >> 4)); return status; } From 0b337d4b5a8ad23a27abfe50038b75bd53534986 Mon Sep 17 00:00:00 2001 From: Aolgeirson Date: Fri, 20 Mar 2026 13:48:41 -0400 Subject: [PATCH 3/5] int |-> float fixed p3t readings --- general/include/p3t1755.h | 2 +- general/src/p3t1755.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/general/include/p3t1755.h b/general/include/p3t1755.h index f5924fc4..dcd25b7b 100644 --- a/general/include/p3t1755.h +++ b/general/include/p3t1755.h @@ -65,7 +65,7 @@ typedef struct { ReadPtr read; } p3t1755_t; -static inline int16_t p3t1755_raw_to_celsius(uint16_t raw); +static inline float p3t1755_raw_to_celsius(uint16_t raw); void p3t1755_init(p3t1755_t *p3t, WritePtr write, ReadPtr read, uint16_t dev_addr); diff --git a/general/src/p3t1755.c b/general/src/p3t1755.c index 7aeea227..526d7e08 100644 --- a/general/src/p3t1755.c +++ b/general/src/p3t1755.c @@ -25,12 +25,12 @@ int p3t1755_read_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, return p3t->read(p3t->dev_addr, reg, data, length); } -inline int16_t p3t1755_raw_to_celsius(uint16_t raw) { +inline float p3t1755_raw_to_celsius(uint16_t raw) { PRINTLN_INFO("raw temp: %d", raw); if (raw & 1 << 11) { // Check if sign bit is set |-> t<0 - return -(int16_t)(raw * p3t1755_TEMP_RESOLUTION); + return -(raw * p3t1755_TEMP_RESOLUTION); } else - return (int16_t)(raw * p3t1755_TEMP_RESOLUTION); + return (raw * p3t1755_TEMP_RESOLUTION); } int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c) { From f6b963142cb25da6978239e0a5b8d24ecef9bd25 Mon Sep 17 00:00:00 2001 From: Caio DaSilva Date: Fri, 20 Mar 2026 15:23:13 -0400 Subject: [PATCH 4/5] fix header --- general/include/p3t1755.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/general/include/p3t1755.h b/general/include/p3t1755.h index dcd25b7b..fa19bc86 100644 --- a/general/include/p3t1755.h +++ b/general/include/p3t1755.h @@ -65,7 +65,7 @@ typedef struct { ReadPtr read; } p3t1755_t; -static inline float p3t1755_raw_to_celsius(uint16_t raw); +float p3t1755_raw_to_celsius(uint16_t raw); void p3t1755_init(p3t1755_t *p3t, WritePtr write, ReadPtr read, uint16_t dev_addr); From df9cd915f6e17cc8fecfe29b80593b3b06d1780e Mon Sep 17 00:00:00 2001 From: Caio DaSilva Date: Fri, 20 Mar 2026 15:25:54 -0400 Subject: [PATCH 5/5] format --- general/include/p3t1755.h | 40 ++--- general/src/p3t1755.c | 317 ++++++++++++++++++++------------------ 2 files changed, 191 insertions(+), 166 deletions(-) diff --git a/general/include/p3t1755.h b/general/include/p3t1755.h index fa19bc86..c62fbb41 100644 --- a/general/include/p3t1755.h +++ b/general/include/p3t1755.h @@ -30,58 +30,58 @@ #define p3t1755_TEMP_MAX 125.0f #define p3t1755_RAW_TO_CELSIUS(raw) (((int16_t)(raw)) * p3t1755_TEMP_RESOLUTION) -#define p3t1755_CELSIUS_TO_RAW(temp) \ - ((uint16_t)((int16_t)((temp) / p3t1755_TEMP_RESOLUTION))) +#define p3t1755_CELSIUS_TO_RAW(temp) \ + ((uint16_t)((int16_t)((temp) / p3t1755_TEMP_RESOLUTION))) // CONFIGURATION MASKS -#define p3t1755_SHUTDOWN_MODE_MASK 0x01 // Bit 0 +#define p3t1755_SHUTDOWN_MODE_MASK 0x01 // Bit 0 #define p3t1755_THERMOSTAT_MODE_MASK 0x02 // Bit 1 -#define p3t1755_POLARITY_MASK 0x04 // Bit 2 -#define p3t1755_FAULT_QUEUE_MASK 0x18 // Bits 4-3 +#define p3t1755_POLARITY_MASK 0x04 // Bit 2 +#define p3t1755_FAULT_QUEUE_MASK 0x18 // Bits 4-3 #define p3t1755_CONVERSION_TIME_MASK 0x60 // Bits 6-5 -#define p3t1755_ONE_SHOT_MASK 0x80 // Bit 7 +#define p3t1755_ONE_SHOT_MASK 0x80 // Bit 7 // FAULT QUEUE SETTINGS -#define p3t1755_1_CONSECUTIVE_FAULT 0x00 +#define p3t1755_1_CONSECUTIVE_FAULT 0x00 #define p3t1755_2_CONSECUTIVE_FAULTS 0x08 // default #define p3t1755_4_CONSECUTIVE_FAULTS 0x10 #define p3t1755_6_CONSECUTIVE_FAULTS 0x18 // CONVERSION TIME SETTINGS #define p3t1755_27_5MS_CONVERSION_TIME 0x00 -#define p3t1755_55MS_CONVERSION_TIME 0x20 // default -#define p3t1755_110MS_CONVERSION_TIME 0x40 -#define p3t1755_220MS_CONVERSION_TIME 0x60 +#define p3t1755_55MS_CONVERSION_TIME 0x20 // default +#define p3t1755_110MS_CONVERSION_TIME 0x40 +#define p3t1755_220MS_CONVERSION_TIME 0x60 // Function Pointers typedef int32_t (*WritePtr)(uint16_t dev_addr, uint16_t reg, uint8_t *data, - uint8_t length); + uint8_t length); typedef int32_t (*ReadPtr)(uint16_t dev_addr, uint16_t reg, uint8_t *data, - uint8_t length); + uint8_t length); typedef struct { - uint16_t dev_addr; - WritePtr write; - ReadPtr read; + uint16_t dev_addr; + WritePtr write; + ReadPtr read; } p3t1755_t; float p3t1755_raw_to_celsius(uint16_t raw); void p3t1755_init(p3t1755_t *p3t, WritePtr write, ReadPtr read, - uint16_t dev_addr); + uint16_t dev_addr); int p3t1755_read_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, - uint8_t length); + uint8_t length); int p3t1755_write_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, - uint8_t length); + uint8_t length); // Reads current temp in celcius int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c); // Config functions int p3t1755_configure(p3t1755_t *p3t, uint8_t shutdown, uint8_t thermostat, - uint8_t polarity, uint8_t fault_queue, - uint8_t conversion_time); + uint8_t polarity, uint8_t fault_queue, + uint8_t conversion_time); int p3t1755_set_shutdown_mode(p3t1755_t *p3t, uint8_t enable); int p3t1755_set_thermostat_mode(p3t1755_t *p3t, uint8_t enable); int p3t1755_set_one_shot_mode(p3t1755_t *p3t, uint8_t enable); diff --git a/general/src/p3t1755.c b/general/src/p3t1755.c index 526d7e08..a8945f98 100644 --- a/general/src/p3t1755.c +++ b/general/src/p3t1755.c @@ -9,206 +9,231 @@ #include void p3t1755_init(p3t1755_t *p3t, WritePtr write, ReadPtr read, - uint16_t dev_addr) { - p3t->write = write; - p3t->read = read; - p3t->dev_addr = dev_addr << 1; + uint16_t dev_addr) +{ + p3t->write = write; + p3t->read = read; + p3t->dev_addr = dev_addr << 1; } int p3t1755_write_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, - uint8_t length) { - return p3t->write(p3t->dev_addr, reg, data, length); + uint8_t length) +{ + return p3t->write(p3t->dev_addr, reg, data, length); } int p3t1755_read_reg(p3t1755_t *p3t, uint16_t reg, uint8_t *data, - uint8_t length) { - return p3t->read(p3t->dev_addr, reg, data, length); + uint8_t length) +{ + return p3t->read(p3t->dev_addr, reg, data, length); } -inline float p3t1755_raw_to_celsius(uint16_t raw) { - PRINTLN_INFO("raw temp: %d", raw); - if (raw & 1 << 11) { // Check if sign bit is set |-> t<0 - return -(raw * p3t1755_TEMP_RESOLUTION); - } else - return (raw * p3t1755_TEMP_RESOLUTION); +inline float p3t1755_raw_to_celsius(uint16_t raw) +{ + PRINTLN_INFO("raw temp: %d", raw); + if (raw & 1 << 11) { // Check if sign bit is set |-> t<0 + return -(raw * p3t1755_TEMP_RESOLUTION); + } else + return (raw * p3t1755_TEMP_RESOLUTION); } -int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c) { - uint8_t temp_reg[2]; +int p3t1755_read_temperature(p3t1755_t *p3t, float *temp_c) +{ + uint8_t temp_reg[2]; - int status = - p3t1755_read_reg(p3t, p3t1755_TEMPERATURE, temp_reg, sizeof(temp_reg)); - if (status != 0) { - return status; - } + int status = p3t1755_read_reg(p3t, p3t1755_TEMPERATURE, temp_reg, + sizeof(temp_reg)); + if (status != 0) { + return status; + } - *temp_c = p3t1755_raw_to_celsius( - uint8_to_uint16(temp_reg[0] >> 4, temp_reg[1] >> 4)); - return status; + *temp_c = p3t1755_raw_to_celsius( + uint8_to_uint16(temp_reg[0] >> 4, temp_reg[1] >> 4)); + return status; } int p3t1755_configure(p3t1755_t *p3t, uint8_t shutdown, uint8_t thermostat, - uint8_t polarity, uint8_t fault_queue, - uint8_t conversion_time) { - uint8_t config = 0; + uint8_t polarity, uint8_t fault_queue, + uint8_t conversion_time) +{ + uint8_t config = 0; + + if (shutdown) { + config |= p3t1755_SHUTDOWN_MODE_MASK; + } + if (thermostat) { + config |= p3t1755_THERMOSTAT_MODE_MASK; + } + if (polarity) { + config |= p3t1755_POLARITY_MASK; + } + config |= (fault_queue & p3t1755_FAULT_QUEUE_MASK); + config |= (conversion_time & p3t1755_CONVERSION_TIME_MASK); + + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); +} + +int p3t1755_set_shutdown_mode(p3t1755_t *p3t, uint8_t enable) +{ + uint8_t config; + + int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); + if (status != 0) { + return status; + } - if (shutdown) { - config |= p3t1755_SHUTDOWN_MODE_MASK; - } - if (thermostat) { - config |= p3t1755_THERMOSTAT_MODE_MASK; - } - if (polarity) { - config |= p3t1755_POLARITY_MASK; - } - config |= (fault_queue & p3t1755_FAULT_QUEUE_MASK); - config |= (conversion_time & p3t1755_CONVERSION_TIME_MASK); + if (enable != 0) { + config |= p3t1755_SHUTDOWN_MODE_MASK; + } else { + config &= ~p3t1755_SHUTDOWN_MODE_MASK; + } - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); } -int p3t1755_set_shutdown_mode(p3t1755_t *p3t, uint8_t enable) { - uint8_t config; +int p3t1755_set_thermostat_mode(p3t1755_t *p3t, uint8_t enable) +{ + uint8_t config; - int status = - p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); - if (status != 0) { - return status; - } + int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); + if (status != 0) { + return status; + } - if (enable != 0) { - config |= p3t1755_SHUTDOWN_MODE_MASK; - } else { - config &= ~p3t1755_SHUTDOWN_MODE_MASK; - } + if (enable != 0) { + config |= p3t1755_THERMOSTAT_MODE_MASK; + } else { + config &= ~p3t1755_THERMOSTAT_MODE_MASK; + } - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); } -int p3t1755_set_thermostat_mode(p3t1755_t *p3t, uint8_t enable) { - uint8_t config; +int p3t1755_set_one_shot_mode(p3t1755_t *p3t, uint8_t enable) +{ + uint8_t config; - int status = - p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); - if (status != 0) { - return status; - } + int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); + if (status != 0) { + return status; + } - if (enable != 0) { - config |= p3t1755_THERMOSTAT_MODE_MASK; - } else { - config &= ~p3t1755_THERMOSTAT_MODE_MASK; - } + if (enable != 0) { + config |= p3t1755_ONE_SHOT_MASK; + } else { + config &= ~p3t1755_ONE_SHOT_MASK; + } - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); } -int p3t1755_set_one_shot_mode(p3t1755_t *p3t, uint8_t enable) { - uint8_t config; +int p3t1755_set_polarity(p3t1755_t *p3t, uint8_t setting) +{ + uint8_t config; - int status = - p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); - if (status != 0) { - return status; - } + int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); + if (status != 0) { + return status; + } - if (enable != 0) { - config |= p3t1755_ONE_SHOT_MASK; - } else { - config &= ~p3t1755_ONE_SHOT_MASK; - } + if (setting != 0) { + config |= p3t1755_POLARITY_MASK; + } else { + config &= ~p3t1755_POLARITY_MASK; + } - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); } -int p3t1755_set_polarity(p3t1755_t *p3t, uint8_t setting) { - uint8_t config; +int p3t1755_set_fault_queue(p3t1755_t *p3t, uint8_t data) +{ + uint8_t config; - int status = - p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); - if (status != 0) { - return status; - } + int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); + if (status != 0) { + return status; + } - if (setting != 0) { - config |= p3t1755_POLARITY_MASK; - } else { - config &= ~p3t1755_POLARITY_MASK; - } + config &= ~p3t1755_FAULT_QUEUE_MASK; + config |= (data & p3t1755_FAULT_QUEUE_MASK); - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); } -int p3t1755_set_fault_queue(p3t1755_t *p3t, uint8_t data) { - uint8_t config; +int p3t1755_set_conversion_time(p3t1755_t *p3t, uint8_t data) +{ + uint8_t config; - int status = - p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); - if (status != 0) { - return status; - } + int status = p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); + if (status != 0) { + return status; + } - config &= ~p3t1755_FAULT_QUEUE_MASK; - config |= (data & p3t1755_FAULT_QUEUE_MASK); + config &= ~p3t1755_CONVERSION_TIME_MASK; + config |= (data & p3t1755_CONVERSION_TIME_MASK); - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); + return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, + sizeof(config)); } -int p3t1755_set_conversion_time(p3t1755_t *p3t, uint8_t data) { - uint8_t config; +int p3t1755_read_high_temp(p3t1755_t *p3t, float *temp_c) +{ + uint8_t high_temp_reg[2]; - int status = - p3t1755_read_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); - if (status != 0) { - return status; - } + int status = p3t1755_read_reg(p3t, p3t1755_T_HIGH, high_temp_reg, + sizeof(high_temp_reg)); + if (status != 0) { + return status; + } - config &= ~p3t1755_CONVERSION_TIME_MASK; - config |= (data & p3t1755_CONVERSION_TIME_MASK); - - return p3t1755_write_reg(p3t, p3t1755_CONFIGURATION, &config, sizeof(config)); -} - -int p3t1755_read_high_temp(p3t1755_t *p3t, float *temp_c) { - uint8_t high_temp_reg[2]; - - int status = p3t1755_read_reg(p3t, p3t1755_T_HIGH, high_temp_reg, - sizeof(high_temp_reg)); - if (status != 0) { - return status; - } - - *temp_c = p3t1755_RAW_TO_CELSIUS( - uint8_to_uint16(high_temp_reg[0], high_temp_reg[1])); - return status; + *temp_c = p3t1755_RAW_TO_CELSIUS( + uint8_to_uint16(high_temp_reg[0], high_temp_reg[1])); + return status; } -int p3t1755_read_low_temp(p3t1755_t *p3t, float *temp_c) { - uint8_t low_temp_reg[2]; +int p3t1755_read_low_temp(p3t1755_t *p3t, float *temp_c) +{ + uint8_t low_temp_reg[2]; - int status = - p3t1755_read_reg(p3t, p3t1755_T_LOW, low_temp_reg, sizeof(low_temp_reg)); - if (status != 0) { - return status; - } + int status = p3t1755_read_reg(p3t, p3t1755_T_LOW, low_temp_reg, + sizeof(low_temp_reg)); + if (status != 0) { + return status; + } - *temp_c = - p3t1755_RAW_TO_CELSIUS(uint8_to_uint16(low_temp_reg[0], low_temp_reg[1])); - return status; + *temp_c = p3t1755_RAW_TO_CELSIUS( + uint8_to_uint16(low_temp_reg[0], low_temp_reg[1])); + return status; } -int p3t1755_set_high_temp(p3t1755_t *p3t, float temp_c) { - uint16_t raw_temp = p3t1755_CELSIUS_TO_RAW(temp_c); - uint8_t temp_data[2]; - uint16_to_uint8(raw_temp, temp_data); +int p3t1755_set_high_temp(p3t1755_t *p3t, float temp_c) +{ + uint16_t raw_temp = p3t1755_CELSIUS_TO_RAW(temp_c); + uint8_t temp_data[2]; + uint16_to_uint8(raw_temp, temp_data); - return p3t1755_write_reg(p3t, p3t1755_T_HIGH, temp_data, sizeof(temp_data)); + return p3t1755_write_reg(p3t, p3t1755_T_HIGH, temp_data, + sizeof(temp_data)); } -int p3t1755_set_low_temp(p3t1755_t *p3t, float temp_c) { - uint16_t raw_temp = p3t1755_CELSIUS_TO_RAW(temp_c); - uint8_t temp_data[2]; - uint16_to_uint8(raw_temp, temp_data); +int p3t1755_set_low_temp(p3t1755_t *p3t, float temp_c) +{ + uint16_t raw_temp = p3t1755_CELSIUS_TO_RAW(temp_c); + uint8_t temp_data[2]; + uint16_to_uint8(raw_temp, temp_data); - return p3t1755_write_reg(p3t, p3t1755_T_LOW, temp_data, sizeof(temp_data)); + return p3t1755_write_reg(p3t, p3t1755_T_LOW, temp_data, + sizeof(temp_data)); }