AIS client的初始化过程

简单来说:
1,aisapp会调用建立与的连接 , 通信方式为本地通信
2,在建立通信后,会与交换一部分信息 , 用于后续建立main 以及event
3,在创建event 的过程中,还会创建两个重要的线程:,
4,线程负责接收event事件,并且把接收到的时间入列(eue)

AIS client的初始化过程

文章插图
【AIS client的初始化过程】5,会从event队列中取出事件,并调用相应的回调函数进行处理,这里需要注意的是,这里的event队列不确定是否和4中描述的队列是同一个队列.
流程图:
这个函数中会从全局数组变量中找到一个空的位置来初始化,数组最大成员为64,也就是ais支持的个数为64个:
#64
static int ais_client_alloc(void){int rc = -1;int i;AIS_LOG_CLI_API("E");pthread_mutex_lock(&sgs_mutex);for (i = 0; i < AIS_MAX_USR_CONTEXTS; i++) {if (sgs_ais_client[i].qcarcam_hndl == NULL){ais_client_init(&sgs_ais_client[i]);sgs_ais_client[i].qcarcam_hndl = AIS_CONTEXT_IN_USE;rc = i; break;}}
这个函数会通过本地通信方式与建立连接,交换连接信息.
/*** connection information to be exchanged between client/server*/typedef struct{int id;/**< connection id */int cnt;/**< number of connections */unsigned int gid;/**< group id of client*/unsigned int pid;/**< process id of client */unsigned int app_version;/**< QCarCam API version of application */unsigned int version;/**< QCarCam API version of client lib */CameraResult result;/**< result of exchange */unsigned int flags;/**< flags for new connection */} s_ais_conn_info;