LMMS
Loading...
Searching...
No Matches
rtosc.c File Reference
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdbool.h>
#include <ctype.h>
#include <assert.h>
#include <rtosc/rtosc.h>

Go to the source code of this file.

Macros

#define mfabs(val)
#define cmp_3way(val1, val2)
#define mfabs(val)
#define POS   ((size_t)(((const char *)lengths) - buffer))

Functions

const char * rtosc_argument_string (const char *msg)
unsigned rtosc_narguments (const char *msg)
static int has_reserved (char type)
static unsigned nreserved (const char *args)
char rtosc_type (const char *msg, unsigned nargument)
static unsigned arg_start (const char *msg_)
static unsigned arg_size (const uint8_t *arg_mem, char type)
static unsigned arg_off (const char *msg, unsigned idx)
size_t rtosc_message (char *buffer, size_t len, const char *address, const char *arguments,...)
static size_t vsosc_null (const char *address, const char *arguments, const rtosc_arg_t *args)
int rtosc_arg_vals_eq (rtosc_arg_val_t *lhs, rtosc_arg_val_t *rhs, size_t lsize, size_t rsize, const rtosc_cmp_options *opt)
int rtosc_arg_vals_cmp (rtosc_arg_val_t *lhs, rtosc_arg_val_t *rhs, size_t lsize, size_t rsize, const rtosc_cmp_options *opt)
void rtosc_v2args (rtosc_arg_t *args, size_t nargs, const char *arg_str, rtosc_va_list_t *ap)
void rtosc_2args (rtosc_arg_t *args, size_t nargs, const char *arg_str,...)
void rtosc_v2argvals (rtosc_arg_val_t *args, size_t nargs, const char *arg_str, va_list ap)
void rtosc_2argvals (rtosc_arg_val_t *args, size_t nargs, const char *arg_str,...)
size_t rtosc_vmessage (char *buffer, size_t len, const char *address, const char *arguments, va_list ap)
size_t rtosc_amessage (char *buffer, size_t len, const char *address, const char *arguments, const rtosc_arg_t *args)
static rtosc_arg_t extract_arg (const uint8_t *arg_pos, char type)
static const char * advance_past_dummy_args (const char *args)
rtosc_arg_itr_t rtosc_itr_begin (const char *msg)
rtosc_arg_val_t rtosc_itr_next (rtosc_arg_itr_t *itr)
int rtosc_itr_end (rtosc_arg_itr_t itr)
rtosc_arg_t rtosc_argument (const char *msg, unsigned idx)
static unsigned char deref (unsigned pos, ring_t *ring)
static size_t bundle_ring_length (ring_t *ring)
size_t rtosc_message_ring_length (ring_t *ring)
size_t rtosc_message_length (const char *msg, size_t len)
bool rtosc_valid_message_p (const char *msg, size_t len)
static uint64_t extract_uint64 (const uint8_t *arg_pos)
static uint32_t extract_uint32 (const uint8_t *arg_pos)
static void emplace_uint64 (uint8_t *buffer, uint64_t d)
static void emplace_uint32 (uint8_t *buffer, uint32_t d)
size_t rtosc_bundle (char *buffer, size_t len, uint64_t tt, int elms,...)
size_t rtosc_bundle_elements (const char *buffer, size_t len)
const char * rtosc_bundle_fetch (const char *buffer, unsigned elm)
size_t rtosc_bundle_size (const char *buffer, unsigned elm)
int rtosc_bundle_p (const char *msg)
uint64_t rtosc_bundle_timetag (const char *msg)

Variables

static const rtosc_cmp_options default_cmp_options = { 0.0 }

Macro Definition Documentation

◆ cmp_3way

#define cmp_3way ( val1,
val2 )
Value:
(((val1) == (val2)) \
? 0 \
: (((val1) > (val2)) ? 1 : -1))

◆ mfabs [1/2]

#define mfabs ( val)
Value:
(((val) >= 0) ? (val) : -(val))
int val
Definition jpeglib.h:956

◆ mfabs [2/2]

#define mfabs ( val)
Value:
(((val) >= 0) ? (val) : -(val))

◆ POS

#define POS   ((size_t)(((const char *)lengths) - buffer))

Function Documentation

◆ advance_past_dummy_args()

const char * advance_past_dummy_args ( const char * args)
static

