48typedef struct __raw raw_t;
62typedef struct __raw raw_id [];
80#define _RAW_INIT( _limit, _data ) { _OBJ_INIT(), 0, _limit, 0, 0, _data }
98#define _RAW_DATA( _limit ) (char[_limit]){ 0 }
111#define _VA_RAW( _limit, _size ) ( (_size + 0) ? ((_limit) * (_size + 0)) : (_limit) )
121#define OS_RAW_BUFFER( buf, limit, ... ) \
122 char buf[_VA_RAW(limit, __VA_ARGS__)]
132#define OS_RAW( raw, limit, ... ) \
133 static char raw##__buf[_VA_RAW(limit, __VA_ARGS__)]; \
134 raw_t raw[] = { _RAW_INIT( _VA_RAW(limit, __VA_ARGS__), raw##__buf ) }
137#define static_RAW( raw, limit, ... ) \
138 static char raw##__buf[_VA_RAW(limit, __VA_ARGS__)]; \
139 static raw_t raw[] = { _RAW_INIT( _VA_RAW(limit, __VA_ARGS__), raw##__buf ) }
153#define RAW_INIT( limit, ... ) \
154 _RAW_INIT( _VA_RAW(limit, __VA_ARGS__), _RAW_DATA( _VA_RAW(limit, __VA_ARGS__) ) )
169#define RAW_CREATE( limit, ... ) \
170 { RAW_INIT ( _VA_RAW(limit, __VA_ARGS__) ) }
217int raw_take( raw_t *raw,
void *
data,
size_t size,
size_t *read );
240int raw_waitFor( raw_t *raw,
void *
data,
size_t size,
size_t *read, cnt_t delay );
257int raw_waitUntil( raw_t *raw,
void *
data,
size_t size,
size_t *read, cnt_t time );
288int raw_give( raw_t *raw,
const void *
data,
size_t size );
307int raw_sendFor( raw_t *raw,
const void *
data,
size_t size, cnt_t delay );
354int raw_push( raw_t *raw,
const void *
data,
size_t size );
392#if defined(__cplusplus)
402template<
size_t limit_>
407 RawBufferT(): __raw _RAW_INIT(limit_, data_) {}
409 ~RawBufferT() { assert(__raw::obj.queue ==
nullptr); }
414 assert(_src.__raw::count == 0 && _src.obj.queue ==
nullptr);
424 int take (
void *_data,
size_t _size,
size_t *_read =
nullptr ) {
return raw_take (
this, _data, _size, _read); }
425 int tryWait (
void *_data,
size_t _size,
size_t *_read =
nullptr ) {
return raw_tryWait (
this, _data, _size, _read); }
427 int waitFor (
void *_data,
size_t _size,
size_t *_read,
const T& _delay ) {
return raw_waitFor (
this, _data, _size, _read,
Clock::count(_delay)); }
430 int wait (
void *_data,
size_t _size,
size_t *_read =
nullptr ) {
return raw_wait (
this, _data, _size, _read); }
431 int give (
const void *_data,
size_t _size ) {
return raw_give (
this, _data, _size); }
436 int send (
const void *_data,
size_t _size ) {
return raw_send (
this, _data, _size); }
437 int push (
const void *_data,
size_t _size ) {
return raw_push (
this, _data, _size); }
454template<
unsigned limit_,
class C>
461 int take ( C *_data ) {
return raw_take (
this, _data,
sizeof(C),
nullptr); }
467 int wait ( C *_data ) {
return raw_wait (
this, _data,
sizeof(C),
nullptr); }
468 int give (
const C *_data ) {
return raw_give (
this, _data,
sizeof(C)); }
473 int send (
const C *_data ) {
return raw_send (
this, _data,
sizeof(C)); }
474 int push (
const C *_data ) {
return raw_push (
this, _data,
sizeof(C)); }
#define INFINITE
infinite waiting
Definition osbase.h:250
char data[]
message data
Definition osmessagequeue.h:54
int raw_take(raw_t *raw, void *data, size_t size, size_t *read)
try to transfer data from the raw buffer object, don't wait if the raw buffer object is empty
int raw_sendFor(raw_t *raw, const void *data, size_t size, cnt_t delay)
try to transfer data to the raw buffer object, wait for given duration of time while the raw buffer o...
int raw_wait(raw_t *raw, void *data, size_t size, size_t *read)
try to transfer data from the raw buffer object, wait indefinitely while the raw buffer object is emp...
Definition osrawbuffer.h:272
size_t raw_limit(raw_t *raw)
return the size of the raw buffer
void raw_reset(raw_t *raw)
reset the raw buffer object and wake up all waiting tasks with 'E_STOPPED' event value
int raw_tryWait(raw_t *raw, void *data, size_t size, size_t *read)
alias of raw_take()
Definition osrawbuffer.h:220
int raw_waitUntil(raw_t *raw, void *data, size_t size, size_t *read, cnt_t time)
try to transfer data from the raw buffer object, wait until given timepoint while the raw buffer obje...
int raw_give(raw_t *raw, const void *data, size_t size)
try to transfer data to the raw buffer object, don't wait if the raw buffer object is full
size_t raw_space(raw_t *raw)
return the amount of free space in the raw buffer
int raw_push(raw_t *raw, const void *data, size_t size)
try to transfer data to the raw buffer object, remove the oldest data if the raw buffer object is ful...
int raw_sendUntil(raw_t *raw, const void *data, size_t size, cnt_t time)
try to transfer data to the raw buffer object, wait until given timepoint while the raw buffer object...
size_t raw_count(raw_t *raw)
return the amount of data contained in the raw buffer
int raw_waitFor(raw_t *raw, void *data, size_t size, size_t *read, cnt_t delay)
try to transfer data from the raw buffer object, wait for given duration of time while the raw buffer...
void raw_init(raw_t *raw, void *data, size_t bufsize)
initialize a raw buffer object
void raw_kill(raw_t *raw)
alias of raw_reset()
Definition osrawbuffer.h:201
int raw_send(raw_t *raw, const void *data, size_t size)
try to transfer data to the raw buffer object, wait indefinitely while the raw buffer object is full
Definition osrawbuffer.h:339
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
int sendFor(const C *_data, const T &_delay)
raw_sendFor()
Definition osrawbuffer.h:469
int send(const C *_data)
raw_send()
Definition osrawbuffer.h:472
int waitFor(C *_data, const T &_delay)
raw_waitFor()
Definition osrawbuffer.h:463
int push(const C *_data)
raw_push()
Definition osrawbuffer.h:473
int take(C *_data)
raw_take()
Definition osrawbuffer.h:460
int give(const C *_data)
raw_give()
Definition osrawbuffer.h:467
constexpr RawBufferTT()
constructor, see the constructor parameters of the class
Definition osrawbuffer.h:458
int sendUntil(const C *_data, const T &_time)
raw_sendUntil()
Definition osrawbuffer.h:471
int waitUntil(C *_data, const T &_time)
raw_waitUntil()
Definition osrawbuffer.h:465
int tryWait(C *_data)
raw_tryWait()
Definition osrawbuffer.h:461
int wait(C *_data)
raw_wait()
Definition osrawbuffer.h:466
create and initialize a raw buffer object
Definition osrawbuffer.h:403
int waitFor(void *_data, size_t _size, size_t *_read, const T &_delay)
raw_waitFor()
Definition osrawbuffer.h:426
void reset()
raw_reset()
Definition osrawbuffer.h:421
int waitUntil(void *_data, size_t _size, size_t *_read, const T &_time)
raw_waitUntil()
Definition osrawbuffer.h:428
int take(void *_data, size_t _size, size_t *_read=nullptr)
raw_take()
Definition osrawbuffer.h:423
int give(const void *_data, size_t _size)
raw_give()
Definition osrawbuffer.h:430
void kill()
raw_kill()
Definition osrawbuffer.h:422
constexpr RawBufferT()
constructor, see the constructor parameters of the class
Definition osrawbuffer.h:406
int wait(void *_data, size_t _size, size_t *_read=nullptr)
raw_wait()
Definition osrawbuffer.h:429
int send(const void *_data, size_t _size)
raw_send()
Definition osrawbuffer.h:435
int push(const void *_data, size_t _size)
raw_push()
Definition osrawbuffer.h:436
size_t count()
raw_count()
Definition osrawbuffer.h:437
int sendUntil(const void *_data, size_t _size, const T &_time)
raw_sendUntil()
Definition osrawbuffer.h:434
int tryWait(void *_data, size_t _size, size_t *_read=nullptr)
raw_tryWait()
Definition osrawbuffer.h:424
size_t space()
raw_space()
Definition osrawbuffer.h:438
size_t limit()
raw_limit()
Definition osrawbuffer.h:439
int sendFor(const void *_data, size_t _size, const T &_delay)
raw_sendFor()
Definition osrawbuffer.h:432