Cliff的工作室
Firefox OS Camera应用修改(WebIDL)

近期需要对Firefox OS的Camera做一些修改,主要是增加一些功能实现。由于相对于Android来说, Firefox OS的接口实在是太寒酸了,所以只能通过增加接口的方式实现。从整个功能实现的角度上来说,包含两部分:Gaia<->Gecko之间的接口,Gecko<->HAL之间的接口。这篇文档暂时只讨论Gaia<->Gecko之间的接口,也就是Camera的WebIDL接口的实现。Mozilla官方的WebIDL参考文章在这里

对于Camera而言,目前增加接口主要有两种情况。Gaia层直接调用Gecko层接口;Gaia层设置回调函数到Gecko层,由Gecko层回调。针对这两种情况的修改分别是这样的。

  1. Gaia层调用Gecko层接口,需要添加webidl文件中的函数。具体说来,需要:

对于webidl来说,只要编译通过,其实这部分已经完了,具体到向下调用,需要修改ICameraControl.h和CameraControlImpl等相关文件,这里就一笔带过了。 2. Gaia层设置回调函数到Gecko层,需要:

跟上面的情况一样,到这里其实webidl已经完成了,但以attribute这种回调函数而言,做到这里还没有意义,需要再增加handleStateChange函数的回调,因此还需要修改以下几个文件:

上面的部分写完后,对于第一种,在gaia层js中加入调用的代码,就能执行到gecko层;对于第二种,在gaia层加上回调函数,再在gecko层通过某个消息回调,就能在gaia层收到回调。

对于整个编译过程而言,其实是这样的,所有修改的webidl/idl/conf文件,在编译过程中作为生成个别.cpp/.h的依据,然后再结合上面修改的.cpp/.h一同编译。因此如果编译无法通过的话,如果是某些定义问题,需要去看对应的webidl/idl/conf文件。例如我在webidl的修改忘了加[Throws],生成的接口就没有ErrorResult回传的参数,自然就会出问题了。

2014 年 06 月 12 日 16 时 43 分