欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: EZ-LINK平臺(tái)開(kāi)發(fā)手冊(cè)下載 [打印本頁(yè)]

作者: 51hei嗚嗚    時(shí)間: 2018-9-28 03:32
標(biāo)題: EZ-LINK平臺(tái)開(kāi)發(fā)手冊(cè)下載
  Draft lite V1.0
EZ-LINK平臺(tái)開(kāi)發(fā)手冊(cè)

1              平臺(tái)簡(jiǎn)介

1.1              PCB設(shè)計(jì)
1.2              SDK架構(gòu)
1.3              源碼目錄
2              開(kāi)發(fā)環(huán)境

2.1              配置文件
2.2              庫(kù)文件
2.3              IDE配置
2.4              編程框架
2.5              燒錄Flash
2.6              調(diào)試
3              IOT接口

3.1              系統(tǒng)服務(wù)
3.2              硬件服務(wù)
3.3              WIFI
3.4              Bluetooth
3.5              GSM
3.6              GPS

縮略詞:
BCPU     
Baseband CPU
BTCPU        
Bluetooth CPU
XCPU     
System CPU
BSS
Basic Service Set
BSSID
BSS ID
COS      
Common Operating System

1       平臺(tái)簡(jiǎn)介               

EZ-Link是RDA物聯(lián)網(wǎng)應(yīng)用集成開(kāi)發(fā)平臺(tái),該平臺(tái)包括SDK開(kāi)發(fā)包,Eclipse集成開(kāi)發(fā)環(huán)境,調(diào)試工具和燒錄工具。SDK開(kāi)發(fā)包提供了在EZ-Link平臺(tái)進(jìn)行物聯(lián)網(wǎng)開(kāi)發(fā)必需的模塊和標(biāo)準(zhǔn)API接口,同時(shí)通過(guò)對(duì)硬件層抽象,提供對(duì)RDA物聯(lián)網(wǎng)系列芯片的全面支持。

RDA物聯(lián)網(wǎng)系列芯片即有獨(dú)立藍(lán)牙、WIFI芯片,也有在SoC上集成Wi-Fi、Bluetooth和GSM功能的組合芯片,并提供包括UART/ADC/I2S在內(nèi)的硬件接口。

RDA特有的共存技術(shù)使用戶(hù)可以獨(dú)立或并行使用Wi-Fi及藍(lán)牙功能。

本文闡述EZ-Link平臺(tái)SDK的主要功能和使用方法。本文所描述SDK為精簡(jiǎn)版,該版本針對(duì)物聯(lián)網(wǎng)設(shè)備開(kāi)發(fā)周期短、市場(chǎng)反應(yīng)敏感等特點(diǎn),對(duì)EZ-Link SDK進(jìn)行了一系列優(yōu)化升級(jí),以幫助客戶(hù)提高開(kāi)發(fā)效率。用戶(hù)僅需要了解必要的接口,然后通過(guò)SDK提供的豐富示例代碼,簡(jiǎn)單修改甚至零修改就可以實(shí)現(xiàn)一款完整的物聯(lián)網(wǎng)應(yīng)用。

1.1     PCB設(shè)計(jì)
請(qǐng)參考各芯片數(shù)據(jù)手冊(cè)。

1.2     SDK架構(gòu)
EZ-Link SDK具有模塊化、可擴(kuò)展的架構(gòu)和清晰的層次結(jié)構(gòu),靈活的SDK架構(gòu)為產(chǎn)品定制提供軟件支撐,用戶(hù)可以根據(jù)不同市場(chǎng)需求和變化,進(jìn)行快速調(diào)整。

EZ-Link SDK的架構(gòu)如下,每一部分將會(huì)在下面具體描述。

除了APP應(yīng)用層需要客戶(hù)完成,其余模塊將由RDA統(tǒng)一打包發(fā)布給客戶(hù)。
圖1-1 EZ-Link SDK架構(gòu)

硬件層

最底層為硬件層,包括芯片和外設(shè)硬件。

硬件抽象層

第二層為硬件抽象層,該層隱藏底層硬件細(xì)節(jié),為上層驅(qū)動(dòng)提供統(tǒng)一接口,為實(shí)現(xiàn)不同芯片間平滑切換提供軟件支持。

驅(qū)動(dòng)和操作系統(tǒng)層

第三層為驅(qū)動(dòng)和操作系統(tǒng)層。RDA在RTOS之上又提供了一層瘦COS層,該COS層封裝了核心操作系統(tǒng)接口如任務(wù)調(diào)度,并發(fā)處理等,為服務(wù)層提供統(tǒng)一接口。COS層為用戶(hù)提供兩方面便利:用戶(hù)可以隨心所欲選擇自己偏好的操作系統(tǒng);用戶(hù)可以移植已有的應(yīng)用程序,復(fù)用代碼,提高代碼利用效率,加速開(kāi)發(fā)進(jìn)度。

服務(wù)層

