41 #define KEEP_STATIC_INLINE
43 #if defined(HAVE_RTAI_LXRT_H)
44 #include <rtai_lxrt.h>
45 #elif defined(HAVE_RTAI_LXRT_USER_H)
46 #include <rtai_lxrt_user.h>
48 #if defined(HAVE_RTAI_NETRPC_H)
49 #include <rtai_netrpc.h>
50 #elif defined(HAVE_NET_RPC_H)
58 rtmbdyn_rt_task_init(
const char *name,
int priority,
int stack_size,
59 int max_msg_size,
int cpu,
void **v_task)
62 assert(strlen(name) == 6);
63 assert(v_task != NULL);
64 assert(*v_task == NULL);
66 *v_task = (
void *)rt_task_init_schmod(nam2num(name), priority,
67 stack_size, max_msg_size, SCHED_FIFO, cpu);
68 return (*v_task == NULL);
72 rtmbdyn_rt_task_delete(
void **v_task)
77 assert(v_task != NULL);
78 assert(*v_task != NULL);
80 task = (RT_TASK *)*v_task;
81 rc = rt_task_delete(task);
88 rtmbdyn_rt_make_hard_real_time(
void)
90 rt_make_hard_real_time();
93 rtmbdyn_rt_make_soft_real_time(
void)
95 rt_make_soft_real_time();
98 rtmbdyn_rt_task_make_periodic(
void *v_task,
long long v_start_time,
103 RT_TASK *task = (RT_TASK *)v_task;
104 RTIME start_time = (RTIME)v_start_time;
105 RTIME period = (RTIME)v_period;
107 assert(v_task != NULL);
109 return rt_task_make_periodic(task, start_time, period);
113 rtmbdyn_rt_task_wait_period(
void)
115 rt_task_wait_period();
119 rtmbdyn_rt_allow_nonroot_hrt(
void)
121 rt_allow_nonroot_hrt();
125 rtmbdyn_rt_request_port(
unsigned long node)
129 return rt_request_port(node);
133 rtmbdyn_rt_set_oneshot_mode(
void)
135 rt_set_oneshot_mode();
139 rtmbdyn_rt_set_periodic_mode(
void)
141 rt_set_periodic_mode();
145 rtmbdyn_rt_is_hard_timer_running(
void)
147 return rt_is_hard_timer_running();
151 rtmbdyn_start_rt_timer(
long long v_period)
153 RTIME period = (RTIME)v_period;
154 return start_rt_timer(period);
158 rtmbdyn_stop_rt_timer(
void)
164 rtmbdyn_rt_get_time(
void)
166 return (
long long)rt_get_time();
170 rtmbdyn_count2nano(
long long count)
172 return (
long long)count2nano((RTIME)count);
176 rtmbdyn_nano2count(
long long nanos)
178 return (
long long)nano2count((RTIME)nanos);
182 rtmbdyn_rt_mbx_init(
const char *name,
int size,
void **v_mbx)
185 assert(strlen(name) <= 6);
187 assert(v_mbx != NULL);
188 assert(*v_mbx == NULL);
190 *v_mbx = (
void *)rt_mbx_init(nam2num(name), size);
192 return (*v_mbx == NULL);
196 rtmbdyn_rt_mbx_delete(
void **v_mbx)
201 assert(v_mbx != NULL);
202 assert(*v_mbx != NULL);
205 rc = rt_mbx_delete(mbx);
213 rtmbdyn_RT_get_adr(
unsigned long node,
int port,
const char *name,
void **v_task)
216 assert(node == 0 || port > 0);
217 assert(name != NULL);
218 assert(strlen(name) == 6);
219 assert(v_task != NULL);
220 assert(*v_task == NULL);
223 *v_task = (
void *)RT_get_adr(node, port, name);
225 return (*v_task == NULL);
229 rtmbdyn_RT_mbx_send(
unsigned long node,
int port,
void *v_mbx,
230 void *
msg,
int msg_size)
232 MBX *mbx = (MBX *)v_mbx;
234 assert(v_mbx != NULL);
236 assert(msg_size > 0);
238 return RT_mbx_send(node, port, mbx, msg, msg_size);
243 rtmbdyn_RT_mbx_send_if(
unsigned long node,
int port,
void *v_mbx,
244 void *
msg,
int msg_size)
246 MBX *mbx = (MBX *)v_mbx;
248 assert(v_mbx != NULL);
250 assert(msg_size > 0);
252 return RT_mbx_send_if(node, port, mbx, msg, msg_size);
257 rtmbdyn_RT_mbx_receive(
unsigned long node,
int port,
void *v_mbx,
258 void *
msg,
int msg_size)
260 MBX *mbx = (MBX *)v_mbx;
262 assert(v_mbx != NULL);
264 assert(msg_size > 0);
266 return RT_mbx_receive(node, port, mbx, msg, msg_size);
270 rtmbdyn_RT_mbx_receive_if(
unsigned long node,
int port,
void *v_mbx,
271 void *
msg,
int msg_size)
273 MBX *mbx = (MBX *)v_mbx;
275 assert(v_mbx != NULL);
277 assert(msg_size > 0);
279 return RT_mbx_receive_if(node, port, mbx, msg, msg_size);
283 rtmbdyn_rt_task_suspend(
void *v_task)
285 RT_TASK *task = (RT_TASK *)v_task;
287 assert(v_task != NULL);
289 return rt_task_suspend(task);
294 rtmbdyn_rt_task_resume(
void *v_task)
296 RT_TASK *task = (RT_TASK *)v_task;
298 assert(v_task != NULL);
300 return rt_task_resume(task);
304 rtmbdyn_rt_sleep(
long long count)
306 rt_sleep((RTIME)count);
309 rtmbdyn_rt_sem_init(
char *name,
int value,
void **v_sem)
311 assert(strlen(name) == 6);
312 assert(v_sem != NULL);
313 assert(*v_sem == NULL);
314 *v_sem = (
void *)rt_sem_init(nam2num(name),value);
316 return (*v_sem == NULL);
320 rtmbdyn_rt_sem_delete(
void **v_sem)
325 assert(v_sem != NULL);
326 assert(*v_sem != NULL);
329 rc = rt_sem_delete(sem);
336 rtmbdyn_rt_sem_signal(
void *v_sem)
338 SEM *sem = (SEM *)v_sem;
340 return rt_sem_signal(sem);
343 rtmbdyn_rt_sem_wait(
void *v_sem)
345 SEM *sem=(SEM *)v_sem;
347 return rt_sem_wait(sem);
351 rtmbdyn_rt_receive(
void *v_task,
int *
msg)
353 RT_TASK *task = (RT_TASK *)v_task;
355 return (
void *)rt_receive(task, msg);
359 rtmbdyn_rt_receive_if(
void *v_task,
int *msg)
361 RT_TASK *task = (RT_TASK *)v_task;
363 return (
void *)rt_receive_if(task, msg);
367 rtmbdyn_rt_get_cpu_time_ns(
void)
369 return rt_get_cpu_time_ns();