23#ifndef ZEPHYR_INCLUDE_NET_IEEE802154_IE_H_
24#define ZEPHYR_INCLUDE_NET_IEEE802154_IE_H_
65#define IEEE802154_VENDOR_SPECIFIC_IE_OUI_LEN 3
134#if CONFIG_LITTLE_ENDIAN
156#define IEEE802154_HEADER_IE_HEADER_LENGTH sizeof(uint16_t)
160#define IEEE802154_DEFINE_HEADER_IE(_element_id, _length, _content, _content_type) \
161 (struct ieee802154_header_ie) { \
162 .length = (_length), \
163 .element_id_high = (_element_id) >> 1U, .element_id_low = (_element_id) & 0x01, \
164 .type = IEEE802154_IE_TYPE_HEADER, \
165 .content._content_type = _content, \
168#define IEEE802154_DEFINE_HEADER_IE_VENDOR_SPECIFIC_CONTENT_LEN(_vendor_specific_info_len) \
169 (IEEE802154_VENDOR_SPECIFIC_IE_OUI_LEN + (_vendor_specific_info_len))
171#define IEEE802154_DEFINE_HEADER_IE_VENDOR_SPECIFIC_CONTENT(_vendor_oui, _vendor_specific_info) \
172 (struct ieee802154_header_ie_vendor_specific) { \
173 .vendor_oui = _vendor_oui, .vendor_specific_info = (_vendor_specific_info), \
176#define IEEE802154_DEFINE_HEADER_IE_CSL_REDUCED_CONTENT(_csl_phase, _csl_period) \
177 (struct ieee802154_header_ie_csl_reduced) { \
178 .csl_phase = sys_cpu_to_le16(_csl_phase), \
179 .csl_period = sys_cpu_to_le16(_csl_period), \
182#define IEEE802154_DEFINE_HEADER_IE_CSL_FULL_CONTENT(_csl_phase, _csl_period, \
183 _csl_rendezvous_time) \
184 (struct ieee802154_header_ie_csl_full) { \
185 .csl_phase = sys_cpu_to_le16(_csl_phase), \
186 .csl_period = sys_cpu_to_le16(_csl_period), \
187 .csl_rendezvous_time = sys_cpu_to_le16(_csl_rendezvous_time), \
190#define IEEE802154_HEADER_IE_TIME_CORRECTION_NACK 0x8000
191#define IEEE802154_HEADER_IE_TIME_CORRECTION_MASK 0x0fff
192#define IEEE802154_HEADER_IE_TIME_CORRECTION_SIGN_BIT_MASK 0x0800
194#define IEEE802154_DEFINE_HEADER_IE_TIME_CORRECTION_CONTENT(_ack, _time_correction_us) \
195 (struct ieee802154_header_ie_time_correction) { \
196 .time_sync_info = sys_cpu_to_le16( \
197 (!(_ack) * IEEE802154_HEADER_IE_TIME_CORRECTION_NACK) | \
198 ((_time_correction_us) & IEEE802154_HEADER_IE_TIME_CORRECTION_MASK)), \
220#define IEEE802154_DEFINE_HEADER_IE_VENDOR_SPECIFIC(_vendor_oui, _vendor_specific_info, \
221 _vendor_specific_info_len) \
222 IEEE802154_DEFINE_HEADER_IE(IEEE802154_HEADER_IE_ELEMENT_ID_VENDOR_SPECIFIC_IE, \
223 IEEE802154_DEFINE_HEADER_IE_VENDOR_SPECIFIC_CONTENT_LEN( \
224 _vendor_specific_info_len), \
225 IEEE802154_DEFINE_HEADER_IE_VENDOR_SPECIFIC_CONTENT( \
226 _vendor_oui, _vendor_specific_info), \
244#define IEEE802154_DEFINE_HEADER_IE_CSL_REDUCED(_csl_phase, _csl_period) \
245 IEEE802154_DEFINE_HEADER_IE( \
246 IEEE802154_HEADER_IE_ELEMENT_ID_CSL_IE, \
247 sizeof(struct ieee802154_header_ie_csl_reduced), \
248 IEEE802154_DEFINE_HEADER_IE_CSL_REDUCED_CONTENT(_csl_phase, _csl_period), \
268#define IEEE802154_DEFINE_HEADER_IE_CSL_FULL(_csl_phase, _csl_period, _csl_rendezvous_time) \
269 IEEE802154_DEFINE_HEADER_IE(IEEE802154_HEADER_IE_ELEMENT_ID_CSL_IE, \
270 sizeof(struct ieee802154_header_ie_csl_full), \
271 IEEE802154_DEFINE_HEADER_IE_CSL_FULL_CONTENT( \
272 _csl_phase, _csl_period, _csl_rendezvous_time), \
291#define IEEE802154_DEFINE_HEADER_IE_TIME_CORRECTION(_ack, _time_correction_us) \
292 IEEE802154_DEFINE_HEADER_IE( \
293 IEEE802154_HEADER_IE_ELEMENT_ID_TIME_CORRECTION_IE, \
294 sizeof(struct ieee802154_header_ie_time_correction), \
295 IEEE802154_DEFINE_HEADER_IE_TIME_CORRECTION_CONTENT(_ack, _time_correction_us), \
309 if (ie->
time_sync_info & IEEE802154_HEADER_IE_TIME_CORRECTION_SIGN_BIT_MASK) {
344#define IEEE802154_TIME_CORRECTION_HEADER_IE_LEN \
345 (IEEE802154_HEADER_IE_HEADER_LENGTH + sizeof(struct ieee802154_header_ie_time_correction))
348#define IEEE802154_HEADER_TERMINATION_1_HEADER_IE_LEN IEEE802154_HEADER_IE_HEADER_LENGTH
ieee802154_header_ie_element_id
Header Information Element IDs.
Definition: ieee802154_ie.h:53
ieee802154_ie_type
Information Element Types.
Definition: ieee802154_ie.h:42
static int16_t ieee802154_header_ie_get_time_correction_us(struct ieee802154_header_ie_time_correction *ie)
Retrieve the time correction value in microseconds from a Time Correction IE, see section 7....
Definition: ieee802154_ie.h:307
static uint8_t ieee802154_header_ie_get_element_id(struct ieee802154_header_ie *ie)
Get the element ID of a header IE.
Definition: ieee802154_ie.h:338
static void ieee802154_header_ie_set_element_id(struct ieee802154_header_ie *ie, uint8_t element_id)
Set the element ID of a header IE.
Definition: ieee802154_ie.h:324
@ IEEE802154_HEADER_IE_ELEMENT_ID_RENDEZVOUS_TIME_IE
Definition: ieee802154_ie.h:57
@ IEEE802154_HEADER_IE_ELEMENT_ID_TIME_CORRECTION_IE
Definition: ieee802154_ie.h:58
@ IEEE802154_HEADER_IE_ELEMENT_ID_HEADER_TERMINATION_1
Definition: ieee802154_ie.h:59
@ IEEE802154_HEADER_IE_ELEMENT_ID_CSL_IE
Definition: ieee802154_ie.h:55
@ IEEE802154_HEADER_IE_ELEMENT_ID_HEADER_TERMINATION_2
Definition: ieee802154_ie.h:60
@ IEEE802154_HEADER_IE_ELEMENT_ID_VENDOR_SPECIFIC_IE
Definition: ieee802154_ie.h:54
@ IEEE802154_HEADER_IE_ELEMENT_ID_RIT_IE
Definition: ieee802154_ie.h:56
@ IEEE802154_IE_TYPE_HEADER
Definition: ieee802154_ie.h:43
@ IEEE802154_IE_TYPE_PAYLOAD
Definition: ieee802154_ie.h:44
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
__INT16_TYPE__ int16_t
Definition: stdint.h:73