radiooptions.c
上传用户:rftzhifu
上传日期:2017-02-21
资源大小:229k
文件大小:3k
源码类别:

android开发

开发平台:

Unix_Linux

  1. /* //device/system/toolbox/resetradio.c
  2. **
  3. ** Copyright 2006, The Android Open Source Project
  4. **
  5. ** Licensed under the Apache License, Version 2.0 (the "License"); 
  6. ** you may not use this file except in compliance with the License. 
  7. ** You may obtain a copy of the License at 
  8. **
  9. **     http://www.apache.org/licenses/LICENSE-2.0 
  10. **
  11. ** Unless required by applicable law or agreed to in writing, software 
  12. ** distributed under the License is distributed on an "AS IS" BASIS, 
  13. ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
  14. ** See the License for the specific language governing permissions and 
  15. ** limitations under the License.
  16. */
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <unistd.h>
  20. #include <cutils/sockets.h>
  21. #define SOCKET_NAME_RIL_DEBUG "rild-debug" /* from ril.cpp */
  22. enum options {
  23.     RADIO_RESET,
  24.     RADIO_OFF,
  25.     UNSOL_NETWORK_STATE_CHANGE,
  26.     QXDM_ENABLE,
  27.     QXDM_DISABLE,
  28.     RADIO_ON,
  29.     SETUP_PDP,
  30.     DEACTIVATE_PDP,
  31.     DIAL_CALL,
  32.     ANSWER_CALL,
  33.     END_CALL,
  34. };
  35. static void print_usage() {
  36.     perror("Usage: radiooptions [option] [extra_socket_args]n
  37.            0 - RADIO_RESET, n
  38.            1 - RADIO_OFF, n
  39.            2 - UNSOL_NETWORK_STATE_CHANGE, n
  40.            3 - QXDM_ENABLE, n
  41.            4 - QXDM_DISABLE, n
  42.            5 - RADIO_ON, n
  43.            6 apn- SETUP_PDP apn, n
  44.            7 - DEACTIVE_PDP, n
  45.            8 number - DIAL_CALL number, n
  46.            9 - ANSWER_CALL, n
  47.            10 - END_CALL n");
  48. }
  49. static int error_check(int argc, char * argv[]) {
  50.     if (argc < 2) {
  51.         return -1;
  52.     }
  53.     const int option = atoi(argv[1]);
  54.     if (option < 0 || option > 10) {
  55.         return 0;
  56.     } else if ((option == DIAL_CALL || option == SETUP_PDP) && argc == 3) {
  57.         return 0;
  58.     } else if ((option != DIAL_CALL && option != SETUP_PDP) && argc == 2) {
  59.         return 0;
  60.     }
  61.     return -1;
  62. }
  63. static int get_number_args(char *argv[]) {
  64.     const int option = atoi(argv[1]);
  65.     if (option != DIAL_CALL && option != SETUP_PDP) {
  66.         return 1;
  67.     } else {
  68.         return 2;
  69.     }
  70. }
  71. int main(int argc, char *argv[])
  72. {
  73.     int fd;
  74.     int num_socket_args = 0;
  75.     int i  = 0;
  76.     if(error_check(argc, argv)) {
  77.         print_usage();
  78.         exit(-1);
  79.     }
  80.     fd = socket_local_client(SOCKET_NAME_RIL_DEBUG,
  81.                              ANDROID_SOCKET_NAMESPACE_RESERVED,
  82.                              SOCK_STREAM);
  83.     if (fd < 0) {
  84.         perror ("opening radio debug socket");
  85.         exit(-1);
  86.     }
  87.     num_socket_args = get_number_args(argv);
  88.     int ret = send(fd, (const void *)&num_socket_args, sizeof(int), 0);
  89.     if(ret != sizeof(int)) {
  90.         perror ("Socket write error when sending num args");
  91.         close(fd);
  92.         exit(-1);
  93.     }
  94.     for (i = 0; i < num_socket_args; i++) {
  95.         // Send length of the arg, followed by the arg.
  96.         int len = strlen(argv[1 + i]);
  97.         ret = send(fd, &len, sizeof(int), 0);
  98.         if (ret != sizeof(int)) {
  99.             perror("Socket write Error: when sending arg length");
  100.             close(fd);
  101.             exit(-1);
  102.         }
  103.         ret = send(fd, argv[1 + i], sizeof(char) * len, 0);
  104.         if (ret != len * sizeof(char)) {
  105.             perror ("Socket write Error: When sending arg");
  106.             close(fd);
  107.             exit(-1);
  108.         }
  109.     }
  110.     close(fd);
  111.     return 0;
  112. }