原址

越来越多的智能硬件设备实现了简易的配网功能,微信硬件平台推出了Airkiss技术,详细的关于Airkiss的介绍可以参考微信硬件平台开发者心:微信硬件平台Airkiss

关于AirKiss的实现,基于的WiFi芯片是BroadCom AP6212,基于的CPU还是瑞芯微RK3128,Android系统。

其实很多WiFI厂商都和微信有了合作,实现了其Airkiss、AirSync等功能。比如我拿到的是正基科技(AMPAK)AP6212的

EasySetupTarget.zip,其实现了微信的Airkiss功能,同时也支持几个其它厂商的智能配网功能,具体如下:

Usage: (type setup -h)
# setup -h
-h: show help message
-d: show debug message
-k <v>: set 16-char key for all protocols
-p <v>: bitmask of protocols to enable
  0x0001 - bcast
  0x0002 - neeze
  0x0004 - akiss
  0x0010 - changhong
  0x0020 - changhong
  0x0040 - jd JoyLink

本文中我们只介绍Airkiss的测试过程,Airkiss的实现需要一下几个模块支持:wifi固件、服务端(EasySetupTarget)、

客户端(APP or微信公众号发送ssid和password)。

wifi固件

Airkiss服务实现模块

可以编译为可执行文件或so库,源码在jni文件夹中,可以通过Androi JNI调用。详细的说明在readme文档。

这里主要记录一下我遇到的问题,编译jni目录为可执行文件,push到开发板运行正常,可以获取到ssid和password。

但是为了更加方便操作,我是通过上层APP的JNI调用easysetup接口,开启airkiss,然后走到easy_setup_start()接口,

看日志已经进入该函数,但是在ioctrl操作时失败了,具体日志如下:

[ 01-01 12:45:27.541  7172: 7275 I/         ]Lucien:entere easySetupEnabbleAirkiss  
[ 01-01 12:45:27.541  7172: 7275 I/         ]Lucien:Easy setup target library v3.7.0
[ 01-01 12:45:27.541  7172: 7275 I/         ]easy setup iovar !
[ 01-01 12:45:27.541  7172: 7275 I/         ]easy setup ioctl(cmd=263) failed: 1(Operation not permitted)
[ 01-01 12:45:27.541  7172: 7275 I/         ]easy setup iovar:easy_setup_ioctl return:-1
[ 01-01 12:45:27.541  7172: 7275 I/         ] easy setup start failed: 1(Operation not permitted)
对应执行代码位置如下标红:
int easy_setup_ioctl(int cmd, int set, void* param, int size) {
     。。。。。。
 if ((ret = ioctl(g_ioc_fd, SIOCDEVPRIVATE, &ifr)) < 0) {
        /* log if not WLC_SCAN_RESULTS(51) */
        if (cmd != 51) {
            LOGD("easy setup ioctl(cmd=%d) failed: %d(%s)\n", 
                    cmd, errno, strerror(errno));
        }
        return -1;
    }
return 0;
}

刚开始百思不得其解,为什么会权限失败,apk是放在/system/app中、设置platform签名凭证、以及设置shareUid,

相应的so权限及用户组也没什么问题,纠结了半天,还是怪自己对Android权限管理了解到不够清楚,刚开始怀疑是selinux权限没加,

但是又没有相应的avc日志。还尝试app中调用可执行文件,也是失败的。看了这位同仁的博客才明白(参考博客),

其实是apk的操作权限没有加够。

原来在函数dev_ioctl中,会检查CAP_NET_ADMIN权限,进入这个函数,发现检查的是进程是否在group AID_NET_ADMIN中:

[cpp] view plaincopy
  1. if (cap == CAP_NET_ADMIN && in_egroup_p(AID_NET_ADMIN))
  2. return 0;
android权限定义
在system/core/include/private/android_filesystem_config.h中,android定义了一组uid和gid,如AID_ROOT, 
AID_SYSTEM,AID_NET_ADMIN。每一个id对应有字符串,如root, system, net_admin。当用户程序需要访问受限资源是,
需要保证自己加入到对应的Group中。在frameworks中platform.xml存放有AndroidManifest.xml中权限与底层权限的对应关系,
之所以一直报权限问题,原来是我在apk中没有申请NET_ADMIN权限,而这个权限是系统app才可以申请的,在AndroidManifest.xml添加了权限申请后,终于不报ioctl的错误了,终于看到了avc日志。

com.mydale.iot: type=1400 audit(0.0:4): avc: denied { net_admin } for capability=12 scontext=u:r:platform_app:s0 tcontext=u:r:

platform_app:s0tclass=capability permissive=1

添加权限:

allow platform_app self:capability { net_admin };

但是编译会报错,原来在app.te中声明了net_admin在app domain是不被允许的。

neverallow { appdomain -bluetooth } self:capability *;

这里需要修改下,其它就OK了。以上只是自己理解,可能有不准确的地方,谅解。

补充;

设备获取到wifi ssid和password后,也会同时获取一个随机数,在设备联网后,要发送不少于20次udp广播到端口10000,告诉微信公众号或app端,信息全部被正确接收了。

Java端的udp广播发送代码参考如下:

