1 /*
2  * Copyright (c) 2020 - 2023, Nordic Semiconductor ASA
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright notice, this
11  *    list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * 3. Neither the name of Nordic Semiconductor ASA nor the names of its
18  *    contributors may be used to endorse or promote products derived from this
19  *    software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
25  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  *
33  */
34 
35 /**
36  * @defgroup nrf_802154_serialization_error_helper
37  * 802.15.4 radio driver serialization error helpers
38  * @{
39  *
40  */
41 
42 #ifndef NRF_802154_SERIALIZATION_ERROR_HELPER_H_
43 #define NRF_802154_SERIALIZATION_ERROR_HELPER_H_
44 
45 #include "nrf_802154_serialization_error.h"
46 
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50 
51 #define SERIALIZATION_ERROR_INIT(name) \
52     nrf_802154_ser_err_t name = NRF_802154_SERIALIZATION_ERROR_OK;
53 
54 /**
55  * Throw serialization error e.
56  */
57 #define SERIALIZATION_ERROR_RAISE_IF_FAILED(e)             \
58     do                                                     \
59     {                                                      \
60         if (e != NRF_802154_SERIALIZATION_ERROR_OK)        \
61         {                                                  \
62             nrf_802154_ser_err_data_t err = {.reason = e}; \
63             nrf_802154_serialization_error(&err);          \
64         }                                                  \
65     }                                                      \
66     while (0)
67 
68 /**
69  * Update error e with reason r and go to label l.
70  */
71 #define SERIALIZATION_ERROR(r, e, l) \
72     do                               \
73     {                                \
74         e = r;                       \
75         goto l;                      \
76     }                                \
77     while (0)
78 
79 /**
80  * Update error e with reason r if condition c is met and go to label l.
81  */
82 #define SERIALIZATION_ERROR_IF(c, r, e, l) \
83     do                                     \
84     {                                      \
85         if (c)                             \
86         {                                  \
87             SERIALIZATION_ERROR(r, e, l);  \
88         }                                  \
89     }                                      \
90     while (0)
91 
92 /**
93  * Update error e if reason r indicates error condition and go to label l.
94  */
95 #define SERIALIZATION_ERROR_CHECK(r, e, l) \
96     SERIALIZATION_ERROR_IF(r < 0, r, e, l)
97 
98 #ifdef __cplusplus
99 }
100 #endif
101 
102 #endif /* NRF_802154_SERIALIZATION_ERROR_HELPER_H_ */
103 
104 /** @} */
105