第四層為服務(wù)層,服務(wù)層應(yīng)用程序類(lèi)似windows服務(wù)程序或linux deamon程序,這些程序長(zhǎng)時(shí)間執(zhí)行,為上層用戶(hù)和應(yīng)用提供特定的服務(wù),如http,GPS服務(wù)等。上層用戶(hù)可以通過(guò)標(biāo)準(zhǔn)接口使用服務(wù)層程序提供的服務(wù),如多媒體應(yīng)用程序可以通過(guò)GUI接口顯示播放界面,同時(shí)可以通過(guò)media服務(wù)進(jìn)行音頻數(shù)據(jù)解碼和播放。服務(wù)層應(yīng)用程序通常為操作系統(tǒng)的任務(wù)(task),該任務(wù)直接調(diào)用COS接口以降低與RTOS的耦合。
服務(wù)層應(yīng)用程序十分豐富,可以滿(mǎn)足當(dāng)前主流的物聯(lián)網(wǎng)應(yīng)用。良好的可擴(kuò)展架構(gòu)使用戶(hù)可以添加更多自有服務(wù)程序或第三方應(yīng)用程序,滿(mǎn)足客戶(hù)特殊的產(chǎn)品需求。
該層同時(shí)提供精簡(jiǎn)的IOT API,通過(guò)精簡(jiǎn)IOT API,用戶(hù)可以快速開(kāi)發(fā)一款簡(jiǎn)單的物聯(lián)網(wǎng)應(yīng)用,如智能水杯等。

應(yīng)用程序?qū)?/strong>

最高層為應(yīng)用程序?qū)樱脩?hù)通常工作在本層。應(yīng)用程序?qū)油ㄟ^(guò)調(diào)用服務(wù)層接口進(jìn)行軟件開(kāi)發(fā)。

EZ-Link各層之間以松散的方式耦合,各層提供的接口和實(shí)現(xiàn)分離,層內(nèi)關(guān)注實(shí)現(xiàn),層間關(guān)注接口。除此之外,EZ-Link SDK同樣遵循模塊化設(shè)計(jì)原則,方便用戶(hù)對(duì)產(chǎn)品特性進(jìn)行裁剪以適應(yīng)客戶(hù)需求,發(fā)揮用戶(hù)平臺(tái)、硬件資源的最大效率:

芯片模塊化
RDA 芯片為本SDK設(shè)計(jì)參照的核心,芯片類(lèi)型決定系統(tǒng)的CPU硬件架構(gòu)、IO接口、總線等特性,進(jìn)而影響服務(wù)層提供的服務(wù)、產(chǎn)品特性和源碼編譯等。芯片模塊化使用戶(hù)在無(wú)需修改上層軟件的情況下,根據(jù)需求選擇適當(dāng)?shù)男酒?/div>
操作系統(tǒng)模塊化
目前市面上嵌入式實(shí)時(shí)操作系統(tǒng)種類(lèi)繁多,用戶(hù)可以根據(jù)自己的偏好和使用習(xí)慣選擇操作系統(tǒng)而不影響其他應(yīng)用
驅(qū)動(dòng)模塊化
用戶(hù)通常有更換外設(shè)的需求,驅(qū)動(dòng)模塊化正是滿(mǎn)足該項(xiàng)需求
服務(wù)模塊化
服務(wù)層模塊化,有效減少各個(gè)子模塊之間耦合,方便用戶(hù)刪減與特定產(chǎn)品無(wú)關(guān)服務(wù),添加新服務(wù)


特性

本SDK支持多種RDA芯片。豐富的IO接口方便連接各種外設(shè)
硬件抽象層為上層驅(qū)動(dòng)提供統(tǒng)一接口,方便驅(qū)動(dòng)程序移植
驅(qū)動(dòng)模塊包括:GPIO,、UART、flash、LCD等
強(qiáng)大的實(shí)時(shí)操作系統(tǒng):
提供對(duì)RTOS封裝,可針對(duì)不同RTOS進(jìn)行適配,使服務(wù)層和應(yīng)用層程序擺脫對(duì)操作系統(tǒng)依賴(lài)
EZ-Link將系統(tǒng)功能抽象成模塊化的服務(wù),并提供標(biāo)準(zhǔn)的服務(wù)接口,極大簡(jiǎn)化編程過(guò)程。針對(duì)物聯(lián)網(wǎng)特點(diǎn),EZ-Link提供豐富的網(wǎng)絡(luò)協(xié)議,方便不同設(shè)備商之間的智能設(shè)備互聯(lián)互通:
簡(jiǎn)易IOT接口,簡(jiǎn)化編程,快速生成IOT應(yīng)用,實(shí)現(xiàn)簡(jiǎn)單IOT產(chǎn)品
相對(duì)簡(jiǎn)單應(yīng)用程序?qū)樱瑢?shí)現(xiàn)更復(fù)雜的物聯(lián)網(wǎng)應(yīng)用

1.3     源碼目錄
SDK源碼目錄結(jié)構(gòu)如下,各個(gè)目錄將會(huì)在下面詳細(xì)描述。

