コード例 #1
0
ファイル: piezo-speaker.c プロジェクト: lgywata/soletta
static int
stop_sound(struct piezo_speaker_data *mdata)
{
    int r;

    r = sol_pwm_set_duty_cycle(mdata->pwm, 0);
    SOL_INT_CHECK(r, < 0, r);

    return 0;
}
コード例 #2
0
ファイル: piezo-speaker.c プロジェクト: lgywata/soletta
static int
start_sound(struct piezo_speaker_data *mdata,
    uint32_t period_us)
{
    int r;

    r = sol_pwm_set_duty_cycle(mdata->pwm, 0);
    SOL_INT_CHECK(r, < 0, r);

    r = sol_pwm_set_period(mdata->pwm, period_us * 1000);
    SOL_INT_CHECK(r, < 0, r);

    //we want a perfect square signal, thus half the period. it seems
    //that < half period would affect the final volume, we can expose
    //that later
    r = sol_pwm_set_duty_cycle(mdata->pwm, (period_us * 1000) / 2);
    SOL_INT_CHECK(r, < 0, r);

    return 0;
}
コード例 #3
0
ファイル: servo-motor.c プロジェクト: ricardotk/soletta
/* 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;
}