加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

涂鸦_8266SDK

(2017-04-10 17:51:44)
分类: wifi
一、接口说明:
备注:有一些接口作用是一样的,只是sdk新老版本的区别,新的sdk在原来的接口上增加了一些新的接口,tuya开头的都是新版本增加的接口函数,以下以模块化的形式来说明这些接口;
 
①、按键模块:
    旧版本的按键接口,使用顺序是key_init初始化,reg_proc_key注册按键回调函数。具体参考key.h头文件说明;
    新版本的按键接口,使用顺序是tuya_kb_init()初始化,tuya_kb_reg_proc注册按键回调函数,设置连击时间都是一样的。
    按键默认有连击功能,设置连击间隔时间用旧接口set_key_detect_time,需要在key_init之前使用(手册上是这么说,实际测试发现无所谓);新接口tuya_set_kb_seq_enable函数,可以使能或者关闭多击功能,初始化前后使用都可以,注意,如果是nomal或者长按,那么cnt是0而不是1,SDK的一个bug吧。

②、led模块:
    旧版本的led接口,使用顺序是create_led_handle创建led句柄,然后使用set_led_light_type来操作这些io口,set_led_light_type_new比set_led_light_type多了一个总时间的参数,比如闪烁多久。
    新版本的led接口,使用tuya_create_led_handle创建led句柄,然后使用tuya_set_led_type来操作io口;

③、flash模块:
    新版本接口,使用tuya_psm_register_module注册模块名称和扇区名称,然后使用tuya_psm_set_single写入数据,参数是模块名称,变量名称和变量值。tuya_psm_get_single用于读取数据。
    旧版本接口,使用msf_register_module注册,使用msf_set_single,写入使用msf_get_single读取,同上。
    备注:变量名称是用于区分各个数据的,比用tuya_psm_register_module注册后,可以保存多个数据进去,用于区分每个数据的就是变量名称。

④、其他:  
1创建任务:
OPERATE_RET CreateAndStart(OUT THRD_HANDLE *pThrdHandle,\
                           IN CONST P_THRD_FUNC pThrdFunc,\
                           IN CONST PVOID pThrdFuncArg,\
                           IN CONST STACK_SIZE stack_size,\
                           IN CONST TRD_PRI pri,\
                           IN CONST CHAR *thrd_name);

pThrdHandle:句柄指针,以后可用来删除任务,如不需要则用NULL;
pThrdFunc:任务函数指针;
pThrdFuncArg:传递给pThrdFunc的参数;
stack_size:堆栈大小;
pri:任务优先级;
thrd_name:只是个名字,最好起和pThrdFunc一样的名字;

实际应用参考如下:
CreateAndStart(NULL,Task1,NULL, 100, 5, "TASK1");

2、single_dev_reset_factory:恢复出厂设置,需要调用两次才能恢复出厂设置,用于产测的时候,产测成功,需保证调用了两次,然后会重启;

3、tuya_dev_reset_factory:恢复出厂设置,是新的接口,调用两次上面的函数是一样的功能,另外清除配置信息和激活信息的功能参考头文件说明;

4、tuya_get_wf_status:获取flash里面的配置信息,比如是STAT_UNPROVISION(smartconfig状态)或者STAT_AP_STA_UNCONN(AP配置状态)等等;启动时会查询这个信息,进行不同的操作比如smartconfig等。

5、tuya_get_gw_status:获取产品激活状态,比如产测模式,产品未激活,激活就绪态,正常工作状态等,这个信息也是保存在flash里面,不需要联网获取。每次调用tuya_dev_reset_factory重新配置上网,就会重新变成产测或者是未激活状态,配置上网后就会变成正常工作状态,服务器上也会显示一次新的激活,也可以说,每次配置都对应一次新的激活。

6、tuya_device_init(),设备初始化,旧版本的是smart_frame_init和single_wf_device_init_pk一起使用;

7、set_wf_cfg_method函数用于设置配网状态,在app_init里面调用。涂鸦的demo是设置为0,这种状态下,进入配网模式后,只要还没配网,重启都还是会进入原来的配网模式。如果设置为2,进入配网模式后,10s内重启,还是会进入配网模式。但是如果是10s后重启,就不会再进入配网模式了,而是进入连接状态(已经配置过的情况下,没配置过的情况还没详细测试,好像是进入STAT_LOW_POWER,可在wfl_timer_cb查看)。

