diff options
Diffstat (limited to 'apps/drivers/drv_pwm_output.h')
-rw-r--r-- | apps/drivers/drv_pwm_output.h | 201 |
1 files changed, 0 insertions, 201 deletions
diff --git a/apps/drivers/drv_pwm_output.h b/apps/drivers/drv_pwm_output.h deleted file mode 100644 index 07831f20c..000000000 --- a/apps/drivers/drv_pwm_output.h +++ /dev/null @@ -1,201 +0,0 @@ -/**************************************************************************** - * - * Copyright (C) 2012 PX4 Development Team. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name PX4 nor the names of its contributors may be - * used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - ****************************************************************************/ - -/** - * @file PWM servo output interface. - * - * Servo values can be set with the PWM_SERVO_SET ioctl, by writing a - * pwm_output_values structure to the device, or by publishing to the - * output_pwm ORB topic. - * Writing a value of 0 to a channel suppresses any output for that - * channel. - */ - -#pragma once - -#include <stdint.h> -#include <sys/ioctl.h> - -#include "drv_orb_dev.h" - -__BEGIN_DECLS - -/** - * Path for the default PWM output device. - * - * Note that on systems with more than one PWM output path (e.g. - * PX4FMU with PX4IO connected) there may be other devices that - * respond to this protocol. - */ -#define PWM_OUTPUT_DEVICE_PATH "/dev/pwm_output" - -/** - * Maximum number of PWM output channels supported by the device. - */ -#define PWM_OUTPUT_MAX_CHANNELS 16 - -/** - * Servo output signal type, value is actual servo output pulse - * width in microseconds. - */ -typedef uint16_t servo_position_t; - -/** - * Servo output status structure. - * - * May be published to output_pwm, or written to a PWM output - * device. - */ -struct pwm_output_values { - /** desired pulse widths for each of the supported channels */ - servo_position_t values[PWM_OUTPUT_MAX_CHANNELS]; -}; - -/* - * ORB tag for PWM outputs. - */ -ORB_DECLARE(output_pwm); - -/* - * ioctl() definitions - * - * Note that ioctls and ORB updates should not be mixed, as the - * behaviour of the system in this case is not defined. - */ -#define _PWM_SERVO_BASE 0x2a00 - -/** arm all servo outputs handle by this driver */ -#define PWM_SERVO_ARM _IOC(_PWM_SERVO_BASE, 0) - -/** disarm all servo outputs (stop generating pulses) */ -#define PWM_SERVO_DISARM _IOC(_PWM_SERVO_BASE, 1) - -/** set alternate servo update rate */ -#define PWM_SERVO_SET_UPDATE_RATE _IOC(_PWM_SERVO_BASE, 2) - -/** get the number of servos in *(unsigned *)arg */ -#define PWM_SERVO_GET_COUNT _IOC(_PWM_SERVO_BASE, 3) - -/** selects servo update rates, one bit per servo. 0 = default (50Hz), 1 = alternate */ -#define PWM_SERVO_SELECT_UPDATE_RATE _IOC(_PWM_SERVO_BASE, 4) - -/** set a single servo to a specific value */ -#define PWM_SERVO_SET(_servo) _IOC(_PWM_SERVO_BASE, 0x20 + _servo) - -/** get a single specific servo value */ -#define PWM_SERVO_GET(_servo) _IOC(_PWM_SERVO_BASE, 0x40 + _servo) - -/** get the _n'th rate group's channels; *(uint32_t *)arg returns a bitmap of channels - * whose update rates must be the same. - */ -#define PWM_SERVO_GET_RATEGROUP(_n) _IOC(_PWM_SERVO_BASE, 0x60 + _n) - -/* - * Low-level PWM output interface. - * - * This is the low-level API to the platform-specific PWM driver. - */ - -/** - * Intialise the PWM servo outputs using the specified configuration. - * - * @param channel_mask Bitmask of channels (LSB = channel 0) to enable. - * This allows some of the channels to remain configured - * as GPIOs or as another function. - * @return OK on success. - */ -__EXPORT extern int up_pwm_servo_init(uint32_t channel_mask); - -/** - * De-initialise the PWM servo outputs. - */ -__EXPORT extern void up_pwm_servo_deinit(void); - -/** - * Arm or disarm servo outputs. - * - * When disarmed, servos output no pulse. - * - * @bug This function should, but does not, guarantee that any pulse - * currently in progress is cleanly completed. - * - * @param armed If true, outputs are armed; if false they - * are disarmed. - */ -__EXPORT extern void up_pwm_servo_arm(bool armed); - -/** - * Set the servo update rate for all rate groups. - * - * @param rate The update rate in Hz to set. - * @return OK on success, -ERANGE if an unsupported update rate is set. - */ -__EXPORT extern int up_pwm_servo_set_rate(unsigned rate); - -/** - * Get a bitmap of output channels assigned to a given rate group. - * - * @param group The rate group to query. Rate groups are assigned contiguously - * starting from zero. - * @return A bitmap of channels assigned to the rate group, or zero if - * the group number has no channels. - */ -__EXPORT extern uint32_t up_pwm_servo_get_rate_group(unsigned group); - -/** - * Set the update rate for a given rate group. - * - * @param group The rate group whose update rate will be changed. - * @param rate The update rate in Hz. - * @return OK if the group was adjusted, -ERANGE if an unsupported update rate is set. - */ -__EXPORT extern int up_pwm_servo_set_rate_group_update(unsigned group, unsigned rate); - -/** - * Set the current output value for a channel. - * - * @param channel The channel to set. - * @param value The output pulse width in microseconds. - */ -__EXPORT extern int up_pwm_servo_set(unsigned channel, servo_position_t value); - -/** - * Get the current output value for a channel. - * - * @param channel The channel to read. - * @return The output pulse width in microseconds, or zero if - * outputs are not armed or not configured. - */ -__EXPORT extern servo_position_t up_pwm_servo_get(unsigned channel); - -__END_DECLS |