blob: a5cc759bc11a9e364e001b39cf82a06790f36776 [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*/
14static bool shell_cmd_exec(const char *cmd, char *buf, int buf_size){
15 FILE *fcmd;
16 bool result = FALSE;
17 fcmd = popen(cmd, "r");
18 memset(buf, 0, buf_size);
19 if(fcmd)
20 {
21 int pos = 0;
22 int len = 0;
23
24 while(!ferror(fcmd) && !feof(fcmd))
25 {
26 if(buf_size - pos == 0)
27 {
28 break;
29 }
30 len = fread(buf + pos,1,buf_size - pos,fcmd);
31 if(len > 0)
32 pos += len;
33 }
34
35 if(buf_size == pos)
36 buf[buf_size - 1] = '\0';
37
38 pclose(fcmd);
39 result = TRUE;
40 }
41
42// LOGV("%s [result:%d]: %s",cmd,result,buf);
43
44 return result;
45}
46
b.liubb5e7682024-02-28 20:13:04 +080047
48static char* band_2_str(mbtk_modem_band_area_enum band_area)
49{
50 switch(band_area)
51 {
52 case MBTK_MODEM_BAND_AREA_CN:
53 return "CN";
54 case MBTK_MODEM_BAND_AREA_EU:
55 return "EU";
b.liu288093c2024-05-09 17:02:57 +080056 case MBTK_MODEM_BAND_AREA_SA:
57 return "SA";
b.liubb5e7682024-02-28 20:13:04 +080058 default:
59 return "ALL";
60 }
61}
62
b.liu61ad9172025-01-09 14:33:55 +080063static char* net_support_str_get(uint32 net_support)
64{
65 static char net_str[100] = {0};
66
67 if(net_support & MBTK_NET_SUPPORT_2G) { // GSM
68 if(strlen(net_str) > 0) {
69 strcat(net_str, "/2G");
70 } else {
71 strcat(net_str, "2G");
72 }
73 }
74
75 if(net_support & MBTK_NET_SUPPORT_3G) { // WCDMA
76 if(strlen(net_str) > 0) {
77 strcat(net_str, "/3G");
78 } else {
79 strcat(net_str, "3G");
80 }
81 }
82
83 if(net_support & MBTK_NET_SUPPORT_4G) { // LTE
84 if(strlen(net_str) > 0) {
85 strcat(net_str, "/4G");
86 } else {
87 strcat(net_str, "4G");
88 }
89 }
90
91 if(net_support & MBTK_NET_SUPPORT_5G) { // NR
92 if(strlen(net_str) > 0) {
93 strcat(net_str, "/5G");
94 } else {
95 strcat(net_str, "5G");
96 }
97 }
98 return net_str;
99}
100
101static char* band_str_get(uint32 band, int index)
102{
103 int band_list[33] = {0};
104 int ret = mbtk_band_2_list(band, index, band_list);
105 if(ret > 0) {
106 static char buff[150] = {0};
107 memset(buff, 0, sizeof(buff));
108 int i = 0;
109 while(i < ret) {
110 if(strlen(buff) > 0) {
111 sprintf(buff + strlen(buff), "/b%d", band_list[i]);
112 } else {
113 sprintf(buff + strlen(buff), "b%d", band_list[i]);
114 }
115 i++;
116 }
117 return buff;
118 } else {
119 return "NON";
120 }
121}
122
b.liu0d56e092025-03-18 11:15:48 +0800123static void band_support_init(mbtk_device_info_modem_t *info_modem)
124{
125 memset(info_modem, 0, sizeof(mbtk_device_info_modem_t));
126 if(mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_MODEM, info_modem, sizeof(mbtk_device_info_modem_t))) {
127 printf("mbtk_dev_info_read(MODEM) fail, use default band.\n");
128 info_modem->band_area = MBTK_MODEM_BAND_AREA_ALL;
129#ifdef MBTK_5G_SUPPORT
130 info_modem->net_pref = 19; // MBTK_NET_PREF_LTE_NR_NR_PREF
131 info_modem->net_support = MBTK_NET_SUPPORT_4G | MBTK_NET_SUPPORT_5G;
132
133 info_modem->band_gsm = 0;
134 info_modem->band_wcdma = 0;
135 info_modem->band_tdlte = MBTK_BAND_ALL_TDLTE_DEFAULT;
136 info_modem->band_fddlte = MBTK_BAND_ALL_FDDLTE_DEFAULT;
137 info_modem->band_lte_ext = MBTK_BAND_ALL_EXT_LTE_DEFAULT;
138
139 info_modem->band_nr_3 = MBTK_BAND_ALL_NR_3_DEFAULT;
140 info_modem->band_nr_2 = MBTK_BAND_ALL_NR_2_DEFAULT;
141 info_modem->band_nr_1 = MBTK_BAND_ALL_NR_1_DEFAULT;
142 info_modem->band_nr_0 = MBTK_BAND_ALL_NR_0_DEFAULT;
143#else
144 info_modem->net_pref = 15; // MBTK_NET_PREF_GSM_UMTS_LTE_LTE_PREF
145 info_modem->net_support = MBTK_NET_SUPPORT_2G | MBTK_NET_SUPPORT_3G | MBTK_NET_SUPPORT_4G;
146
147 info_modem->band_gsm = MBTK_BAND_ALL_GSM_DEFAULT;
148 info_modem->band_wcdma = MBTK_BAND_ALL_WCDMA_DEFAULT;
149 info_modem->band_tdlte = MBTK_BAND_ALL_TDLTE_DEFAULT;
150 info_modem->band_fddlte = MBTK_BAND_ALL_FDDLTE_DEFAULT;
151 info_modem->band_lte_ext = MBTK_BAND_ALL_EXT_LTE_DEFAULT;
152
153 info_modem->band_nr_3 = 0;
154 info_modem->band_nr_2 = 0;
155 info_modem->band_nr_1 = 0;
156 info_modem->band_nr_0 = 0;
157#endif
158 }
159}
160
161static int band_set_by_at(mbtk_device_info_modem_t *band)
162{
163 char cmd[100] = {0};
164 char rsp[100] = {0};
165
166 // Only support 4G/5G
167 if(band->net_support & MBTK_NET_SUPPORT_5G) {
168 // AT*band=19,0,0,482,134742231,0,24576,256,134217877,0
169 if(band->band_lte_ext > 0) {
170 sprintf(cmd, "serial_atcmd AT*BAND=%d,%d,%d,%d,%d,%d,%d,%d,%d,0,,,,%d", band->net_pref, band->band_gsm, band->band_wcdma, band->band_tdlte, band->band_fddlte,
171 band->band_nr_3, band->band_nr_2, band->band_nr_1, band->band_nr_0, band->band_lte_ext);
172 } else {
173 sprintf(cmd, "serial_atcmd AT*BAND=%d,%d,%d,%d,%d,%d,%d,%d,%d,0", band->net_pref, band->band_gsm, band->band_wcdma, band->band_tdlte, band->band_fddlte,
174 band->band_nr_3, band->band_nr_2, band->band_nr_1, band->band_nr_0);
175 }
176 } else {
177 if(band->band_lte_ext > 0) {
178 sprintf(cmd, "serial_atcmd AT*BAND=%d,%d,%d,%d,%d,,,,%d", band->net_pref, band->band_gsm, band->band_wcdma, band->band_tdlte, band->band_fddlte, band->band_lte_ext);
179 } else {
180 sprintf(cmd, "serial_atcmd AT*BAND=%d,%d,%d,%d,%d", band->net_pref, band->band_gsm, band->band_wcdma, band->band_tdlte, band->band_fddlte);
181 }
182 }
183
184 if(shell_cmd_exec(cmd, rsp, sizeof(rsp))) {
185 if(strstr(rsp, "\r\nOK\r\n")) {
186 return 0;
187 } else {
188 return -1;
189 }
190 } else {
191 return -1;
192 }
193}
194
195/*
196AT*BAND=15,78,147,482,134742231
197
198OK
199*/
200static int band_config(mbtk_device_info_modem_t *info_modem)
201{
202 if(band_set_by_at(info_modem))
203 {
204 return -1;
205 }
206 else // Set band success.
207 {
208 if(info_modem->band_area == MBTK_MODEM_BAND_AREA_CN) {
209 property_set("persist.mbtk.band_config", "CN");
210 } else if(info_modem->band_area == MBTK_MODEM_BAND_AREA_EU) {
211 property_set("persist.mbtk.band_config", "EU");
212 } else if(info_modem->band_area == MBTK_MODEM_BAND_AREA_SA) {
213 property_set("persist.mbtk.band_config", "SA");
214 } else {
215 property_set("persist.mbtk.band_config", "ALL");
216 }
217// LOGD("Set band success.");
218 return 0;
219 }
220}
221
b.liubb5e7682024-02-28 20:13:04 +0800222int main(int argc, char *argv[])
223{
b.liu0d56e092025-03-18 11:15:48 +0800224 if(argc > 1 && strcmp(argv[1], "band_set") == 0) {
225 char buff[10];
226 memset(buff, 0, 10);
227 property_get("persist.mbtk.band_config", buff, "");
228 if(strlen(buff) == 0) {
229 bool band_set_success = FALSE;
230
231 mbtk_device_info_modem_t info_modem;
232 band_support_init(&info_modem);
233
234 while(!band_set_success) {
235 // Set band.
236 if(band_config(&info_modem)) {
237 printf("band_config() fail,will waitting 5s to retry...\n");
238 sleep(5);
239 } else {
240 break;
241 }
242 }
243 printf("Set band success.\n");
244 }
245 } else {
246 mbtk_device_info_basic_t info_basic;
247 memset(&info_basic, 0, sizeof(mbtk_device_info_basic_t));
248 int result = mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_BASIC, &info_basic, sizeof(mbtk_device_info_basic_t));
249 if(result) {
250 printf("mbtk_dev_info_read(BASIC) fail.\n");
251 return -1;
252 }
253
254 /*
255 uint8 project[16]; // T108 / L508_X6
256 uint8 project_cust[16]; // T108_C1 / L508_X6_C1 (Refer to: Custom_Model in blf file.)
257 uint32 ab_support; // 1 for ab
258 uint8 revision_out[48]; // L508_X6v01.01b04.00
259 uint8 revision_in[64];
260 */
261 printf("Project:%s\n", info_basic.project);
262 printf("Custom_Model:%s\n", info_basic.project_cust);
263 printf("Revision_Out:%s\n", info_basic.revision_out);
264 printf("Revision_In:%s\n", info_basic.revision_in);
265 printf("Build_Time:%s\n", info_basic.build_time);
266 printf("AB System:%s\n", info_basic.ab_support ? "Yes" : "No");
267 printf("Reboot flag:%d\n", info_basic.reboot_flag);
268 printf("ASR Baseline:%s\n", info_basic.asr_baseline);
269
270 mbtk_device_info_modem_t info_modem;
271 memset(&info_modem, 0, sizeof(mbtk_device_info_modem_t));
272 result = mbtk_dev_info_read(MBTK_DEVICE_INFO_ITEM_MODEM, &info_modem, sizeof(mbtk_device_info_modem_t));
273 if(result) {
274 printf("mbtk_dev_info_read(MODEM) fail.\n");
275 return -1;
276 }
277
278 printf("net_pref:%d\n", info_modem.net_pref);
279 printf("net_support:%s\n", net_support_str_get(info_modem.net_support));
280 printf("Band:%s\n", band_2_str(info_modem.band_area));
281 printf("Band GSM:0x%08x(%s)\n", info_modem.band_gsm, band_str_get(info_modem.band_gsm, 0));
282 printf("Band WCDMA:0x%08x(%s)\n", info_modem.band_wcdma, band_str_get(info_modem.band_wcdma, 0));
283 printf("Band TDLTE:0x%08x(%s)\n", info_modem.band_tdlte, band_str_get(info_modem.band_tdlte, 1));
284 printf("Band FDDLTE:0x%08x(%s)\n", info_modem.band_fddlte, band_str_get(info_modem.band_fddlte, 0));
285 printf("Band EXT_LTE:0x%08x(%s)\n", info_modem.band_lte_ext, band_str_get(info_modem.band_lte_ext, 0));
286 printf("Band NR_3:0x%08x(%s)\n", info_modem.band_nr_3, band_str_get(info_modem.band_nr_3, 3));
287 printf("Band NR_2:0x%08x(%s)\n", info_modem.band_nr_2, band_str_get(info_modem.band_nr_2, 2));
288 printf("Band NR_1:0x%08x(%s)\n", info_modem.band_nr_1, band_str_get(info_modem.band_nr_1, 1));
289 printf("Band NR_0:0x%08x(%s)\n", info_modem.band_nr_0, band_str_get(info_modem.band_nr_0, 0));
b.liubb5e7682024-02-28 20:13:04 +0800290 }
b.liubb5e7682024-02-28 20:13:04 +0800291 return 0;
292}
293
294