mirror of
https://gitlab.com/Luci_/arduino-photometrics.git
synced 2026-04-03 11:35:37 +02:00
add test_get_struct, fixe some errors in storage_interace
This commit is contained in:
parent
2447fe2065
commit
0d40af3963
|
|
@ -101,33 +101,38 @@ void Storage_interface::get_struct(uint16_t offset, bool* timestamp, bool* is_fi
|
|||
flags = EEPROM.read(offset);
|
||||
|
||||
// Checking there if a struct is possibly at the index
|
||||
if ((flags & 0b1) == 0){
|
||||
if ((flags & 0b10000000) == 0){
|
||||
DLOGLN("Missing struct index or bad index")
|
||||
//while(true);
|
||||
}
|
||||
|
||||
// is the final package ?
|
||||
if ((flags & 0b00000100) != 0){
|
||||
*is_final_set = true;
|
||||
}
|
||||
|
||||
// timestamps reads
|
||||
*timestamp = false;
|
||||
if ((flags & 0b001) != 0 ){
|
||||
if ((flags & 0b00100000) != 0 ){
|
||||
*timestamp = true;
|
||||
*timestamp_schedule = EEPROM.read(offset + OFFSET_MEASURES_SCH);
|
||||
}
|
||||
*timestamp_schedule = 0;
|
||||
if (flags & 0b01){
|
||||
if (flags & 0b01000000){
|
||||
*timestamp = true;
|
||||
WARN_IF(EEPROM.read(offset + OFFSET_MEASURES_SCH) != 0, "Incoherent timestamp parameter in the header.")
|
||||
}
|
||||
|
||||
// photo res reads
|
||||
*photo_sensor = false;
|
||||
if (flags & 0b0001){
|
||||
if (flags & 0b00010000){
|
||||
*photo_sensor = true;
|
||||
*nb_photo_sensor = EEPROM.read(offset + OFFSET_NB_PHOTO_SENSOR);
|
||||
}
|
||||
|
||||
// temp res reads
|
||||
*temp_sensor = false;
|
||||
if (flags & 0b00001){
|
||||
if (flags & 0b00001000){
|
||||
*temp_sensor = true;
|
||||
*nb_temp_sensor = EEPROM.read(offset + OFFSET_NB_TEMP_SENSOR);
|
||||
}
|
||||
|
|
@ -136,7 +141,11 @@ void Storage_interface::get_struct(uint16_t offset, bool* timestamp, bool* is_fi
|
|||
*p_next_package = read_eeprom_uint16(offset + OFFSET_NEXT_PACKAGE);
|
||||
|
||||
// gather the number of measures
|
||||
*nb_measures = read_eeprom_uint16(offset + OFFSET_NB_TEMP_SENSOR);
|
||||
*nb_measures = read_eeprom_uint16(offset + OFFSET_NB_MEASURES);
|
||||
|
||||
// read type size of photo temperature measures
|
||||
*photo_size = EEPROM.read(offset + OFFSET_PHOTO_MEASURES_SIZE);
|
||||
*temp_size = EEPROM.read(offset + OFFSET_TEMP_MEASURES_SIZE);
|
||||
}
|
||||
|
||||
void Storage_interface::set_struct(uint16_t offset, bool timestamp, bool is_final_set, bool photo_sensor, bool temp_sensor, uint8_t timestamp_schedule, uint8_t nb_photo_sensor, uint8_t nb_temp_sensor, uint8_t photo_size, uint8_t temp_size){
|
||||
|
|
@ -151,18 +160,15 @@ void Storage_interface::set_struct(uint16_t offset, bool timestamp, bool is_fina
|
|||
|
||||
// Timestamp init struct
|
||||
|
||||
|
||||
if (timestamp && (timestamp_schedule == 0)) {
|
||||
flags = flags | 0b01000000;
|
||||
EEPROM.write(offset + OFFSET_MEASURES_SCH, 0); // Écrire 0 si pas de schedule
|
||||
}
|
||||
else if (timestamp_schedule != 0) {
|
||||
} else if (timestamp_schedule != 0) {
|
||||
flags = flags | 0b00100000;
|
||||
EEPROM.write(offset + OFFSET_MEASURES_SCH, timestamp_schedule);
|
||||
|
||||
WARN_IF(!timestamp, "Redundant/conflicting timestamp parameter (expected true for schedule).")
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
EEPROM.write(offset + OFFSET_MEASURES_SCH, 0);
|
||||
}
|
||||
|
||||
|
|
@ -198,7 +204,9 @@ void Storage_interface::set_struct(uint16_t offset, bool timestamp, bool is_fina
|
|||
// write flags header
|
||||
EEPROM.write(offset , flags);
|
||||
|
||||
//clear_eeprom_at(offset + OFFSET_START_DATA_MEASURES);
|
||||
// write types measures size
|
||||
EEPROM.write(offset + OFFSET_PHOTO_MEASURES_SIZE, photo_size);
|
||||
EEPROM.write(offset + OFFSET_TEMP_MEASURES_SIZE, temp_size);
|
||||
}
|
||||
|
||||
void Storage_interface::add_last_package(bool timestamp, bool is_final_set, bool photo_sensor, bool temp_sensor, uint8_t timestamp_schedule, uint8_t nb_photo_sensor, uint8_t nb_temp_sensor, uint8_t photo_size, uint8_t temp_size, uint16_t nb_measures){
|
||||
|
|
@ -246,10 +254,10 @@ void Storage_interface::get_measure(uint8_t* array_photo_val, uint8_t* array_tem
|
|||
*nb_temp = EEPROM.read(p_last_header + OFFSET_NB_TEMP_SENSOR);
|
||||
|
||||
flags = EEPROM.read(p_last_header);
|
||||
if((flags & 0b010) != 0){
|
||||
if((flags & 0b01000000) != 0){
|
||||
EEPROM.get(p_last_header + OFFSET_START_DATA_MEASURES, timestamp);
|
||||
idx += sizeof(uint32_t) * idx_measure;
|
||||
}else if ((flags & 0b001) != 0){
|
||||
}else if ((flags & 0b00100000) != 0){
|
||||
uint8_t schedule;
|
||||
schedule = EEPROM.read(p_last_header + OFFSET_MEASURES_SCH);
|
||||
WARN_IF(schedule == 0, "Struct error for timestamp scheduling.")
|
||||
|
|
|
|||
|
|
@ -4,60 +4,144 @@
|
|||
#include <EEPROM.h>
|
||||
|
||||
// uint32_t epoch = 1764249314;
|
||||
|
||||
// WARNING : copy from storage interface (if somes changes are apply on storageinterface's OFFSET_ apply it here too)
|
||||
static constexpr uint8_t OFFSET_MEASURES_SCH = 1, OFFSET_NB_PHOTO_SENSOR = 2, OFFSET_NB_TEMP_SENSOR = 3, OFFSET_PHOTO_MEASURES_SIZE = 4, OFFSET_TEMP_MEASURES_SIZE = 5, OFFSET_NB_MEASURES = 6, OFFSET_NEXT_PACKAGE = 8, OFFSET_START_DATA_MEASURES = 10; // unit in byte
|
||||
static constexpr uint16_t MEGA_2560_EEPROM_SIZE = 4096;
|
||||
|
||||
void test_put_get_struct(){
|
||||
void test_set_struct(){
|
||||
Storage_interface test;
|
||||
uint16_t offset = 0, r_next_package, r_nb_measures;
|
||||
uint16_t offset = 0;
|
||||
uint8_t schedule = 0, nb_photo_sensor = 2, nb_temp_sensor = 1, sizeofuint8 = sizeof(uint8_t);
|
||||
bool timestamp = true, is_final = true, photo_sensor = true, temp_sensor = true;
|
||||
|
||||
/**** classic case test ****/
|
||||
test.set_struct(offset, timestamp, is_final, photo_sensor, temp_sensor, schedule, nb_photo_sensor, nb_temp_sensor, sizeofuint8, sizeofuint8);
|
||||
|
||||
|
||||
|
||||
uint8_t r_schedule, r_nb_photo_sensor, r_nb_temp_sensor, r_sizeofuint8;
|
||||
bool r_timestamp, r_is_final, r_photo_sensor, r_temp_sensor;
|
||||
|
||||
uint8_t flags;
|
||||
flags = EEPROM.read(offset);
|
||||
|
||||
// if package flag right set
|
||||
TEST_ASSERT((flags & 0b10000000) != 0);
|
||||
TEST_ASSERT(flags & 0b10000000);
|
||||
|
||||
// test schedule flags
|
||||
TEST_ASSERT((flags & 0b01000000)!= 0);
|
||||
TEST_ASSERT(!((flags & 0b00100000) != 0));
|
||||
TEST_ASSERT(flags & 0b01000000);
|
||||
TEST_ASSERT(!(flags & 0b00100000));
|
||||
|
||||
// test schedule
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_MEASURES_SCH) == 0);
|
||||
// test schedule
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_MEASURES_SCH) == schedule);
|
||||
|
||||
TEST_ASSERT((flags & 0b00000100) != 0);
|
||||
// test photo res flag
|
||||
TEST_ASSERT(flags & 0b00010000);
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_NB_PHOTO_SENSOR) == nb_photo_sensor);
|
||||
|
||||
// test temp flag
|
||||
TEST_ASSERT(flags & 0b00001000);
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_NB_TEMP_SENSOR) == nb_temp_sensor);
|
||||
|
||||
// test if this package is the latest write
|
||||
TEST_ASSERT(flags & 0b00000100);
|
||||
|
||||
// test type size write
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_PHOTO_MEASURES_SIZE) == sizeofuint8);
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_TEMP_MEASURES_SIZE) == sizeofuint8);
|
||||
|
||||
/**** partial schedule timestamp case test ****/
|
||||
schedule = 3;
|
||||
test.set_struct(offset, timestamp, is_final, photo_sensor, temp_sensor, schedule, nb_photo_sensor, nb_temp_sensor, sizeofuint8, sizeofuint8);
|
||||
|
||||
flags = EEPROM.read(offset);
|
||||
|
||||
// test schedule flags
|
||||
TEST_ASSERT(!(flags & 0b01000000));
|
||||
TEST_ASSERT(flags & 0b00100000);
|
||||
|
||||
// test schedule
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_MEASURES_SCH) == schedule);
|
||||
|
||||
|
||||
/**** without timestamp case test ****/
|
||||
schedule = 0;
|
||||
timestamp = false;
|
||||
test.set_struct(offset, timestamp, is_final, photo_sensor, temp_sensor, schedule, nb_photo_sensor, nb_temp_sensor, sizeofuint8, sizeofuint8);
|
||||
|
||||
flags = EEPROM.read(offset);
|
||||
|
||||
// test schedule flags
|
||||
TEST_ASSERT(!(flags & 0b01000000));
|
||||
TEST_ASSERT(!(flags & 0b00100000));
|
||||
|
||||
// test schedule
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_MEASURES_SCH) == schedule);
|
||||
|
||||
|
||||
// test.get_struct(offset, &r_timestamp, &r_is_final, &r_photo_sensor, &r_temp_sensor, &r_schedule, &r_nb_photo_sensor, &r_nb_temp_sensor, &r_sizeofuint8, &r_sizeofuint8, &r_next_package, &r_nb_measures);
|
||||
// Serial.println(r_nb_,DEC);
|
||||
// if(r_is_final){
|
||||
// TEST_FAIL_MESSAGE("true");
|
||||
// }else{
|
||||
// TEST_FAIL_MESSAGE("false");
|
||||
// }
|
||||
// TEST_ASSERT(r_is_final == is_final);
|
||||
// TEST_ASSERT(r_nb_measures == 0);
|
||||
// TEST_ASSERT(r_timestamp == timestamp);
|
||||
// TEST_ASSERT(r_photo_sensor == photo_sensor);
|
||||
// TEST_ASSERT(r_temp_sensor == temp_sensor);
|
||||
// TEST_ASSERT(r_schedule == schedule);
|
||||
// TEST_ASSERT(r_nb_photo_sensor == nb_photo_sensor);
|
||||
// TEST_ASSERT(r_nb_temp_sensor == nb_temp_sensor);
|
||||
// TEST_ASSERT(r_sizeofuint8 == sizeofuint8);
|
||||
/**** without a type of sensor ****/
|
||||
schedule = 0;
|
||||
timestamp = true;
|
||||
photo_sensor = true;
|
||||
nb_photo_sensor = 14;
|
||||
temp_sensor = false;
|
||||
nb_temp_sensor = 0;
|
||||
test.set_struct(offset, timestamp, is_final, photo_sensor, temp_sensor, schedule, nb_photo_sensor, nb_temp_sensor, sizeofuint8, sizeofuint8);
|
||||
|
||||
flags = EEPROM.read(offset);
|
||||
|
||||
// test photo res flag
|
||||
TEST_ASSERT(flags & 0b00010000);
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_NB_PHOTO_SENSOR) == nb_photo_sensor);
|
||||
|
||||
// test temp flag
|
||||
TEST_ASSERT(!(flags & 0b00001000));
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_NB_TEMP_SENSOR) == nb_temp_sensor);
|
||||
|
||||
photo_sensor = false;
|
||||
nb_photo_sensor = 0;
|
||||
temp_sensor = true;
|
||||
nb_temp_sensor = 15;
|
||||
test.set_struct(offset, timestamp, is_final, photo_sensor, temp_sensor, schedule, nb_photo_sensor, nb_temp_sensor, sizeofuint8, sizeofuint8);
|
||||
|
||||
flags = EEPROM.read(offset);
|
||||
|
||||
// test photo res flag
|
||||
TEST_ASSERT(!(flags & 0b00010000));
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_NB_PHOTO_SENSOR) == nb_photo_sensor);
|
||||
|
||||
// test temp flag
|
||||
TEST_ASSERT(flags & 0b00001000);
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_NB_TEMP_SENSOR) == nb_temp_sensor);
|
||||
}
|
||||
|
||||
void test_get_struct(){
|
||||
|
||||
Storage_interface test;
|
||||
uint16_t offset = 0, r_next_package, r_nb_measures;
|
||||
uint8_t schedule = 0, nb_photo_sensor = 2, nb_temp_sensor = 1, sizeofuint8 = sizeof(uint8_t);
|
||||
bool timestamp = true, is_final = true, photo_sensor = true, temp_sensor = true;
|
||||
|
||||
void test(){
|
||||
bool yes = true;
|
||||
TEST_ASSERT(yes);
|
||||
/**** classic case test ****/
|
||||
test.set_struct(offset, timestamp, is_final, photo_sensor, temp_sensor, schedule, nb_photo_sensor, nb_temp_sensor, sizeofuint8, sizeofuint8);
|
||||
|
||||
uint8_t r_schedule, r_nb_photo_sensor, r_nb_temp_sensor, r_sizeof_temp, r_sizeof_photo;
|
||||
bool r_timestamp, r_is_final, r_photo_sensor, r_temp_sensor;
|
||||
//uint8_t flags;
|
||||
//flags = EEPROM.read(offset);
|
||||
|
||||
test.get_struct(offset, &r_timestamp, &r_is_final, &r_photo_sensor, &r_temp_sensor, &r_schedule, &r_nb_photo_sensor, &r_nb_temp_sensor, &r_sizeof_photo, &r_sizeof_temp, &r_next_package, &r_nb_measures);
|
||||
|
||||
// test if this package is the latest write
|
||||
TEST_ASSERT(r_is_final);
|
||||
|
||||
//EEPROM.get(offset + OFFSET_NB_MEASURES, r_nb_measures);
|
||||
TEST_ASSERT(EEPROM.read(offset + OFFSET_PHOTO_MEASURES_SIZE) == sizeofuint8);
|
||||
TEST_ASSERT(r_nb_measures == 0);
|
||||
TEST_ASSERT(r_timestamp == timestamp);
|
||||
TEST_ASSERT(r_photo_sensor == photo_sensor);
|
||||
TEST_ASSERT(r_temp_sensor == temp_sensor);
|
||||
TEST_ASSERT(r_schedule == schedule);
|
||||
TEST_ASSERT(r_nb_photo_sensor == nb_photo_sensor);
|
||||
TEST_ASSERT(r_nb_temp_sensor == nb_temp_sensor);
|
||||
TEST_ASSERT(r_sizeof_temp == sizeofuint8);
|
||||
TEST_ASSERT(r_sizeof_photo == sizeofuint8);
|
||||
}
|
||||
|
||||
void setup(void)
|
||||
|
|
@ -66,9 +150,10 @@ void setup(void)
|
|||
|
||||
}
|
||||
|
||||
//WARNING: Tests are not exhaustive and do not cover all possibilities.
|
||||
int main( int argc, char **argv) {
|
||||
UNITY_BEGIN();
|
||||
//RUN_TEST(test);
|
||||
RUN_TEST(test_put_get_struct);
|
||||
RUN_TEST(test_get_struct);
|
||||
RUN_TEST(test_set_struct);
|
||||
UNITY_END();
|
||||
}
|
||||
Loading…
Reference in a new issue