blob: 390541e874ba1fde61dc0d960cd3b3f688ffa9b8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
/*
* This file is part of libsamsung-ipc.
*
* Copyright (C) 2010-2011 Joerie de Gram <j.de.gram@gmail.com>
* Copyright (C) 2011 Simon Busch <morphis@gravedo.de>
* Copyright (C) 2011-2014 Paul Kocialkowski <contact@paulk.fr>
*
* libsamsung-ipc is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* libsamsung-ipc is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with libsamsung-ipc. If not, see <http://www.gnu.org/licenses/>.
*/
#include <samsung-ipc.h>
#ifndef __SAMSUNG_IPC_NET_H__
#define __SAMSUNG_IPC_NET_H__
/*
* Commands
*/
#define IPC_NET_PREF_PLMN 0x0801
#define IPC_NET_PLMN_SEL 0x0802
#define IPC_NET_SERVING_NETWORK 0x0803
#define IPC_NET_PLMN_LIST 0x0804
#define IPC_NET_REGIST 0x0805
#define IPC_NET_SUBSCRIBER_NUM 0x0806
#define IPC_NET_BAND_SEL 0x0807
#define IPC_NET_SERVICE_DOMAIN_CONFIG 0x0808
#define IPC_NET_POWERON_ATTACH 0x0809
#define IPC_NET_MODE_SEL 0x080A
#define IPC_NET_ACQ_ORDER 0x080B
#define IPC_NET_IDENTITY 0x080C
#define IPC_NET_PREFERRED_NETWORK_INFO 0x080D
/*
* Values
*/
#define IPC_NET_PLMN_SEL_AUTO 0x02
#define IPC_NET_PLMN_SEL_MANUAL 0x03
#define IPC_NET_MODE_SEL_GSM_UMTS 0x01
#define IPC_NET_MODE_SEL_GSM_ONLY 0x02
#define IPC_NET_MODE_SEL_UMTS_ONLY 0x03
#define IPC_NET_ACCESS_TECHNOLOGY_GSM 0x00
#define IPC_NET_ACCESS_TECHNOLOGY_GSM2 0x01
#define IPC_NET_ACCESS_TECHNOLOGY_GPRS 0x02
#define IPC_NET_ACCESS_TECHNOLOGY_EDGE 0x03
#define IPC_NET_ACCESS_TECHNOLOGY_UMTS 0x04
#define IPC_NET_ACCESS_TECHNOLOGY_UNKNOWN 0xFF
#define IPC_NET_PLMN_STATUS_AVAILABLE 0x02
#define IPC_NET_PLMN_STATUS_CURRENT 0x03
#define IPC_NET_PLMN_STATUS_FORBIDDEN 0x04
#define IPC_NET_PLMN_TYPE_EMERGENCY 0x01
#define IPC_NET_PLMN_TYPE_NORMAL 0x04
#define IPC_NET_SERVICE_DOMAIN_GSM 0x02
#define IPC_NET_SERVICE_DOMAIN_GPRS 0x03
#define IPC_NET_REGISTRATION_STATUS_NONE 0x01
#define IPC_NET_REGISTRATION_STATUS_HOME 0x02
#define IPC_NET_REGISTRATION_STATUS_SEARCHING 0x03
#define IPC_NET_REGISTRATION_STATUS_EMERGENCY 0x04
#define IPC_NET_REGISTRATION_STATUS_UNKNOWN 0x05
#define IPC_NET_REGISTRATION_STATUS_ROAMING 0x06
/*
* Structures
*/
struct ipc_net_plmn_sel_response_data {
unsigned char plmn_sel; // IPC_NET_PLMN_SEL
} __attribute__((__packed__));
struct ipc_net_plmn_sel_request_data {
unsigned char mode_sel; // IPC_NET_MODE_SEL
char plmn[6];
unsigned char act; // IPC_NET_ACCESS_TECHNOLOGY
} __attribute__((__packed__));
struct ipc_net_serving_network_data {
unsigned char unknown[3];
char plmn[6];
unsigned short lac;
} __attribute__((__packed__));
struct ipc_net_plmn_list_header {
unsigned char count;
} __attribute__((__packed__));
struct ipc_net_plmn_list_entry {
unsigned char status; // IPC_NET_PLMN_STATUS
char plmn[6];
unsigned char type; // IPC_NET_PLMN_TYPE
unsigned char unknown[2];
} __attribute__((__packed__));
struct ipc_net_regist_request_data {
unsigned char act; // IPC_NET_ACCESS_TECHNOLOGY
unsigned char domain; // IPC_NET_SERVICE_DOMAIN
} __attribute__((__packed__));
struct ipc_net_regist_response_data {
unsigned char act; // IPC_NET_ACCESS_TECHNOLOGY
unsigned char domain; // IPC_NET_SERVICE_DOMAIN
unsigned char status; // IPC_NET_REGISTRATION_STATUS
unsigned char edge;
unsigned short lac;
unsigned int cid;
unsigned char fail_cause;
} __attribute__((__packed__));
struct ipc_net_mode_sel_data {
unsigned char mode_sel; // IPC_NET_MODE_SEL
} __attribute__((__packed__));
/*
* Helpers
*/
int ipc_net_plmn_sel_setup(struct ipc_net_plmn_sel_request_data *data,
unsigned char mode_sel, const char *plmn, unsigned char act);
int ipc_net_regist_setup(struct ipc_net_regist_request_data *data,
unsigned char domain);
unsigned char ipc_net_plmn_list_count_extract(const void *data, size_t size);
struct ipc_net_plmn_list_entry *ipc_net_plmn_list_entry_extract(const void *data,
size_t size, unsigned int index);
#endif
// vim:ts=4:sw=4:expandtab
|