in ev3-api/src/ev3api_sensor.c [86:137]
ER ev3_sensor_config(sensor_port_t port, sensor_type_t type) {
ER ercd;
// lazy_initialize();
CHECK_PORT(port);
sensors[port] = type;
switch (type) {
case NONE_SENSOR:
// Do nothing
break;
case TOUCH_SENSOR: {
// It seems analog sensor can't work correctly in I2C mode
ercd = uart_sensor_config(port, 0);
assert(ercd == E_OK);
/* Busy wait 10ms to ensure that sensor value is updated */
SYSTIM start, now;
get_tim(&start);
do { get_tim(&now); } while (now - start < 10);
}
break;
case ULTRASONIC_SENSOR:
case GYRO_SENSOR:
case COLOR_SENSOR:
case INFRARED_SENSOR:
// Configure UART sensor
ercd = uart_sensor_config(port, 0);
assert(ercd == E_OK);
// Wait UART sensor to finish initialization
// while(!uart_sensor_data_ready(port));
break;
case HT_NXT_ACCEL_SENSOR:
case HT_NXT_COLOR_SENSOR:
case NXT_TEMP_SENSOR:
ercd = uart_sensor_config(port, 0xFF /* TODO:MODE_NONE_UART_SENSOR */);
assert(ercd == E_OK);
break;
default:
API_ERROR("Invalid sensor type %d", type);
return E_PAR;
}
ercd = E_OK;
error_exit:
return ercd;
}