ER ev3_sensor_config()

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