in ev3-api/src/ev3api_motor.c [269:313]
ER ev3_motor_set_power(motor_port_t port, int power) {
ER ercd;
// lazy_initialize();
CHECK_PORT(port);
CHECK_PORT_CONN(port);
motor_type_t mt = mts[port];
if (power < -100 || power > 100) {
int old_power = power;
if (old_power > 0)
power = 100;
else
power = -100;
syslog(LOG_WARNING, "%s(): power %d is out-of-range, %d is used instead.", __FUNCTION__, old_power, power);
}
char buf[3];
if (mt == UNREGULATED_MOTOR) {
// Set unregulated power
buf[0] = opOUTPUT_POWER;
} else {
// Set regulated speed
buf[0] = opOUTPUT_SPEED;
}
buf[1] = 1 << port;
buf[2] = power;
motor_command(buf, sizeof(buf));
/**
* Start the motor
*/
motor_command(buf, sizeof(buf));
buf[0] = opOUTPUT_START;
buf[1] = 1 << port;
motor_command(buf, sizeof(buf));
ercd = E_OK;
error_exit:
return ercd;
}