SDK源碼目錄結(jié)構(gòu)
圖1-2  EZ-Link SDK源碼目錄結(jié)構(gòu)
圖中各目錄模塊說(shuō)明如下:

目錄
說(shuō)明
apps
客戶(hù)應(yīng)用程序和RDA示例代碼
platform
RDA IOT平臺(tái)代碼,其下包括:chip、edrv、 rtos、 service等子目錄,子目錄會(huì)在下面依次說(shuō)明
chip
平臺(tái)芯片相關(guān)代碼,包括:boot loader,hal層,寄存器地址定義和rom代碼。通常用戶(hù)無(wú)需修改rom代碼
edrv
包括外設(shè)驅(qū)動(dòng)和芯片內(nèi)驅(qū)動(dòng),外設(shè)驅(qū)動(dòng)包括:LCD,F(xiàn)M等;芯片內(nèi)部驅(qū)動(dòng)為內(nèi)部總線驅(qū)動(dòng),如GPIO,UART等
rtos
實(shí)時(shí)操作系統(tǒng)層,該目錄包括原生操作系統(tǒng)
service
base
基礎(chǔ)服務(wù),包括RTOS操作等
net
網(wǎng)絡(luò)服務(wù),提供http,lwna,tcp/ip操作接口
bt
藍(lán)牙服務(wù)
camera
提供相機(jī)操作接口
gps
提供GPS定位服務(wù)
gui
用戶(hù)界面操作接口
gsm
GSM/GPRS操作服務(wù)接口
media
音頻、視頻服務(wù)接口等
iotapi
簡(jiǎn)單iot應(yīng)用程序編程接口
target
用戶(hù)產(chǎn)品配置文件
build
影子目錄,該目錄在編譯時(shí)由編譯腳本生成,用來(lái)存放編譯過(guò)程中生成的臨時(shí)文件
lib
模塊靜態(tài)連接庫(kù)
hex
Lod文件、Ramrun文件和其他GDB相關(guān)asm及map文件
表1-1 EZ-LINK SDK目錄結(jié)構(gòu)描述

2       開(kāi)發(fā)環(huán)境
EZ-LINK選用windows操作系統(tǒng)作主機(jī)(HOST),在windows系統(tǒng)中搭建交叉編譯環(huán)境。
2.1     配置文件
模塊化的設(shè)計(jì)為用戶(hù)定制產(chǎn)品提供了便利。通常定制產(chǎn)品通過(guò)修改配置文件來(lái)完成。配置文件在target目錄,EZ-LINK配置文件主要涉及以下幾個(gè):

配置文件
說(shuō)明
target.def
產(chǎn)品配置,target表示產(chǎn)品、開(kāi)發(fā)板
target_common.def
對(duì)target.def信息的集中處理,通常不需要用戶(hù)修改
memd.def
Flash屬性定義
tgt_app_cfg.h
用戶(hù)功能宏頭文件,控制用戶(hù)APP特性
文件存在./target/include
tgt_board_cfg.h
硬件線路板配置
文件存在./target/include
tgt_calib_cfg.h
校準(zhǔn)配置
文件存在./target/include
表2-1 配置文件

產(chǎn)品定義配置文件target.def包含下面一些選項(xiàng),各選項(xiàng)精確的函數(shù)請(qǐng)參考配置文件說(shuō)明注釋?zhuān)?/div>
選項(xiàng)
說(shuō)明
芯片描述信息
定義芯片類(lèi)型和封裝
觸屏驅(qū)動(dòng)
定義觸屏設(shè)置
FM驅(qū)動(dòng)
定義FM總線和時(shí)鐘管腳
FLASH驅(qū)動(dòng)
定義FLASH類(lèi)型、時(shí)鐘及ADMUX
LCD驅(qū)動(dòng)
定義LCD總線
CAMERA驅(qū)動(dòng)
是否支持CAMERA及各種特性
藍(lán)牙驅(qū)動(dòng)
定義藍(lán)牙模塊類(lèi)型,32K時(shí)鐘管腳,UART透?jìng)?/div>
T卡驅(qū)動(dòng)
定義T卡接口類(lèi)型
音頻驅(qū)動(dòng)
定義音頻設(shè)置
WIFI驅(qū)動(dòng)
定義WIFI 32K時(shí)鐘管腳,TCP/IP支持,SDIO,GPIO,SDMMC接口支持,DLNA接口支持,WIFI音箱支持
32K時(shí)鐘配置
配置時(shí)鐘
用戶(hù)項(xiàng)目定義
APP_BASEDIR
客戶(hù)APP目錄
CT_PROJECT
定義資源類(lèi)型
AUD_MAX_LEVEL
定義音量
RESOURCE_SUPPORT
是否包含資源
AT_SUPPORT
是否支持AT命令
BT_SPP
是否支持藍(lán)牙SPP
USB支持類(lèi)型
是否支持USB音箱;USB HOST
編譯優(yōu)化選項(xiàng)
CT_OPT:優(yōu)化編譯空間
WITHOUT_WERROR:告警是否停止編譯
調(diào)試選項(xiàng)
TRACE控制選項(xiàng);
表2-2 產(chǎn)品配置文件選項(xiàng)
2.2     庫(kù)文件
EZ-Link開(kāi)發(fā)平臺(tái)庫(kù)文件統(tǒng)一放置在./platform/lib/chip_name目錄。用戶(hù)開(kāi)發(fā)程序時(shí)引用的頭文件放置在各模塊./inlcude目錄。

