libtinylor
Single-file header library for controlling Light-O-Rama hardware
|
Protocol encoding functions implementation. More...
#include "tinylor.h"
Functions | |
void | lor_set_channel (lor_req_s *req, lor_channel c) |
Configures the request to use a single, absolute channel. | |
void | lor_set_channels (lor_req_s *req, lor_channel first, const unsigned short cbits) |
Configures the request to use a channel set, in the form of a 16-bit bitset of channels, "starting at" the first channel offset used. | |
void | lor_set_unit (lor_req_s *req, const lor_unit u) |
Configures the request to be sent to the specified unit. A unit is required for all requests. A magic value of 0xFF may be used to broadcast the request to all units. | |
int | lor_set_effect (lor_req_s *req, const lor_effect e, const lor_effect_args_u *args) |
Configures the request to apply the specified effect. The effect may require additional arguments, which are provided in the args field as a union. If provided, the args field is copied into the request at which point the caller may safely discard the original args. Any non-NULL arguments will be copied into the request, even if the effect does not require them. This allows future expansion of usable effects without modifying the behavior of the function. | |
void | lor_set_intensity (lor_req_s *req, const lor_intensity i) |
Configures the request to set the intensity of the lights to the provided value. | |
void | lor_set_fade (lor_req_s *req, const lor_intensity start, const lor_intensity end, const lor_decisec ds) |
Configures the request to fade from one intensity to another over a specified duration in deciseconds. | |
static lor_channel_format | lor_get_cset_format (const lor_channel_set *const cset) |
Determines the compressed format of the channel set for encoding. | |
static int | lor_encode_cset (unsigned char *const b, const lor_channel_set *const cset) |
Encodes a channel set into a buffer. | |
static int | lor_encode_decis (unsigned char *b, const lor_decisec ds) |
Encodes a decisecond value into a 2-byte buffer. | |
static int | lor_encode_effect (unsigned char *const b, const lor_effect e, const lor_effect_args_u *const d) |
Encodes an effect into a buffer, including any required arguments for the effect type. | |
size_t | lor_write (unsigned char *b, const size_t bs, const lor_req_s *r, const size_t rs) |
Encodes and writes up to rs requests to the provided buffer b as binary data. Requests are first encoded into a scratch buffer to ensure the buffer has enough space to hold the encoded data. The function will attempt to write as many requests as possible to the buffer, up to the provided request count. | |
lor_intensity | lor_get_intensity (const unsigned char b) |
Encodes a [0,0xFF] value into a roughly equivalent LOR intensity value (precision is lossy) that is compatible with the protocol. | |
Protocol encoding functions implementation.
|
static |
Encodes a channel set into a buffer.
b | The buffer to write the channel set to. |
cset | The channel set to encode. |
|
static |
Encodes a decisecond value into a 2-byte buffer.
b | The buffer to write the decisecond value to. |
ds | The decisecond value to encode. |
|
static |
Encodes an effect into a buffer, including any required arguments for the effect type.
b | The buffer to write the effect to. |
e | The effect to encode. |
d | Optional effect arguments to encode. |
|
static |
Determines the compressed format of the channel set for encoding.
cset | The channel set to determine the format of. |
lor_intensity lor_get_intensity | ( | unsigned char | b | ) |
Encodes a [0,0xFF] value into a roughly equivalent LOR intensity value (precision is lossy) that is compatible with the protocol.
b | The byte value to convert. |
void lor_set_channel | ( | lor_req_s * | req, |
lor_channel | c ) |
Configures the request to use a single, absolute channel.
req | The request to configure. |
c | The single, absolute channel to apply the effect to, less than 1024. |
void lor_set_channels | ( | lor_req_s * | req, |
lor_channel | first, | ||
unsigned short | cbits ) |
Configures the request to use a channel set, in the form of a 16-bit bitset of channels, "starting at" the first channel offset used.
req | The request to configure. |
first | The first channel in the set. |
cbits | The 16-bit bitset of channels to apply the effect to. |
int lor_set_effect | ( | lor_req_s * | req, |
lor_effect | e, | ||
const lor_effect_args_u * | args ) |
Configures the request to apply the specified effect. The effect may require additional arguments, which are provided in the args field as a union. If provided, the args field is copied into the request at which point the caller may safely discard the original args. Any non-NULL arguments will be copied into the request, even if the effect does not require them. This allows future expansion of usable effects without modifying the behavior of the function.
req | The request to configure. |
e | The effect to apply. |
args | The effect arguments, required if effect is LOR_SET_INTENSITY, LOR_FADE, LOR_PULSE, or LOR_SET_DMX_INTENSITY. Should likely be NULL for other effect types. |
void lor_set_fade | ( | lor_req_s * | req, |
lor_intensity | start, | ||
lor_intensity | end, | ||
lor_decisec | ds ) |
Configures the request to fade from one intensity to another over a specified duration in deciseconds.
req | The request to configure. |
start | The starting intensity. |
end | The ending intensity. |
ds | The duration of the fade in deciseconds. |
void lor_set_intensity | ( | lor_req_s * | req, |
lor_intensity | i ) |
Configures the request to set the intensity of the lights to the provided value.
req | The request to configure. |
i | The intensity to use. This value should likely pass through a intensity conversion function before being passed to this function. |
Configures the request to be sent to the specified unit. A unit is required for all requests. A magic value of 0xFF may be used to broadcast the request to all units.
req | The request to configure. |
u | The unit to send the request to, or 0xFF to broadcast to all units. |
size_t lor_write | ( | unsigned char * | b, |
size_t | bs, | ||
const lor_req_s * | r, | ||
size_t | rs ) |
Encodes and writes up to rs
requests to the provided buffer b
as binary data. Requests are first encoded into a scratch buffer to ensure the buffer has enough space to hold the encoded data. The function will attempt to write as many requests as possible to the buffer, up to the provided request count.