FlightGear飞行模拟器

标题: Flightgear接口系列_1_参数解析 [打印本页]

作者: zk_sima    时间: 2014-4-28 22:16
标题: Flightgear接口系列_1_参数解析
本帖最后由 zk_sima 于 2014-4-28 22:20 编辑

第一次在论坛中发技术贴,潜水1年了,最新想应聘论坛IO技术模块的版主,所以迫使自己多发些帖子来吸引眼球,并希望大家一起来讨论。
好了,开始正文了。
背景:
本人计算机专业,大概1年前玩过flightgear,但没看过源码。工作中会接触到很多航电知识,最近需要用到飞行模型,所以就搭建了flightgear编译环境,学习和修改flightgear。
分割线

------------------------------------------------------------------------------------------------------------------------------------------------------
Flightgear的NetWork对应的是其数据的IO,flightgear定义了多种协议来对应各自的IO接口,每个协议都定义为FGProtocol类型。在程序中,如果需要flightgear提供这些接口则需要提供命令行参数来告知flightgear,flightgear在启动后会首先解析参数,根据不同的参数类型去初始化对应的IO,外部程序利用该IO与flightgear进行数据交互。
参数解析过程
Flightgear启动后开始调用fgMainInit,该函数是程序的入口函数,在该函数里通过调用fgInitConfig来解析参数。在fgInitConfig中创建Options对象,该对象用来解析和处理命令行参数,随后调用Options::init来对命令行的初步解析。在init中调用Options::parseOption,该函数判断参数的类型是否符合要求同时根据不同的参数类型进行不同的处理,如果类型为”—prop:”则直接创建参数类型描述和参数值对OptionValue(OptionDesc,cmdValue)并加入到Options对象中;如果类型为genric、mative等则调用addOption,在Options::addOption中创建OptionValue并加入到Options对象中。之后在fgInitConfig中调用Options::processOptions,在processOptions中对Options对象中的每个OptionValue调用Options::OptionsPrivate::processOption,在processOption中,首先判断参数的类型(在这里,我们暂时只讨论OPTION_CHANNEL),如果为OPTION_CHANNEL则调用add_channel把每个参数及值插入到FGGlobals::channel_options_list中。
流程图如下:
如参数为:“--protocol=medium,direction,hz,medium_options,...“经过初始之后会以:“protocolmedium,direction,hz,medium_options,...”格式的字符串存储在FGGlobals::channel_options_list中。

明天继续更新,希望大家指正。
email:zk.sima@gmail.com


作者: renshengsiji    时间: 2014-5-5 09:20
看了之后,受益匪浅!
作者: 叶落流年    时间: 2014-5-28 23:19
参数详解不错,受益匪浅!
作者: freeyun    时间: 2014-8-7 20:10
辛苦了
作者: huanjing2012    时间: 2014-9-18 07:58
非常精彩,省了很多时间自己研究,太好了,感谢楼主
作者: zbh0418    时间: 2015-1-5 16:44
大神,学习了~~~~~~~~~~~~~~~
作者: 3660628    时间: 2015-4-28 11:25
不错不错。。好东东
~~
作者: 18298347945    时间: 2015-7-3 21:05
受益良多啊~最近正好在看FG接口的东西
作者: 18298347945    时间: 2015-7-3 21:06
刚开始接触这个东西,有点吃不消。。。。继续努力!




欢迎光临 FlightGear飞行模拟器 (https://flightgear.org.cn/) Powered by Discuz! X3.2