static THD_FUNCTION (ThreadPoller, arg) { (void) arg; char out[9]; chRegSetThreadName("poller"); while (TRUE) { if (bmp085_status == 0) { PollerData.temp = bmp085_read_temp(); PollerData.press = bmp085_read_press(); // PollerData.uTime = rtcGetTimeUnixSec(&RTCD1); chsnprintf(out, sizeof(out), "%4.2f", PollerData.press/133.322); lcd5110SetPosXY(30, 0); lcd5110WriteText(out); chsnprintf(out, sizeof(out), "%4.2f", PollerData.temp/10.0); lcd5110SetPosXY(30, 1); lcd5110WriteText(out); } chThdSleepMilliseconds(POLLER_TIMEOUT); } return 0; // never returns }
void baro_periodic(void) { // check that nothing is in progress if (baro_trans.status == I2CTransPending) return; if (baro_trans.status == I2CTransRunning) return; if (!i2c_idle(&i2c2)) return; switch (baro_board.status) { case LBS_UNINITIALIZED: baro_board_send_reset(); baro_board.status = LBS_REQUEST; baro.status = BS_RUNNING; break; case LBS_REQUEST: bmp085_request_pressure(); baro_board.status = LBS_READ; break; case LBS_READ: if (baro_eoc()) { bmp085_read_pressure(); baro_board.status = LBS_READING; } break; case LBS_REQUEST_TEMP: bmp085_request_temp(); baro_board.status = LBS_READ_TEMP; break; case LBS_READ_TEMP: if (baro_eoc()) { bmp085_read_temp(); baro_board.status = LBS_READING_TEMP; } break; default: break; } }