Files
bacnet_stack/apps/router/msgqueue.h
T
Kari Argillander f806c5829b Run clang-format and enable CI check for it (#755)
* pre-commit: Update and enable clang-format check

There is newer version from clang-format so use that. We do not yet want
18 as that is little bit too new.

* Format some thing by hand which clang-format "breaks"

Clang-format will format some things little bit off in some cases.
Format some things by hand so we get cleaner end result.

* Run clang-format with

```
pre-commit run --all-files clang-format
```

We have already in previously checked places where clang-format does not
make good format and ignored those (hopefully most of the things).

---------

Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
2024-08-30 11:20:58 -05:00

68 lines
1.4 KiB
C

/**
* @file
* @author Andriy Sukhynyuk, Vasyl Tkhir, Andriy Ivasiv
* @date 2012
* @brief Message queue module
*
* @section LICENSE
*
* SPDX-License-Identifier: MIT
*/
#ifndef MSGQUEUE_H
#define MSGQUEUE_H
#include <stdint.h>
#include <stdbool.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
/* BACnet Stack defines - first */
#include "bacnet/bacdef.h"
/* BACnet Stack API */
#include "bacnet/npdu.h"
extern pthread_mutex_t msg_lock;
#define INVALID_MSGBOX_ID -1
typedef int MSGBOX_ID;
typedef enum { DATA = 1, SERVICE } MSGTYPE;
typedef enum { SHUTDOWN, CHG_IP, CHG_MAC } MSGSUBTYPE;
typedef struct _message {
MSGTYPE type;
MSGBOX_ID origin;
MSGSUBTYPE subtype;
void *data;
/* add timestamp */
} BACMSG;
/* specific message type data structures */
typedef struct _msg_data {
BACNET_ADDRESS dest;
BACNET_ADDRESS src;
uint8_t *pdu;
uint16_t pdu_len;
uint8_t ref_count;
} MSG_DATA;
MSGBOX_ID create_msgbox(void);
/* returns sent byte count */
bool send_to_msgbox(MSGBOX_ID dest, BACMSG *msg);
/* returns received message */
BACMSG *recv_from_msgbox(MSGBOX_ID src, BACMSG *msg, int flags);
void del_msgbox(MSGBOX_ID msgboxid);
/* free message data structure */
void free_data(MSG_DATA *data);
/* check message reference counter and delete data if needed */
void check_data(MSG_DATA *data);
#endif /* end of MSGQUEUE_H */