46#define OUT_MAX_CHANNELS 16u
49#define OUT_MAX_SLOTS 8u
58#define OUT_FLOOR_US 400u
59#define OUT_CEILING_US 2500u
76#define OUT_ROLE_BIT(r) ((uint8_t)(1u << (unsigned)(r)))
79#define OUT_ROLES_ALL ((uint8_t)(OUT_ROLE_BIT(OUT_ROLE_THROTTLE) \
80 | OUT_ROLE_BIT(OUT_ROLE_SURFACE)))
140#define OUT_MAX_PIN 63u
155#define OUT_DEFAULT_TIMEOUT_MS 500u
290 uint8_t first, uint8_t count, uint32_t now_ms);
329 uint8_t limit, uint16_t command,
out_driver_t
The drivers a slot can be configured as.
Definition outputs.h:83
@ OUT_DRIVER_DSHOT_BIDIR
Definition outputs.h:88
@ OUT_DRIVER_PPM
Definition outputs.h:86
@ OUT_DRIVER_COUNT
Definition outputs.h:89
@ OUT_DRIVER_NONE
Definition outputs.h:84
@ OUT_DRIVER_PWM
Definition outputs.h:85
@ OUT_DRIVER_DSHOT
Definition outputs.h:87
unsigned outputs_set_role_channels(outputs_t *o, out_role_t role, uint8_t limit, uint16_t command, uint32_t now_ms)
Command every channel below limit that carries role, and say how many took it.
Definition outputs.c:233
void outputs_channels_apply_n(outputs_t *o, const uint16_t *regs, uint8_t first, uint8_t count, uint32_t now_ms)
Apply count channels of a CHANNELS page from first, as commands.
Definition outputs_pages.c:534
bool outputs_set_slew(outputs_t *o, uint8_t ch, uint16_t per_s)
Set how fast a channel moves towards its command.
Definition outputs.c:210
void outputs_arm_roles(outputs_t *o, uint8_t roles, uint32_t now_ms)
Arm the channels of roles, OUT_ROLE_BIT()s, and only those. 0 disarms. outputs_arm() is this with OUT...
Definition outputs.c:273
#define OUT_MAX_CHANNELS
Channels in a bank.
Definition outputs.h:46
uint8_t outputs_armed_roles(const outputs_t *o)
The roles the bank is armed for: 0 while disarmed.
Definition outputs.c:310
void outputs_reserve_pins(outputs_t *o, uint64_t mask)
Declare the pins this build must never drive, one bit per pin.
Definition outputs.c:83
bool outputs_set(outputs_t *o, uint8_t ch, uint16_t command, uint32_t now_ms)
Command a channel.
Definition outputs.c:219
bool outputs_armed(const outputs_t *o)
Whether the bank is armed, for a screen that shows it.
Definition outputs.c:263
void outputs_arm(outputs_t *o, bool armed, uint32_t now_ms)
Arming is decided by the end holding the wire, not by the asker.
Definition outputs.c:268
bool outputs_slot_driving(const outputs_t *o, uint8_t slot)
Whether slot is driven: it is configured and the bank is armed for the role of at least one of its ch...
Definition outputs.c:328
const out_driver_def_t * out_driver(out_driver_t d)
The table itself, so callers can ask rather than assume.
Definition outputs.c:43
bool outputs_keepalive(outputs_t *o, uint8_t ch, uint32_t now_ms)
Say a channel is still being watched without changing what it was asked.
Definition outputs.c:254
uint16_t outputs_actual(const outputs_t *o, uint8_t ch)
The position a channel has reached.
Definition outputs.c:480
bool outputs_driving(const outputs_t *o)
Whether the bank is armed for any role.
Definition outputs.c:507
bool outputs_pin_available(const outputs_t *o, uint8_t pin)
Whether pin may be driven: it exists and is not in the reserved mask.
Definition outputs.c:91
bool outputs_overdue(const outputs_t *o, uint8_t ch, uint32_t now_ms)
Has this channel stopped being commanded?
Definition outputs.c:346
void outputs_all_off(outputs_t *o)
Everything to rest, immediately.
Definition outputs.c:358
uint16_t outputs_pulse_us(const outputs_t *o, uint8_t ch)
What a pulse driver should emit for ch, in microseconds.
Definition outputs.c:496
out_role_t
What rest means for a channel, which is the one thing a command cannot say.
Definition outputs.h:70
@ OUT_ROLE_SURFACE
Definition outputs.h:72
@ OUT_ROLE_THROTTLE
Definition outputs.h:71
#define OUT_MAX_SLOTS
Slots in a bank: driver configurations, each rendering channels.
Definition outputs.h:49
uint16_t outputs_role_rest(out_role_t role)
The command a channel of role rests at, 0..OUT_SPAN of its own endpoints: 0 for a throttle,...
Definition outputs.c:51
uint16_t outputs_command(const outputs_t *o, uint8_t ch)
What ch is being asked for, as against outputs_actual()'s where the slew and the staleness timeout ha...
Definition outputs.c:488
void outputs_init(outputs_t *o, uint32_t now_ms)
Set the bank to its start: every channel a surface at rest, the endpoints 1000 to 2000us,...
Definition outputs.c:56
bool outputs_configure(outputs_t *o, uint8_t slot, const out_slot_t *cfg)
Configure one slot, or clear it with OUT_DRIVER_NONE.
Definition outputs.c:113
bool outputs_role_armed(const outputs_t *o, out_role_t role)
Whether the bank is armed for role.
Definition outputs.c:315
bool outputs_set_endpoints(outputs_t *o, uint8_t ch, uint16_t min_us, uint16_t max_us)
Endpoints, refused rather than clamped.
Definition outputs.c:164
void outputs_step(outputs_t *o, uint32_t now_ms)
Advance slew to now_ms, and put a channel nobody has commanded for timeout_ms at its role's rest.
Definition outputs.c:371
bool outputs_set_role(outputs_t *o, uint8_t ch, out_role_t role)
Set the role of a channel: throttle or surface.
Definition outputs.c:184
bool outputs_channel_driving(const outputs_t *o, uint8_t ch)
Whether ch is driven: the bank is armed for its role.
Definition outputs.c:320
The state of one channel of the bank.
Definition outputs.h:118
uint16_t rest
Definition outputs.h:122
uint16_t min_us
Definition outputs.h:125
uint32_t last_command_ms
Definition outputs.h:127
uint16_t command
Definition outputs.h:120
uint16_t actual
Definition outputs.h:121
uint16_t max_us
Definition outputs.h:126
uint16_t slew_per_s
Definition outputs.h:123
uint16_t slew_rem
Definition outputs.h:124
out_role_t role
Definition outputs.h:119
What a driver is shaped like.
Definition outputs.h:98
uint16_t rate_max_hz
Definition outputs.h:106
bool pulsed
Definition outputs.h:104
bool reads_back
Definition outputs.h:103
uint16_t rate_min_hz
Definition outputs.h:105
uint8_t channels_max
Definition outputs.h:101
const char * name
Definition outputs.h:99
uint8_t pins
Definition outputs.h:102
uint8_t channels_min
Definition outputs.h:100
One driver configuration: the channels and pin it renders.
Definition outputs.h:131
uint16_t rate_hz
Definition outputs.h:136
uint8_t channels
Definition outputs.h:134
uint8_t first_channel
Definition outputs.h:133
uint8_t pin
Definition outputs.h:135
out_driver_t driver
Definition outputs.h:132
The state of a bank of channels and slots.
Definition outputs.h:143
uint64_t reserved
Definition outputs.h:150
out_channel_t channel[OUT_MAX_CHANNELS]
Definition outputs.h:144
uint32_t last_step_ms
Definition outputs.h:149
out_slot_t slot[OUT_MAX_SLOTS]
Definition outputs.h:145
bool armed
Definition outputs.h:146
uint8_t roles
Definition outputs.h:147
uint32_t timeout_ms
Definition outputs.h:148