rebuild the mock/fake for the twi, also added a test for the accelerometer update function

This commit is contained in:
Jake Goodwin 2023-08-31 17:07:13 -07:00
parent 398b525dec
commit 960c7fda99
1 changed files with 61 additions and 17 deletions

View File

@ -8,26 +8,46 @@
#define WRITE_BIT (1<<7) #define WRITE_BIT (1<<7)
uint8_t fake_twi_addr = 0x0; typedef struct reg_addr{
uint8_t fake_twi_data[16] = {0x0}; uint8_t dev_addr;
uint8_t fake_regs[117] = {0x0}; uint8_t addr;
uint8_t value;
}reg_addr;
reg_addr reg_addr_arr[16] = {{0x0, 0x0, 0x0}};
uint8_t idx = 0;
/* Fake Object for TWI_TX*/ /* Fake Object for TWI_TX*/
void fake_twi_tx(uint8_t slave_addr, uint8_t *data, uint8_t size) void fake_twi_tx(uint8_t slave_addr, uint8_t *data, uint8_t size)
{ {
fake_twi_addr = slave_addr; /*Save the slave address passed*/
for(int i = 0; i < size; i++) { reg_addr_arr[0].dev_addr = slave_addr;
/*Now write all the passed data*/
for(; idx < size; idx++) {
reg_addr_arr[idx].addr = *(data);
reg_addr_arr[idx].value = *(++data);
} }
/*Post increment the global index*/
idx++;
} }
/* Fake Object for TWI_RX*/ /* Fake Object for TWI_RX*/
void fake_twi_rx(uint8_t slave_addr, uint8_t *data, uint8_t size) void fake_twi_rx(uint8_t slave_addr, uint8_t *data, uint8_t size)
{ {
fake_twi_addr = slave_addr; /*Save the slave address passed*/
for(int i = 0; i < size; i++) { reg_addr_arr[0].dev_addr = slave_addr;
*data++ = fake_twi_data[i];
/*Read the registers requested*/
for(; idx < size; idx++) {
/*Wridxte the register read address*/
reg_addr_arr[idx].addr = *(data + idx);
/*Read the response value idxnto the pased data ptr*/
*(data + idx) = reg_addr_arr[idx].value;
} }
/*Post increment the global index*/
idx++;
} }
@ -46,15 +66,23 @@ static void test_gy521_init(void **state) {
/*Check for it's confirmation of the right twi device*/ /*Check for it's confirmation of the right twi device*/
assert_false(gy521_init(m, TWI_GY521_ADDR1)); assert_false(gy521_init(m, TWI_GY521_ADDR1));
/*Now give it the correct response*/ /*Fill the address and the value registers with correct response value*/
fake_twi_data[0] = TWI_GY521_ADDR1; /*The zero element get's read on init of the module*/
reg_addr_arr[0].addr = TWI_GY521_ADDR1;
reg_addr_arr[0].value = TWI_GY521_ADDR1;
idx = 0;
/*Check that it worked*/
assert_true(gy521_init(m, TWI_GY521_ADDR1)); assert_true(gy521_init(m, TWI_GY521_ADDR1));
assert_true(TWI_GY521_ADDR1 == fake_twi_addr); assert_true(TWI_GY521_ADDR1 == reg_addr_arr[0].dev_addr);
fake_twi_data[0] = TWI_GY521_ADDR2; reg_addr_arr[0].addr = TWI_GY521_ADDR2;
reg_addr_arr[0].value = TWI_GY521_ADDR2;
idx = 0;
assert_true(gy521_init(m, TWI_GY521_ADDR2)); assert_true(gy521_init(m, TWI_GY521_ADDR2));
assert_true(TWI_GY521_ADDR2 == fake_twi_addr); assert_true(TWI_GY521_ADDR2 == reg_addr_arr[0].dev_addr);
gy521_free(m); gy521_free(m);
@ -65,15 +93,31 @@ static void test_gy521_update_accel(void **sate)
{ {
/*check it reads the accel registers*/ /*check it reads the accel registers*/
gy521_module *m = gy521_new(); gy521_module *m = gy521_new();
fake_twi_data[0] = TWI_GY521_ADDR1; reg_addr_arr[0].addr = TWI_GY521_ADDR1;
gy521_init(m, TWI_GY521_ADDR1); gy521_init(m, TWI_GY521_ADDR1);
/*Setup the fake accel values.*/
for(uint8_t i = 0; i < 6; i++) {
reg_addr_arr[i].value = i;
}
idx = 0;
gy521_update_accel(m);
/*Ensure the correct registers are read*/ /*Ensure the correct registers are read*/
_Bool is_correct = 1;
for(int i = 0; i < 6; i++){
/*The starting address of the registers is 59 and goes to 64*/
print_message("expected: %d, actual: %d\n", (59+i), reg_addr_arr[i].addr);
if((59 + i) != reg_addr_arr[i].addr) {
is_correct = 0;
}
}
assert_true(is_correct);
/*Check that the values are assembled correctly*/ /*Check that the values are assembled correctly*/
gy521_update_accel(m);
gy521_free(m); gy521_free(m);
} }