/* 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; }
/* 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; }
/* 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; }
// 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; }
// 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; }
/// 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); } } }
/// 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(); } } } }