msg.h
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2014 Freie Universität Berlin
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
175 #include <stdint.h>
176 #include <stdbool.h>
177 
178 #include "sched.h"
179 
180 #ifdef __cplusplus
181 extern "C" {
182 #endif
183 
192 typedef struct {
195  uint16_t type;
196  union {
197  void *ptr;
198  uint32_t value;
199  } content;
200 } msg_t;
201 
220 int msg_send(msg_t *m, kernel_pid_t target_pid);
221 
238 int msg_try_send(msg_t *m, kernel_pid_t target_pid);
239 
254 
258 #define KERNEL_PID_ISR (KERNEL_PID_LAST + 1)
259 
278 int msg_send_int(msg_t *m, kernel_pid_t target_pid);
279 
287 static inline int msg_sent_by_int(const msg_t *m)
288 {
289  return (m->sender_pid == KERNEL_PID_ISR);
290 }
291 
303 
316 
339 int msg_send_receive(msg_t *m, msg_t *reply, kernel_pid_t target_pid);
340 
352 int msg_reply(msg_t *m, msg_t *reply);
353 
366 int msg_reply_int(msg_t *m, msg_t *reply);
367 
381 
390 unsigned msg_avail(void);
391 
400 
414 void msg_init_queue(msg_t *array, int num);
415 
419 #ifndef CONFIG_MSG_QUEUE_PRINT_MAX
420 # define CONFIG_MSG_QUEUE_PRINT_MAX 16U
421 #endif
422 
428 void msg_queue_print(void);
429 
430 #ifdef __cplusplus
431 }
432 #endif
433 
int msg_send_receive(msg_t *m, msg_t *reply, kernel_pid_t target_pid)
Send a message, block until reply received.
int msg_reply_int(msg_t *m, msg_t *reply)
Replies to a message from interrupt.
int msg_try_receive(msg_t *m)
Try to receive a message.
int msg_send_int(msg_t *m, kernel_pid_t target_pid)
Send message from interrupt.
int msg_reply(msg_t *m, msg_t *reply)
Replies to a message.
void msg_queue_print(void)
Prints the message queue of the current thread.
void msg_init_queue(msg_t *array, int num)
Initialize the current thread's message queue.
unsigned msg_queue_capacity(kernel_pid_t pid)
Get maximum capacity of a thread's queue length.
unsigned msg_avail(void)
Check how many messages are available (waiting) in the message queue.
static int msg_sent_by_int(const msg_t *m)
Test if the message was sent inside an ISR.
Definition: msg.h:287
int msg_send_to_self(msg_t *m)
Send a message to the current thread.
int msg_try_send(msg_t *m, kernel_pid_t target_pid)
Send a message (non-blocking).
int msg_send(msg_t *m, kernel_pid_t target_pid)
Send a message (blocking).
#define KERNEL_PID_ISR
Value of msg_t::sender_pid if the sender was an interrupt service routine.
Definition: msg.h:258
int msg_receive(msg_t *m)
Receive a message.
unsigned msg_avail_thread(kernel_pid_t pid)
Check how many messages are available (waiting) in the message queue of a specific thread.
int16_t kernel_pid_t
Unique process identifier.
Definition: sched.h:135
Scheduler API definition.
Describes a message object which can be sent between threads.
Definition: msg.h:192
uint16_t type
Type field.
Definition: msg.h:195
kernel_pid_t sender_pid
PID of sending thread.
Definition: msg.h:193
void * ptr
Pointer content field.
Definition: msg.h:197
uint32_t value
Value content field.
Definition: msg.h:198