libosmogsm  0.10.2
Osmocom GSM library
gsm_03_41.h
Go to the documentation of this file.
1 
4 #pragma once
5 
6 #include <stdint.h>
7 
8 #include <osmocom/core/endian.h>
10 
11 #ifndef OSMO_IS_LITTLE_ENDIAN
12  #define OSMO_IS_LITTLE_ENDIAN 0
13 #endif
14 
15 #define GSM341_MAX_PAYLOAD (GSM412_MSG_LEN-sizeof(struct gsm341_ms_message))
16 #define GSM341_MAX_CHARS (GSM341_MAX_PAYLOAD*8/7)
17 #define GSM341_7BIT_PADDING '\r'
18 
19 /* Chapter 9.3.2 */
21  struct {
22 #if OSMO_IS_LITTLE_ENDIAN == 1
23  uint8_t code_hi:6;
24  uint8_t gs:2;
25  uint8_t update:4;
26  uint8_t code_lo:4;
27 #else
28  uint8_t gs:2;
29  uint8_t code_hi:6;
30  uint8_t code_lo:4;
31  uint8_t update:4;
32 #endif
33  } serial;
34  uint16_t msg_id;
35  struct {
36 #if OSMO_IS_LITTLE_ENDIAN == 1
37  uint8_t language:4;
38  uint8_t group:4;
39 #else
40  uint8_t group:4;
41  uint8_t language:4;
42 #endif
43  } dcs;
44  struct {
45 #if OSMO_IS_LITTLE_ENDIAN == 1
46  uint8_t total:4;
47  uint8_t current:4;
48 #else
49  uint8_t current:4;
50  uint8_t total:4;
51 #endif
52  } page;
53  uint8_t data[0];
54 } __attribute__((packed));
55 
56 /* Chapter 9.4.1.3 */
58  struct {
59 #if OSMO_IS_LITTLE_ENDIAN == 1
60  uint8_t code_hi:4;
61  uint8_t popup:1;
62  uint8_t alert:1;
63  uint8_t gs:2;
64  uint8_t update:4;
65  uint8_t code_lo:4;
66 #else
67  uint8_t gs:2;
68  uint8_t alert:1;
69  uint8_t popup:1;
70  uint8_t code_hi:4;
71  uint8_t code_lo:4;
72  uint8_t update:4;
73 #endif
74  } serial;
75  uint16_t msg_id;
76  uint16_t warning_type;
77  uint8_t data[0];
78 } __attribute__((packed));
79 
80 #define GSM341_MSG_CODE(ms) ((ms)->serial.code_lo | ((ms)->serial.code_hi << 4))
81 
82 /* Section 9.3.2.1 - Geographical Scope */
83 #define GSM341_GS_CELL_WIDE_IMMED 0
84 #define GSM341_GS_PLMN_WIDE 1
85 #define GSM341_GS_LA_WIDE 2
86 #define GSM341_GS_CELL_WIDE 3
87 
88 /* Section 9.4.1.2.2 */
89 #define GSM341_MSGID_EOTD_ASSISTANCE 0x03E8
90 #define GSM341_MSGID_DGPS_CORRECTION 0x03E9
91 #define GSM341_MSGID_DGPS_EPH_CLOCK_COR 0x03EA
92 #define GSM341_MSGID_GPS_ALMANAC_OTHER 0x03EB
93 #define GSM341_MSGID_ETWS_EARTHQUAKE 0x1100
94 #define GSM341_MSGID_ETWS_TSUNAMI 0x1101
95 #define GSM341_MSGID_ETWS_QUAKE_AND_TSUNAMI 0x1102
96 #define GSM341_MSGID_ETWS_TEST 0x1103
97 #define GSM341_MSGID_ETWS_OTHER 0x1104
98 #define GSM341_MSGID_ETWS_CMAS_PRESIDENTIAL 0x1112
99 #define GSM341_MSGID_ETWS_CMAS_EXTREME_IMM_OBSERVED 0x1113
100 #define GSM341_MSGID_ETWS_CMAS_EXTREME_IMM_LIKELY 0x1114
101 #define GSM341_MSGID_ETWS_CMAS_EXTREME_EXP_OBSERVED 0x1115
102 #define GSM341_MSGID_ETWS_CMAS_EXTREME_EXP_LIKELY 0x1116
103 #define GSM341_MSGID_ETWS_CMAS_SEVERE_IMM_OBSERVED 0x1117
104 #define GSM341_MSGID_ETWS_CMAS_SEVERE_IMM_LIKELY 0x1118
105 #define GSM341_MSGID_ETWS_CMAS_SEVERE_EXP_OBSERVED 0x1119
106 #define GSM341_MSGID_ETWS_CMAS_SEVERE_EXP_LIKELY 0x111A
107 #define GSM341_MSGID_ETWS_CMAS_AMBER 0x111B
108 #define GSM341_MSGID_ETWS_CMAS_MONTHLY_TEST 0x111C
109 #define GSM341_MSGID_ETWS_CMAS_EXERCISE 0x111D
110 #define GSM341_MSGID_ETWS_CMAS_OPERATOR_DEFINED 0x111E
111 #define GSM341_MSGID_ETWS_CMAS_PRESIDENTIAL_AL 0x111F
112 #define GSM341_MSGID_ETWS_CMAS_EXTREME_IMM_OBSERVED_AL 0x1120
113 #define GSM341_MSGID_ETWS_CMAS_EXTREME_IMM_LIKELY_AL 0x1121
114 #define GSM341_MSGID_ETWS_CMAS_EXTREME_EXP_OBSERVED_AL 0x1122
115 #define GSM341_MSGID_ETWS_CMAS_EXTREME_EXP_LIKELY_AL 0x1123
116 #define GSM341_MSGID_ETWS_CMAS_SEVERE_IMM_OBSERVED_AL 0x1124
117 #define GSM341_MSGID_ETWS_CMAS_SEVERE_IMM_LIKELY_AL 0x1125
118 #define GSM341_MSGID_ETWS_CMAS_SEVERE_EXP_OBSERVED_AL 0x1126
119 #define GSM341_MSGID_ETWS_CMAS_SEVERE_EXP_LIKELY_AL 0x1127
120 #define GSM341_MSGID_ETWS_CMAS_AMBER_AL 0x1128
121 #define GSM341_MSGID_ETWS_CMAS_MONTHLY_TEST_AL 0x1129
122 #define GSM341_MSGID_ETWS_CMAS_EXERCISE_AL 0x112A
123 #define GSM341_MSGID_ETWS_CMAS_OPERATOR_DEFINED_AL 0x112B
124 #define GSM341_MSGID_ETWS_EU_INFO_LOCAL_LANGUAGE 0x1900
Definition: gsm_03_41.h:57
uint8_t code_lo
Definition: gsm_03_41.h:30
uint8_t code_lo
Definition: gsm_03_41.h:71
Definition: gsm_03_41.h:20
uint8_t data[0]
Definition: gsm_03_41.h:53
uint8_t update
Definition: gsm_03_41.h:31
uint8_t language
Definition: gsm_03_41.h:41
struct gsm341_ms_message __attribute__((packed))
uint8_t alert
Definition: gsm_03_41.h:68
uint8_t current
Definition: gsm_03_41.h:49
uint8_t alert
Definition: gsm_03_41.h:86
uint16_t msg_id
Definition: gsm_03_41.h:75
uint8_t gs
Definition: gsm_03_41.h:28
uint8_t popup
Definition: gsm_03_41.h:69
struct gsm341_ms_message::@10 page
uint8_t popup
Definition: gsm_03_41.h:87
uint8_t update
Definition: gsm_03_41.h:72
uint16_t warning_type
Definition: gsm_03_41.h:76
uint8_t code_hi
Definition: gsm_03_41.h:70
uint8_t total
Definition: gsm_03_41.h:50
uint16_t msg_id
Definition: gsm_03_41.h:34
struct gsm341_ms_message::@8 serial
uint8_t group
Definition: gsm_03_41.h:40
struct gsm341_ms_message::@9 dcs
GSM TS 04.12 definitions for Short Message Service Cell Broadcast.
uint8_t code_hi
Definition: gsm_03_41.h:29
uint8_t gs
Definition: gsm_03_41.h:67