b.liu | d440f9f | 2025-04-18 10:44:31 +0800 | [diff] [blame] | 1 |
|
| 2 | #include <stdio.h>
|
| 3 | #include <string.h>
|
| 4 | #include <stdlib.h>
|
| 5 | #include <unistd.h>
|
| 6 | #include <ctype.h>
|
| 7 | #include <stdio.h>
|
| 8 | #include <sys/time.h>
|
| 9 |
|
| 10 | #include "ql_v2/ql_type.h"
|
| 11 | #include "ql_dm.h"
|
| 12 |
|
| 13 |
|
| 14 | |
| 15 | #define T_ARRAY_SIZE(items) (sizeof(items)/sizeof(items[0]))
|
| 16 |
|
| 17 | typedef void (*item_handler_f)(void); |
| 18 | typedef int (*init_handler_f)(void); |
| 19 | typedef int (*deinit_handler_f)(void); |
| 20 | |
| 21 |
|
| 22 | |
| 23 | typedef struct |
| 24 | { |
| 25 | const char *name; |
| 26 | item_handler_f handle; |
| 27 | } t_item_t; |
| 28 | |
| 29 | typedef struct |
| 30 | { |
| 31 | const char *name; |
| 32 | int item_len; |
| 33 | t_item_t *item_list; |
| 34 | } t_module_t; |
| 35 |
|
| 36 | typedef struct |
| 37 | { |
| 38 | const char *name; |
| 39 | init_handler_f init_handle; |
| 40 | deinit_handler_f deinit_handle; |
| 41 | } t_init_t;
|
| 42 |
|
| 43 | int t_get_int(int *val)
|
| 44 | {
|
| 45 | int dat;
|
| 46 | char *ptr_end = NULL;
|
| 47 | char buf[256] = {0};
|
| 48 |
|
| 49 | if(NULL == fgets(buf, sizeof(buf)-1, stdin))
|
| 50 | {
|
| 51 | return -1;
|
| 52 | }
|
| 53 |
|
| 54 | if(0 == buf[0])
|
| 55 | {
|
| 56 | return -1;
|
| 57 | }
|
| 58 |
|
| 59 | if(buf[0] == '\n')
|
| 60 | {
|
| 61 | return 1;
|
| 62 | }
|
| 63 |
|
| 64 | dat = strtol(buf, &ptr_end, 10);
|
| 65 | if(ptr_end!=NULL && ptr_end[0]!='\n')
|
| 66 | {
|
| 67 | return -1;
|
| 68 | }
|
| 69 |
|
| 70 | if(val)
|
| 71 | {
|
| 72 | val[0] = dat;
|
| 73 | }
|
| 74 |
|
| 75 | return 0;
|
| 76 | }
|
| 77 |
|
| 78 |
|
| 79 | static int internal_dm_get_air_plane_mode(QL_DM_AIR_PLANE_MODE_TYPE_E mode, char* buf, int buf_len);
|
| 80 |
|
| 81 |
|
| 82 | void dm_air_plane_mode_event_ind_cb(QL_DM_AIR_PLANE_MODE_TYPE_E air_plane_mode)
|
| 83 | {
|
| 84 | char mode_info[16] = {0};
|
| 85 |
|
| 86 | printf("Recv event indication : air plane mode changed event\n");
|
| 87 |
|
| 88 | if(internal_dm_get_air_plane_mode(air_plane_mode, mode_info, sizeof(mode_info)) == 0)
|
| 89 | {
|
| 90 | printf("unrecognized air plane mode:%d\n", air_plane_mode);
|
| 91 | }
|
| 92 | else
|
| 93 | {
|
| 94 | printf("current air plane mode is %s\n", mode_info);
|
| 95 | }
|
| 96 | }
|
| 97 |
|
| 98 | void dm_modem_state_change_ind_cb(int modem_state)
|
| 99 | {
|
| 100 | printf("Recv event indication : modem status changed event\n");
|
| 101 | if(QL_DM_MODEM_STATE_ONLINE == modem_state)
|
| 102 | {
|
| 103 | printf("current modem status is ONLINE\n");
|
| 104 | }
|
| 105 | else if(QL_DM_MODEM_STATE_OFFLINE == modem_state)
|
| 106 | {
|
| 107 | printf("current modem status is OFFLINE\n");
|
| 108 | }
|
| 109 | else
|
| 110 | {
|
| 111 | printf("current modem status is UNKNOWN\n");
|
| 112 | }
|
| 113 | }
|
| 114 |
|
| 115 | void dm_service_error_cb(int error)
|
| 116 | {
|
| 117 | printf("===== DM Service Abort =====\n");
|
| 118 | }
|
| 119 |
|
| 120 | void item_ql_dm_init(void)
|
| 121 | {
|
| 122 | int ret = 0;
|
| 123 |
|
| 124 | printf("Start to ql_dm_init: ");
|
| 125 | ret = ql_dm_init();
|
| 126 | if(ret == QL_ERR_OK)
|
| 127 | {
|
| 128 | printf("dm init ok\n");
|
| 129 | }
|
| 130 | else
|
| 131 | {
|
| 132 | printf("failed, ret=%d\n", ret);
|
| 133 | }
|
| 134 | }
|
| 135 |
|
| 136 | void item_ql_dm_set_service_error_cb(void)
|
| 137 | {
|
| 138 | int ret = 0;
|
| 139 |
|
| 140 | printf("Start to item_ql_dm_set_service_error_cb : ");
|
| 141 | ret = ql_dm_set_service_error_cb(dm_service_error_cb);
|
| 142 | if(ret != QL_ERR_OK)
|
| 143 | {
|
| 144 | printf("failed, ret=%d\n", ret);
|
| 145 | }
|
| 146 | else
|
| 147 | {
|
| 148 | printf("successful\n");
|
| 149 | }
|
| 150 | }
|
| 151 |
|
| 152 | void item_ql_dm_deinit(void)
|
| 153 | {
|
| 154 | int ret = 0;
|
| 155 |
|
| 156 | printf("Start to ql_dm_deinit: ");
|
| 157 | ret = ql_dm_deinit();
|
| 158 | if(ret == QL_ERR_OK)
|
| 159 | {
|
| 160 | printf("dm deinit ok\n");
|
| 161 | }
|
| 162 | else
|
| 163 | {
|
| 164 | printf("failed, ret=%d\n", ret);
|
| 165 | }
|
| 166 | }
|
| 167 |
|
| 168 | void item_ql_dm_set_air_plane_mode_ind_cb(void)
|
| 169 | {
|
| 170 | int ret = 0;
|
| 171 | int reg_flag = 0;
|
| 172 |
|
| 173 | printf("please input air plane mode reg option: (0: unreg, other: reg): ");
|
| 174 | ret = t_get_int(®_flag);
|
| 175 | if(ret != 0)
|
| 176 | {
|
| 177 | printf("Invalid input\n");
|
| 178 | return;
|
| 179 | }
|
| 180 |
|
| 181 | if(reg_flag)
|
| 182 | {
|
| 183 | ret = ql_dm_set_air_plane_mode_ind_cb(dm_air_plane_mode_event_ind_cb);
|
| 184 | }
|
| 185 | else
|
| 186 | {
|
| 187 | ret = ql_dm_set_air_plane_mode_ind_cb(NULL);
|
| 188 | }
|
| 189 | printf("ql_dm_set_air_plane_mode_ind_cb ret = %d\n", ret);
|
| 190 | }
|
| 191 |
|
| 192 | void item_ql_dm_get_software_version(void)
|
| 193 | {
|
| 194 | int ret;
|
| 195 | char soft_ver[128] = {0};
|
| 196 |
|
| 197 | ret = ql_dm_get_software_version(soft_ver, sizeof(soft_ver));
|
| 198 |
|
| 199 | printf("ql_dm_get_software_version ret = %d, software version is %s\n", ret, soft_ver);
|
| 200 | }
|
| 201 |
|
| 202 | void item_ql_dm_set_modem_state_change_ind_cb(void)
|
| 203 | {
|
| 204 | int ret = 0;
|
| 205 | int reg_flag = 0;
|
| 206 |
|
| 207 | printf("please input modem state reg option: (0: unreg, other: reg): ");
|
| 208 | ret = t_get_int(®_flag);
|
| 209 | if(ret != 0)
|
| 210 | {
|
| 211 | printf("Invalid input\n");
|
| 212 | return;
|
| 213 | }
|
| 214 |
|
| 215 | if(reg_flag)
|
| 216 | {
|
| 217 | ret = ql_dm_set_modem_state_change_ind_cb(dm_modem_state_change_ind_cb);
|
| 218 | }
|
| 219 | else
|
| 220 | {
|
| 221 | ret = ql_dm_set_modem_state_change_ind_cb(NULL);
|
| 222 | }
|
| 223 | printf("ql_dm_set_modem_state_change_ind_cb ret = %d\n", ret);
|
| 224 | }
|
| 225 |
|
| 226 | void item_ql_dm_get_device_serial_numbers(void)
|
| 227 | {
|
| 228 | int ret;
|
| 229 | ql_dm_device_serial_numbers_info_t t_info;
|
| 230 | memset(&t_info, 0, sizeof(ql_dm_device_serial_numbers_info_t));
|
| 231 |
|
| 232 | ret = ql_dm_get_device_serial_numbers(&t_info);
|
| 233 | printf("ql_dm_get_device_serial_number ret = %d", ret);
|
| 234 | if(t_info.imei_valid)
|
| 235 | {
|
| 236 | printf(", imei is %s", t_info.imei);
|
| 237 | }
|
| 238 | if(t_info.imei2_valid)
|
| 239 | {
|
| 240 | printf(", imei2 is %s", t_info.imei2);
|
| 241 | }
|
| 242 | if(t_info.meid_valid)
|
| 243 | {
|
| 244 | printf(", meid is %s ", t_info.meid);
|
| 245 | }
|
| 246 | printf("\n");
|
| 247 | }
|
| 248 |
|
| 249 | void item_ql_dm_get_device_firmware_rev_id(void)
|
| 250 | {
|
| 251 | int ret;
|
| 252 | char firmware_rev_id[QL_DM_FIRMWARE_REV_MAX_LEN + 1] = {0};
|
| 253 |
|
| 254 | ret = ql_dm_get_device_firmware_rev_id(firmware_rev_id, sizeof(firmware_rev_id));
|
| 255 | printf("ql_dm_get_device_firmware_rev_id ret = %d, device revision id is %s\n",
|
| 256 | ret, firmware_rev_id);
|
| 257 | }
|
| 258 |
|
| 259 | void item_ql_dm_get_air_plane_mode(void)
|
| 260 | {
|
| 261 | int ret;
|
| 262 | char mode_info[16] = {0};
|
| 263 | QL_DM_AIR_PLANE_MODE_TYPE_E air_plane_mode;
|
| 264 |
|
| 265 | ret = ql_dm_get_air_plane_mode(&air_plane_mode);
|
| 266 |
|
| 267 | printf("ql_dm_get_air_plane_mode ret = %d, ", ret);
|
| 268 | if(internal_dm_get_air_plane_mode(air_plane_mode, mode_info, sizeof(mode_info)) == 0)
|
| 269 | {
|
| 270 | printf("unrecognized air plane mode:%d\n", air_plane_mode);
|
| 271 | }
|
| 272 | else
|
| 273 | {
|
| 274 | printf("current air plane mode is %s\n", mode_info);
|
| 275 | }
|
| 276 | }
|
| 277 |
|
| 278 | void item_ql_dm_set_air_plane_mode(void)
|
| 279 | {
|
| 280 | int ret;
|
| 281 | int mode;
|
| 282 | QL_DM_AIR_PLANE_MODE_TYPE_E air_plane_mode;
|
| 283 |
|
l.yang | 860a8e7 | 2025-05-13 01:55:38 -0700 | [diff] [blame] | 284 | printf("please input air plane mode(1: ON, 2: OFF): \n");
|
b.liu | d440f9f | 2025-04-18 10:44:31 +0800 | [diff] [blame] | 285 | ret = t_get_int(&mode);
|
| 286 | if(ret != 0)
|
| 287 | {
|
| 288 | printf("Invalid input\n");
|
| 289 | return;
|
| 290 | }
|
| 291 | air_plane_mode = mode;
|
| 292 | if(air_plane_mode != QL_DM_AIR_PLANE_MODE_ON && air_plane_mode != QL_DM_AIR_PLANE_MODE_OFF)
|
| 293 | {
|
| 294 | printf("please input 1 or 2\n");
|
| 295 | return;
|
| 296 | }
|
| 297 |
|
| 298 | ret = ql_dm_set_air_plane_mode(air_plane_mode);
|
| 299 | printf("ql_dm_set_air_plane_mode ret = %d\n", ret);
|
| 300 | }
|
| 301 |
|
| 302 | static int internal_dm_get_air_plane_mode(QL_DM_AIR_PLANE_MODE_TYPE_E mode, char* buf, int buf_len)
|
| 303 | {
|
| 304 | int ret_val = 1;
|
| 305 |
|
| 306 | if(buf == NULL || buf_len < 2)
|
| 307 | {
|
| 308 | printf("param is valid\n");
|
| 309 | return 0;
|
| 310 | }
|
| 311 |
|
| 312 | memset(buf, 0, buf_len);
|
| 313 |
|
| 314 | switch(mode)
|
| 315 | {
|
| 316 | case QL_DM_AIR_PLANE_MODE_UNKNOWN:
|
| 317 | strncpy(buf, "UNKNOWN", buf_len - 1);
|
| 318 | buf[buf_len - 1] = '\0';
|
| 319 | break;
|
| 320 | case QL_DM_AIR_PLANE_MODE_ON:
|
| 321 | strncpy(buf, "ON", buf_len - 1);
|
| 322 | buf[buf_len - 1] = '\0';
|
| 323 | break;
|
| 324 | case QL_DM_AIR_PLANE_MODE_OFF:
|
| 325 | strncpy(buf, "OFF", buf_len - 1);
|
| 326 | buf[buf_len - 1] = '\0';
|
| 327 | break;
|
| 328 | case QL_DM_AIR_PLANE_MODE_NA:
|
| 329 | strncpy(buf, "UNAVAILABLE", buf_len - 1);
|
| 330 | buf[buf_len - 1] = '\0';
|
| 331 | break;
|
| 332 | default:
|
| 333 | ret_val = 0;
|
| 334 | break;
|
| 335 | }
|
| 336 | return ret_val;
|
| 337 | }
|
| 338 |
|
| 339 |
|
l.yang | 860a8e7 | 2025-05-13 01:55:38 -0700 | [diff] [blame] | 340 | void item_ql_dm_get_modem_state(void)
|
| 341 | {
|
| 342 | int ret;
|
| 343 | QL_DM_MODEM_STATE_TYPE_E modem_state = QL_DM_MODEM_STATE_UNKNOWN;
|
| 344 |
|
| 345 | ret = ql_dm_get_modem_state(&modem_state);
|
| 346 | if(QL_DM_MODEM_STATE_ONLINE == modem_state)
|
| 347 | {
|
| 348 | printf("ql_dm_get_modem_state ret = %d, modem state is ONLINE\n", ret);
|
| 349 | }
|
| 350 | else if(QL_DM_MODEM_STATE_OFFLINE == modem_state)
|
| 351 | {
|
| 352 | printf("ql_dm_get_modem_state ret = %d, modem state is OFFLINE\n", ret);
|
| 353 | }
|
| 354 | else
|
| 355 | {
|
| 356 | printf("ql_dm_get_modem_state ret = %d, modem state UNKNOWN\n", ret);
|
| 357 | }
|
| 358 | }
|
| 359 |
|
| 360 |
|
b.liu | d440f9f | 2025-04-18 10:44:31 +0800 | [diff] [blame] | 361 | static t_item_t ql_dm_items[] =
|
| 362 | {
|
| 363 | {"ql_dm_init", item_ql_dm_init},
|
| 364 | {"ql_dm_set_air_plane_mode_ind_cb", item_ql_dm_set_air_plane_mode_ind_cb},
|
| 365 | {"ql_dm_get_software_version", item_ql_dm_get_software_version},
|
| 366 | {"ql_dm_set_modem_state_change_ind_cb", item_ql_dm_set_modem_state_change_ind_cb},
|
| 367 | {"ql_dm_get_device_serial_numbers", item_ql_dm_get_device_serial_numbers},
|
| 368 | {"ql_dm_get_device_firmware_rev_id", item_ql_dm_get_device_firmware_rev_id},
|
| 369 | {"ql_dm_get_air_plane_mode", item_ql_dm_get_air_plane_mode},
|
| 370 | {"ql_dm_set_air_plane_mode", item_ql_dm_set_air_plane_mode},
|
l.yang | 860a8e7 | 2025-05-13 01:55:38 -0700 | [diff] [blame] | 371 | {"ql_dm_get_modem_state", item_ql_dm_get_modem_state},
|
b.liu | d440f9f | 2025-04-18 10:44:31 +0800 | [diff] [blame] | 372 | {"ql_dm_set_service_error_cb", item_ql_dm_set_service_error_cb},
|
| 373 | {"ql_dm_deinit", item_ql_dm_deinit}
|
| 374 | };
|
| 375 |
|
| 376 | t_module_t ql_dm_module =
|
| 377 | {
|
| 378 | "dm",
|
| 379 | T_ARRAY_SIZE(ql_dm_items),
|
| 380 | ql_dm_items
|
| 381 | };
|
| 382 |
|
| 383 |
|
| 384 | t_module_t *test_modules[] =
|
| 385 | {
|
| 386 | &ql_dm_module,
|
| 387 |
|
| 388 | };
|
| 389 |
|
| 390 | void dump_modules(void)
|
| 391 | {
|
| 392 | int i;
|
| 393 |
|
| 394 | printf("\n");
|
| 395 | for(i=0; i<T_ARRAY_SIZE(test_modules); i++)
|
| 396 | {
|
| 397 | printf("%d\t%s\n", i, test_modules[i]->name);
|
| 398 | }
|
| 399 | printf("-1\texit\n");
|
| 400 | }
|
| 401 |
|
| 402 | void dump_items(t_module_t *m)
|
| 403 | {
|
| 404 | int i;
|
| 405 |
|
| 406 | printf("\n");
|
| 407 | printf("The current module is: \n");
|
| 408 |
|
| 409 | for(i=0; i<m->item_len; i++)
|
| 410 | {
|
| 411 | printf("%d\t%s\n", i, m->item_list[i].name);
|
| 412 | }
|
| 413 | printf("-1\texit\n");
|
| 414 | }
|
| 415 |
|
| 416 | void enter_modules(t_module_t *m)
|
| 417 | {
|
| 418 | int ret;
|
| 419 | int idx;
|
| 420 |
|
| 421 | dump_items(m);
|
| 422 |
|
| 423 | while(1)
|
| 424 | {
|
| 425 | printf("Please enter your choice: ");
|
| 426 | ret = t_get_int(&idx);
|
| 427 | printf("\n");
|
| 428 | if(ret < 0)
|
| 429 | {
|
| 430 | printf("Invalid input\n");
|
| 431 | continue;
|
| 432 | }
|
| 433 | else if(ret == 1)
|
| 434 | {
|
| 435 | dump_items(m);
|
| 436 | continue;
|
| 437 | }
|
| 438 |
|
| 439 | if(idx == -1)
|
| 440 | {
|
| 441 | break;
|
| 442 | }
|
| 443 |
|
| 444 | if(idx<0 || idx>=m->item_len)
|
| 445 | {
|
| 446 | printf("Not support idx: %d\n", idx);
|
| 447 | continue;
|
| 448 | }
|
| 449 |
|
| 450 | printf("->Item : %s\n", m->item_list[idx].name);
|
| 451 | m->item_list[idx].handle();
|
| 452 | }
|
| 453 | }
|
| 454 |
|
| 455 | static t_init_t init_func[] = {
|
| 456 | {"ql_dm_init",ql_dm_init,ql_dm_deinit},
|
| 457 |
|
| 458 |
|
| 459 | };
|
| 460 |
|
| 461 |
|
| 462 | void test_init(int retry)
|
| 463 | {
|
| 464 |
|
| 465 | int i = 0,j = 0;
|
| 466 | for(i=0; i<T_ARRAY_SIZE(init_func); i++)
|
| 467 | {
|
| 468 | printf("Exec %s time = \n", init_func[i].name);
|
| 469 | //clock_t start,end;
|
| 470 | struct timeval start,end;
|
| 471 |
|
| 472 | double cost_time = 0;
|
| 473 | int ret = QL_ERR_OK;
|
| 474 | for(j = 0;j < retry; j++)
|
| 475 | {
|
| 476 | if(QL_ERR_OK == ret )
|
| 477 | {
|
| 478 | //start = clock();
|
| 479 | gettimeofday(&start, NULL);
|
| 480 | }
|
| 481 |
|
| 482 | ret = -1;
|
| 483 | ret = init_func[i].init_handle();
|
| 484 | if(QL_ERR_OK == ret)
|
| 485 | {
|
| 486 | //end = clock();
|
| 487 | gettimeofday(&end, NULL);
|
| 488 | long timeuse = 1000000*(end.tv_sec - start.tv_sec) + end.tv_usec-start.tv_usec;
|
| 489 | //printf("%6.0f ",(double)(end-start));
|
| 490 | printf("%ld ",timeuse/1000);
|
| 491 | //cost_time = cost_time > (end-start) ?cost_time:(end-start);
|
| 492 | cost_time = cost_time > (timeuse/1000) ?cost_time:(timeuse/1000);
|
| 493 |
|
| 494 | init_func[i].deinit_handle();
|
| 495 | }
|
| 496 |
|
| 497 |
|
| 498 | }
|
| 499 | printf("\n");
|
| 500 | printf("Finish test. %s max cost time = %6.0f ms\n",init_func[i].name, cost_time);
|
| 501 |
|
| 502 | }
|
| 503 |
|
| 504 |
|
| 505 | }
|
| 506 |
|
| 507 |
|
| 508 | int main(int argc, char *argv[])
|
| 509 | {
|
| 510 | int ret;
|
| 511 | int idx;
|
| 512 |
|
| 513 | if(argc > 1)
|
| 514 | {
|
| 515 | int c = -1;
|
| 516 | int retry = -1;
|
| 517 |
|
| 518 | while((c = getopt(argc, argv, "i:")) != -1)
|
| 519 | {
|
| 520 | if(-1 == c)
|
| 521 | {
|
| 522 | break;
|
| 523 | }
|
| 524 |
|
| 525 | switch(c)
|
| 526 | {
|
| 527 | case 'i':
|
| 528 | retry = atoi(optarg);
|
| 529 | test_init(retry);
|
| 530 | return 0;
|
| 531 |
|
| 532 | default:
|
| 533 | printf("usage: ql_sdk_api_test -i <retry count> to test init func\n");
|
| 534 | printf(" ql_sdk_api_test to test sdk api\n");
|
| 535 | return -1;
|
| 536 | }
|
| 537 | }
|
| 538 | }
|
| 539 |
|
| 540 |
|
| 541 | dump_modules();
|
| 542 |
|
| 543 | while(1)
|
| 544 | {
|
| 545 | printf("Please enter your choice: ");
|
| 546 | ret = t_get_int(&idx);
|
| 547 | printf("\n");
|
| 548 | if(ret < 0)
|
| 549 | {
|
| 550 | printf("Invalid input\n");
|
| 551 | continue;
|
| 552 | }
|
| 553 | else if(ret == 1)
|
| 554 | {
|
| 555 | dump_modules();
|
| 556 | continue;
|
| 557 | }
|
| 558 |
|
| 559 | if(idx == -1)
|
| 560 | {
|
| 561 | break;
|
| 562 | }
|
| 563 |
|
| 564 | if(idx<0 || idx>=T_ARRAY_SIZE(test_modules))
|
| 565 | {
|
| 566 | printf("Not support idx: %d\n", idx);
|
| 567 | continue;
|
| 568 | }
|
| 569 |
|
| 570 | enter_modules(test_modules[idx]);
|
| 571 | }
|
| 572 |
|
| 573 | return 0;
|
| 574 | }
|
| 575 |
|