、SDK架构开发流程:
    1.device_init:app入口函数;
    2.初始化设备:相当于初始化这个插座或者开关等等;
    3.创建按键任务:按键初始化,登记按键回调函数;
    4.创建led句柄,用于操作某个gpio;
    5.增加系统定时器并运行,在里面写自己操作;
    备注:系统启动的时候其实会查询当前是smartconfig、AP配置还是已经配置过等状态,就和阿里的SDK一样,但是涂鸦的是已经封装好,我们看不见这个过程配网其实就是调用tuya_dev_reset_factory函数,把上面的状态写进flash里面,然后重启(重启的时候会查询)。tuya_get_wf_status查询返回值为1说明是smartconfig状态,返回值是2则是AP配网状态,返回值是6则是已经连接上热点。配网成功后直接连上涂鸦的服务器,只需使用涂鸦的手机app软件进行数据收发即可。
如图:

、产品开发流程分析:
    1、在涂鸦官网上注册开发者账号,创建一个产品,比如插座,插排,开关,此时会产生一个用于标志该产品的16位产品id:
    2、为产品设置功能,比如,这个排插有三个开关;
    3、选择一个app界面,用于产品联网后进行显示和操作;
    4、开发sdk的时候初始化设备需要用到上面说到的产品id,用于识别为何种产品;
    5、产品联上服务器后,服务器能由产品id识别出何种产品(首次激活的时候会赋予一个该设备独有的UID),app可进入第3步设置的,该产品的app界面进行操控;
    6、点击控制按钮,根据第2步设置的功能,发送的数据都是固定的。比如,设置为开关,则发送的数据为json格式的{"1",true},{"2",true},{"3",false},这些都是涂鸦的服务器已经定义好的。


四、产测流程:
    1、用sf_reg_pt_proc注册三个回调函数,分别是产品测试函数,模块测试函数和设备测试函数;
    2、首先,系统会调用产品测试函数,并且参数为PTS_RD 0,在参数0的代码里面应该添加一些初始化,比如指示灯的句柄创建和闪烁,注册一个系统定时器等;
    3、系统定时的时间到后,必须要调用single_dev_reset_factory函数(感觉这个函数的设计意义就是为了告诉系统,该调用模块测试函数了,其他时候使用没有任何意义),然后,系统会重新调用产品测试函数,参数为PTS_RUN 1,这个时候,系统又会调用之前注册好的模块测试函数;
    4、在模块测试函数里面,调用wifi_func_verify_pt验证wifi功能是否正常,若正常,返回真,若不正常,返回假;
    5、接着系统重新调用产品测试函数,参数视模块测试函数返回值而定。返回值为真,参数为PTS_OK 3,返回值为假,参数为PTS_FAIL 2,此时就可以打印产测结果了;
    6、最后系统调用设备测试函数,整个过程完成;
    总结一下:其实在第3步的定时时间到后直接调用wifi_func_verify_pt,根据返回值就可以完成射频功能测试了,但是,涂鸦自己这么设计肯定有原因,还是按照上面的流程来做比较好。



五、注意事项:
1、使用tuya_get_wf_status获取状态,刚上电时都是2,过了一段时间之后,才能获取到真正的状态。
2、PR_DEBUG在使用build_app_release.sh编译的时候不会打印信息。
3、只要在同一个局域网内,就算没有连接外网也可以控制,所以msg_upload_proc里面有这句话:
GW_WIFI_STAT_E wf_stat = get_wf_gw_status();
    if(STAT_UNPROVISION == wf_stat || \
            STAT_STA_UNCONN == wf_stat || \
            (get_gw_status() != STAT_WORK))//连接上热点就可以,不需要连接外网
    {
        return WM_FAIL;
    }
...
否则就上报。


六、1.0.6sdk的配网,低功耗和产测的关系
可以简单的只把模块状态分成低功耗和已配置过网络(也就是会直接连接配置过的网络)的状态;

1、烧录程序后,模块处于低功耗状态;

2、只有在低功耗状态,模块在上电时大概2s内会扫描产测热点,若扫描到产测热点,进入产测代码,若没扫描到产测热点,则进入用户代码。
若不是在低功耗状态,则不会进行上面的步骤,而是直接进入用户代码,也就是产测只有在低功耗状态下才有可能进行。

3、在低功耗状态(或者配置过网络的状态),程序调用single_dev_reset_factory进入配网模式后10s内重启,还会进入配网模式,若上电超过10s到3min之间重启,就会退出配网模式,返回之前的状态(低功耗或者已配置过网络的状态)。若上电超过3min则直接退出配网模式,返回之前的状态,此时重启后也是之前的状态(低功耗或者已配置过网络的状态)。

4、若是连接上服务器后,用手机app移除的方式来进入配网模式,在10s内重启,还会进入配网模式。若上电10s到3min之间重启,则进入低功耗模式;若上电超过3min则直接退出配网模式,返回低功耗模式,此时重启后也是低功耗模式。



0

阅读 收藏 喜欢 打印举报/Report
前一篇:链接
后一篇:乐鑫RTOS_SDK
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有