blob: 63efced5a5774faaa4bc1cecd22b54cee2a093a9 [file] [log] [blame]
b.liu9e8584b2024-11-06 19:21:28 +08001#include <string.h>
b.liu0d56e092025-03-18 11:15:48 +08002#include <stdint.h>
3#include <cutils/properties.h>
4#include <unistd.h>
5
b.liuf678f992024-05-08 15:23:10 +08006#include "mbtk_type.h"
b.liu61ad9172025-01-09 14:33:55 +08007#include "mbtk_utils.h"
b.liu472cfaf2024-12-19 19:08:19 +08008
b.liubb5e7682024-02-28 20:13:04 +08009#include "mbtk_device.h"
b.liu472cfaf2024-12-19 19:08:19 +080010
b.liu0d56e092025-03-18 11:15:48 +080011/*
12* Exec shell command.
13*/
qs.xionga7be6a92025-09-08 20:42:03 +080014/*
b.liu0d56e092025-03-18 11:15:48 +080015static bool shell_cmd_exec(const char *cmd, char *buf, int buf_size){
16 FILE *fcmd;
17 bool result = FALSE;
18 fcmd = popen(cmd, "r");
19 memset(buf, 0, buf_size);
20 if(fcmd)
21 {
22 int pos = 0;
23 int len = 0;
24
25 while(!ferror(fcmd) && !feof(fcmd))
26 {
27 if(buf_size - pos == 0)
28 {
29 break;
30 }
31 len = fread(buf + pos,1,buf_size - pos,fcmd);
32 if(len > 0)
33 pos += len;
34 }
35
36 if(buf_size == pos)
37 buf[buf_size - 1] = '\0';
38
39 pclose(fcmd);
40 result = TRUE;
41 }
42
43// LOGV("%s [result:%d]: %s",cmd,result,buf);
44
45 return result;
46}
47
qs.xionga7be6a92025-09-08 20:42:03 +080048*/
b.liubb5e7682024-02-28 20:13:04 +080049static char* band_2_str(mbtk_modem_band_area_enum band_area)
50{
51 switch(band_area)
52 {
53 case MBTK_MODEM_BAND_AREA_CN:
54 return "CN";
55 case MBTK_MODEM_BAND_AREA_EU:
56 return "EU";
b.liu288093c2024-05-09 17:02:57 +080057 case MBTK_MODEM_BAND_AREA_SA:
58 return "SA";
b.liubb5e7682024-02-28 20:13:04 +080059 default:
60 return "ALL";
61 }
62}
63
b.liu61ad9172025-01-09 14:33:55 +080064static char* net_support_str_get(uint32 net_support)
65{
66 static char net_str[100] = {0};
67
68 if(net_support & MBTK_NET_SUPPORT_2G) { // GSM
69 if(strlen(net_str) > 0) {
70 strcat(net_str, "/2G");
71 } else {
72 strcat(net_str, "2G");
73 }
74 }
75
76 if(net_support & MBTK_NET_SUPPORT_3G) { // WCDMA
77 if(strlen(net_str) > 0) {
78 strcat(net_str, "/3G");
79 } else {
80 strcat(net_str, "3G");
81 }
82 }
83
84 if(net_support & MBTK_NET_SUPPORT_4G) { // LTE
85 if(strlen(net_str) > 0) {
86 strcat(net_str, "/4G");
87 } else {
88 strcat(net_str, "4G");
89 }
90 }
91
92 if(net_support & MBTK_NET_SUPPORT_5G) { // NR
93 if(strlen(net_str) > 0) {
94 strcat(net_str, "/5G");
95 } else {
96 strcat(net_str, "5G");
97 }
98 }
99 return net_str;
100}
101
102static char* band_str_get(uint32 band, int index)
103{
104 int band_list[33] = {0};
105 int ret = mbtk_band_2_list(band, index, band_list);
106 if(ret > 0) {
107 static char buff[150] = {0};
108 memset(buff, 0, sizeof(buff));
109 int i = 0;
110 while(i < ret) {
111 if(strlen(buff) > 0) {
112 sprintf(buff + strlen(buff), "/b%d", band_list[i]);
113 } else {
114 sprintf(buff + strlen(buff), "b%d", band_list[i]);
115 }
116 i++;
117 }
118 return buff;
119 } else {
120 return "NON";
121 }
122}
123
b.liu0d56e092025-03-18 11:15:48 +0800124static void band_support_init(mbtk_device_info_modem_t *info_modem)
125{
126 memset(info_modem, 0, sizeof(mbtk_device_info_modem_t));
127 if(mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_MODEM, info_modem, sizeof(mbtk_device_info_modem_t))) {
128 printf("mbtk_dev_info_read(MODEM) fail, use default band.\n");
b.liub7530d22025-06-16 19:49:05 +0800129 info_modem->version = DEV_INFO_VERSION_V2;
130 info_modem->modem.v2.band_area = MBTK_MODEM_BAND_AREA_ALL;
b.liu0d56e092025-03-18 11:15:48 +0800131#ifdef MBTK_5G_SUPPORT
b.liub7530d22025-06-16 19:49:05 +0800132 info_modem->modem.v2.net_pref = 19; // MBTK_NET_PREF_LTE_NR_NR_PREF
133 info_modem->modem.v2.net_support = MBTK_NET_SUPPORT_4G | MBTK_NET_SUPPORT_5G;
b.liu0d56e092025-03-18 11:15:48 +0800134
b.liub7530d22025-06-16 19:49:05 +0800135 info_modem->modem.v2.band_gsm = 0;
136 info_modem->modem.v2.band_wcdma = 0;
137 info_modem->modem.v2.band_tdlte = MBTK_BAND_ALL_TDLTE_DEFAULT;
138 info_modem->modem.v2.band_fddlte = MBTK_BAND_ALL_FDDLTE_DEFAULT;
139 info_modem->modem.v2.band_lte_ext = MBTK_BAND_ALL_EXT_LTE_DEFAULT;
b.liu0d56e092025-03-18 11:15:48 +0800140
b.liub7530d22025-06-16 19:49:05 +0800141 info_modem->modem.v2.band_nr_3 = MBTK_BAND_ALL_NR_3_DEFAULT;
142 info_modem->modem.v2.band_nr_2 = MBTK_BAND_ALL_NR_2_DEFAULT;
143 info_modem->modem.v2.band_nr_1 = MBTK_BAND_ALL_NR_1_DEFAULT;
144 info_modem->modem.v2.band_nr_0 = MBTK_BAND_ALL_NR_0_DEFAULT;
b.liu0d56e092025-03-18 11:15:48 +0800145#else
b.liub7530d22025-06-16 19:49:05 +0800146 info_modem->modem.v2.net_pref = 15; // MBTK_NET_PREF_GSM_UMTS_LTE_LTE_PREF
147 info_modem->modem.v2.net_support = MBTK_NET_SUPPORT_2G | MBTK_NET_SUPPORT_3G | MBTK_NET_SUPPORT_4G;
b.liu0d56e092025-03-18 11:15:48 +0800148
b.liub7530d22025-06-16 19:49:05 +0800149 info_modem->modem.v2.band_gsm = MBTK_BAND_ALL_GSM_DEFAULT;
150 info_modem->modem.v2.band_wcdma = MBTK_BAND_ALL_WCDMA_DEFAULT;
151 info_modem->modem.v2.band_tdlte = MBTK_BAND_ALL_TDLTE_DEFAULT;
152 info_modem->modem.v2.band_fddlte = MBTK_BAND_ALL_FDDLTE_DEFAULT;
153 info_modem->modem.v2.band_lte_ext = MBTK_BAND_ALL_EXT_LTE_DEFAULT;
b.liu0d56e092025-03-18 11:15:48 +0800154
b.liub7530d22025-06-16 19:49:05 +0800155 info_modem->modem.v2.band_nr_3 = 0;
156 info_modem->modem.v2.band_nr_2 = 0;
157 info_modem->modem.v2.band_nr_1 = 0;
158 info_modem->modem.v2.band_nr_0 = 0;
b.liu0d56e092025-03-18 11:15:48 +0800159#endif
160 }
161}
162
163static int band_set_by_at(mbtk_device_info_modem_t *band)
164{
165 char cmd[100] = {0};
qs.xionga7be6a92025-09-08 20:42:03 +0800166// char rsp[100] = {0};
b.liu0d56e092025-03-18 11:15:48 +0800167
168 // Only support 4G/5G
b.liub7530d22025-06-16 19:49:05 +0800169 if(band->modem.v2.net_support & MBTK_NET_SUPPORT_5G) {
b.liu0d56e092025-03-18 11:15:48 +0800170 // AT*band=19,0,0,482,134742231,0,24576,256,134217877,0
b.liub7530d22025-06-16 19:49:05 +0800171 if(band->modem.v2.band_lte_ext > 0) {
172 sprintf(cmd, "serial_atcmd AT*BAND=%d,%d,%d,%d,%d,%d,%d,%d,%d,0,,,,%d", band->modem.v2.net_pref, band->modem.v2.band_gsm,
173 band->modem.v2.band_wcdma, band->modem.v2.band_tdlte, band->modem.v2.band_fddlte,
174 band->modem.v2.band_nr_3, band->modem.v2.band_nr_2, band->modem.v2.band_nr_1,
175 band->modem.v2.band_nr_0, band->modem.v2.band_lte_ext);
b.liu0d56e092025-03-18 11:15:48 +0800176 } else {
b.liub7530d22025-06-16 19:49:05 +0800177 sprintf(cmd, "serial_atcmd AT*BAND=%d,%d,%d,%d,%d,%d,%d,%d,%d,0", band->modem.v2.net_pref, band->modem.v2.band_gsm,
178 band->modem.v2.band_wcdma, band->modem.v2.band_tdlte, band->modem.v2.band_fddlte,
179 band->modem.v2.band_nr_3, band->modem.v2.band_nr_2, band->modem.v2.band_nr_1, band->modem.v2.band_nr_0);
b.liu0d56e092025-03-18 11:15:48 +0800180 }
181 } else {
b.liub7530d22025-06-16 19:49:05 +0800182 if(band->modem.v2.band_lte_ext > 0) {
183 sprintf(cmd, "serial_atcmd AT*BAND=%d,%d,%d,%d,%d,,,,%d", band->modem.v2.net_pref, band->modem.v2.band_gsm, band->modem.v2.band_wcdma,
184 band->modem.v2.band_tdlte, band->modem.v2.band_fddlte, band->modem.v2.band_lte_ext);
b.liu0d56e092025-03-18 11:15:48 +0800185 } else {
b.liub7530d22025-06-16 19:49:05 +0800186 sprintf(cmd, "serial_atcmd AT*BAND=%d,%d,%d,%d,%d", band->modem.v2.net_pref, band->modem.v2.band_gsm, band->modem.v2.band_wcdma, band->modem.v2.band_tdlte, band->modem.v2.band_fddlte);
b.liu0d56e092025-03-18 11:15:48 +0800187 }
188 }
qs.xionga7be6a92025-09-08 20:42:03 +0800189/*
b.liu0d56e092025-03-18 11:15:48 +0800190 if(shell_cmd_exec(cmd, rsp, sizeof(rsp))) {
191 if(strstr(rsp, "\r\nOK\r\n")) {
192 return 0;
193 } else {
194 return -1;
195 }
196 } else {
197 return -1;
198 }
qs.xionga7be6a92025-09-08 20:42:03 +0800199 */
200 return 0;
b.liu0d56e092025-03-18 11:15:48 +0800201}
202
203/*
204AT*BAND=15,78,147,482,134742231
205
206OK
207*/
208static int band_config(mbtk_device_info_modem_t *info_modem)
209{
210 if(band_set_by_at(info_modem))
211 {
212 return -1;
213 }
214 else // Set band success.
215 {
b.liub7530d22025-06-16 19:49:05 +0800216 if(info_modem->modem.v2.band_area == MBTK_MODEM_BAND_AREA_CN) {
b.liu0d56e092025-03-18 11:15:48 +0800217 property_set("persist.mbtk.band_config", "CN");
b.liub7530d22025-06-16 19:49:05 +0800218 } else if(info_modem->modem.v2.band_area == MBTK_MODEM_BAND_AREA_EU) {
b.liu0d56e092025-03-18 11:15:48 +0800219 property_set("persist.mbtk.band_config", "EU");
b.liub7530d22025-06-16 19:49:05 +0800220 } else if(info_modem->modem.v2.band_area == MBTK_MODEM_BAND_AREA_SA) {
b.liu0d56e092025-03-18 11:15:48 +0800221 property_set("persist.mbtk.band_config", "SA");
222 } else {
223 property_set("persist.mbtk.band_config", "ALL");
224 }
225// LOGD("Set band success.");
226 return 0;
227 }
228}
229
b.liubb5e7682024-02-28 20:13:04 +0800230int main(int argc, char *argv[])
231{
b.liu0d56e092025-03-18 11:15:48 +0800232 if(argc > 1 && strcmp(argv[1], "band_set") == 0) {
233 char buff[10];
234 memset(buff, 0, 10);
235 property_get("persist.mbtk.band_config", buff, "");
236 if(strlen(buff) == 0) {
237 bool band_set_success = FALSE;
238
239 mbtk_device_info_modem_t info_modem;
240 band_support_init(&info_modem);
241
242 while(!band_set_success) {
243 // Set band.
244 if(band_config(&info_modem)) {
245 printf("band_config() fail,will waitting 5s to retry...\n");
246 sleep(5);
247 } else {
248 break;
249 }
250 }
251 printf("Set band success.\n");
252 }
253 } else {
254 mbtk_device_info_basic_t info_basic;
255 memset(&info_basic, 0, sizeof(mbtk_device_info_basic_t));
256 int result = mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_BASIC, &info_basic, sizeof(mbtk_device_info_basic_t));
257 if(result) {
258 printf("mbtk_dev_info_read(BASIC) fail.\n");
259 return -1;
260 }
261
262 /*
263 uint8 project[16]; // T108 / L508_X6
264 uint8 project_cust[16]; // T108_C1 / L508_X6_C1 (Refer to: Custom_Model in blf file.)
265 uint32 ab_support; // 1 for ab
266 uint8 revision_out[48]; // L508_X6v01.01b04.00
267 uint8 revision_in[64];
268 */
b.liub7530d22025-06-16 19:49:05 +0800269 printf("Version:%d\n", info_basic.version);
270 if(info_basic.version == DEV_INFO_VERSION_V1) {
271 printf("Project:%s\n", info_basic.basic.v1.project);
272 printf("Custom_Model:%s\n", info_basic.basic.v1.project_cust);
273 printf("Revision_Out:%s\n", info_basic.basic.v1.revision_out);
274 printf("Revision_In:%s\n", info_basic.basic.v1.revision_in);
275 printf("Build_Time:%s\n", info_basic.basic.v1.build_time);
276 printf("AB System:%s\n", info_basic.basic.v1.ab_support ? "Yes" : "No");
277 printf("Reboot flag:%d\n", info_basic.basic.v1.reboot_flag);
278 } else {
279 printf("Project:%s\n", info_basic.basic.v2.project);
280 printf("Custom_Model:%s\n", info_basic.basic.v2.project_cust);
281 printf("Revision_Out:%s\n", info_basic.basic.v2.revision_out);
282 printf("Revision_In:%s\n", info_basic.basic.v2.revision_in);
283 printf("Build_Time:%s\n", info_basic.basic.v2.build_time);
284 printf("AB System:%s\n", info_basic.basic.v2.ab_support ? "Yes" : "No");
285 printf("Reboot flag:%d\n", info_basic.basic.v2.reboot_flag);
286 printf("ASR Baseline:%s\n", info_basic.basic.v2.asr_baseline);
287 }
b.liu0d56e092025-03-18 11:15:48 +0800288
289 mbtk_device_info_modem_t info_modem;
290 memset(&info_modem, 0, sizeof(mbtk_device_info_modem_t));
291 result = mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_MODEM, &info_modem, sizeof(mbtk_device_info_modem_t));
292 if(result) {
293 printf("mbtk_dev_info_read(MODEM) fail.\n");
294 return -1;
295 }
296
b.liub7530d22025-06-16 19:49:05 +0800297 if(info_modem.version == DEV_INFO_VERSION_V1) {
298 printf("Band:%s\n", band_2_str(info_modem.modem.v1.band_area));
299 printf("Band GSM:0x%08x(%s)\n", info_modem.modem.v1.band_gsm, band_str_get(info_modem.modem.v1.band_gsm, 0));
300 printf("Band WCDMA:0x%08x(%s)\n", info_modem.modem.v1.band_wcdma, band_str_get(info_modem.modem.v1.band_wcdma, 0));
301 printf("Band TDLTE:0x%08x(%s)\n", info_modem.modem.v1.band_tdlte, band_str_get(info_modem.modem.v1.band_tdlte, 1));
302 printf("Band FDDLTE:0x%08x(%s)\n", info_modem.modem.v1.band_fddlte, band_str_get(info_modem.modem.v1.band_fddlte, 0));
303 printf("Band EXT_LTE:0x%08x(%s)\n", info_modem.modem.v1.band_lte_ext, band_str_get(info_modem.modem.v1.band_lte_ext, 0));
304 } else {
305 printf("net_pref:%d\n", info_modem.modem.v2.net_pref);
306 printf("net_support:%s\n", net_support_str_get(info_modem.modem.v2.net_support));
307 printf("Band:%s\n", band_2_str(info_modem.modem.v2.band_area));
308 printf("Band GSM:0x%08x(%s)\n", info_modem.modem.v2.band_gsm, band_str_get(info_modem.modem.v2.band_gsm, 0));
309 printf("Band WCDMA:0x%08x(%s)\n", info_modem.modem.v2.band_wcdma, band_str_get(info_modem.modem.v2.band_wcdma, 0));
310 printf("Band TDLTE:0x%08x(%s)\n", info_modem.modem.v2.band_tdlte, band_str_get(info_modem.modem.v2.band_tdlte, 1));
311 printf("Band FDDLTE:0x%08x(%s)\n", info_modem.modem.v2.band_fddlte, band_str_get(info_modem.modem.v2.band_fddlte, 0));
312 printf("Band EXT_LTE:0x%08x(%s)\n", info_modem.modem.v2.band_lte_ext, band_str_get(info_modem.modem.v2.band_lte_ext, 0));
313 printf("Band NR_3:0x%08x(%s)\n", info_modem.modem.v2.band_nr_3, band_str_get(info_modem.modem.v2.band_nr_3, 3));
314 printf("Band NR_2:0x%08x(%s)\n", info_modem.modem.v2.band_nr_2, band_str_get(info_modem.modem.v2.band_nr_2, 2));
315 printf("Band NR_1:0x%08x(%s)\n", info_modem.modem.v2.band_nr_1, band_str_get(info_modem.modem.v2.band_nr_1, 1));
316 printf("Band NR_0:0x%08x(%s)\n", info_modem.modem.v2.band_nr_0, band_str_get(info_modem.modem.v2.band_nr_0, 0));
317 }
b.liubb5e7682024-02-28 20:13:04 +0800318 }
b.liubb5e7682024-02-28 20:13:04 +0800319 return 0;
320}
321
322