Skip to content

Commit 410d70f

Browse files
committed
Import initial version
This code is based on the 2021-08-18 (de562310) commit of https://git.openwrt.org/project/umbim.git but with significant changes to the structure and interface.
0 parents  commit 410d70f

12 files changed

+2337
-0
lines changed

COPYING

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Copyright (C) 2013-2014 Aleksander Morgado <aleksander@aleksander.es>
2+
Copyright (C) 2014 John Crispin <blogic@openwrt.org>
3+
Copyright (C) 2022 Chris Webb <chris@arachsys.com>
4+
5+
This program is free software; you can redistribute it and/or modify it
6+
under the terms of the GNU General Public License version 2 as published by
7+
the Free Software Foundation and included in GPLV2.
8+
9+
This program is distributed in the hope that it will be useful, but WITHOUT
10+
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11+
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12+
more details.

GPLV2

+339
Large diffs are not rendered by default.

Makefile

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
BINDIR := $(PREFIX)/bin
2+
CFLAGS := -Os -Wall -Wfatal-errors
3+
4+
mbim: *.[ch] Makefile
5+
$(CC) $(CFLAGS) -o $@ $(filter %.c,$^)
6+
7+
install: mbim
8+
mkdir -p $(DESTDIR)$(BINDIR)
9+
install -s $^ $(DESTDIR)$(BINDIR)
10+
11+
clean:
12+
rm -f mbim
13+
14+
.PHONY: clean install

constants.h

