void baro_scp_event( void ) { if (scp_trans.status == I2CTransSuccess) { if (baro_scp_status == BARO_SCP_RD_TEMP) { /* read two byte temperature */ baro_scp_temperature = scp_trans.buf[0] << 8; baro_scp_temperature |= scp_trans.buf[1]; if (baro_scp_temperature & 0x2000) { baro_scp_temperature |= 0xC000; } baro_scp_temperature *= 5; /* start one byte msb pressure */ scp_trans.buf[0] = SCP1000_DATARD8; baro_scp_status = BARO_SCP_RD_PRESS_0; I2CTransceive(SCP_I2C_DEV, scp_trans, SCP1000_SLAVE_ADDR, 1, 1); } else if (baro_scp_status == BARO_SCP_RD_PRESS_0) { /* read one byte pressure */ baro_scp_pressure = scp_trans.buf[0] << 16; /* start two byte lsb pressure */ scp_trans.buf[0] = SCP1000_DATARD16; baro_scp_status = BARO_SCP_RD_PRESS_1; I2CTransceive(SCP_I2C_DEV, scp_trans, SCP1000_SLAVE_ADDR, 1, 2); } else if (baro_scp_status == BARO_SCP_RD_PRESS_1) { /* read two byte pressure */ baro_scp_pressure |= scp_trans.buf[0] << 8; baro_scp_pressure |= scp_trans.buf[1]; baro_scp_pressure *= 25; #ifdef SENSOR_SYNC_SEND DOWNLINK_SEND_SCP_STATUS(DefaultChannel, &baro_scp_pressure, &baro_scp_temperature); #endif baro_scp_status = BARO_SCP_IDLE; } else baro_scp_status = BARO_SCP_IDLE; } }
void humid_sht_periodic( void ) { switch (sht_status) { case SHT_UNINIT: /* do soft reset, then wait at least 15ms */ sht_status = SHT_RESET; sht_trans.buf[0] = SHT_SOFT_RESET; I2CTransmit(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 1); break; case SHT_SERIAL: /* get serial number part 1 */ sht_status = SHT_SERIAL1; sht_trans.buf[0] = 0xFA; sht_trans.buf[1] = 0x0F; I2CTransceive(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 2, 8); break; case SHT_SERIAL1: case SHT_SERIAL2: break; default: /* trigger temp measurement, no master hold */ sht_trans.buf[0] = SHT_TRIGGER_TEMP; sht_status = SHT_TRIG_TEMP; I2CTransmit(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 1); /* send serial number every 30 seconds */ RunOnceEvery((4*30), DOWNLINK_SEND_SHT_SERIAL(DefaultChannel, &sht_serial1, &sht_serial2)); break; } }
uint32_t srf08_read_register(uint8_t srf08_register) { uint8_t cnt; union i2c_union { uint32_t rx_word; uint8_t rx_byte[2]; } i2c; srf_trans.buf[0] = srf08_register; /* get high byte msb first */ if (srf08_register>=2) cnt = 2; else cnt = 1; I2CTransceive(SRF08_I2C_DEV, srf_trans, SRF08_UNIT_0, 1, cnt); /* get high byte msb first */ if(srf08_register>=2) { i2c.rx_byte[1]=srf_trans.buf[1]; } /* get low byte msb first */ i2c.rx_byte[0]=srf_trans.buf[0]; return(i2c.rx_word); }
void ir_mlx_event( void ) { if ((mlx_trans.status == I2CTransSuccess)) { if (ir_mlx_status == IR_MLX_RD_CASE_TEMP) { /* read two byte case temperature */ ir_mlx_itemp_case = mlx_trans.buf[1] << 8; ir_mlx_itemp_case |= mlx_trans.buf[0]; ir_mlx_temp_case = ir_mlx_itemp_case*0.02 - 273.15; /* start two byte obj temperature */ mlx_trans.buf[0] = MLX90614_TOBJ; ir_mlx_status = IR_MLX_RD_CASE_TEMP; I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2); ir_mlx_status = IR_MLX_RD_OBJ_TEMP; } else if (ir_mlx_status == IR_MLX_RD_OBJ_TEMP) { /* read two byte obj temperature */ ir_mlx_itemp_obj = mlx_trans.buf[1] << 8; ir_mlx_itemp_obj |= mlx_trans.buf[0]; ir_mlx_temp_obj = ir_mlx_itemp_obj*0.02 - 273.15; mlx_trans.status = I2CTransDone; DOWNLINK_SEND_MLX_STATUS(DefaultChannel, &ir_mlx_itemp_case, &ir_mlx_temp_case, &ir_mlx_itemp_obj, &ir_mlx_temp_obj); } } }
void ir_mlx_periodic( void ) { if (cpu_time_sec > 1) { if (ir_mlx_status >= IR_MLX_IDLE) { /* start two byte case temperature */ mlx_trans.buf[0] = MLX90614_TA; I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2); ir_mlx_status = IR_MLX_RD_CASE_TEMP; /* send serial number every 30 seconds */ RunOnceEvery((8*30), DOWNLINK_SEND_MLX_SERIAL(DefaultChannel, &ir_mlx_id_01, &ir_mlx_id_23)); } else if (ir_mlx_status == IR_MLX_UNINIT) { /* start two byte ID 0 */ mlx_trans.buf[0] = MLX90614_ID_0; I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2); ir_mlx_status = IR_MLX_RD_ID_0; } } }
void ir_mlx_periodic( void ) { if (cpu_time_sec > 1) { /* start two byte case temperature */ mlx_trans.buf[0] = MLX90614_TA; I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2); ir_mlx_status = IR_MLX_RD_CASE_TEMP; } }
void ads1114_read( struct ads1114_periph * p ) { // Config done with success // start new reading when previous is done (and read if success) if (p->config_done && p->trans.status == I2CTransDone) { p->trans.buf[0] = ADS1114_POINTER_CONV_REG; I2CTransceive(ADS1114_I2C_DEVICE, p->trans, p->i2c_addr, 1, 2); } }
void pbn_periodic( void ) { if ( startup_delay > 0 ) { --startup_delay; return; } // Initiate next read pbn_trans.buf[0] = 0; I2CTransceive(PBN_I2C_DEV, pbn_trans, PBN_I2C_ADDR, 1, 4); }
void atmega_i2c_cam_ctrl_send(uint8_t cmd) { atmega_i2c_cam_ctrl_just_sent_command = 1; // Send Command atmega_i2c_cam_ctrl_trans.buf[0] = cmd; I2CTransceive(ATMEGA_I2C_DEV, atmega_i2c_cam_ctrl_trans, ATMEGA_SLAVE_ADDR, 1, 1); if (cmd == DC_SHOOT) { dc_send_shot_position(); } }
void baro_scp_periodic( void ) { if (baro_scp_status == BARO_SCP_UNINIT && cpu_time_sec > 1) { baro_scp_start_high_res_measurement(); baro_scp_status = BARO_SCP_IDLE; } else if (baro_scp_status == BARO_SCP_IDLE) { /* init: start two byte temperature */ scp_trans.buf[0] = SCP1000_TEMPOUT; baro_scp_status = BARO_SCP_RD_TEMP; I2CTransceive(SCP_I2C_DEV, scp_trans, SCP1000_SLAVE_ADDR, 1, 2); } }
void tmp102_periodic( void ) { tmp_trans.buf[0] = TMP102_TEMP_REG; I2CTransceive(TMP_I2C_DEV, tmp_trans, TMP102_SLAVE_ADDR, 1, 2); tmp_meas_started = TRUE; }
void ir_mlx_event( void ) { if ((mlx_trans.status == I2CTransSuccess)) { switch (ir_mlx_status) { case IR_MLX_RD_ID_0: /* read two byte ID 0 */ ir_mlx_id_01 = mlx_trans.buf[0]; ir_mlx_id_01 |= mlx_trans.buf[1] << 8; /* start two byte ID 1 */ mlx_trans.buf[0] = MLX90614_ID_1; I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2); ir_mlx_status = IR_MLX_RD_ID_1; break; case IR_MLX_RD_ID_1: /* read two byte ID 1 */ ir_mlx_id_01 |= mlx_trans.buf[0] << 16; ir_mlx_id_01 |= mlx_trans.buf[1] << 24; /* start two byte ID 2 */ mlx_trans.buf[0] = MLX90614_ID_2; I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2); ir_mlx_status = IR_MLX_RD_ID_2; break; case IR_MLX_RD_ID_2: /* read two byte ID 2 */ ir_mlx_id_23 = mlx_trans.buf[0]; ir_mlx_id_23 |= mlx_trans.buf[1] << 8; /* start two byte ID 3 */ mlx_trans.buf[0] = MLX90614_ID_3; I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2); ir_mlx_status = IR_MLX_RD_ID_3; break; case IR_MLX_RD_ID_3: /* read two byte ID 3 */ ir_mlx_id_23 |= mlx_trans.buf[0] << 16; ir_mlx_id_23 |= mlx_trans.buf[1] << 24; ir_mlx_status = IR_MLX_IDLE; mlx_trans.status = I2CTransDone; DOWNLINK_SEND_MLX_SERIAL(DefaultChannel, &ir_mlx_id_01, &ir_mlx_id_23); break; case IR_MLX_RD_CASE_TEMP: /* read two byte case temperature */ ir_mlx_itemp_case = mlx_trans.buf[1] << 8; ir_mlx_itemp_case |= mlx_trans.buf[0]; ir_mlx_temp_case = ir_mlx_itemp_case*0.02 - 273.15; /* start two byte obj temperature */ mlx_trans.buf[0] = MLX90614_TOBJ; I2CTransceive(MLX_I2C_DEV, mlx_trans, MLX90614_ADDR, 1, 2); ir_mlx_status = IR_MLX_RD_OBJ_TEMP; break; case IR_MLX_RD_OBJ_TEMP: /* read two byte obj temperature */ ir_mlx_itemp_obj = mlx_trans.buf[1] << 8; ir_mlx_itemp_obj |= mlx_trans.buf[0]; ir_mlx_temp_obj = ir_mlx_itemp_obj*0.02 - 273.15; mlx_trans.status = I2CTransDone; DOWNLINK_SEND_MLX_STATUS(DefaultChannel, &ir_mlx_itemp_case, &ir_mlx_temp_case, &ir_mlx_itemp_obj, &ir_mlx_temp_obj); break; default: mlx_trans.status = I2CTransDone; break; } } }
void humid_sht_event( void ) { if (sht_trans.status == I2CTransSuccess) { switch (sht_status) { case SHT_TRIG_TEMP: sht_status = SHT_GET_TEMP; sht_trans.status = I2CTransDone; break; case SHT_READ_TEMP: /* read temperature */ tempsht = (sht_trans.buf[0] << 8) | sht_trans.buf[1]; tempsht &= 0xFFFC; if (humid_sht_crc(sht_trans.buf) == 0) { /* trigger humid measurement, no master hold */ sht_trans.buf[0] = SHT_TRIGGER_HUMID; sht_status = SHT_TRIG_HUMID; I2CTransmit(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 1); } else { /* checksum error, restart */ sht_status = SHT_IDLE; sht_trans.status == I2CTransDone; } break; case SHT_TRIG_HUMID: sht_status = SHT_GET_HUMID; sht_trans.status = I2CTransDone; break; case SHT_READ_HUMID: /* read humidity */ humidsht = (sht_trans.buf[0] << 8) | sht_trans.buf[1]; humidsht &= 0xFFFC; fhumidsht = -6. + 125. / 65536. * humidsht; ftempsht = -46.85 + 175.72 / 65536. * tempsht; sht_status = SHT_IDLE; sht_trans.status = I2CTransDone; if (humid_sht_crc(sht_trans.buf) == 0) { DOWNLINK_SEND_SHT_STATUS(DefaultChannel, &humidsht, &tempsht, &fhumidsht, &ftempsht); } break; case SHT_RESET: sht_status = SHT_SERIAL; sht_trans.status = I2CTransDone; break; case SHT_SERIAL1: /* read serial number part 1 */ sht_serial[5] = sht_trans.buf[0]; sht_serial[4] = sht_trans.buf[2]; sht_serial[3] = sht_trans.buf[4]; sht_serial[2] = sht_trans.buf[6]; /* get serial number part 2 */ sht_status = SHT_SERIAL2; sht_trans.buf[0] = 0xFC; sht_trans.buf[1] = 0xC9; I2CTransceive(SHT_I2C_DEV, sht_trans, SHT_SLAVE_ADDR, 2, 6); break; case SHT_SERIAL2: /* read serial number part 2 */ sht_serial[1] = sht_trans.buf[0]; sht_serial[0] = sht_trans.buf[1]; sht_serial[7] = sht_trans.buf[3]; sht_serial[6] = sht_trans.buf[4]; sht_serial1=sht_serial[7]<<24|sht_serial[6]<<16|sht_serial[5]<<8|sht_serial[4]; sht_serial2=sht_serial[3]<<24|sht_serial[2]<<16|sht_serial[1]<<8|sht_serial[0]; DOWNLINK_SEND_SHT_SERIAL(DefaultChannel, &sht_serial1, &sht_serial2); sht_status = SHT_IDLE; sht_trans.status = I2CTransDone; break; default: sht_trans.status = I2CTransDone; break; } } }
void lm75_periodic( void ) { lm75_trans.buf[0] = LM75_TEMP_REG; I2CTransceive(LM75_I2C_DEV, lm75_trans, LM75_SLAVE_ADDR, 1, 2); }