文章标题

来源:互联网 发布:威锋源下载软件不动 编辑:程序博客网 时间:2024/06/14 22:39

总体思路

  • 将wulian SDK 加入iotivity 代码中编译
  • 建立Iotivity Resource Container Wulian Bundle 连接wulian 网关和设备
  • 调用wulian sdk 获取/控制wulian device
  • 修改Iotivity 的 Resource Container的example作为app 入口用于发现wulian 设备

环境准备

获取iotivity源代码

wget http://mirrors.kernel.org/iotivity/1.1.0/iotivity-1.1.0.tar.gz

解压

tar -xzvf iotivity-1.1.0.tar.gz

集成第三库(以wulian sdk 集成为例)

解压 wulianC++SDK.rar

拷贝头文件到 resouce-container/include 目录

cp wulianC++SDK/clientSDK/include/*.h iotivity-1.1.0/service/resource-container/include

拷贝lib库到 resouce-container/include 目录

cp wulianC++SDK/clientSDK/include/*.so iotivity-1.1.0/service/resource-container/include

新建wulian resource-container bundle (以HueSampleBunlde 为模板创建WulianSampleBundle)

cd iotivity-1.1.0\service\resource-container\examples\
cp -r HueSampleBundle WulianSampleBundle
cd WulianSampleBundle 将Hue*.h Hue*.cpp 重命名为 Wulian*.h Wulian*.cpp
将 Wulian*.h Wulian*.cpp 文件的Hue 全部替换为Wulian

### 实现WulianSampleBundleActivator.cpp中的
+ activateBundle
+ deactivateBundle
+ createResource
+ destoryResource

### 实现WulianDevice.cpp 中的
+ initAttributes
+ handleGetAttributesRequest
+ handleSetAttributesRequest

### 修改ResourceContainer 启动配置文件

vim iotivity-1.1.0\service\resource-container\examples\ResourceContainerConfig.xml
添加bundle信息如下(注意activator中的名字需要和Bundle的前缀完全一致 (此处为WulianSample) )

oic.bundle.WulianSample
libWulianBundle.so
WulianSample
1.0.0




### 修改iotivity-1.1.0\service\resource-container\examples\ContainerSample.cpp

调用WulianSDK 初始化函数,注册事件回调 (详见下面设备连接部分)

## 修改编译脚本

vim iotivity-1.1.0\service\resource-container\SConscript
### 添加WulianSampleBundle 编译
######################################################################
# build Wulian sample bundle
######################################################################
conf2 = Configure(lib_env)
wulian_resource_bundle_env = resource_container_env.Clone()
wulian_resource_bundle_env.AppendUnique(CCFLAGS=[‘-fPIC’])
wulian_resource_bundle_dir = ‘examples/WulianSampleBundle/’
wulian_resource_bundle_env.AppendUnique(CPPPATH=[
wulian_resource_bundle_dir+’include’,
‘include/’
])
wulian_resource_bundle_env.PrependUnique(LIBS=[‘rcs_container’])
wulian_resource_bundle_src=[Glob(wulian_resource_bundle_dir+’src/*.cpp’)]
WulianBundle = wulian_resource_bundle_env.SharedLibrary(‘WulianBundle’,wulian_resource_bundle_src)
wulian_resource_bundle_env.InstallTarget(WulianBundle,’libWulianBundle’)
lib_env = conf2.Finish()
######################################################################

添加WulianSDk lib 库依赖

resource_container_env.AppendUnique(LIBS = ['dl', 'boost_system', 'boost_date_time', 'boost_thread','wulianSDK'])

修改打包脚本

vim iotivity-1.1.0\tools\tizen\iotivity.spec

在%install 标签下添加

cp out/tizen/*/%{build_mode}/service/resource-container/ContainerSample %{ex_install_dir}
cp out/tizen/*/%{build_mode}/service/resource-container/ContainerSampleClient %{ex_install_dir}
cp out/tizen/*/%{build_mode}/service/resource-container/examples/ResourceContainerConfig.xml %{ex_install_dir}/examples
cp out/tizen//%{build_mode}/lib.so %{buildroot}%{_libdir}

在%files标签下添加

%{_libdir}/libWulianBundle.so

编译

cd iotivity-1.1.0
sudo ./gbsbuild.sh

编译过程中可能需要根据提示下载第三方库到指定目录

获取iotivity rpm

~/GBS-ROOT-OIC/local/repos/tizen/armv7l/RPMS/iotivity/iotivity-1.1.0-0.armv7l.rpm

安装iotivity rpm

rpm -ivh iotivity-1.1.0-0.armv7l.rpm
rpm -ivh iotivity-service-1.1.0-0.armv7l.rpm
rpm -ivh iotivity-test-1.1.0-0.armv7l.rpm

运行container sample app 发现 wulian 设备

/usr/bin/ContainerSample

完整的iotivity 兼容wulian 代码路径

//TZTV_2.2.1/[Precedence2015]/[15_LEIA_Prj]/[DEV]/[SRCN]/SRCN/15_IoT_Hub_SRCN/OIC_DEMO-1.1.0/

设备连接

  • Iotivity 通过Resource Container 来实现兼容第三方设备
  • Resource container 通过读取配置文件ResourceContainerConfig.xml来获取bundle lib库的名字已经路径
  • Resouce container 会调用 bundle lib库中的接口来激活bundle 创建resource,获取resouce属性,控制resouoce
  • 对于第三方设备需要新建一个bundle 并实现其 active/destory/createresouce/destoryresource/initatrribute/handleGetAttributesRequest/handleSetAttributesRequest

以wulian为例

在server端container sample 中调用wulian 接口

Init(&m_WulianMessageCB, pc) //初始化sdk 注册事件回调
Search(ip) //查找网关

在m_WulianMessageCB 中响应wulian 设备事件
+ SEARTCH_GATEWAY //找到了网关
+ DEVICE_UP //设备上线

在响应DEVICE_UP时调用resouce container 接口创建OIC 资源

pContainer->addResourceConfig(“oic.bundle.WulianSample”, “”, resourceParams);
此接口会调用到对应bundle中的WulianSampleBundleActivator的WulianSample_externalCreateResource 函数并填充
BundleResource 结构体 调用m_pResourceContainer->registerResource 接口注册resouce

此步完成后,就已经完成了wulian 设备的发现并创建了一个对应的OIC resoure

# 设备控制
## client端使用iotivity 接口注册回调查找资源

OCPlatform::findResource(…,&foundResource);

## foundResource 中获取设备资源OCResource
## 改变资源属性,并向server端发送消息
curResource->post()

## server端收到消息后调用 resource container 中的handleSetAttributesRequest来处理
以wulian 为例 在中的handleSetAttributesRequest 中我们调用了wulian sdk 的接口来 发送消息给wulian 设备进行控制

0 0
原创粉丝点击