aboutsummaryrefslogtreecommitdiffstats
path: root/include/net.h
blob: 274c891fd5a953431411d27653d85c9cff27ce48 (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
/*
 * 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-2013 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_CURRENT_PLMN                                    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_CURRENT_RRC_STATUS                              0x080D

/*
 * Values
 */

#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_SEL_MANUAL                                 0x03
#define IPC_NET_PLMN_SEL_AUTO                                   0x02

#define IPC_NET_REGISTRATION_STATE_NONE                         0x01
#define IPC_NET_REGISTRATION_STATE_HOME                         0x02
#define IPC_NET_REGISTRATION_STATE_SEARCHING                    0x03
#define IPC_NET_REGISTRATION_STATE_EMERGENCY                    0x04
#define IPC_NET_REGISTRATION_STATE_UNKNOWN                      0x05
#define IPC_NET_REGISTRATION_STATE_ROAMING                      0x06

#define IPC_NET_ACCESS_TECHNOLOGY_UNKNOWN                       0xff
#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_SERVICE_DOMAIN_GSM                              0x02
#define IPC_NET_SERVICE_DOMAIN_GPRS                             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

/*
 * Structures
 */

struct ipc_net_regist_get {
    /* ignore, ipc_net_regist_get_setup will do for you */
    unsigned char net;
    /* IPC_NET_SERVICE_DOMAIN_.. */
    unsigned char domain;
} __attribute__((__packed__));

struct ipc_net_regist_response {
    /* IPC_NET_ACCESS_TECHNOLOGY_... */
    unsigned char act;
    /* IPC_NET_SERVICE_DOMAIN_... */
    unsigned char domain;
    /* IPC_NET_REGISTRATION_STATE_... */
    unsigned char reg_state;
    unsigned char edge;
    unsigned short lac;
    unsigned int cid;
    char rej_cause;
} __attribute__((__packed__));

struct ipc_net_current_plmn_response {
    char unk0;
    unsigned char slevel;
    char unk1;
    char plmn[5];
    unsigned char type; // IPC_NET_SERVICE_TYPE_... ?
    unsigned short lac;
} __attribute__((__packed__));

struct ipc_net_plmn_entry {
    unsigned char status; // IPC_NET_PLMN_STATUS_...
    char plmn[6];
    unsigned char type;
    char unk[2];
} __attribute__((__packed__));

struct ipc_net_plmn_entries {
    unsigned char num;
} __attribute__((__packed__));

struct ipc_net_mode_sel {
    unsigned char mode_sel;
} __attribute__((__packed__));

struct ipc_net_plmn_sel_get {
    unsigned char plmn_sel;
} __attribute__((__packed__));

struct ipc_net_plmn_sel_set {
    unsigned char mode;
    char plmn[6]; // 5 plmn bytes + 1 '#' byte
    unsigned char act; // IPC_NET_ACCESS_TECHNOLOGY_...
} __attribute__((__packed__));

/*
 * Helpers
 */

void ipc_net_regist_get_setup(struct ipc_net_regist_get *message,
    unsigned char domain);
void ipc_net_plmn_sel_set_setup(struct ipc_net_plmn_sel_set *message,
    unsigned char mode, char *plmn, unsigned char act);

#endif

// vim:ts=4:sw=4:expandtab