213 lines
6.2 KiB
C
213 lines
6.2 KiB
C
|
#ifndef __SDK_H
|
|||
|
#define __SDK_H
|
|||
|
|
|||
|
/*
|
|||
|
* 0. implement all callback's of this SDK
|
|||
|
* 1. read wifi probe frame from driver
|
|||
|
* 2. feed wifi probe frame to sdk_pkt_process
|
|||
|
* 3. this sdk depends on no thirdparty libraries, and there is no internet connection with net.
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
typedef unsigned char uint8;
|
|||
|
typedef unsigned short int uint16;
|
|||
|
typedef unsigned int uint32;
|
|||
|
|
|||
|
typedef char int8;
|
|||
|
typedef short int int16;
|
|||
|
typedef int int32;
|
|||
|
|
|||
|
#define SDK_SUCCESS (0)
|
|||
|
#define SDK_FAIL (1)
|
|||
|
#define SDK_NULL (0)
|
|||
|
#define OUI_LEN (3)
|
|||
|
#define OUI_TYPE (0)
|
|||
|
#define OUI_TYPE_LEN (1)
|
|||
|
#define MAC_LEN (6)
|
|||
|
#define SSID_MAX_LEN (32)
|
|||
|
#define PASSWORD_MAX_LEN (32)
|
|||
|
#define SDK_SHAREDKEY_LEN (32)
|
|||
|
#define SDK_FRAME_MAX_LEN (1460)
|
|||
|
#define FASTCON_MASTER_ID_LEN (4)
|
|||
|
|
|||
|
#define SDK_PACKED __attribute__((packed))
|
|||
|
|
|||
|
|
|||
|
typedef void* (*sdk_memset_t) (
|
|||
|
void* ptr,
|
|||
|
int32 value,
|
|||
|
uint32 num);
|
|||
|
typedef void* (*sdk_memcpy_t) (
|
|||
|
void* dst,
|
|||
|
const void* src,
|
|||
|
uint32 num);
|
|||
|
typedef int32 (*sdk_memcmp_t) (
|
|||
|
const void* ptr1,
|
|||
|
const void* ptr2,
|
|||
|
uint32 num);
|
|||
|
typedef int32 (*sdk_printf_t) (
|
|||
|
const char* format,
|
|||
|
...);
|
|||
|
|
|||
|
typedef struct sdk_device_info_t {
|
|||
|
uint32 vendor_id;
|
|||
|
uint32 product_id;
|
|||
|
uint8 mac[MAC_LEN];
|
|||
|
uint8 * device_info;
|
|||
|
uint16 device_info_len;
|
|||
|
uint8 * device_id;
|
|||
|
uint16 device_id_len;
|
|||
|
}sdk_product_info_t;
|
|||
|
|
|||
|
//发现设备
|
|||
|
typedef int32 (*sdk_found_device_t) (sdk_product_info_t *product_info);
|
|||
|
//对应2.1 云端身份校验接口请求
|
|||
|
typedef int32 (*sdk_challenge_post_t)(
|
|||
|
sdk_product_info_t *product_info,
|
|||
|
uint8 * challenge,
|
|||
|
uint16 challenge_len);
|
|||
|
//对应2.2 设备身份声明接口请求
|
|||
|
typedef int32 (*sdk_signature_post_t)(
|
|||
|
sdk_product_info_t *product_info,
|
|||
|
uint8 * signature,
|
|||
|
uint16 signature_len);
|
|||
|
//sdk将设备控制token传给上层
|
|||
|
typedef int32 (*sdk_device_token_post_t)(
|
|||
|
sdk_product_info_t *product_info,
|
|||
|
uint8 * token,
|
|||
|
uint16 token_len);
|
|||
|
//上报配置结果
|
|||
|
//目前只支持失败结果上报。
|
|||
|
//成功的结果是由云端推送上线通知
|
|||
|
//result 0:成功 -1:失败
|
|||
|
typedef int32 (*sdk_config_result_post_t) (
|
|||
|
sdk_product_info_t *product_info,
|
|||
|
int8 result);
|
|||
|
//发送802.11原始报文接口
|
|||
|
typedef int32 (*sdk_raw_pkt_send_t)(
|
|||
|
uint8 * frame,
|
|||
|
uint16 frame_len);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
typedef struct {
|
|||
|
sdk_memset_t memset;
|
|||
|
sdk_memcpy_t memcpy;
|
|||
|
sdk_memcmp_t memcmp;
|
|||
|
sdk_printf_t printf;
|
|||
|
|
|||
|
sdk_found_device_t found_device;
|
|||
|
sdk_challenge_post_t challenge_post;
|
|||
|
sdk_signature_post_t signature_post;
|
|||
|
sdk_device_token_post_t device_token_post;
|
|||
|
sdk_config_result_post_t config_result_post;
|
|||
|
|
|||
|
sdk_raw_pkt_send_t send_raw_pkt;
|
|||
|
|
|||
|
} sdk_config_t;
|
|||
|
|
|||
|
typedef struct {
|
|||
|
|
|||
|
//gateway信息
|
|||
|
//包括当前路由器信道,gateway mac,bssid
|
|||
|
uint8 channel; //cur channel
|
|||
|
|
|||
|
//若mac地址为00-11-22-33-44-55,则device_mac[] = {0x00,0x11,0x22,0x33,0x44,0x55};
|
|||
|
uint8 device_mac[MAC_LEN];
|
|||
|
//AP的mac地址,格式等同device_mac
|
|||
|
uint8 bssid[MAC_LEN];
|
|||
|
|
|||
|
//由dnakit后台分配,用于区分不同平台,固定4个字节
|
|||
|
uint8 fastcon_master_id[FASTCON_MASTER_ID_LEN];
|
|||
|
|
|||
|
//0:probe req,1:probe rsp,2:action
|
|||
|
//报文选择,根据gateway 能力自行设置
|
|||
|
uint8 send_wlan_type;
|
|||
|
//回调接口注册
|
|||
|
sdk_config_t sdk_config;
|
|||
|
} SDK_PACKED sdk_user_init_t;
|
|||
|
|
|||
|
typedef enum {
|
|||
|
SDK_STATE_PROBE_DEVICE,
|
|||
|
SDK_STATE_LOCK_CHANNEL,
|
|||
|
SDK_STATE_CONFIG,
|
|||
|
SDK_STATE_CONNECTING,
|
|||
|
SDK_STATE_DONE, //Finish
|
|||
|
SDK_STATE_FAIL,
|
|||
|
} sdk_state_e;
|
|||
|
|
|||
|
/**
|
|||
|
* @brief 打印sdk编译时间
|
|||
|
* @return 0 打印成功
|
|||
|
* SDK_E_INIT_FAIL sdk未初始化
|
|||
|
*/
|
|||
|
extern int32 sdk_version(void);
|
|||
|
/**
|
|||
|
* @brief 初始化sdk
|
|||
|
* @param init
|
|||
|
* @return 0 初始化成功
|
|||
|
* SDK_E_INIT_FAIL
|
|||
|
*/
|
|||
|
extern int32 sdk_init(sdk_user_init_t *init);
|
|||
|
/**
|
|||
|
* @brief 处理接收的802.11报文
|
|||
|
* @param frame 802.11标准报文格式
|
|||
|
* @param frame_len
|
|||
|
* @return sdk_state_e
|
|||
|
SDK_E_INIT_FAIL
|
|||
|
*/
|
|||
|
extern int32 sdk_pkt_process(uint8 *frame, int16 frame_len);
|
|||
|
/**
|
|||
|
* @brief 发送token bind成功报文
|
|||
|
* @return 0 成功
|
|||
|
* SDK_E_INIT_FAIL
|
|||
|
* SDK_E_STATE
|
|||
|
*/
|
|||
|
extern int32 sdk_device_token_bind_success(void);
|
|||
|
/**
|
|||
|
* @brief ssid和password信息发送
|
|||
|
* @param sharedkey 二进制数组,云端返回的是十六进制字符串,需要进行转换
|
|||
|
* @param ssid
|
|||
|
* @param ssid_len
|
|||
|
* @param password
|
|||
|
* @param password_len
|
|||
|
* @return 0 成功
|
|||
|
* SDK_E_INIT_FAIL
|
|||
|
* SDK_E_STATE
|
|||
|
* @example 路由器ssid为"ssid",password为"password"
|
|||
|
* 代码如下:
|
|||
|
* @code
|
|||
|
* uint8 ssid[] = "ssid";
|
|||
|
* uint8 password[] = "password";
|
|||
|
* sdk_wlan_params_set(sharedkey,ssid,strlen(ssid),password,strlen(password));
|
|||
|
* @endcode
|
|||
|
*/
|
|||
|
extern int32 sdk_wlan_params_set(uint8 sharedkey[SDK_SHAREDKEY_LEN],uint8 *ssid,uint16 ssid_len,uint8 *password,uint16 password_len);
|
|||
|
/**
|
|||
|
* @brief challenge和signature信息发送
|
|||
|
* @param challenge 二进制数组,云端返回的是十六进制字符串,需要进行转换
|
|||
|
* @param challenge_len
|
|||
|
* @param signature 二进制数组,云端返回的是十六进制字符串,需要进行转换
|
|||
|
* @param signature_len
|
|||
|
* @return 0 成功
|
|||
|
* SDK_E_INIT_FAIL
|
|||
|
* SDK_E_STATE
|
|||
|
*/
|
|||
|
extern int32 sdk_challenge_and_signature_set(uint8 *challenge,uint16 challenge_len, uint8 *signature, uint16 signature_len);
|
|||
|
/**
|
|||
|
* @brief 用户确认开始配网
|
|||
|
* @return 0 成功
|
|||
|
* SDK_E_INIT_FAIL
|
|||
|
* SDK_E_STATE
|
|||
|
*/
|
|||
|
extern int32 sdk_user_auth_to_start_config(void);
|
|||
|
/**
|
|||
|
* @brief 清除sdk状态
|
|||
|
* @return 0 成功
|
|||
|
* SDK_E_INIT_FAIL
|
|||
|
*/
|
|||
|
extern int32 sdk_deinit(void);
|
|||
|
|
|||
|
#endif
|