庫(kù)文件分為release和debug兩個(gè)版本,通過(guò)文件名區(qū)分。debug版本包含調(diào)試信息,并可以使用GDB工具進(jìn)行單步調(diào)試,調(diào)試信息可以通過(guò)串口打印到控制臺(tái);release版本不包含調(diào)試信息。正式發(fā)布的產(chǎn)品bin文件應(yīng)當(dāng)鏈接release版本庫(kù)以減少bin文件體積,提高運(yùn)行速度。

2.3     IDE配置
EZ-LINK SDK選擇Eclipse作為集成開(kāi)發(fā)環(huán)境,SDK編譯工具鏈統(tǒng)一集成在Eclipse中。

Eclipse和JRE(Jave Run Environment)選用32位版本,可以兼容64和32位操作系統(tǒng)

安裝Eclipse


Eclipse成功運(yùn)行說(shuō)明集成開(kāi)發(fā)環(huán)境工作正常,下一步通過(guò)Eclipse配置編譯工具,導(dǎo)入SDK庫(kù)文件和源碼。

創(chuàng)建工程

打開(kāi)Eclipse, 選擇菜單“File/New”, 然后選擇“RDA Project”。項(xiàng)目配置窗口如下,自定義工程名,選擇項(xiàng)目代碼路徑:
圖2-1 創(chuàng)建項(xiàng)目

項(xiàng)目基礎(chǔ)代碼由RDA提供,用戶(hù)可以在基礎(chǔ)代碼之上實(shí)現(xiàn)自己特有的功能和應(yīng)用。
文檔中示例工程名為“iot”,選擇代碼路徑后單擊“Finish”按鈕,生成工程如下:
圖2-2 項(xiàng)目瀏覽器

配置工程
在“Project Explorer”中點(diǎn)擊右鍵,選擇“Properties”,進(jìn)入“Properties”窗口,選擇“C/C++ Build”,然后選擇“RDA Project”,配置目標(biāo):
Select Target
選擇目標(biāo)Target
Target Wizard
項(xiàng)目向?qū)В渲庙?xiàng)目特性、模塊等
Remove
刪除Target
New Target
新建Target
Select Release
選擇生成“release”還是“debug”版本
Base Build Command
-
Custom Build Option
-
圖2-3 項(xiàng)目配置

編譯工程

在“Project Explorer”中點(diǎn)擊右鍵,選擇“RDA Tools”,然后可以看到兩個(gè)編譯選項(xiàng):
Build Flash
編譯Ramrun文件
Build Image
編譯Flash文件

圖2-4 編譯項(xiàng)目

編譯模塊

在“Project Explorer”中展開(kāi)根目錄 iot,選擇模塊,在模塊上點(diǎn)擊右鍵,選擇“RDA Tools”,然后可以看到如下兩個(gè)選項(xiàng):
Build this module
編譯該模塊
Clean this module
清除模塊已編譯中間文件

圖2-5 編譯模塊

2.4     編程框架
對(duì)EZ-LINK開(kāi)發(fā)平臺(tái)而言,短短數(shù)十行代碼就可以完成一個(gè)簡(jiǎn)單的物聯(lián)網(wǎng)應(yīng)用,如智能LED燈等。簡(jiǎn)單物聯(lián)網(wǎng)應(yīng)用編程框架有兩部分組成:


用戶(hù)模塊組織結(jié)構(gòu)

圖2-6 用戶(hù)代碼結(jié)構(gòu)

include目錄存放用戶(hù)頭文件,如果用戶(hù)無(wú)自定義頭文件,該目錄可以為空,或者直接刪除。

src目錄存放用戶(hù)源文件。源文件中實(shí)現(xiàn)init()和loop(),用戶(hù)在init()中實(shí)現(xiàn)初始化代碼,在loop()中處理外設(shè)如WIFI模塊產(chǎn)生的事件。源文件結(jié)構(gòu)參考示例代碼。

makefile文件具有固定格式,簡(jiǎn)單易用。模塊makefile甚至無(wú)需修改就可以正確編譯用戶(hù)代碼,將用戶(hù)代碼與系統(tǒng)庫(kù)文件一起編譯鏈接生成可燒錄的flash二進(jìn)制文件。

Makefile格式

## ----------------------------------------------------------- ##
## Don't touch the next line unless you know what you're doing.##
## ----------------------------------------------------------- ##
include ${SOFT_WORKDIR}/env/compilation/compilevars.mk

