ToB企服应用市场:ToB评测及商务社交产业平台
标题:
mm-qcamera-daemon主函数分析
[打印本页]
作者:
拉不拉稀肚拉稀
时间:
2024-6-11 09:47
标题:
mm-qcamera-daemon主函数分析
目录
main函数核心
main函数核心
main函数的主要任务包含在一个do{ } while(1)循环中. while循环中主要是监听文件描述符,故mai函数是由文件的读写来举行驱动的。
全部的文件描述符被封装成布局体 read_fd_info_t.其定义如下:
/** read_fd_info_t
* @type -- either domain socket fd or mct fd
* @session -- session index
* @fd --
* in case of domain socket fd: fd[0]
* in case of mct pipe fd: fd[0] - server read fd
* fd[1] - mct write fd
**/
typedef struct _read_fd_info {
read_fd_type type;
typedef enum _read_fd_type {
RD_FD_HAL, // 内核节点 /dev/video0
RD_DS_FD_HAL, // socket通信
RD_PIPE_FD_MCT, // 管道通信
RD_FD_NONE
} read_fd_type;
unsigned int session;
int fd[2];
} read_fd_info_t;
复制代码
各种范例的文件描述符,将做为布局体mct_list_t中的data域,末了以链表的形式生存下来,末了形成的链表如下:
main函数的主要任务包含在一个do{ } while(1)循环中. while循环中主要是监听文件描述符,故mai函数是由文件的读写来举行驱动的。
全部的文件描述符被封装成布局体 read_fd_info_t.其定义如下:
/** read_fd_info_t
* @type -- either domain socket fd or mct fd
* @session -- session index
* @fd --
* in case of domain socket fd: fd[0]
* in case of mct pipe fd: fd[0] - server read fd
* fd[1] - mct write fd
**/
typedef struct _read_fd_info {
read_fd_type type;
typedef enum _read_fd_type {
RD_FD_HAL, // 内核节点 /dev/video0
RD_DS_FD_HAL, // socket通信
RD_PIPE_FD_MCT, // 管道通信
RD_FD_NONE
} read_fd_type;
unsigned int session;
int fd[2];
} read_fd_info_t;
复制代码
各种范例的文件描述符,将做为布局体mct_list_t中的data域,末了以链表的形式生存下来,末了形成的链表如下:
主程序通过如下循环去检测这些文件描述符:
do {
FD_ZERO(&(select_fds.fds));
mct_list_traverse(listen_fd_list, server_reset_select_fd, &select_fds);
// no timeout
ret = select(select_fds.select_fd + 1, &(select_fds.fds), NULL, NULL, NULL);
if (ret > 0) {
mct_list_t *find_list;
read_fd_info_t *fd_info;
find_list = mct_list_find_custom(listen_fd_list, &(select_fds.fds), server_check_listen_fd);
if (!find_list)
continue;
fd_info = (read_fd_info_t *)find_list->data;
switch (fd_info->type) {
case RD_FD_HAL:
......
case RD_DS_FD_HAL:
......
case RD_PIPE_FD_MCT:
......
default:
continue;
}
switch (proc_ret.result) {
case RESULT_NEW_SESSION:
......
case RESULT_DEL_SESSION:
......
case RESULT_FAILURE:
......
case RESULT_SUCCESS:
......
default:
break;
}
}
} while(1);
复制代码
主程序通过如下循环去检测这些文件描述符:
do {
FD_ZERO(&(select_fds.fds));
mct_list_traverse(listen_fd_list, server_reset_select_fd, &select_fds);
// no timeout
ret = select(select_fds.select_fd + 1, &(select_fds.fds), NULL, NULL, NULL);
if (ret > 0) {
mct_list_t *find_list;
read_fd_info_t *fd_info;
find_list = mct_list_find_custom(listen_fd_list, &(select_fds.fds), server_check_listen_fd);
if (!find_list)
continue;
fd_info = (read_fd_info_t *)find_list->data;
switch (fd_info->type) {
case RD_FD_HAL:
......
case RD_DS_FD_HAL:
......
case RD_PIPE_FD_MCT:
......
default:
continue;
}
switch (proc_ret.result) {
case RESULT_NEW_SESSION:
......
case RESULT_DEL_SESSION:
......
case RESULT_FAILURE:
......
case RESULT_SUCCESS:
......
default:
break;
}
}
} while(1);
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4