imrishabh18/pedometer

This code defines and assembles a simple radio receiver hardware circuit using specific imported capacitors, inductors, RF connectors, and oscillator components with precise footprints and schematic attributes.

Version
1.1.3
License
unset
Stars
0

firmware/test_core.c

#include "pedometer.h"
#include <assert.h>
#include <stdio.h>
#include <string.h>

static uint8_t pmic[256], gauge[32];
static bool isolated=true, lp=false, cfg=false, itpor=true;
static uint64_t now;
static uint16_t command;
static unsigned oled_bytes, oled_writes;
static uint8_t sum32(const uint8_t *b){unsigned sum=0;for(int i=0;i<32;i++)sum+=b[i];return (uint8_t)(255-sum);}
bool board_i2c_write(uint8_t addr,const uint8_t *b,size_t n){
 assert(n>=2);
 if(addr==ADDR_BQ25150){assert(lp);assert(isolated);pmic[b[0]]=b[1];return true;}
 if(addr==ADDR_OLED){assert(!isolated);assert(pmic[0x1d]==0xec);oled_writes++;if(b[0]==0x40)oled_bytes+=(unsigned)n-1;return true;}
 if(addr==ADDR_BQ27427){
  if(b[0]==0){command=(uint16_t)b[1]|((uint16_t)b[2]<<8);if(command==0x13)cfg=true;if(command==0x42){cfg=false;itpor=false;}}
  if(b[0]==0x40){assert(n==33&&cfg);memcpy(gauge,b+1,32);}
  if(b[0]==0x60)assert(b[1]==sum32(gauge));
  return true;
 }
 return false;
}
bool board_i2c_read_reg(uint8_t addr,uint8_t reg,uint8_t *b,size_t n){
 memset(b,0,n);
 if(addr==ADDR_BQ25150){assert(lp);assert(n==1);b[0]=pmic[reg];return true;}
 if(addr==ADDR_BQ27427){
  if(reg==0&&command==1){b[0]=0x27;b[1]=0x04;}
  if(reg==6)b[0]=(uint8_t)((cfg?0x10:0)|(itpor?0x20:0));
  if(reg==0x40){assert(n==32);memcpy(b,gauge,32);}
  if(reg==0x60)b[0]=sum32(gauge);
  return true;
 }
 return false;
}
void board_gpio_write(unsigned pin,bool high){if(pin==PIN_PMIC_LP)lp=high;if(pin==PIN_DISPLAY_ISOLATE)isolated=high;}
void board_delay_us(uint32_t us){now+=us;}
uint64_t board_time_ms(void){return now/1000;}
void board_wait_event_until(uint64_t deadline){now=deadline*1000;}
void app_ble_publish(const uint8_t snapshot[14]){assert(snapshot[0]==1);}
bool app_checkpoint(uint64_t total){(void)total;return true;}
int main(void){
 StepAccumulator s={0};assert(steps_update(&s,0xfffffe,600));assert(steps_update(&s,3,600));assert(s.total==5);
 assert(!steps_update(&s,0,600));assert(s.total==5);assert(steps_update(&s,10,600));assert(s.total==15);
 uint8_t packet[14];encode_snapshot(packet,0x0102030405060708ULL,3700,73,2);
 const uint8_t expected[]={1,2,8,7,6,5,4,3,2,1,0x74,0x0e,73,0};assert(!memcmp(packet,expected,14));
 assert(pmic_init());assert(isolated&&!lp);assert(pmic[0x17]==0x94&&pmic[0x13]==0x10&&pmic[0x1d]==0x6c);
 assert(display_power(true));assert(!isolated);assert(oled_steps(987654321));assert(oled_bytes==512&&oled_writes==34);
 assert(display_power(false));assert(isolated&&!lp&&pmic[0x1d]==0x6c);
 memset(gauge,0xa5,32);assert(gauge_configure_100mah());assert(!cfg);
 assert(gauge[6]==0&&gauge[7]==100&&gauge[8]==1&&gauge[9]==114);
 assert(gauge[10]==0x0b&&gauge[11]==0xb8&&gauge[21]==1&&gauge[22]==244);
 assert(gauge[23]==0&&gauge[24]==10&&gauge[25]==0xa5);
 uint8_t saved[32];memcpy(saved,gauge,32);assert(gauge_configure_100mah());assert(!memcmp(saved,gauge,32));
 puts("PASS: step wrap/reset, BLE encoding, OLED frame bounds/sequence, PMIC settings, BQ27427 field offsets/checksum/POR.");
}