分类: LINUX
2013-07-05 17:59:04
今天把DM365_IPNC接口系统根据代码总结了一下:
一、How to use alarm message driver
(1)Alarm_Msg_Def.h中定义新的Message ID与报警管理进程交互;
(2)其中AlarmDrvInit在util/alarm_msg_drv.c中定义并生成alarm_msg_drv.a供其他进程使用;
(3)通过alarm_msg_drv.a使AV_Server和system_server之间建立通信。
二、Usage Guide for GetAVData
(1)Util/Appro_interface.c中定义了GetAV_Data,并生成Appro_interface.a静态库,哪个进程想要获取音视频帧就需要包含该库;
(2)Util/ApproDrvMsg.a中定义了与AV_Server通信的接口,通信通过消息队列进行;
(3)在AV_Server中通过pParm->qid = Msg_Init(MSG_KEY);来初始化消息队列,而其他进程则是通过调用ApproDrvInit来实现消息队列的初始化;如system_server想要调用ApproDrvMsg.a中的接口,则需要在调用前通过ApproDrvInit来实现消息队列的初始化。
三、How to use file message driver
(1)File_Msg_Def.h中定义新的msg_id与file manage进程交互;
(2)InitFileMsgDrv(key,procid)来初始化共享内存和消息队列,如boa想与file manage进程通信,则在boa中必须首先调用InitFileMsgDrv,其中key = FILE_MSG_KEY,procid = FILE_BOA_MSG;FILE_BOA_MSG表示与file manage进程通信的id,在File_Msg_Def.h中定义;而在file manage进程中则是通过mFileId = pShareMemInit(FILE_MSG_KEY)和qFileId = Msg_Init(FILE_MSG_KEY)来初始化共享内存和消息队列;由于是使用同一个FILE_MSG_KEY,因此这两个进程的用户态指针指向同一片共享内存区域,该共享内存区应该存储的是整个系统的配置信息;
(3)在相机起来的时候,file manage进程调用SetUpEnv中的FileMngInit (PFileShareMem),而PFileShareMem就是共享内存映射后的指针地址,在该函数中首先通过ReadGlobal(SYS_FILE,ShareMem)来读取sysenv.cfg文件并将该文件内容读取到PFileShareMem中,如果读取sysenv.cfg失败,则读取sysenv.backup文件,如果仍然读取不成功,则使用默认配置创建sysenv.cfg文件并将该默认配置copy到PFileShareMem中;至此共享内存中保存就是系统的配置信息,其他进程可以通过GetSysInfo来获取该共享内存中的数据。其中GetSysInfo作用可以通过注释了解:* Get system information from file manager. In order to make every change can update quickly, this function return the pointer to share memory.*
四、How to use message queue API
Msg_Init可以供任何一个进程使用;
具体可以参考:AlarmDrvInit();ApproDrvInit();GetSysInfo();InitFileMsgDrv();SysDrvInit();
五、How to use system message driver
(1)sys_msg_def.h中定义新的msg_id与system server进程交互;
(2)任何想与system_server通信的进程都要首先调用SysDrvInit来初始化消息队列,信号量,共享内存;
(3)以boa为例,则在boa中调用SysDrvInit(SYS_BOA_MSG),而在system_server中则是调用qid = Msg_Init(SYS_MSG_KEY)和mid = ShareMemInit(SYS_MSG_KEY)来初始化消息队列和共享内存。
六、Collaboration diagram for Utility API: