Example #1
0
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);
    }
  }
}
Example #2
0
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;
    }
  }
}