in ev3-api/src/ev3api_sensor.c [367:425]
ir_remote_t ev3_infrared_sensor_get_remote(sensor_port_t port) {
ir_remote_t result;
ER ercd;
// lazy_initialize();
CHECK_PORT(port);
CHECK_COND(ev3_sensor_get_type(port) == INFRARED_SENSOR, E_OBJ);
uint8_t val[4];
uart_sensor_fetch_data(port, IR_REMOTE, &val, 4 * sizeof(uint8_t));
for (int i = 0; i < 4; i++) {
switch(val[i])
{
case 0: // no buttons pressed
result.channel[i] = 0;
continue;
case 1: // red up
result.channel[i] = IR_RED_UP_BUTTON;
continue;
case 2: // red down
result.channel[i] = IR_RED_DOWN_BUTTON;
continue;
case 3: // blue up
result.channel[i] = IR_BLUE_UP_BUTTON;
continue;
case 4: // blue down
result.channel[i] = IR_BLUE_DOWN_BUTTON;
continue;
case 5: // red up and blue up
result.channel[i] = IR_RED_UP_BUTTON + IR_BLUE_UP_BUTTON;
continue;
case 6: // red up and blue down
result.channel[i] = IR_RED_UP_BUTTON + IR_BLUE_DOWN_BUTTON;
continue;
case 7: // red down and blue up
result.channel[i] = IR_RED_DOWN_BUTTON + IR_BLUE_UP_BUTTON;
continue;
case 8: // red down and blue down
result.channel[i] = IR_RED_DOWN_BUTTON + IR_BLUE_DOWN_BUTTON;
continue;
case 9: // beacon mode on
result.channel[i] = IR_BEACON_BUTTON;
continue;
case 10: // red up and red down
result.channel[i] = IR_RED_UP_BUTTON + IR_RED_DOWN_BUTTON;
continue;
case 11: // blue up and blue down
result.channel[i] = IR_BLUE_UP_BUTTON + IR_BLUE_DOWN_BUTTON;
}
}
return result;
error_exit:
syslog(LOG_WARNING, "%s(): ercd %d", __FUNCTION__, ercd);
for (int i = 0; i < 4; i++) {
result.channel[i] = 0;
}
return result;
}