blob: 17ac645481b1ba51ea718358274bf4cd4a44a132 [file] [log] [blame]
Neels Hofmeyr17518fe2017-06-20 04:35:06 +02001/*! \file gsm_04_12.h
2 * GSM TS 04.12 definitions for Short Message Service Cell Broadcast. */
3
Sylvain Munaut12ba7782014-06-16 10:13:40 +02004#pragma once
Holger Hans Peter Freyther0d60aa22010-07-21 05:02:33 +08005
6#include <stdint.h>
Neels Hofmeyrb2600392018-11-16 00:20:39 +01007#include <osmocom/core/endian.h>
Holger Hans Peter Freyther0d60aa22010-07-21 05:02:33 +08008
Harald Welte61ced832014-12-30 13:18:26 +01009#define GSM412_MSG_LEN 88 /* TS 04.12 Section 3.1 */
10#define GSM412_BLOCK_LEN 22 /* TS 04.12 Section 3.1 */
11
Holger Hans Peter Freyther0d60aa22010-07-21 05:02:33 +080012#define GSM412_SEQ_FST_BLOCK 0x0
13#define GSM412_SEQ_SND_BLOCK 0x1
14#define GSM412_SEQ_TRD_BLOCK 0x2
15#define GSM412_SEQ_FTH_BLOCK 0x3
16#define GSM412_SEQ_FST_SCHED_BLOCK 0x8
Alex Badea3ba0a2b2010-11-27 20:00:39 +020017#define GSM412_SEQ_NULL_MSG 0xf
Holger Hans Peter Freyther0d60aa22010-07-21 05:02:33 +080018
19struct gsm412_block_type {
Neels Hofmeyrb2600392018-11-16 00:20:39 +010020#if OSMO_IS_LITTLE_ENDIAN
Holger Hans Peter Freyther0d60aa22010-07-21 05:02:33 +080021 uint8_t seq_nr : 4,
22 lb : 1,
23 lpd : 2,
24 spare : 1;
Neels Hofmeyrb2600392018-11-16 00:20:39 +010025#elif OSMO_IS_BIG_ENDIAN
Oliver Smith0b5c09b2023-02-17 10:35:38 +010026/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
Neels Hofmeyrb2600392018-11-16 00:20:39 +010027 uint8_t spare:1, lpd:2, lb:1, seq_nr:4;
28#endif
Holger Hans Peter Freyther0d60aa22010-07-21 05:02:33 +080029} __attribute__((packed));
30
Alex Badea3ba0a2b2010-11-27 20:00:39 +020031struct gsm412_sched_msg {
Neels Hofmeyrb2600392018-11-16 00:20:39 +010032#if OSMO_IS_LITTLE_ENDIAN
Holger Hans Peter Freyther0d60aa22010-07-21 05:02:33 +080033 uint8_t beg_slot_nr : 6,
34 type : 2;
35 uint8_t end_slot_nr : 6,
36 spare1 : 1, spare2: 1;
37 uint8_t cbsms_msg_map[6];
38 uint8_t data[0];
Neels Hofmeyrb2600392018-11-16 00:20:39 +010039#elif OSMO_IS_BIG_ENDIAN
Oliver Smith0b5c09b2023-02-17 10:35:38 +010040/* auto-generated from the little endian part above (libosmocore/contrib/struct_endianness.py) */
Neels Hofmeyrb2600392018-11-16 00:20:39 +010041 uint8_t type:2, beg_slot_nr:6;
42 uint8_t spare2:1, spare1:1, end_slot_nr:6;
43 uint8_t cbsms_msg_map[6];
44 uint8_t data[0];
45#endif
Holger Hans Peter Freyther0d60aa22010-07-21 05:02:33 +080046} __attribute__((packed));