aboutsummaryrefslogtreecommitdiffstats
path: root/include/net.h
blob: 432076b91ab5b97e5c504358b7e2969b02997721 (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
145
146
147
/*
 * 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_client *client,
			   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_client *client,
			 struct ipc_net_regist_request_data *data,
			 unsigned char domain);
unsigned char ipc_net_plmn_list_count_extract(struct ipc_client *client,
					      const void *data, size_t size);
struct ipc_net_plmn_list_entry *ipc_net_plmn_list_entry_extract(
	struct ipc_client *client,
	const void *data, size_t size, unsigned int index);

#endif /* __SAMSUNG_IPC_NET_H__ */