使用未适配IoT SDK的平台开发智能灯

更新时间:2018-10-19 11:29:34

如您不使用已经过AliOS Things物联网操作系统认证的芯片模组或者已适配过IoT SDK的模组,您也可以下载IoT SDK独立进行开发,需要额外增加一步硬件抽象层代码适配过程,相对会增加一些开发时间。

1. SDK下载

  1. 进入产品开发后台
  2. 点击设备开发,点击"下载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的芯片开发智能灯”

results matching ""

    No results matching ""