Пример #1
0
static int
tune_stop(struct piezo_speaker_data *mdata)
{
    if (!mdata->timer)
        return 0;

    sol_timeout_del(mdata->timer);
    mdata->timer = NULL;

    return sol_pwm_set_enabled(mdata->pwm, false);
}
Пример #2
0
static int
tune_start(struct piezo_speaker_data *mdata)
{
    int r;

    mdata->curr_idx = 0;
    r = sol_pwm_set_enabled(mdata->pwm, true);
    SOL_INT_CHECK(r, < 0, r);
    mdata->timer = sol_timeout_add(0, timeout_do, mdata);
    SOL_INT_CHECK(r, < 0, r);

    return 0;
}
Пример #3
0
/* TODO send a packet to pwm node */
static int
set_pulse_width(struct servo_motor_data *mdata, int32_t pulse_width)
{
    SOL_DBG("Pulse width %" PRId32 " microseconds (%" PRId32 " -"
        "%" PRId32 ")", pulse_width,
        mdata->duty_cycle_range.min, mdata->duty_cycle_range.max);

    if (!mdata->pwm_enabled) {
        sol_pwm_set_enabled(mdata->pwm, true);
        mdata->pwm_enabled = true;
    } else if (pulse_width == mdata->duty_cycle_range.val)
        return 0;

    mdata->duty_cycle_range.val = pulse_width;
    if (!sol_pwm_set_duty_cycle(mdata->pwm,
        mdata->duty_cycle_range.val * 1000)) {
        SOL_WRN("Failed to write duty cycle %" PRId32 "ns.",
            mdata->duty_cycle_range.val * 1000);
        return -1;
    }

    return 0;
}