[java] view plaincopy
  1. private void sendUdpBroadcast(byte[] data){
  2. Log.i(Tag,"start to sendUdpBroadcast");
  3. DatagramSocket udpSocket;
  4. String address = getLocalIPAddress();
  5. DatagramPacket dataPacket = new DatagramPacket(buffer, MAX_DATA_PACKET_LENGTH);
  6. InetAddress broadcastAddr;
  7. if (address != null) {
  8. Log.i(Tag,"Can not get IP address");
  9. }
  10. try {
  11. udpSocket = new DatagramSocket(DEFAULT_PORT);
  12. dataPacket.setData(data);
  13. dataPacket.setLength(data.length);
  14. dataPacket.setPort(DEFAULT_PORT);
  15. broadcastAddr = InetAddress.getByName("255.255.255.255");
  16. dataPacket.setAddress(broadcastAddr);
  17. for(int i=0; i<30; i++) {
  18. udpSocket.send(dataPacket);
  19. sleep(10);
  20. }
  21. udpSocket.close();
  22. } catch (Exception e) {
  23. e.printStackTrace();
  24. }
  25. }

瑞芯微RK3128-微信Airkiss2.0配网功能调试及实现相关推荐

  1. rk3128屏幕占空比参数设置_瑞芯微RK3128芯片怎么样 性能全面解读

    最近,笔者听说一款搭载瑞芯微RK3128芯片方案的盒子问市了,打听了一下才知道还真有其事,这款上市的RK3128盒子叫做开博尔M1,报价229元,这个价位在如今的四核网络机顶盒市场可谓是不多见,但是这 ...

  2. 瑞芯微RK3128盒子刷机提示测试设备失败的解决方法:MASKROM模式

    设备:MSIDIGTAL-RM701 平台:瑞芯微RK3128 工具:AndroidTool_Release_v2.33 在刷入过第三方固件后再刷机,就遇到了测试设备失败的问题: 苦苦寻找了很多方法都 ...

  3. 记录一次瑞芯微rk3128固件解包打包过程:以添加root权限为例

    一.设备和环境 设备 MSIDIGTAL-RM701 平台 瑞芯微RK3128 环境 Windows 11 Subsystem Ubuntu 20.04.5 LTS 二.工具 在打包解包的过程中,我们 ...

  4. 瑞芯微RK3128芯片手册,RK3128 datasheet技术资料

    1 Introduction RK3128是一款用于低端四核平板电脑和TV-Box的高性能应用处理器.特别是对于H.265 1080 p电视机箱来说,它是一个高集成度和高竞争力的Bom成本SOC.集成 ...

  5. 搭建瑞芯微rk3128本地android代码服务器

    从供应商那里拿到的rk3128android 4.4的源码包.解压前压缩包大概5G,通过命令解压后发现只有一个隐藏的.repo 目录大小4096. 然后执行命令 repo sync -l 意思是从本地 ...

  6. 瑞芯微rockchip PX30触摸屏调试记录

    系列文章目录 瑞芯微rockchip PX30 串口调试记录 瑞芯微rockchip PX30 显示屏调试 瑞芯微rockchip PX30触摸屏调试记录 瑞芯微rockchip PX30 QT环境搭 ...

  7. yolov5-5.0训练模型+瑞芯微rv1126上实现模型部署

    yolov5-5.0训练模型+瑞芯微rv1126上实现模型部署   第一次接触模型训练和在开发板部署,过程曲折,从开始的一脸懵到最后模型部署成功,查阅了不少资料和学习了不少大佬的经验,在这里记录一下过 ...

  8. 瑞芯微RK3566 简单介绍与Android11.0 固件编译

    rockchip RK3566 瑞芯微 RK3566 四核 64 位Cortex-A55 处 理 器 , 主 频 最 高1.8GHz,效能有大幅提升:采用22nm先进工艺,具有低功耗高性能的特点. 瑞 ...

  9. 瑞芯微RK PX30中文详解(带开源资料)简介

    瑞芯微RK PX30中文详解(带开源资料)简介 非常感谢您选择九鼎创展PX30开发平台,本文档讲述PX30开发平台的硬件资源,电路原理以及支持的接口等. PX30开发板是基于瑞芯微PX30的一款高端开 ...

最新文章

  1. 物联网基础知识_联网| 基础知识能力问答 套装1
  2. 六逻辑层次 职业规划案例_我如何在六个月内改变职业并找到了一名开发人员...
  3. Vue2.0 + ElementUI 手写权限管理系统后台模板(三)——页面搭建
  4. 停车场管理系统 java_使用java编写一个停车场管理系统
  5. vue常用的几个框架
  6. python-GUI图形界面之Tkinter(常用控件、事件对象、布局管理)
  7. centos7 分辨率修改_centos系统修改屏幕分辨率问题
  8. Python微信公众号
  9. [ISP]AT89S52的ISP功能简介
  10. 网络最大流和最小费用流
  11. Linux SWAP 交换分区配置说明
  12. python怎样安装whl文件
  13. 各厂家linux面板对比
  14. 3ds max 结合透视匹配重构高变形的场景
  15. ubuntu 防火墙端口设置
  16. 行人检测(Pedestrian Detection)资源与更新
  17. MFC Tab 控件使用
  18. Ultimaker简介
  19. linux find文件,并复制,通过find命令寻找文件并拷贝到一个指定目录方法详解
  20. 看不懂没关系, 知道厉害就行了! 中科大俩教授11年解了两道数学难题

热门文章

  1. ZeroMQ接口函数之 :zmq_ipc – ZMQ本地进程间通信传输协议
  2. CentOS 6.5 Zabbix监.控系统功能及基本使用
  3. JavaFx系列(二) Thread顯示進度窗的對話框
  4. 17.和优化相关的hint
  5. [转载]遗传算法介绍
  6. jsoup解析百度音乐
  7. goldengate mysql双向_Oracle使用goldengate分别向Oracle和mysql双路的单向复制
  8. oracle和mysql数据实时同步_FileYee文件实时同步备份软件,再不怕数据丢失
  9. ip登陆异常 php,PHP实例:PHP制作登录异常ip检测功能的实例代码
  10. android http 图片上传,Android okHttp上传图片