◆ arg_off()

unsigned arg_off ( const char * msg,
unsigned idx )
static

◆ arg_size()

unsigned arg_size ( const uint8_t * arg_mem,
char type )
static

◆ arg_start()

unsigned arg_start ( const char * msg_)
static

◆ bundle_ring_length()

size_t bundle_ring_length ( ring_t * ring)
static

◆ deref()

unsigned char deref ( unsigned pos,
ring_t * ring )
static

◆ emplace_uint32()

void emplace_uint32 ( uint8_t * buffer,
uint32_t d )
static

◆ emplace_uint64()

void emplace_uint64 ( uint8_t * buffer,
uint64_t d )
static

◆ extract_arg()

rtosc_arg_t extract_arg ( const uint8_t * arg_pos,
char type )
static

◆ extract_uint32()

uint32_t extract_uint32 ( const uint8_t * arg_pos)
static

◆ extract_uint64()

uint64_t extract_uint64 ( const uint8_t * arg_pos)
static

◆ has_reserved()

int has_reserved ( char type)
static

◆ nreserved()

unsigned nreserved ( const char * args)
static

◆ rtosc_2args()

void rtosc_2args ( rtosc_arg_t * args,
size_t nargs,
const char * arg_str,
... )

◆ rtosc_2argvals()

void rtosc_2argvals ( rtosc_arg_val_t * args,
size_t nargs,
const char * arg_str,
... )

Pack parameters into pre-allocated rtosc_arg_val-t array

See also
rtosc_v2args

◆ rtosc_amessage()

size_t rtosc_amessage ( char * buffer,
size_t len,
const char * address,
const char * arguments,
const rtosc_arg_t * args )
See also
rtosc_message()

◆ rtosc_arg_vals_cmp()

int rtosc_arg_vals_cmp ( rtosc_arg_val_t * lhs,
rtosc_arg_val_t * rhs,
size_t lsize,
size_t rsize,
const rtosc_cmp_options * opt )

Compare two arrays of rtosc_arg_val_t. Whether an argument value is less or greater than another is computed

  • using memcmp for blobs
  • using strcmp for strings and identifiers
  • using numerical comparison for all other types. As an exception, the timestamp "immediately" is defined to be smaller than every other timestamp.
Parameters
optComparison options or NULL for default options
Returns
An integer less than, equal to, or greater than zero if lhs is found, respectively, to be less than, to match, or be greater than rhs.

◆ rtosc_arg_vals_eq()

int rtosc_arg_vals_eq ( rtosc_arg_val_t * lhs,
rtosc_arg_val_t * rhs,
size_t lsize,
size_t rsize,
const rtosc_cmp_options * opt )

Check if two arrays of rtosc_arg_val_t are equal

Parameters
optComparison options or NULL for default options
Returns
One if they are equal, zero if not

◆ rtosc_argument()

rtosc_arg_t rtosc_argument ( const char * msg,
unsigned i )

Blob data may be safely written to

Parameters
msgOSC message
iindex of argument
Returns
an argument by value via the rtosc_arg_t union

◆ rtosc_argument_string()

const char * rtosc_argument_string ( const char * msg)
Parameters
OSCmessage
Returns
the argument string of a given message

◆ rtosc_bundle()

size_t rtosc_bundle ( char * buffer,
size_t len,
uint64_t tt,
int elms,
... )

Generate a bundle from sub-messages

Parameters
bufferDestination buffer
lenLength of buffer
ttOSC time tag
elmsNumber of sub messages
...Messages
Returns
length of generated bundle or zero on failure

◆ rtosc_bundle_elements()

size_t rtosc_bundle_elements ( const char * msg,
size_t len )

Find the elements in a bundle

Parameters
msgOSC bundle
lenUpper bound on the length of the bundle
Returns
The number of messages contained within the bundle

◆ rtosc_bundle_fetch()

const char * rtosc_bundle_fetch ( const char * msg,
unsigned i )

Fetch a message within the bundle

Parameters
msgOSC bundle
iindex of sub-message
Returns
The ith message within the bundle

◆ rtosc_bundle_p()

int rtosc_bundle_p ( const char * msg)

Test if the buffer contains a bundle

Parameters
msgOSC message
Returns
true if message is a bundle

◆ rtosc_bundle_size()

