Hardware Abstraction Layer for FreeRTOS
mailbox.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Author: Andreas Werner <kernel@andy89.org>
4  * Date: 2016
5  */
6 #ifndef MAILBOX_H_
7 #define MAILBOX_H_
8 #include <FreeRTOS.h>
9 #include <stdint.h>
10 #include <stdbool.h>
11 #include <system.h>
12 #include <semphr.h>
13 #include <hal.h>
28 struct mailbox;
29 #ifdef CONFIG_MAILBOX_MULTI
30 
33 struct mailbox_ops {
34  struct mailbox *(*mailbox_init)(uint32_t index);
35  int32_t (*mailbox_deinit)(struct mailbox *mailbox);
36  int32_t (*mailbox_send)(struct mailbox *mailbox, uint32_t data, TickType_t waittime);
37  int32_t (*mailbox_recv)(struct mailbox *mailbox, uint32_t *data, TickType_t waittime);
38  int32_t (*mailbox_sendISR)(struct mailbox *mailbox, uint32_t data);
39  int32_t (*mailbox_recvISR)(struct mailbox *mailbox, uint32_t *data);
40 };
41 #endif
42 
57  bool init;
58 #ifdef CONFIG_INSTANCE_NAME
59 
62  const char *name;
63 #endif
64 #ifdef CONFIG_MAILBOX_THREAD_SAVE
65 
69 #endif
70 #ifdef CONFIG_MAILBOX_MULTI
71 
74  const struct mailbox_ops *ops;
75 #endif
76 };
77 #ifndef CONFIG_MAILBOX_MULTI
78 
83 struct mailbox *mailbox_init(uint32_t index);
89 int32_t mailbox_deinit(struct mailbox *mailbox);
97 int32_t mailbox_send(struct mailbox *mailbox, uint32_t data, TickType_t waittime);
105 int32_t mailbox_recv(struct mailbox *mailbox, uint32_t *data, TickType_t waittime);
112 int32_t mailbox_sendISR(struct mailbox *mailbox, uint32_t data);
119 int32_t mailbox_recvISR(struct mailbox *mailbox, uint32_t *data);
120 #else
121 inline struct mailbox *mailbox_init(uint32_t index) {
122  HAL_DEFINE_GLOBAL_ARRAY(mailbox);
123  struct mailbox_generic *p = (struct mailbox_generic *) HAL_GET_DEV(mailbox, index);
124  if (p == NULL) {
125  return NULL;
126  }
127  return p->ops->mailbox_init(index);
128 }
129 inline int32_t mailbox_deinit(struct mailbox *mailbox) {
130  struct mailbox_generic *p = (struct mailbox_generic *) mailbox;
131  return p->ops->mailbox_deinit(mailbox);
132 }
133 inline int32_t mailbox_send(struct mailbox *mailbox, uint32_t data, TickType_t waittime) {
134  struct mailbox_generic *p = (struct mailbox_generic *) mailbox;
135  return p->ops->mailbox_send(mailbox, data, waittime);
136 }
137 inline int32_t mailbox_recv(struct mailbox *mailbox, uint32_t *data, TickType_t waittime) {
138  struct mailbox_generic *p = (struct mailbox_generic *) mailbox;
139  return p->ops->mailbox_recv(mailbox, data, waittime);
140 }
141 inline int32_t mailbox_sendISR(struct mailbox *mailbox, uint32_t data) {
142  struct mailbox_generic *p = (struct mailbox_generic *) mailbox;
143  return p->ops->mailbox_sendISR(mailbox, data);
144 }
145 inline int32_t mailbox_recvISR(struct mailbox *mailbox, uint32_t *data) {
146  struct mailbox_generic *p = (struct mailbox_generic *) mailbox;
147  return p->ops->mailbox_recvISR(mailbox, data);
148 }
149 #endif
150 
151 #endif
OS_DEFINE_MUTEX_RECURSIVE
#define OS_DEFINE_MUTEX_RECURSIVE(name)
Definition: os.h:59
mailbox_init
struct mailbox * mailbox_init(uint32_t index)
hal.h
HAL_DEFINE_GLOBAL_ARRAY
#define HAL_DEFINE_GLOBAL_ARRAY(gns)
Definition: hal.h:149
mailbox_send
int32_t mailbox_send(struct mailbox *mailbox, uint32_t data, TickType_t waittime)
HAL_GET_DEV
#define HAL_GET_DEV(gns, index)
Definition: hal.h:182
mailbox_sendISR
int32_t mailbox_sendISR(struct mailbox *mailbox, uint32_t data)
mailbox_deinit
int32_t mailbox_deinit(struct mailbox *mailbox)
mailbox_recvISR
int32_t mailbox_recvISR(struct mailbox *mailbox, uint32_t *data)
mailbox_generic
Definition: mailbox.h:52
system.h
mailbox_recv
int32_t mailbox_recv(struct mailbox *mailbox, uint32_t *data, TickType_t waittime)
mailbox_generic::init
bool init
Definition: mailbox.h:57