Exemplo n.º 1
0
/*
  set the default channel an auxiliary output function should be on
 */
bool SRV_Channels::set_aux_channel_default(SRV_Channel::Aux_servo_function_t function, uint8_t channel)
{
    if (!initialised) {
        update_aux_servo_function();
    }
    if (function_assigned(function)) {
        // already assigned
        return true;
    }
    if (channels[channel].function != SRV_Channel::k_none) {
        if (channels[channel].function == function) {
            return true;
        }
        hal.console->printf("Channel %u already assigned function %u\n",
                            (unsigned)(channel + 1),
                            (unsigned)channels[channel].function);
        return false;
    }
    channels[channel].type_setup = false;
    channels[channel].function.set(function);
    channels[channel].aux_servo_function_setup();
    function_mask.set((uint8_t)function);
    functions[function].channel_mask |= 1U<<channel;
    return true;
}
Exemplo n.º 2
0
/*
  set the default channel an auxiliary output function should be on
 */
bool RC_Channel_aux::set_aux_channel_default(RC_Channel_aux::Aux_servo_function_t function, uint8_t channel)
{
    if (!_initialised) {
        update_aux_servo_function();
    }
    if (function_assigned(function)) {
        // already assigned
        return true;
    }
    for (uint8_t i=0; i<RC_AUX_MAX_CHANNELS; i++) {
        if (_aux_channels[i] && _aux_channels[i]->_ch_out == channel) {
            if (_aux_channels[i]->function != k_none) {
                if (_aux_channels[i]->function == function) {
                    return true;
                }
                hal.console->printf("Channel %u already assigned %u\n",
                                    (unsigned)channel,
                                    (unsigned)_aux_channels[i]->function);
                return false;
            }
            _aux_channels[i]->function.set(function);
            _aux_channels[i]->aux_servo_function_setup();
            return true;
        }
    }
    hal.console->printf("AUX channel %u not available\n",
                        (unsigned)channel);
    return false;    
}
Exemplo n.º 3
0
/*
  get mask of output channels for a function
 */
uint16_t SRV_Channels::get_output_channel_mask(SRV_Channel::Aux_servo_function_t function)
{
    if (!initialised) {
        update_aux_servo_function();
    }
    if (function < SRV_Channel::k_nr_aux_servo_functions) {
        return functions[function].channel_mask;
    }
    return 0;
}
Exemplo n.º 4
0
// find first channel that a function is assigned to
bool SRV_Channels::find_channel(SRV_Channel::Aux_servo_function_t function, uint8_t &chan)
{
    if (!initialised) {
        update_aux_servo_function();
    }
    if (!function_assigned(function)) {
        return false;
    }
    for (uint8_t i=0; i<NUM_SERVO_CHANNELS; i++) {
        if (channels[i].function == function) {
            chan = channels[i].ch_num;
            return true;
        }
    }
    return false;
}
Exemplo n.º 5
0
// find first channel that a function is assigned to
bool RC_Channel_aux::find_channel(RC_Channel_aux::Aux_servo_function_t function, uint8_t &chan)
{
    if (!_initialised) {
        update_aux_servo_function();
    }
    if (!function_assigned(function)) {
        return false;
    }
    for (uint8_t i=0; i<RC_AUX_MAX_CHANNELS; i++) {
        if (_aux_channels[i] && _aux_channels[i]->function == function) {
            chan = _aux_channels[i]->_ch_out;
            return true;
        }
    }
    return false;
}
Exemplo n.º 6
0
/// Should be called after the the servo functions have been initialized
void SRV_Channels::enable_aux_servos()
{
    hal.rcout->set_default_rate(uint16_t(instance->default_rate.get()));

    update_aux_servo_function();

    // enable all channels that are set to a valid function. This
    // includes k_none servos, which allows those to get their initial
    // trim value on startup
    for (uint8_t i = 0; i < NUM_SERVO_CHANNELS; i++) {
        // see if it is a valid function
        if ((uint8_t)channels[i].function.get() < SRV_Channel::k_nr_aux_servo_functions) {
            hal.rcout->enable_ch(channels[i].ch_num);
        }
    }
}
Exemplo n.º 7
0
/// Should be called after the the servo functions have been initialized
void RC_Channel_aux::enable_aux_servos()
{
    update_aux_servo_function();

    // enable all channels that are not set to a valid function. This
    // includes k_none servos, which allows those to get their initial
    // trim value on startup
    for (uint8_t i = 0; i < RC_AUX_MAX_CHANNELS; i++) {
        if (_aux_channels[i]) {
            RC_Channel_aux::Aux_servo_function_t function = (RC_Channel_aux::Aux_servo_function_t)_aux_channels[i]->function.get();
            // see if it is a valid function
            if (function < RC_Channel_aux::k_nr_aux_servo_functions) {
                _aux_channels[i]->enable_out();
            }
        }
    }
}