# Name of the module
LOCAL_NAME := apps/ap_customer

# list all modules APIs that are neccessary to compile this module
LOCAL_API_DEPENDS := \
platform \
platform/service \               
## ----------------------------------------------------------- ##
##              List all your sources here                                       ##
## ----------------------------------------------------------- ##
include src/make.srcs

## ----------------------------------------------------------- ##
##  Do Not touch below this line                                     ##
## ----------------------------------------------------------- ##
include ${SOFT_WORKDIR}/env/compilation/compilerules.mk

2.5     燒錄Flash
安裝串口驅(qū)動(dòng)

燒錄BIN文件使用USB轉(zhuǎn)串口線,RDA提供的開(kāi)發(fā)包中包含USB轉(zhuǎn)串口驅(qū)動(dòng)程序,點(diǎn)擊安裝。驅(qū)動(dòng)安裝成功后,依次查看windows“控制面板”->“設(shè)備管理”->“端口”,在“端口”選項(xiàng)下,有如下所示USB-to-Serial端口,說(shuō)明安裝成功:

圖2-7 安裝串口驅(qū)動(dòng)

配置串口

在Eclipse菜單項(xiàng)選擇“windows”,然后選擇“Preference”,選擇“C/C++”,然后選擇“RDA Tools”。在“Serial Setting”中選擇串口和正確的Baudrate。

圖2-8 串口配置


Eclipse工具條目

燒錄相關(guān)按鈕在Eclipse工具欄,如下圖示。
自左向右分別是:
Reset Target
重置目標(biāo)板,目標(biāo)板將重啟
Connect Target
連接目標(biāo)板,成功失敗都會(huì)有彈出對(duì)話框提示
Open Coolwatcher
打開(kāi)CoolWatcher工具
Open Memory View
打開(kāi)內(nèi)存讀寫(xiě)窗口,該部分將在2.6 調(diào)度中介紹
Down Flash
下載Ramrun 和Flash 文件


燒錄BIN文件

連接UART COM口:藍(lán)線連接HST_RXD,白線連接HST_TXD,黑線接地。
啟動(dòng)Eclipse,點(diǎn)擊工具欄“Connect Target”,連接成功后,點(diǎn)擊“Down Flash”,選擇Lod文件,點(diǎn)擊“Download”:
圖2-9 下載選項(xiàng)

Flash Programmer File文件由build flash產(chǎn)生
System Lod File文件由build image產(chǎn)生,參考2.3 IDE配置


2.6     調(diào)試
串口打印trace是最為常見(jiàn)的調(diào)試手段。EZ-LINK trace按模塊分類(lèi),模塊內(nèi)按重要性分為不同等級(jí)。

通過(guò)宏開(kāi)關(guān),可以選擇編譯時(shí)是否包含特定模塊trace。

通過(guò)Eclipse工具,可以選擇運(yùn)行時(shí)是否輸出特定模塊和該模塊特定級(jí)別的trace。設(shè)置步驟如下:

在Eclipse菜單欄選擇“windows”,然后選擇“Preference”,選擇“C/C++”,然后選擇“RDA Tools”,最后單擊“Trace Mask”按鈕,彈出如下對(duì)話框。

圖2-10 配置Trace

“Select Module”選擇trace模塊,16個(gè)level控制trace輸出級(jí)別。

3       IOT接口3.1     系統(tǒng)服務(wù)3.1.1  內(nèi)存
頭文件:iot_base.h
3.1.1.1  iot_Malloc
功能描述:
分配內(nèi)存, glibc兼容
函數(shù):
PVOID iot_Malloc(UINT32 size)
參數(shù):

【輸入】
size  
申請(qǐng)內(nèi)存大小
返回值:
指向分配內(nèi)存的指針


3.1.1.2  iot_Free
功能描述:
釋放內(nèi)存, glibc兼容
函數(shù):
VOID iot_Free(PVOID ptr)
參數(shù):

【輸入】
ptr  
內(nèi)存指針
返回值:
無(wú)


3.1.2  Trace
頭文件iot_base.h
3.1.2.1  iot_Printf
功能描述:
打印trace,示例打印LED燈狀態(tài):

iotPrintf("led status = %d ", ledOn);
函數(shù):
VOID iot_Printf(INT8* fmt,...)
參數(shù):

【輸入】
fmt
打印格式
返回值:
無(wú)


3.1.3  延時(shí)3.1.3.1  iot_DelayMs
功能描述:
程序延時(shí)
函數(shù):
VOID iot_delayMs(UIN32 ms)
參數(shù):

【輸入】
ms  
延時(shí)ms毫秒
返回值:
無(wú)


3.1.3.2  iot_DelaySeconds
功能描述:
程序延時(shí)
函數(shù):
VOID iot_DelaySeconds( UINT32 seconds)
參數(shù):

【輸入】
secondes  
定時(shí)器時(shí)長(zhǎng),以秒為單位
返回值:
無(wú)


