58#define MSG_SIZE( size ) \
59 ( (size_t)( size ) + sizeof(msh_t) )
65typedef struct __msg msg_t;
80typedef struct __msg msg_id [];
99#define _MSG_INIT( _limit, _size, _data ) \
100 { _OBJ_INIT(), 0, _limit * MSG_SIZE(_size), MSG_SIZE(_size), 0, 0, _data }
119#define _MSG_DATA( _limit, _size ) (char[_limit * MSG_SIZE(_size)]){ 0 }
130#define OS_MSG_BUFFER( buf, limit, size ) \
131 char buf[limit * MSG_SIZE(size)]
141#define OS_MSG( msg, limit, size ) \
142 static char msg##__buf[limit * MSG_SIZE(size)]; \
143 msg_t msg[] = { _MSG_INIT( limit, size, msg##__buf ) }
146#define static_MSG( msg, limit, size ) \
147 static char msg##__buf[limit * MSG_SIZE(size)]; \
148 static msg_t msg[] = { _MSG_INIT( limit, size, msg##__buf ) }
162#define MSG_INIT( limit, size ) \
163 _MSG_INIT( limit, size, _MSG_DATA( limit, size ) )
178#define MSG_CREATE( limit, size ) \
179 { MSG_INIT ( limit, size ) }
198void msg_init( msg_t *msg,
size_t size,
void *
data,
size_t bufsize );
230int msg_take( msg_t *msg,
void *
data,
size_t size,
size_t *read );
259int msg_waitFor( msg_t *msg,
void *
data,
size_t size,
size_t *read, cnt_t delay );
277int msg_waitUntil( msg_t *msg,
void *
data,
size_t size,
size_t *read, cnt_t time );
318int msg_give( msg_t *msg,
const void *
data,
size_t size );
342int msg_sendFor( msg_t *msg,
const void *
data,
size_t size, cnt_t delay );
396int msg_push( msg_t *msg,
const void *
data,
size_t size );
437size_t msg_size( msg_t *msg ) {
return msg->size -
sizeof(size_t); }
445#if defined(__cplusplus)
456template<
unsigned limit_,
size_t size_>
468 assert(_src.__msg::count == 0 && _src.obj.queue ==
nullptr);
478 int take (
void *_data,
size_t _size,
size_t *_read =
nullptr ) {
return msg_take (
this, _data, _size, _read); }
479 int tryWait (
void *_data,
size_t _size,
size_t *_read =
nullptr ) {
return msg_tryWait (
this, _data, _size, _read); }
481 int waitFor (
void *_data,
size_t _size,
size_t *_read,
const T& _delay ) {
return msg_waitFor (
this, _data, _size, _read,
Clock::count(_delay)); }
484 int wait (
void *_data,
size_t _size,
size_t *_read =
nullptr ) {
return msg_wait (
this, _data, _size, _read); }
485 int give (
const void *_data,
size_t _size ) {
return msg_give (
this, _data, _size); }
490 int send (
const void *_data,
size_t _size ) {
return msg_send (
this, _data, _size); }
491 int push (
const void *_data,
size_t _size ) {
return msg_push (
this, _data, _size); }
504 char data_[limit_ * MSG_SIZE(size_)];
515template<
unsigned limit_,
class C>
522 int take ( C *_data,
size_t *_read =
nullptr ) {
return msg_take (
this, _data,
sizeof(C), _read); }
523 int tryWait ( C *_data,
size_t *_read =
nullptr ) {
return msg_tryWait (
this, _data,
sizeof(C), _read); }
528 int wait ( C *_data,
size_t *_read =
nullptr ) {
return msg_wait (
this, _data,
sizeof(C), _read); }
529 int give (
const C *_data ) {
return msg_give (
this, _data,
sizeof(C)); }
534 int send (
const C *_data ) {
return msg_send (
this, _data,
sizeof(C)); }
535 int push (
const C *_data ) {
return msg_push (
this, _data,
sizeof(C)); }
#define INFINITE
infinite waiting
Definition osbase.h:250
int msg_sendAsync(msg_t *msg, const void *data, size_t size)
Async alias of msg_send().
int msg_push(msg_t *msg, const void *data, size_t size)
try to transfer data to the message queue object, remove the oldest data if the message queue object ...
int msg_sendUntil(msg_t *msg, const void *data, size_t size, cnt_t time)
try to transfer data to the message queue object, wait until given timepoint while the message queue ...
int msg_wait(msg_t *msg, void *data, size_t size, size_t *read)
try to transfer data from the message queue object, wait indefinitely while the message queue object ...
Definition osmessagequeue.h:295
size_t msg_count(msg_t *msg)
return the amount of data contained in the message queue
void msg_kill(msg_t *msg)
alias of msg_reset()
Definition osmessagequeue.h:211
int msg_give(msg_t *msg, const void *data, size_t size)
try to transfer data to the message queue object, don't wait if the message queue object is full
char data[]
message data
Definition osmessagequeue.h:54
size_t msg_limit(msg_t *msg)
return the size of the message queue
int msg_waitFor(msg_t *msg, void *data, size_t size, size_t *read, cnt_t delay)
try to transfer data from the message queue object, wait for given duration of time while the message...
size_t msg_space(msg_t *msg)
return the amount of free space in the message queue
int msg_take(msg_t *msg, void *data, size_t size, size_t *read)
try to transfer data from the message queue object, don't wait if the message queue object is empty
int msg_send(msg_t *msg, const void *data, size_t size)
try to transfer data to the message queue object, wait indefinitely while the message queue object is...
Definition osmessagequeue.h:376
int msg_sendFor(msg_t *msg, const void *data, size_t size, cnt_t delay)
try to transfer data to the message queue object, wait for given duration of time while the message q...
void msg_reset(msg_t *msg)
reset the message queue object and wake up all waiting tasks with 'E_STOPPED' event value
int msg_tryWait(msg_t *msg, void *data, size_t size, size_t *read)
alias of msg_take()
Definition osmessagequeue.h:233
void msg_init(msg_t *msg, size_t size, void *data, size_t bufsize)
initialize a message queue object
int msg_giveAsync(msg_t *msg, const void *data, size_t size)
Async alias of msg_give().
struct __msh msh_t
message header
Definition osmessagequeue.h:48
size_t msg_size(msg_t *msg)
return max size of a message in the message queue
Definition osmessagequeue.h:436
int msg_waitAsync(msg_t *msg, void *data, size_t size, size_t *read)
Async alias of msg_wait().
int msg_takeAsync(msg_t *msg, void *data, size_t size, size_t *read)
Async alias of msg_take().
int msg_waitUntil(msg_t *msg, void *data, size_t size, size_t *read, cnt_t time)
try to transfer data from the message queue object, wait until given timepoint while the message queu...
static constexpr rep until(const std::chrono::time_point< Clock, _Duration > &_time)
time point in ticks, rounded up to whole ticks (only a time point of this clock)
Definition osclock.h:109
static constexpr rep count(const std::chrono::duration< _Rep, _Period > &_delay)
delay in ticks, rounded up to whole ticks; negative delay: IMMEDIATE, delay out of range: INFINITE
Definition osclock.h:102
constexpr MessageQueueTT()
constructor, see the constructor parameters of the class
Definition osmessagequeue.h:519
int sendAsync(const C *_data)
msg_sendAsync()
Definition osmessagequeue.h:539
int send(const C *_data)
msg_send()
Definition osmessagequeue.h:533
int tryWait(C *_data, size_t *_read=nullptr)
msg_tryWait()
Definition osmessagequeue.h:522
int giveAsync(const C *_data)
msg_giveAsync()
Definition osmessagequeue.h:538
int takeAsync(C *_data, size_t *_read=nullptr)
msg_takeAsync()
Definition osmessagequeue.h:536
int sendFor(const C *_data, const T &_delay)
msg_sendFor()
Definition osmessagequeue.h:530
int give(const C *_data)
msg_give()
Definition osmessagequeue.h:528
int waitUntil(C *_data, size_t *_read, const T &_time)
msg_waitUntil()
Definition osmessagequeue.h:526
int sendUntil(const C *_data, const T &_time)
msg_sendUntil()
Definition osmessagequeue.h:532
int take(C *_data, size_t *_read=nullptr)
msg_take()
Definition osmessagequeue.h:521
int wait(C *_data, size_t *_read=nullptr)
msg_wait()
Definition osmessagequeue.h:527
int push(const C *_data)
msg_push()
Definition osmessagequeue.h:534
int waitFor(C *_data, size_t *_read, const T &_delay)
msg_waitFor()
Definition osmessagequeue.h:524
int waitAsync(C *_data, size_t *_read=nullptr)
msg_waitAsync()
Definition osmessagequeue.h:537
create and initialize a message queue object
Definition osmessagequeue.h:457
size_t space()
msg_space()
Definition osmessagequeue.h:492
void reset()
msg_reset()
Definition osmessagequeue.h:475
int push(const void *_data, size_t _size)
msg_push()
Definition osmessagequeue.h:490
size_t limit()
msg_limit()
Definition osmessagequeue.h:493
int sendUntil(const void *_data, size_t _size, const T &_time)
msg_sendUntil()
Definition osmessagequeue.h:488
int wait(void *_data, size_t _size, size_t *_read=nullptr)
msg_wait()
Definition osmessagequeue.h:483
int takeAsync(void *_data, size_t _size, size_t *_read=nullptr)
msg_takeAsync()
Definition osmessagequeue.h:496
int tryWait(void *_data, size_t _size, size_t *_read=nullptr)
msg_tryWait()
Definition osmessagequeue.h:478
void kill()
msg_kill()
Definition osmessagequeue.h:476
size_t count()
msg_count()
Definition osmessagequeue.h:491
size_t size()
msg_size()
Definition osmessagequeue.h:494
constexpr MessageQueueT()
constructor, see the constructor parameters of the class
Definition osmessagequeue.h:460
int waitAsync(void *_data, size_t _size, size_t *_read=nullptr)
msg_waitAsync()
Definition osmessagequeue.h:497
int sendAsync(const void *_data, size_t _size)
msg_sendAsync()
Definition osmessagequeue.h:499
int waitFor(void *_data, size_t _size, size_t *_read, const T &_delay)
msg_waitFor()
Definition osmessagequeue.h:480
int give(const void *_data, size_t _size)
msg_give()
Definition osmessagequeue.h:484
int take(void *_data, size_t _size, size_t *_read=nullptr)
msg_take()
Definition osmessagequeue.h:477
int giveAsync(const void *_data, size_t _size)
msg_giveAsync()
Definition osmessagequeue.h:498
int sendFor(const void *_data, size_t _size, const T &_delay)
msg_sendFor()
Definition osmessagequeue.h:486
int send(const void *_data, size_t _size)
msg_send()
Definition osmessagequeue.h:489
int waitUntil(void *_data, size_t _size, size_t *_read, const T &_time)
msg_waitUntil()
Definition osmessagequeue.h:482