使用未适配IoT SDK的平台开发智能灯
更新时间:2018-10-19 11:29:34
如您不使用已经过AliOS Things物联网操作系统认证的芯片模组或者已适配过IoT SDK的模组,您也可以下载IoT SDK独立进行开发,需要额外增加一步硬件抽象层代码适配过程,相对会增加一些开发时间。
1. SDK下载
- 进入产品开发后台
- 点击设备开发,点击"下载SDK"
2. 交叉编译到适配硬件平台
在
configs/
目录下新建一个对应的配置文件,命名规则为config.XXX.YYY
,其中XXX
表示目标芯片环境,YYY
为云端环境。例如config.armcc.daily
,表示硬件环境为armcc
,连接日常环境的服务器编辑配置文件,设置编译选项和工具链,及跳过编译的目录,可参考
configs/
目录下配置文件。例如连接线上环境,交叉编译器为armcc
, 交叉连接器为armar
在配置文件中, 至少要指定交叉编译器
OVERRIDE_CC
, 静态库压缩器OVERRIDE_AR
, 以及编译选项CONFIG_ENV_CFLAGS
等CONFIG_ENV_CFLAGS += \ -O1 OVERRIDE_CC := armcc OVERRIDE_AR := armar
构建系统环境变量
变量 | 说明 |
---|---|
CONFIG_ENV_CFLAGS | 指定全局的CFLAGS编译选项, 传给compiler, 例如CONFIG_ENV_CFLAGS += -DDEBUG |
CONFIG_ENV_LDFLAGS | 指定全局的LDFLAGS链接选项, 传给linker, 例如CONFIG_ENV_LDFLAGS += -lcrypto |
CROSS_PREFIX | 指定交叉编译工具链共有的前缀, 例如CROSS_PREFIX := arm-none-eabi-, 会导致构建系统使用arm-none-eabi-gcc和arm-none-eabi-ar, 以及arm-none-eabi-strip等 |
OVERRIDE_CC | 当交叉工具链没有共有的前缀或者前缀不符合prefix+gcc |
OVERRIDE_AR | 当交叉工具链没有共有的前缀或者前缀不符合prefix+ar |
OVERRIDE_STRIP | 当交叉工具链没有共有的前缀或者前缀不符合prefix+strip |
3. 适配您的硬件平台抽象层(HAL)代码
- sdk-encap/iot_import.h
序号
|
函数名
|
说明
|
01
|
HAL_ThreadCreate
|
按照指定入参创建一个线程
|
02
|
HAL_ThreadDetach
|
设置指定的线程为
Detach 状态
|
03
|
HAL_ThreadDelete
|
杀死指定的线程
|
04
|
HAL_SemaphoreCreate
|
创建一个计数信号量
|
05
|
HAL_SemaphoreDestroy
|
销毁一个计数信号量, 回收其所占用的资源
|
06
|
HAL_SemaphoreWait
|
在指定的计数信号量上做自减操作并等待
|
07
|
HAL_SemaphorePost
|
在指定的计数信号量上做自增操作, 解除其它线程的等待
|
08
|
HAL_MutexCreate
|
创建一个互斥锁
|
09
|
HAL_MutexDestroy
|
销毁一个互斥锁, 释放其所占用的资源
|
10
|
HAL_MutexLock
|
给互斥锁加锁, 开始临界代码段
|
11
|
HAL_MutexUnlock
|
给互斥锁解锁, 结束临界代码段
|
12
|
HAL_Malloc
|
按照入参size申请一片可用内存, 并返回内存的首地址
|
13
|
HAL_Free
|
按照入参ptr释放一片内存
|
14
|
HAL_UptimeMs
|
获取自加电以来到当前时间, 已经过去的毫秒数
|
15
|
HAL_SleepMs
|
使调用线程睡眠入参ms指定的毫秒数
|
16
|
HAL_Srandom
|
设置一个伪随机数种子, 影响HAL_Random()的返回值
|
17
|
HAL_Random
|
获取指定范围内的一个随机无符号整数
|
18
|
HAL_Printf
|
按照指定格式将字符串打印显示到终端
|
19
|
HAL_Snprintf
|
按照指定格式将一系列变量输出到指定的字符串, 变参是变量的形式
|
20
|
HAL_Vsnprintf
|
按照指定格式将一系列变量输出到指定的字符串, 变参是
va_list 的形式
|
21
|
HAL_TCP_Establish
|
按照指定的目标主机名和目标端口创建一个TCP连接, 并返回该连接的句柄
|
22
|
HAL_TCP_Destroy
|
断开TCP连接并销毁句柄, 回收资源
|
23
|
HAL_TCP_Write
|
在指定的TCP连接上发送指定缓冲区的指定长度, 阻塞时间不超过指定时长, 且指定长度若发送完需提前返回
|
24
|
HAL_TCP_Read
|
从指定的TCP连接上接收指定长度到指定缓冲区, 阻塞时间不超过指定时长, 且指定长度若接收完需提前返回
|
25
|
HAL_SSL_Establish
|
向指定的目标地址和端口建立一个TCP+SSL连接, 使用参数中指定的CA证书, 并返回SSL连接的句柄
|
26
|
HAL_SSL_Destroy
|
断开指定的TCP+SSL连接, 并销毁句柄, 回收资源
|
27
|
HAL_SSL_Write
|
在指定的SSL连接上发送指定缓冲区的指定长度, 阻塞时间不超过指定时长, 且指定长度若发送完需提前返回
|
28
|
HAL_SSL_Read
|
从指定的TCP+SSL连接上接收指定长度到指定缓冲区, 阻塞时间不超过指定时长, 且指定长度若接收完需提前返回
|
29
|
HAL_UDP_create
|
创建一个本地的UDP socket, 但并不发起任何网络交互
|
30
|
HAL_UDP_connect
|
设置UDP socket的目的地址和目的端口
|
31
|
HAL_UDP_sendto
|
在指定的UDP socket上发送指定缓冲区的指定长度, 阻塞时间不超过指定时长, 且指定长度若发送完需提前返回
|
32
|
HAL_UDP_send
|
在指定的UDP socket上发送指定缓冲区的指定长度, 阻塞时间不超过指定时长, 且指定长度若发送完需提前返回
|
33
|
HAL_UDP_recvfrom
|
从指定的UDP句柄接收指定长度数据到缓冲区, 阻塞时间不超过指定时长, 且指定长度若接收完需提前返回, 源地址保存在出参中
|
34
|
HAL_UDP_recv
|
从指定的UDP句柄接收指定长度数据到缓冲区, 阻塞时间不超过指定时长, 且指定长度若接收完需提前返回, 源地址保存在出参中调用该接口之前需要调用HAL_UDP_connect设置好目的地址和端口
|
35
|
HAL_UDP_joinmulticast
|
在指定的UDP socket上发送加入组播组的请求
|
36
|
HAL_UDP_bindtodevice
|
绑定UDP socket到指定接口,只接收来自该接口的数据包
|
37
|
HAL_UDP_close
|
销毁指定的UDP socket, 回收资源
|
38
|
HAL_Firmware_Persistence_Start
|
初始化固件更新服务
|
39
|
HAL_Firmware_Persistence_Write
|
将固件写入flash
|
40
|
HAL_Firmware_Persistence_Stop
|
停止固件更新服务
|
41
|
HAL_Sys_reboot
|
系统重启
|
- sdk-encap/imports/iot_import_product.h
序号
|
函数名
|
说明
|
01
|
HAL_GetPartnerID
|
获取设备的
Partner ID , 仅用于紧密合作伙伴
|
02
|
HAL_GetModuleID
|
获取设备的
Module ID , 仅用于紧密合作伙伴
|
03
|
HAL_GetProductKey
|
获取设备的
ProductKey , 用于标识设备的品类, 三元组之一
|
04
|
HAL_GetDeviceName
|
获取设备的
DeviceName , 用于标识设备单品的名字, 三元组之一
|
05
|
HAL_GetDeviceSecret
|
获取设备的
DeviceSecret , 用于标识设备单品的密钥, 三元组之一
|
06
|
HAL_GetDeviceID
|
获取设备的
DeviceID , 用于标识设备单品的ID
|
07
|
HAL_GetFirmwareVesion
|
获取设备的固件版本字符串
|
08
|
HAL_GetChipID
|
获取唯一的芯片ID字符串
|
- sdk-encap/imports/iot_import_awss.h
序号 | 函数名 | 说明 |
---|---|---|
01 | HAL_Config_Read | 在设备的持久化外部存储器比如Flash上, 从配置区域起始位置读取数据到指定的内存缓冲区中 |
02 | HAL_Config_Write | 在设备的持久化外部存储器比如Flash上, 把指定的内存缓冲区向配置区域起始位置写入 |
03 | HAL_Wifi_Get_Rssi_Dbm | 获取Wi-Fi的接受信号强度(RSSI) |
04 | HAL_Wifi_Low_Power | 使WiFi模组进入省电模式, 并持续一段时间 |
05 | HAL_RF433_Get_Rssi_Dbm | 获取RF433的接收信号强度(RSSI) |
06 | HAL_Wifi_Get_Mac | 获取Wi-Fi网口的MAC地址, 格式应当是"XX:XX:XX:XX:XX:XX" |
07 | HAL_Wifi_Get_IP | 获取Wi-Fi网口的IP地址, 点分十进制格式保存在字符串数组出参, 二进制格式则作为返回值, 并以网络字节序(大端)表达 |
08 | HAL_Wifi_Get_Os_Version | 获取Wi-Fi模块上的操作系统版本字符串 |
09 | HAL_Awss_Get_Timeout_Interval_Ms | 获取配网服务(AWSS )的超时时间长度, 单位是毫秒 |
10 | HAL_Awss_Get_Connect_Default_Ssid_Timeout_Interval_Ms | 获取配网服务(AWSS )超时时长到达之后, 去连接默认SSID时的超时时长, 单位是毫秒 |
11 | HAL_Awss_Get_Channelscan_Interval_Ms | 获取在每个信道(channel )上扫描的时间长度, 单位是毫秒 |
12 | awss_recv_80211_frame_cb_t | 802.11帧的处理函数, 可以将802.11 Frame传递给这个函数 |
13 | HAL_Awss_Open_Monitor | 设置Wi-Fi网卡工作在监听(Monitor)模式, 并在收到802.11帧的时候调用被传入的回调函数 |
14 | HAL_Awss_Close_Monitor | 设置Wi-Fi网卡离开监听(Monitor)模式, 并开始以站点(Station)模式工作 |
15 | HAL_Awss_Switch_Channel | 设置Wi-Fi网卡切换到指定的信道(channel)上 |
16 | HAL_Awss_Connect_Ap | 要求Wi-Fi网卡连接指定热点(Access Point)的函数 |
17 | HAL_Wifi_Send_80211_Raw_Frame | 在当前信道(channel)上以基本数据速率(1Mbps)发送裸的802.11帧(raw 802.11 frame) |
18 | awss_wifi_mgmt_frame_cb_t | 管理帧的处理回调函数 |
19 | HAL_Wifi_Enable_Mgmt_Frame_Filter | 在站点(Station)模式下使能或禁用对管理帧的过滤 |
20 | awss_wifi_scan_result_cb_t | handle one piece of AP information from wifi scan result |
21 | HAL_Wifi_Scan | 启动一次Wi-Fi的空中扫描(Scan) |
22 | HAL_Wifi_Get_Ap_Info | 获取所连接的热点(Access Point)的信息 |
23 | HAL_Aes128_Init | 初始化AES加密的结构体 |
24 | HAL_Aes128_Destroy | 销毁AES加密的结构体 |
25 | HAL_Aes128_Cbc_Encrypt | 以AES-CBC-128 方式, 根据HAL\_Aes128\_IniHAL\_Aes128\_Cbc\_Decryptt() 时传入的密钥加密指定的明文 |
26 | HAL_Aes128_Cbc_Decrypt | 以AES-CBC-128 方式, 根据HAL\_Aes128\_Init() 时传入的密钥解密指定的密文 |
27 | HAL_Aes128_Cfb_Encrypt | 以AES-CFB-128 方式, 根据HAL\_Aes128\_Init() 时传入的密钥加密指定的明文 |
28 | HAL_Aes128_Cfb_Decrypt | 以AES-CFB-128 方式, 根据HAL\_Aes128\_Init() 时传入的密钥解密指定的密文 |
29 | HAL_Awss_Get_Encrypt_Type | 获取smartconfig 服务的安全等级 |
3. 进入产品开发
当您完成步骤2适配完成HAL并验证通过后,您可以开始进入产品开发。
流程可以参考 “基于已适配IoT SDK的芯片开发智能灯”