3.2     硬件服務(wù)3.2.1  UART3.2.1.1  uart_Open
功能描述:
打開(kāi)UART接口
函數(shù):
VOID uart_Open(UINT8 id, UINT32 baudrate)
參數(shù):

【輸入】
id
Uart ID
【輸入】
baudrate
Uart 波特率
返回值:
無(wú)


3.2.1.2  uart_Close
功能描述:
關(guān)閉UART接口
函數(shù):
VOID uart_Close(UINT8 id);
參數(shù):

【輸入】
id

返回值:
無(wú)


3.2.1.3  uart_Write
功能描述:
通過(guò)UART接口發(fā)送數(shù)據(jù),每次只發(fā)送一個(gè)字節(jié)數(shù)據(jù)
函數(shù):
UINT32 uart_Write(UINT8 id, CHAR ch);
參數(shù):

【輸入】
uartId
UART ID
【輸入】
ch
數(shù)據(jù)地址指針
返回值:
> 0
-
通過(guò)UART發(fā)送字節(jié)數(shù)

0
-
發(fā)送數(shù)據(jù)失敗
3.2.1.4  uart_Read
功能描述:
通過(guò)UART接口讀數(shù)據(jù)
函數(shù):
UINT32 uart_Read(UINT8 id, CHAR* buff)
參數(shù):

【輸入】
id
UART ID
【輸入】
buff
數(shù)據(jù)地址指針
返回值:
> 0
-
通過(guò)UART接收字節(jié)數(shù)

0
-
接收數(shù)據(jù)失敗
3.2.2  GPIO3.2.2.1  gpio_Open
功能描述:
打開(kāi)GPIO接口
函數(shù):
VOID  gpio_Open(UINT8 port, UINT8 direction)
參數(shù):

【輸入】
port
端口號(hào)
【輸入】
direction
0 – 輸入 ;1 – 輸出
返回值:
無(wú)


3.2.2.2  gpio_Close
功能描述:
關(guān)閉GPIO接口
函數(shù):
VOID  gpio_Close(UINT8 port)
參數(shù):

【輸入】
port
端口號(hào)
返回值:
無(wú)


3.2.2.3  gpio_Write
功能描述:
向GPIO寫(xiě)“0”或者“1”
函數(shù):
VOID gpio_Write(UINT8 port, UINT8 data)
參數(shù):

【輸入】
port
端口號(hào)
【輸入】
data
數(shù)據(jù)
返回值:
無(wú)


3.2.2.4  gpio_Read
功能描述:
從GPIO讀數(shù)據(jù)
函數(shù):
UINT32 gpio_Read(UINT8 port)
參數(shù):

【輸入】
port
端口號(hào)
返回值:
GPIO接口當(dāng)前數(shù)據(jù)


3.2.2.5  示例程序
簡(jiǎn)單物聯(lián)網(wǎng)應(yīng)用:智能LED燈,通過(guò)WIFI無(wú)線控制LED燈開(kāi)關(guān)。現(xiàn)實(shí)生活中,可以減少裝修布線,減輕對(duì)墻體破壞等。

// app_led.c
#include “hal_gpio.h”
#include “tcpip_sockets.h”

static struct sockaddr_in ledSckAddr;
static INT8 ledSckServer;
static INT8 ledSckClient = 0;
///Only accept 1 byte data(0 or 1), ok for turn on/off the LED
#define MAX_RECV_BUFF  1
#define LED_SCK_PORT  5050
#define MAX_LED_CONNECTION 1

VOID init(VOID)
{
  struct sockaddr_in  clientAddr;
HAL_GPIO_GPIO_ID_T  ledGpioId;
HAL_GPIO_DIRECTION_T direction;

  ///Use the tenth GPIO port
  ledGpioId = HAL_GPIO_10;
  direction = HAL_GPIO_DIRECTION_OUTPUT;
///Must open the GPIO before use it
  gpio_Open(ledGpioId, direction);

  ledSckServer  = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  memset(&ledSckAddr,0, sizeof(struct sockaddr_in));

  ledSckAddr.sin_family=AF_INET;
  ledSckAddr.sin_addr.s_addr=htonl(INADDR_ANY);
ledSckAddr.sin_port=htons(LED_SCK_PORT);

if(-1 == bind(ledSckServer,
(struct sockaddr *)(& ledSckAddr),sizeof(sockaddr_in)))
{
return ;
}
}

VOID loop(VOID)
{
  INT8 readLen = 0;
  UINT8 ledOn;
  /// If no connection, waiting for connect
  if (ledSckClient <= 0)
{
if(-1 == listen(ledSckServer, MAX_LED_CONNECTION))
{
return ;
}
addrSize = sizeof(struct sockaddr_in);
ledSckClient = accept(ledSckServer,
(struct sockaddr *)(&clientAddr), &addrSize);
if(-1 == ledSckClient)
{
return ;
}
}
  readLen = read(ledSckClient, &ledOn, MAX_REV_BUF_SIZE);
  if (readLen > 0)
{
if (0 == ledOn || 1 == ledOn)
gpio_Write(ledGpioId, ledOn);
}
}
3.3     WIFI3.3.1  編程接口
頭文件:iot_wifi.h
3.3.1.1  iot_Connect
功能描述:
連接網(wǎng)絡(luò)
函數(shù):
INT32 iot_Connect(const char *addr, INT16 portno)
參數(shù):

