mm-qcamera-daemon主函数分析

打印 上一主题 下一主题

主题 843|帖子 843|积分 2531

目录

main函数核心

main函数核心

    main函数的主要任务包含在一个do{ } while(1)循环中. while循环中主要是监听文件描述符,故mai函数是由文件的读写来举行驱动的。
    全部的文件描述符被封装成布局体 read_fd_info_t.其定义如下:
  1. /** read_fd_info_t
  2.  * @type -- either domain socket fd or mct fd
  3.  * @session -- session index
  4.  * @fd  --
  5.  *    in case of domain socket fd: fd[0]
  6.  *    in case of mct pipe fd: fd[0] - server read fd
  7.  *                                        fd[1] - mct write fd
  8.  **/
  9. typedef struct _read_fd_info {
  10.     read_fd_type type;
  11.     typedef enum _read_fd_type {
  12.         RD_FD_HAL, // 内核节点 /dev/video0
  13.         RD_DS_FD_HAL, // socket通信
  14.         RD_PIPE_FD_MCT, // 管道通信
  15.         RD_FD_NONE
  16.     } read_fd_type;
  17.     unsigned int session;
  18.     int fd[2];
  19. } read_fd_info_t;
复制代码
​各种范例的文件描述符,将做为布局体mct_list_t中的data域,末了以链表的形式生存下来,末了形成的链表如下:
    main函数的主要任务包含在一个do{ } while(1)循环中. while循环中主要是监听文件描述符,故mai函数是由文件的读写来举行驱动的。
    全部的文件描述符被封装成布局体 read_fd_info_t.其定义如下:
  1. /** read_fd_info_t
  2.  * @type -- either domain socket fd or mct fd
  3.  * @session -- session index
  4.  * @fd  --
  5.  *    in case of domain socket fd: fd[0]
  6.  *    in case of mct pipe fd: fd[0] - server read fd
  7.  *                                        fd[1] - mct write fd
  8.  **/
  9. typedef struct _read_fd_info {
  10.     read_fd_type type;
  11. typedef enum _read_fd_type {
  12. RD_FD_HAL, // 内核节点 /dev/video0
  13. RD_DS_FD_HAL, // socket通信
  14. RD_PIPE_FD_MCT, // 管道通信
  15. RD_FD_NONE
  16. } read_fd_type;
  17.     unsigned int session;
  18.     int fd[2];
  19. } read_fd_info_t;
复制代码
​各种范例的文件描述符,将做为布局体mct_list_t中的data域,末了以链表的形式生存下来,末了形成的链表如下:

主程序通过如下循环去检测这些文件描述符:
  1. do {
  2.     FD_ZERO(&(select_fds.fds));
  3.     mct_list_traverse(listen_fd_list, server_reset_select_fd, &select_fds);
  4.     // no timeout
  5.     ret = select(select_fds.select_fd + 1, &(select_fds.fds), NULL, NULL, NULL);
  6.     if (ret > 0) {
  7.         mct_list_t  *find_list;
  8.         read_fd_info_t *fd_info;
  9.         find_list = mct_list_find_custom(listen_fd_list, &(select_fds.fds), server_check_listen_fd);
  10.         if (!find_list)
  11.             continue;
  12.   
  13.         fd_info = (read_fd_info_t *)find_list->data;
  14.         switch (fd_info->type) {
  15.             case RD_FD_HAL:
  16.                     ......
  17.             case RD_DS_FD_HAL:
  18.                     ......
  19.             case RD_PIPE_FD_MCT:
  20.                     ......
  21.             default:
  22.               continue;
  23.         }
  24.         switch (proc_ret.result) {
  25.             case RESULT_NEW_SESSION:
  26.                     ......
  27.             case RESULT_DEL_SESSION:
  28.                     ......
  29.             case RESULT_FAILURE:
  30.                     ......
  31.             case RESULT_SUCCESS:
  32.                     ......
  33.             default:
  34.                break;
  35.         }
  36.     }
  37. } while(1);
复制代码
主程序通过如下循环去检测这些文件描述符:
  1. do {
  2.     FD_ZERO(&(select_fds.fds));
  3.     mct_list_traverse(listen_fd_list, server_reset_select_fd, &select_fds);
  4.     // no timeout
  5.     ret = select(select_fds.select_fd + 1, &(select_fds.fds), NULL, NULL, NULL);
  6.     if (ret > 0) {
  7.         mct_list_t  *find_list;
  8.         read_fd_info_t *fd_info;
  9.         find_list = mct_list_find_custom(listen_fd_list, &(select_fds.fds), server_check_listen_fd);
  10.         if (!find_list)
  11.             continue;
  12.   
  13.         fd_info = (read_fd_info_t *)find_list->data;
  14.         switch (fd_info->type) {
  15.             case RD_FD_HAL:
  16.                     ......
  17.             case RD_DS_FD_HAL:
  18.                     ......
  19.             case RD_PIPE_FD_MCT:
  20.                     ......
  21.             default:
  22.               continue;
  23.         }
  24.         switch (proc_ret.result) {
  25.             case RESULT_NEW_SESSION:
  26.                     ......
  27.             case RESULT_DEL_SESSION:
  28.                     ......
  29.             case RESULT_FAILURE:
  30.                     ......
  31.             case RESULT_SUCCESS:
  32.                     ......
  33.             default:
  34.                break;
  35.         }
  36.     }
  37. } while(1);
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表