size_t rtosc_bundle_size ( const char * msg,
unsigned i )

Get the size of a particular bundle element

Parameters
msgOSC bundle
iIndex of sub-message
Returns
The size of the ith sub-message in bytes

◆ rtosc_bundle_timetag()

uint64_t rtosc_bundle_timetag ( const char * msg)
Returns
Time Tag for a bundle

◆ rtosc_itr_begin()

rtosc_arg_itr_t rtosc_itr_begin ( const char * msg)

Create an argument iterator for a message

Parameters
msgOSC message
Returns
an initialized iterator

◆ rtosc_itr_end()

int rtosc_itr_end ( rtosc_arg_itr_t itr)

Determines if the iterator is at the end of the argument list

Parameters
itrOSC message iterator
Returns
1 if there are no more elements, 0 otherwise

◆ rtosc_itr_next()

rtosc_arg_val_t rtosc_itr_next ( rtosc_arg_itr_t * itr)

Gets the next argument in a message

Parameters
itrOSC message iterator
Returns
a type value pair from the message

◆ rtosc_message()

size_t rtosc_message ( char * buffer,
size_t len,
const char * address,
const char * arguments,
... )

Write OSC message to fixed length buffer

On error, buffer will be zeroed. When buffer is NULL, the function returns the size of the buffer required to store the message

//Example messages
char buffer[128];
rtosc_message(buffer,128,"/path","TFI");
rtosc_message(buffer,128,"/path","s","foobar");
rtosc_message(buffer,128,"/path","i",128);
rtosc_message(buffer,128,"/path","f",128.0);
const char blob[4] = {'a','b','c','d'};
rtosc_message(buffer,128,"/path","b",4,blob);
size_t rtosc_message(char *buffer, size_t len, const char *address, const char *arguments,...)
Definition rtosc.c:161
Parameters
bufferMemory to write to
lenLength of buffer
addressOSC pattern to send message to
argumentsString consisting of the types of the following arguments
...OSC arguments to pass forward
Returns
length of resulting message or zero if bounds exceeded

◆ rtosc_message_length()

size_t rtosc_message_length ( const char * msg,
size_t len )
Parameters
msgOSC message
lenMessage length upper bound
Returns
the size of a message given a chunk of memory.

◆ rtosc_message_ring_length()

size_t rtosc_message_ring_length ( ring_t * ring)

Finds the length of the next message inside a ringbuffer structure.

Parameters
ringThe addresses and lengths of the split buffer, in a compatible format to jack's ringbuffer
Returns
size of message stored in ring datastructure

◆ rtosc_narguments()

unsigned rtosc_narguments ( const char * msg)

Returns the number of arguments found in a given message

Parameters
msgwell formed OSC message
Returns
number of arguments in message

◆ rtosc_type()

char rtosc_type ( const char * msg,
unsigned i )
Parameters
msgwell formed OSC message
iindex of argument
Returns
the type of the ith argument in msg

◆ rtosc_v2args()

void rtosc_v2args ( rtosc_arg_t * args,
size_t nargs,
const char * arg_str,
rtosc_va_list_t * ap )

Pack arguments into pre-allocated rtosc_arg_t array

Parameters
argsPre-allocated array; size must be greater or equal nargs
nargsSize of elements to pack
arg_strRtosc string specifying the arguments' types
apThe parameters that shall be packed

◆ rtosc_v2argvals()

void rtosc_v2argvals ( rtosc_arg_val_t * args,
size_t nargs,
const char * arg_str,
va_list ap )

Pack parameters into pre-allocated rtosc_arg_val-t array

See also
rtosc_v2args

◆ rtosc_valid_message_p()

bool rtosc_valid_message_p ( const char * msg,
size_t len )

Validate if an arbitrary byte sequence is an OSC message.

Parameters
msgpointer to memory buffer
lenlength of buffer

◆ rtosc_vmessage()

size_t rtosc_vmessage ( char * buffer,
size_t len,
const char * address,
const char * arguments,
va_list va )
See also
rtosc_message()

◆ vsosc_null()

size_t vsosc_null ( const char * address,
const char * arguments,
const rtosc_arg_t * args )
static

Variable Documentation

◆ default_cmp_options

const rtosc_cmp_options default_cmp_options = { 0.0 }
static