【輸入】
addr
網(wǎng)絡(luò)地址,URL或者 IP
【輸入】
portno
端口號(hào)
返回值:
< 0

失敗

其他

成功
3.3.1.2  iot_Send
功能描述:
發(fā)送數(shù)據(jù)
函數(shù):
INT32 iot_Send(INT32 sockfd, const INT8* buffer, UINT32 len)
參數(shù):

【輸入】
sockfd
套接字句柄
【輸入】
buffer
發(fā)送數(shù)據(jù)緩存
【輸入】
len
發(fā)送數(shù)據(jù)長(zhǎng)度
返回值:
指定索引的BSSID字串


3.3.1.3  iot_Recv
功能描述:
接收數(shù)據(jù)
函數(shù):
INT32 iot_Recv(INT32 sockfd, INT8 *buffer, UINT32 len)
參數(shù):

【輸入】
sockfd
套接字句柄
【輸入】
buffer
接收數(shù)據(jù)緩存
【輸入】
len
接收數(shù)據(jù)長(zhǎng)度
返回值:
實(shí)際接收字節(jié)數(shù)


3.3.1.4  iot_Close
功能描述:
關(guān)閉網(wǎng)絡(luò)
函數(shù):
INT32 iot_Close(INT32 sockfd)
參數(shù):

【輸入】
sockefd
套接字句柄
返回值:



3.3.2  示例程序
#include "iot_wifi.h"
// Source device id allocated by oneNet
#define SRC_DEV "777"
// Destination device id allocated by oneNet
#define DST_DEV "778"
// API key allocated by oneNet
#define API_KEY "your api key"
// Data stream name, created on oneNet
#define DATA_STREAM "your data stream"
#define MAX_RESP_BUF  32

// ============================================================================
// Loop forever
// Send temperature value to cloud application whenever changed
// @return void
// ============================================================================
VOID loop()
{
    // Server information for connection
    INT8 *server_ip = "183.230.40.39";
    INT8 *port = "876";
    INT8 *src_dev = SRC_DEV;
    INT8 *dst_dev = DST_DEV;
    INT8 *src_api_key = API_KEY;
    INT8 *data_stream = DATA_STREAM;
    DOUBLE temperature = 0.0;   
    INT sock, ret;
    EdpPacket *pkg = NULL;
    INT8 buffer[MAX_RESP_BUF] = { 0 };
    SaveDataType data_type = kTypeSimpleJsonWithoutTime;

    recv_buf = NewBuffer();
    // Connect to server
    sock = iot_Connect(server_ip, atoi(port));
    if (sock < 0)
    {
        iot_Printf("Error connect cloud server. \n");
        return;
    }
    // Build connect package follow oneNet EDP protocol
    pkg = PacketConnect1(src_dev, src_api_key);
    if (pkg == NULL)
    {
        iot_Printf("Build connect pkg failed.\n");
        return;
    }
    // Send connection request pkg to cloud server
    ret = iot_Send(sock, (const char*)pkg->_data, pkg->_write_pos);
    DeleteBuffer(&pkg);
              while (1)
              {
         Temperature = user_poll_current_temperature();
                            // Build save data pkg follow oneNet EDP protocol
                            pkg =PacketSavedataDouble(data_type,dst_dev,data_stream,temperature,0, NULL);
                            if (pkg == NULL)
                            {
                               iot_Printf("Build data failed.\n");
            return;
                            }
        // Send temperature value pkg to clould server
                            iot_Send(sock, (const char*)pkg->_data, pkg->_write_pos);
                            DeleteBuffer(&pkg);
                            iot_DelayMs(2000);
   }
   // Close socket
   iot_Close(sock);
   return;
}
3.4     Bluetooth3.4.1  編程接口
頭文件:iot_bt.h
3.4.1.1  bt_Open
功能描述:
啟動(dòng)藍(lán)牙模塊
函數(shù):
VOID bt_Open(VOID)
參數(shù):

【輸入】
無(wú)

返回值:
無(wú)


3.4.1.2  bt_Close
功能描述:
關(guān)閉藍(lán)牙模塊
函數(shù):
VOID bt_Close(VOID)
參數(shù):

【輸入】
無(wú)

返回值:
無(wú)


3.4.1.3  bt_SetLocalName
功能描述:
設(shè)置本地藍(lán)牙設(shè)備名
函數(shù):
VOID bt_SetLocalName(UINT8* name)
參數(shù):

【輸入】
name
本地藍(lán)牙設(shè)備名
返回值:
無(wú)
-

