static int yas_bma250_set_delay(int delay) { unsigned char odr; int i; /* Check initialize */ if (acc_data.initialize == 0) { return YAS_ERROR_NOT_INITIALIZED; } /* Determine optimum odr */ for (i = 1; i < (int)(sizeof(yas_bma250_odr_tbl) / sizeof(struct yas_bma250_odr)) && delay >= (int)yas_bma250_odr_tbl[i].delay; i++) ; odr = yas_bma250_odr_tbl[i-1].odr; acc_data.delay = delay; if (yas_bma250_get_enable()) { yas_bma250_update_bits(YAS_BMA250_BANDWIDTH, odr); yas_bma250_update_bits(YAS_BMA250_SLEEP_DUR, bma250_set_sleep_dur(odr)); } else { yas_bma250_power_up(); yas_bma250_update_bits(YAS_BMA250_BANDWIDTH, odr); yas_bma250_update_bits(YAS_BMA250_SLEEP_DUR, bma250_set_sleep_dur(odr)); yas_bma250_power_down(); } return YAS_NO_ERROR; }
static int yas_get_enable(void) { int err; /* Check intialize */ if (pcb == NULL) { return YAS_ERROR_NOT_INITIALIZED; } yas_bma250_lock(); err = yas_bma250_get_enable(); yas_bma250_unlock(); return err; }
static int yas_bma250_set_delay(int delay) { unsigned char odr; int i; /* Output data rate */ static const struct yas_bma250_odr yas_bma250_odr_tbl[] = { {1, YAS_BMA250_BANDWIDTH_1000HZ}, {2, YAS_BMA250_BANDWIDTH_500HZ}, {4, YAS_BMA250_BANDWIDTH_250HZ}, {8, YAS_BMA250_BANDWIDTH_125HZ}, {16, YAS_BMA250_BANDWIDTH_63HZ}, {32, YAS_BMA250_BANDWIDTH_32HZ}, {64, YAS_BMA250_BANDWIDTH_16HZ}, {128, YAS_BMA250_BANDWIDTH_8HZ}, }; /* Check initialize */ if (acc_data.initialize == 0) return YAS_ERROR_NOT_INITIALIZED; for (i = 1; i < 8; i++) { if (delay <= (int)yas_bma250_odr_tbl[i].delay) break; }; odr = yas_bma250_odr_tbl[i-1].odr; acc_data.delay = delay; if (yas_bma250_get_enable()) { yas_bma250_update_bits(YAS_BMA250_BANDWIDTH, odr); yas_bma250_update_bits(YAS_BMA250_SLEEP_DUR, bma250_set_sleep_dur(odr)); } else { yas_bma250_power_up(); yas_bma250_update_bits(YAS_BMA250_BANDWIDTH, odr); yas_bma250_update_bits(YAS_BMA250_SLEEP_DUR, bma250_set_sleep_dur(odr)); yas_bma250_power_down(); } return YAS_NO_ERROR; }