Merge pull request #1029 from pimoroni/feature/scd4x-low-power

SCD4X: API bump and possible low power support
main
Philip Howard 2025-01-15 11:59:00 +00:00 zatwierdzone przez GitHub
commit aa1e3f18b7
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
4 zmienionych plików z 20 dodań i 4 usunięć

@ -1 +1 @@
Subproject commit bcbb2190324d9d39ae38619dd4a8931a0b8cf049
Subproject commit 3b413b9c804dd7c4df11178e9cf2501b6f61fa2e

Wyświetl plik

@ -13,6 +13,7 @@ static MP_DEFINE_CONST_FUN_OBJ_KW(scd41_init_obj, 0, scd41_init);
// Start/Stop measurement, no args (module-level, so no "self")
static MP_DEFINE_CONST_FUN_OBJ_0(scd41_start_periodic_measurement_obj, scd41_start_periodic_measurement);
static MP_DEFINE_CONST_FUN_OBJ_0(scd41_start_low_power_periodic_measurement_obj, scd41_start_low_power_periodic_measurement);
static MP_DEFINE_CONST_FUN_OBJ_0(scd41_stop_periodic_measurement_obj, scd41_stop_periodic_measurement);
static MP_DEFINE_CONST_FUN_OBJ_0(scd41_get_data_ready_obj, scd41_get_data_ready);
@ -30,6 +31,7 @@ static const mp_map_elem_t scd41_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_breakout_scd41) },
{ MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&scd41_init_obj) },
{ MP_ROM_QSTR(MP_QSTR_start), MP_ROM_PTR(&scd41_start_periodic_measurement_obj) },
{ MP_ROM_QSTR(MP_QSTR_start_low_power), MP_ROM_PTR(&scd41_start_low_power_periodic_measurement_obj) },
{ MP_ROM_QSTR(MP_QSTR_stop), MP_ROM_PTR(&scd41_stop_periodic_measurement_obj) },
{ MP_ROM_QSTR(MP_QSTR_measure), MP_ROM_PTR(&scd41_read_measurement_obj) },
{ MP_ROM_QSTR(MP_QSTR_ready), MP_ROM_PTR(&scd41_get_data_ready_obj) },

Wyświetl plik

@ -64,20 +64,33 @@ mp_obj_t scd41_start_periodic_measurement() {
return mp_const_none;
}
mp_obj_t scd41_start_low_power_periodic_measurement() {
if(!scd41_initialised) {
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
return mp_const_none;
}
int error = scd4x_start_low_power_periodic_measurement();
if(error) {
mp_raise_msg(&mp_type_RuntimeError, FAIL_MSG);
}
return mp_const_none;
}
mp_obj_t scd41_get_data_ready() {
if(!scd41_initialised) {
mp_raise_msg(&mp_type_RuntimeError, NOT_INITIALISED_MSG);
return mp_const_none;
}
uint16_t data_ready = 0;
int error = scd4x_get_data_ready_status(&data_ready);
bool data_ready = false;
int error = scd4x_get_data_ready_flag(&data_ready);
if(error) {
mp_raise_msg(&mp_type_RuntimeError, READ_FAIL_MSG);
return mp_const_none;
}
// The datasheet doesn't really say *which* bit might be 1 if data is ready...
// so check if the least significant eleven bits are != 0
return (data_ready & 0x7ff) ? mp_const_true : mp_const_false;
return data_ready ? mp_const_true : mp_const_false;
}
mp_obj_t scd41_set_temperature_offset(mp_obj_t offset) {

Wyświetl plik

@ -5,6 +5,7 @@
// Declare the functions we'll make available in Python
extern mp_obj_t scd41_init(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
extern mp_obj_t scd41_start_periodic_measurement();
extern mp_obj_t scd41_start_low_power_periodic_measurement();
extern mp_obj_t scd41_stop_periodic_measurement();
extern mp_obj_t scd41_read_measurement();
extern mp_obj_t scd41_get_data_ready();