void init_MMA7660FC(void) { int x, y, z; unsigned char val = 0; bt_accelInitFlag = 1; if(!eei2cLockFlag) { leds(0b111111); eei2cLock = locknew(); lockclr(eei2cLock); eei2cLockFlag = 1; } if(!st_eeInitFlag) ee_init(); while(lockset(eei2cLock)); i2c_out(st_eeprom, MMA7660_I2C, MODE, 1, &val, 1); i2c_out(st_eeprom, MMA7660_I2C, INTSU, 1, &val, 1); i2c_out(st_eeprom, MMA7660_I2C, SR, 1, &val, 1); val = 0xC1; i2c_out(st_eeprom, MMA7660_I2C, MODE, 1, &val, 1); i2c_stop(st_eeprom); lockclr(eei2cLock); accels(&x, &y, &z); }
void ee_putByte(char value, int addr) { if(!eeInitFlag) ee_init(); unsigned char addrArray[] = {(char)(addr >> 8), (char)(addr&0xFF)}; int n = i2c_out(eeprom, 0xA0, addrArray, 2, &value, 1); while(i2c_poll(eeprom, 0xA0)); }
//__attribute__((constructor)) int32_t badge_setup(void) { printf("Start\n"); touch_start(TPCount, TPPins, TPDischarge); if(!eei2cLockFlag) { printf("1\n"); eei2cLock = locknew(); lockclr(eei2cLock); eei2cLockFlag = 1; printf("1\n"); } init_MMA7660FC(); printf("1\n"); if(!st_eeInitFlag) ee_init(); printf("1\n"); cpcog = light_start(); printf("1\n"); cogIRcom = ircom_start(IR_IN, IR_OUT, 2400, 38500); printf("1\n"); screen_init(OLED_CS, OLED_DC, OLED_DAT, OLED_CLK, OLED_RST, SSD1306_SWITCHCAPVCC, TYPE_128X64); printf("1\n"); screen_auto(ON); printf("1\n"); clear(); printf("1\n"); text_size(LARGE); printf("Return\n"); return 0; }
unsigned char* ee_get_str(unsigned char *s, int n, int addr) { if(!st_eeInitFlag) ee_init(); // const unsigned char addrArray[] = {(char)(addr >> 8), (char)(addr&0xFF)}; // i2c_in(st_eeprom, 0xA0, addrArray, 2, s, n); i2c_in(st_eeprom, 0x50, addr, 2, s, n); return s; }
int ee_getInt(int addr) { if(!st_eeInitFlag) ee_init(); //unsigned char val[4] = {0, 0, 0, 0}; int value; // const unsigned char addrArray[] = {(char)(addr >> 8), (char)(addr&0xFF)}; // i2c_in(st_eeprom, 0xA0, addrArray, 2, val, 4); i2c_in(st_eeprom, 0x50, addr, 2, (unsigned char*) &value, 4); // int value = (int)((int)(val[0]) | (int)(val[1] << 8) | (int)(val[2] << 16) | (int)(val[3] << 24)); return value; }
float ee_get_float32(int addr) { if(!eeInitFlag) ee_init(); //int value = 0; unsigned char value[4] = {0, 0, 0, 0}; unsigned char addrArray[] = {(char)(addr >> 8), (char)(addr & 0xFF)}; i2c_in(eeprom, 0xA0, addrArray, 2, value, 4); float fpVal; memcpy(&fpVal, &value, sizeof value); return fpVal; }
int accel(int axis) { if(!st_eeInitFlag) ee_init(); unsigned char val = 0; while(lockset(eei2cLock)); i2c_in (st_eeprom, MMA7660_I2C, axis, 1, &val, 1); i2c_stop(st_eeprom); lockclr(eei2cLock); int g100 = raw2g100(val); if(axis == AY) g100 = -g100; return g100; }