+347
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,347 @@
1+
enum {
2+
MESSAGE_TYPE_INVALID = 0x00000000,
3+
/* From host to function: */
4+
MESSAGE_TYPE_OPEN = 0x00000001,
5+
MESSAGE_TYPE_CLOSE = 0x00000002,
6+
MESSAGE_TYPE_COMMAND = 0x00000003,
7+
MESSAGE_TYPE_HOST_ERROR = 0x00000004,
8+
/* From function to host: */
9+
MESSAGE_TYPE_OPEN_DONE = 0x80000001,
10+
MESSAGE_TYPE_CLOSE_DONE = 0x80000002,
11+
MESSAGE_TYPE_COMMAND_DONE = 0x80000003,
12+
MESSAGE_TYPE_FUNCTION_ERROR = 0x80000004,
13+
MESSAGE_TYPE_INDICATE_STATUS = 0x80000007
14+
};
15+
16+
enum {
17+
ERROR_TIMEOUT_FRAGMENT = 1,
18+
ERROR_FRAGMENT_OUT_OF_SEQUENCE = 2,
19+
ERROR_LENGTH_MISMATCH = 3,
20+
ERROR_DUPLICATED_TID = 4,
21+
ERROR_NOT_OPENED = 5,
22+
ERROR_UNKNOWN = 6,
23+
ERROR_CANCEL = 7,
24+
ERROR_MAX_TRANSFER = 8
25+
};
26+
27+
enum {
28+
COMMAND_TYPE_UNKNOWN = -1,
29+
COMMAND_TYPE_QUERY = 0,
30+
COMMAND_TYPE_SET = 1
31+
};
32+
33+
enum {
34+
STATUS_SUCCESS = 0,
35+
STATUS_BUSY = 1,
36+
STATUS_FAILURE = 2,
37+
STATUS_SIM_NOT_INSERTED = 3,
38+
STATUS_BAD_SIM = 4,
39+
STATUS_PIN_REQUIRED = 5,
40+
STATUS_PIN_DISABLED = 6,
41+
STATUS_NOT_REGISTERED = 7,
42+
STATUS_PROVIDERS_NOT_FOUND = 8,
43+
STATUS_NO_DEVICE_SUPPORT = 9,
44+
STATUS_PROVIDER_NOT_VISIBLE = 10,
45+
STATUS_DATA_CLASS_NOT_AVAILABLE = 11,
46+
STATUS_PACKET_SERVICE_DETACHED = 12,
47+
STATUS_MAX_ACTIVATED_CONTEXTS = 13,
48+
STATUS_NOT_INITIALIZED = 14,
49+
STATUS_VOICE_CALL_IN_PROGRESS = 15,
50+
STATUS_CONTEXT_NOT_ACTIVATED = 16,
51+
STATUS_SERVICE_NOT_ACTIVATED = 17,
52+
STATUS_INVALID_ACCESS_STRING = 18,
53+
STATUS_INVALID_USER_NAME_PWD = 19,
54+
STATUS_RADIO_POWER_OFF = 20,
55+
STATUS_INVALID_PARAMETERS = 21,
56+
STATUS_READ_FAILURE = 22,
57+
STATUS_WRITE_FAILURE = 23,
58+
STATUS_OPERATION_NOT_ALLOWED = 28,
59+
STATUS_CONTEXT_NOT_SUPPORTED = 38
60+
};
61+
62+
enum {
63+
DEVICE_TYPE_UNKNOWN = 0,
64+
DEVICE_TYPE_EMBEDDED = 1,
65+
DEVICE_TYPE_REMOVABLE = 2,
66+
DEVICE_TYPE_REMOTE = 3
67+
};
68+
69+
enum {
70+
CELLULAR_CLASS_GSM = 1 << 0,
71+
CELLULAR_CLASS_CDMA = 1 << 1
72+
};
73+
74+
enum {
75+
VOICE_CLASS_UNKNOWN = 0,
76+
VOICE_CLASS_NO_VOICE = 1,
77+
VOICE_CLASS_SEPARATED_VOICE_DATA = 2,
78+
VOICE_CLASS_SIMULTANEOUS_VOICE_DATA = 3
79+
};
80+
81+
enum {
82+
SIM_CLASS_LOGICAL = 1 << 0,
83+
SIM_CLASS_REMOVABLE = 1 << 1
84+
};
85+
86+
enum {
87+
DATA_CLASS_GPRS = 1 << 0,
88+
DATA_CLASS_EDGE = 1 << 1,
89+
DATA_CLASS_UMTS = 1 << 2,
90+
DATA_CLASS_HSDPA = 1 << 3,
91+
DATA_CLASS_HSUPA = 1 << 4,
92+
DATA_CLASS_LTE = 1 << 5,
93+
/* Bits 6 to 15 reserved for future 3GPP classes */
94+
DATA_CLASS_1XRTT = 1 << 16,
95+
DATA_CLASS_1XEVDO = 1 << 17,
96+
DATA_CLASS_1XEVDO_REVA = 1 << 18,
97+
DATA_CLASS_1XEVDV = 1 << 19,
98+
DATA_CLASS_3XRTT = 1 << 20,
99+
DATA_CLASS_1XEVDO_REVB = 1 << 21,
100+
DATA_CLASS_UMB = 1 << 22,
101+
/* Bits 23 to 30 reserved for future 3GPP2 classes */
102+
DATA_CLASS_CUSTOM = 1 << 31
103+
};
104+
105+
enum {
106+
SMS_CAPS_PDU_RECEIVE = 1 << 0,
107+
SMS_CAPS_PDU_SEND = 1 << 1,
108+
SMS_CAPS_TEXT_RECEIVE = 1 << 2,
109+
SMS_CAPS_TEXT_SEND = 1 << 3
110+
};
111+
112+
enum {
113+
CTRL_CAPS_REG_MANUAL = 1 << 0,
114+
CTRL_CAPS_HW_RADIO_SWITCH = 1 << 1,
115+
CTRL_CAPS_CDMA_MOBILE_IP = 1 << 2,
116+
CTRL_CAPS_CDMA_SIMPLE_IP = 1 << 3,
117+
CTRL_CAPS_MULTI_CARRIER = 1 << 4
118+
};
119+
120+
enum {
121+
SUBSCRIBER_READY_STATE_NOT_INITIALIZED = 0,
122+
SUBSCRIBER_READY_STATE_INITIALIZED = 1,
123+
SUBSCRIBER_READY_STATE_SIM_NOT_INSERTED = 2,
124+
SUBSCRIBER_READY_STATE_BAD_SIM = 3,
125+
SUBSCRIBER_READY_STATE_FAILURE = 4,
126+
SUBSCRIBER_READY_STATE_NOT_ACTIVATED = 5,
127+
SUBSCRIBER_READY_STATE_DEVICE_LOCKED = 6,
128+
};
129+
130+
enum {
131+
READY_INFO_FLAG_PROTECT_UNIQUE_ID = 1 << 0
132+
};
133+
134+
enum {
135+
RADIO_SWITCH_STATE_OFF = 0,
136+
RADIO_SWITCH_STATE_ON = 1
137+
};
138+
139+
enum {
140+
PIN_TYPE_UNKNOWN = 0,
141+
PIN_TYPE_CUSTOM = 1,
142+
PIN_TYPE_PIN1 = 2,
143+
PIN_TYPE_PIN2 = 3,
144+
PIN_TYPE_DEVICE_SIM_PIN = 4,
145+
PIN_TYPE_DEVICE_FIRST_SIM_PIN = 5,
146+
PIN_TYPE_NETWORK_PIN = 6,
147+
PIN_TYPE_NETWORK_SUBSET_PIN = 7,
148+
PIN_TYPE_SERVICE_PROVIDER_PIN = 8,
149+
PIN_TYPE_CORPORATE_PIN = 9,
150+
PIN_TYPE_SUBSIDY_PIN = 10,
151+
PIN_TYPE_PUK1 = 11,
152+
PIN_TYPE_PUK2 = 12,
153+
PIN_TYPE_DEVICE_FIRST_SIM_PUK = 13,
154+
PIN_TYPE_NETWORK_PUK = 14,
155+
PIN_TYPE_NETWORK_SUBSET_PUK = 15,
156+
PIN_TYPE_SERVICE_PROVIDER_PUK = 16,
157+
PIN_TYPE_CORPORATE_PUK = 17
158+
};
159+
160+
enum {
161+
PIN_STATE_UNLOCKED = 0,
162+
PIN_STATE_LOCKED = 1
163+
};
164+
165+
enum {
166+
PIN_OPERATION_ENTER = 0,
167+
PIN_OPERATION_ENABLE = 1,
168+
PIN_OPERATION_DISABLE = 2,
169+
PIN_OPERATION_CHANGE = 3
170+
};
171+
172+
enum {
173+
PIN_MODE_NOT_SUPPORTED = 0,
174+
PIN_MODE_ENABLED = 1,
175+
PIN_MODE_DISABLED = 2
176+
};
177+
178+
enum {
179+
PIN_FORMAT_UNKNOWN = 0,
180+
PIN_FORMAT_NUMERIC = 1,
181+
PIN_FORMAT_ALPHANUMERIC = 2
182+
};
183+
184+
enum {
185+
PROVIDER_STATE_UNKNOWN = 0,
186+
PROVIDER_STATE_HOME = 1 << 0,
187+
PROVIDER_STATE_FORBIDDEN = 1 << 1,
188+
PROVIDER_STATE_PREFERRED = 1 << 2,
189+
PROVIDER_STATE_VISIBLE = 1 << 3,
190+
PROVIDER_STATE_REGISTERED = 1 << 4,
191+
PROVIDER_STATE_PREFERRED_MULTICARRIER = 1 << 5
192+
};
193+
194+
enum {
195+
VISIBLE_PROVIDERS_ACTION_FULL_SCAN = 0,
196+
VISIBLE_PROVIDERS_ACTION_RESTRICTED_SCAN = 1
197+
};
198+
199+
enum {
200+
NW_ERROR_UNKNOWN = 0,
201+
NW_ERROR_IMSI_UNKNOWN_IN_HLR = 2,
202+
NW_ERROR_ILLEGAL_MS = 3,
203+
NW_ERROR_IMSI_UNKNOWN_IN_VLR = 4,
204+
NW_ERROR_IMEI_NOT_ACCEPTED = 5,
205+
NW_ERROR_ILLEGAL_ME = 6,
206+
NW_ERROR_GPRS_NOT_ALLOWED = 7,
207+
NW_ERROR_GPRS_AND_NON_GPRS_NOT_ALLOWED = 8,
208+
NW_ERROR_MS_IDENTITY_NOT_DERIVED_BY_NETWORK = 9,
209+
NW_ERROR_IMPLICITLY_DETACHED = 10,
210+
NW_ERROR_PLMN_NOT_ALLOWED = 11,
211+
NW_ERROR_LOCATION_AREA_NOT_ALLOWED = 12,
212+
NW_ERROR_ROAMING_NOT_ALLOWED_IN_LOCATION_AREA = 13,
213+
NW_ERROR_GPRS_NOT_ALLOWED_IN_PLMN = 14,
214+
NW_ERROR_NO_CELLS_IN_LOCATION_AREA = 15,
215+
NW_ERROR_MSC_TEMPORARILY_NOT_REACHABLE = 16,
216+
NW_ERROR_NETWORK_FAILURE = 17,
217+
NW_ERROR_MAC_FAILURE = 20,
218+
NW_ERROR_SYNCH_FAILURE = 21,
219+
NW_ERROR_CONGESTION = 22,
220+
NW_ERROR_GSM_AUTHENTICATION_UNACCEPTABLE = 23,
221+
NW_ERROR_NOT_AUTHORIZED_FOR_CSG = 25,
222+
NW_ERROR_MISSING_OR_UNKNOWN_APN = 27,
223+
NW_ERROR_SERVICE_OPTION_NOT_SUPPORTED = 32,
224+
NW_ERROR_REQUESTED_SERVICE_OPTION_NOT_SUBSCRIBED = 33,
225+
NW_ERROR_SERVICE_OPTION_TEMPORARILY_OUT_OF_ORDER = 34,
226+
NW_ERROR_NO_PDP_CONTEXT_ACTIVATED = 40,
227+
NW_ERROR_SEMANTICALLY_INCORRECT_MESSAGE = 95,
228+
NW_ERROR_INVALID_MANDATORY_INFORMATION = 96,
229+
NW_ERROR_MESSAGE_TYPE_NON_EXISTENT_OR_NOT_IMPLEMENTED = 97,
230+
NW_ERROR_MESSAGE_TYPE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 98,
231+
NW_ERROR_INFORMATION_ELEMENT_NON_EXISTENT_OR_NOT_IMPLEMENTED = 99,
232+
NW_ERROR_CONDITIONAL_IE_ERROR = 100,
233+
NW_ERROR_MESSAGE_NOT_COMPATIBLE_WITH_PROTOCOL_STATE = 101,
234+
NW_ERROR_PROTOCOL_ERROR_UNSPECIFIED = 111
235+
};
236+
237+
enum {
238+
REGISTER_ACTION_AUTOMATIC = 0,
239+
REGISTER_ACTION_MANUAL = 1
240+
};
241+
242+
enum {
243+
REGISTER_STATE_UNKNOWN = 0,
244+
REGISTER_STATE_DEREGISTERED = 1,
245+
REGISTER_STATE_SEARCHING = 2,
246+
REGISTER_STATE_HOME = 3,
247+
REGISTER_STATE_ROAMING = 4,
248+
REGISTER_STATE_PARTNER = 5,
249+
REGISTER_STATE_DENIED = 6
250+
};
251+
252+
enum {
253+
REGISTER_MODE_UNKNOWN = 0,
254+
REGISTER_MODE_AUTOMATIC = 1,
255+
REGISTER_MODE_MANUAL = 2
256+
};
257+
258+
enum {
259+
REGISTRATION_FLAG_NONE = 0,
260+
REGISTRATION_FLAG_MANUAL_SELECTION_NOT_AVAILABLE = 1 << 0,
261+
REGISTRATION_FLAG_PACKET_SERVICE_AUTOMATIC_ATTACH = 1 << 1,
262+
};
263+
264+
enum {
265+
PACKET_SERVICE_ACTION_ATTACH = 0,
266+
PACKET_SERVICE_ACTION_DETACH = 1
267+
};
268+
269+
enum {
270+
PACKET_SERVICE_STATE_UNKNOWN = 0,
271+
PACKET_SERVICE_STATE_ATTACHING = 1,
272+
PACKET_SERVICE_STATE_ATTACHED = 2,
273+
PACKET_SERVICE_STATE_DETACHING = 3,
274+
PACKET_SERVICE_STATE_DETACHED = 4
275+
};
276+
277+
enum {
278+
ACTIVATION_COMMAND_DEACTIVATE = 0,
279+
ACTIVATION_COMMAND_ACTIVATE = 1
280+
};
281+
282+
enum {
283+
COMPRESSION_NONE = 0,
284+
COMPRESSION_ENABLE = 1
285+
};
286+
287+
enum {
288+
AUTH_PROTOCOL_NONE = 0,
289+
AUTH_PROTOCOL_PAP = 1,
290+
AUTH_PROTOCOL_CHAP = 2,
291+
AUTH_PROTOCOL_MSCHAPV2 = 3
292+
};
293+
294+
enum {
295+
CONTEXT_IP_TYPE_DEFAULT = 0,
296+
CONTEXT_IP_TYPE_IPV4 = 1,
297+
CONTEXT_IP_TYPE_IPV6 = 2,
298+
CONTEXT_IP_TYPE_IPV4V6 = 3,
299+
CONTEXT_IP_TYPE_IPV4_AND_IPV6 = 4
300+
};
301+
302+
enum {
303+
ACTIVATION_STATE_UNKNOWN = 0,
304+
ACTIVATION_STATE_ACTIVATED = 1,
305+
ACTIVATION_STATE_ACTIVATING = 2,
306+
ACTIVATION_STATE_DEACTIVATED = 3,
307+
ACTIVATION_STATE_DEACTIVATING = 4
308+
};
309+
310+
enum {
311+
VOICE_CALL_STATE_NONE = 0,
312+
VOICE_CALL_STATE_IN_PROGRESS = 1,
313+
VOICE_CALL_STATE_HANG_UP = 2
314+
};
315+
316+
enum {
317+
IP_CONFIG_FLAG_NONE = 0,
318+
IP_CONFIG_FLAG_ADDRESS = 1 << 0,
319+
IP_CONFIG_FLAG_GATEWAY = 1 << 1,
320+
IP_CONFIG_FLAG_DNS = 1 << 2,
321+
IP_CONFIG_FLAG_MTU = 1 << 3,
322+
};
323+
324+
enum {
325+
BASIC_CONNECT_DEVICE_CAPS = 1,
326+
BASIC_CONNECT_SUBSCRIBER_READY_STATUS = 2,
327+
BASIC_CONNECT_RADIO_STATE = 3,
328+
BASIC_CONNECT_PIN = 4,
329+
BASIC_CONNECT_PIN_LIST = 5,
330+
BASIC_CONNECT_HOME_PROVIDER = 6,
331+
BASIC_CONNECT_PREFERRED_PROVIDERS = 7,
332+
BASIC_CONNECT_VISIBLE_PROVIDERS = 8,
333+
BASIC_CONNECT_REGISTER_STATE = 9,
334+
BASIC_CONNECT_PACKET_SERVICE = 10,
335+
BASIC_CONNECT_SIGNAL_STATE = 11,
336+
BASIC_CONNECT_CONNECT = 12,
337+
BASIC_CONNECT_PROVISIONED_CONTEXTS = 13,
338+
BASIC_CONNECT_SERVICE_ACTIVATION = 14,
339+
BASIC_CONNECT_IP_CONFIGURATION = 15,
340+
BASIC_CONNECT_DEVICE_SERVICES = 16,
341+
BASIC_CONNECT_DEVICE_SERVICE_SUBSCRIBE_LIST = 19,
342+
BASIC_CONNECT_PACKET_STATISTICS = 20,
343+
BASIC_CONNECT_NETWORK_IDLE_HINT = 21,
344+
BASIC_CONNECT_EMERGENCY_MODE = 22,
345+
BASIC_CONNECT_IP_PACKET_FILTERS = 23,
346+
BASIC_CONNECT_MULTICARRIER_PROVIDERS = 24
347+
};

0 commit comments

Comments
 (0)