svc: Helpers
[libsamsung-ipc.git] / include / svc.h
1 /*
2  * This file is part of libsamsung-ipc.
3  *
4  * Copyright (C) 2013 Paul Kocialkowski <contact@oaulk.fr>
5  *
6  * libsamsung-ipc is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * libsamsung-ipc is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with libsamsung-ipc.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #include <samsung-ipc.h>
21
22 #ifndef __SAMSUNG_IPC_SVC_H__
23 #define __SAMSUNG_IPC_SVC_H__
24
25 /*
26  * Commands
27  */
28
29 #define IPC_SVC_ENTER                                           0x0B01
30 #define IPC_SVC_END                                             0x0B02
31 #define IPC_SVC_PRO_KEYCODE                                     0x0B03
32 #define IPC_SVC_SCREEN_CFG                                      0x0B04
33 #define IPC_SVC_DISPLAY_SCREEN                                  0x0B05
34 #define IPC_SVC_CHANGE_SVC_MODE                                 0x0B06
35 #define IPC_SVC_DEVICE_TEST                                     0x0B07
36 #define IPC_SVC_DEBUG_DUMP                                      0x0B08
37 #define IPC_SVC_DEBUG_STRING                                    0x0B09
38
39 /*
40  * Values
41  */
42
43 #define IPC_SVC_MODE_TEST_MANUAL                                0x01
44 #define IPC_SVC_MODE_TEST_AUTO                                  0x02
45 #define IPC_SVC_MODE_NAM_EDIT                                   0x03
46 #define IPC_SVC_MODE_MONITOR                                    0x04
47 #define IPC_SVC_MODE_PHONE_TEST                                 0x05
48
49 #define IPC_SVC_TYPE_ENTER                                      0x00
50 #define IPC_SVC_TYPE_SW_VERSION_ENTER                           0x01
51 #define IPC_SVC_TYPE_FTA_SW_VERSION_ENTER                       0x02
52 #define IPC_SVC_TYPE_FTA_HW_VERSION_ENTER                       0x03
53 #define IPC_SVC_TYPE_ALL_VERSION_ENTER                          0x04
54 #define IPC_SVC_TYPE_BATTERY_INFO_ENTER                         0x05
55 #define IPC_SVC_TYPE_CIPHERING_PROTECTION_ENTER                 0x06
56 #define IPC_SVC_TYPE_INTEGRITY_PROTECTION_ENTER                 0x07
57 #define IPC_SVC_TYPE_IMEI_READ_ENTER                            0x08
58 #define IPC_SVC_TYPE_BLUETOOTH_TEST_ENTER                       0x09
59 #define IPC_SVC_TYPE_VIBRATOR_TEST_ENTER                        0x0A
60 #define IPC_SVC_TYPE_MELODY_TEST_ENTER                          0x0B
61 #define IPC_SVC_TYPE_MP3_TEST_ENTER                             0x0C
62 #define IPC_SVC_TYPE_FACTORY_RESET_ENTER                        0x0D
63 #define IPC_SVC_TYPE_FACTORY_PRECONFIG_ENTER                    0x0E
64 #define IPC_SVC_TYPE_TFS4_EXPLORE_ENTER                         0x0F
65 #define IPC_SVC_TYPE_RSC_FILE_VERSION_ENTER                     0x11
66 #define IPC_SVC_TYPE_USB_DRIVER_ENTER                           0x12
67 #define IPC_SVC_TYPE_USB_UART_DIAG_CONTROL_ENTER                0x13
68 #define IPC_SVC_TYPE_RRC_VERSION_ENTER                          0x14
69 #define IPC_SVC_TYPE_GPSONE_SS_TEST_ENTER                       0x15
70 #define IPC_SVC_TYPE_BAND_SEL_ENTER                             0x16
71 #define IPC_SVC_TYPE_GCF_TESTMODE_ENTER                         0x17
72 #define IPC_SVC_TYPE_GSM_FACTORY_AUDIO_LB_ENTER                 0x18
73 #define IPC_SVC_TYPE_FACTORY_VF_TEST_ENTER                      0x19
74 #define IPC_SVC_TYPE_TOTAL_CALL_TIME_INFO_ENTER                 0x1A
75 #define IPC_SVC_TYPE_SELLOUT_SMS_ENABLE_ENTER                   0x1B
76 #define IPC_SVC_TYPE_SELLOUT_SMS_DISABLE_ENTER                  0x1C
77 #define IPC_SVC_TYPE_SELLOUT_SMS_TEST_MODE_ON                   0x1D
78 #define IPC_SVC_TYPE_SELLOUT_SMS_PRODUCT_MODE_ON                0x1E
79 #define IPC_SVC_TYPE_GET_SELLOUT_SMS_INFO_ENTER                 0x1F
80 #define IPC_SVC_TYPE_TST_AUTO_ANSWER_ENTER                      0x20
81 #define IPC_SVC_TYPE_TST_NV_RESET_ENTER                         0x21
82 #define IPC_SVC_TYPE_TST_FTA_SW_VERSION_ENTER                   0x22
83 #define IPC_SVC_TYPE_TST_FTA_HW_VERSION_ENTER                   0x23
84
85 /*
86  * Structures
87  */
88
89 struct ipc_svc_enter_data {
90     unsigned char mode; // IPC_SVC_MODE
91     unsigned char type; // IPC_SVC_TYPE
92     unsigned char magic;
93 } __attribute__((__packed__));
94
95 struct ipc_svc_end_data {
96     unsigned char mode; // IPC_SVC_MODE
97 } __attribute__((__packed__));
98
99 struct ipc_svc_pro_keycode_data {
100     unsigned char key;
101 } __attribute__((__packed__));
102
103 struct ipc_svc_screen_cfg_data {
104     unsigned char count;
105     unsigned char unknown;
106 } __attribute__((__packed__));
107
108 struct ipc_svc_display_screen_header {
109     unsigned char count;
110 } __attribute__((__packed__));
111
112 struct ipc_svc_display_screen_entry {
113     unsigned short index;
114     char line[32];
115 } __attribute__((__packed__));
116
117 struct ipc_svc_change_svc_mode_data {
118     unsigned char mode; // IPC_SVC_MODE
119 } __attribute__((__packed__));
120
121 /*
122  * Helpers
123  */
124
125 int ipc_svc_enter_setup(struct ipc_svc_enter_data *data,
126     unsigned char mode, unsigned char type);
127 unsigned char ipc_svc_display_screen_count_extract(const void *data, size_t size);
128 struct ipc_svc_display_screen_entry *ipc_svc_display_screen_extract(const void *data,
129     size_t size, unsigned int index);
130
131 #endif
132
133 // vim:ts=4:sw=4:expandtab