3.4.1.4  bt_SetVisible
功能描述:
設(shè)置本地藍(lán)牙可見(jiàn)性
函數(shù):
VOID bt_SetVisable(UINT8 visable);
參數(shù):

【輸入】
visible
TRUE – 可見(jiàn);FALSE – 不可見(jiàn)
返回值:
無(wú)
-

3.4.1.5  bt_ScanDevice
功能描述:
掃描周邊藍(lán)牙設(shè)備
函數(shù):
UINT32 bt_ScanDevice(UINT32 timeout)
參數(shù):

【輸入】
timeout
掃描超時(shí)時(shí)間,單位秒
返回值:
獲取藍(lán)牙設(shè)備總數(shù)


3.4.1.6  bt_BoneDevice
功能描述:
配對(duì)藍(lán)牙設(shè)備
函數(shù):
UINT32 bt_BondDevice( t_bdaddr device_addr, UINT32 timeout  )
參數(shù):

【輸入】
Timeout
配對(duì)超時(shí)時(shí)間,單位秒
返回值:
TRUE 配對(duì)成功
FALSE 配對(duì)失敗

3.4.1.7  bt_GetBonedDevice
功能描述:
藍(lán)牙配對(duì)
函數(shù):
BOOL  bt_GetBonedDevice(UINT32 index, rdabt_device_t_app *device);
參數(shù):

【輸入】
Index
藍(lán)牙設(shè)備索引,取值范圍0~9
【輸出】
device   
藍(lán)牙設(shè)備信息數(shù)據(jù)指針
返回值:
TRUE
-
獲取成功

FALSE
-
獲取失敗
3.4.1.8  bt_SppConnect
功能描述:
連接藍(lán)牙SPP服務(wù)端
函數(shù):
BOOL bt_SppConnect(t_bdaddr device_addr, UINT8 timeout);
參數(shù):

【輸入】
device_addr
藍(lán)牙地址
【輸入】
timeout
藍(lán)牙連接超時(shí)
返回值:
TRUE
-
連接成功

FALSE
-
連接失敗
3.4.1.9  bt_SppDisconnect
功能描述:
斷開(kāi)藍(lán)牙SPP連接
函數(shù):
VOID bt_SppDisconnect(VOID)
參數(shù):

【輸入】
無(wú)

返回值:
無(wú)


3.4.1.10           bt_SppSend
功能描述:
通過(guò)SPP發(fā)送數(shù)據(jù)
函數(shù):
INT32 bt_SppSend(UINT8* buf, UINT32 size)
參數(shù):

【輸入】
buf
發(fā)送數(shù)據(jù)緩沖區(qū)
【輸入】
size
發(fā)送數(shù)據(jù)長(zhǎng)度
返回值:
> 0
-
實(shí)際發(fā)送字節(jié)數(shù)

<= 0
-
發(fā)送失敗
3.4.1.11           bt_SppRecv
功能描述:
通過(guò)藍(lán)牙SPP接收數(shù)據(jù)
函數(shù):
INT32 bt_SppRecv(UINT32 timeout, UINT8 *buf)
參數(shù):

【輸入】
timeout
超時(shí)時(shí)間,單位秒
【輸出】
buf
接收數(shù)據(jù)緩沖區(qū)
返回值:
> 0
-
成功接收數(shù)據(jù)字節(jié)數(shù)

<= 0
-
接收數(shù)據(jù)失敗
3.4.1.12           bt_SppAccept
功能描述:
藍(lán)牙SPP服務(wù)端接受客戶(hù)端連接
函數(shù):
BOOL bt_SppAccept(UINT32 timeout)
參數(shù):

【輸入】
timeout
超時(shí)時(shí)間,單位秒
返回值:
TRUE
-
連接成功

FALSE
-
連接失敗
3.4.2  示例程序
簡(jiǎn)單物聯(lián)網(wǎng)應(yīng)用:智能插座,通過(guò)藍(lán)牙無(wú)線控制插座的開(kāi)關(guān)。

// app_smart_plug.c

#include “bt_types.h”
#include “hal_gpio.h”

static HAL_GPIO_GPIO_ID_T  plugGpioId;

VOID init(VOID)
{
HAL_GPIO_DIRECTION_T direction;

  // Use the fifth GPIO port
  plugGpioId = HAL_GPIO_15;
  direction = HAL_GPIO_DIRECTION_OUTPUT;
  // Must open the GPIO before use it
  gpio_Open(plugGpioId, direction );
bt_Open(VOID);
}

VOID loop(VOID)
{
  t_DataBuf btData;

  memcpy(&btData, 0, sizeof(t_DataBuf));
  // Return only when data available or error
  bt_SppRecv(&btData);
  if (btData.len > 0)
{
    if (0 == (*btData.buff) || 1 == (*btData.buff) )
  {
    gpio_Write(plugGpioId, *btData.buff);
}
}
}

全部資料51hei下載地址(含源碼與手冊(cè))
http://www.raoushi.com/bbs/dpj-135991-1.html







歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1