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_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; } } }