1. 程式人生 > >simpleBLECentral.C簡單的翻譯一下,方便程式設計,特此記錄

simpleBLECentral.C簡單的翻譯一下,方便程式設計,特此記錄

宣告:喝水不忘挖井人,轉載請註明出處。

原文地址:http://write.blog.csdn.NET/postedit

聯絡方式:[email protected]

開源四軸(淘寶店):

/*BLE中的GAP和GATT

GATT通俗理解為用於主從機之間的客戶端和伺服器端的資料互動,以Attribute Table來體現。
//*GATT層:是一個服務框架定義了對ATT應用的子程式。GATT指定了profile的結構。
//*在BLE中,由profile或者是服務所使用的所有型別的資料都稱為characteristic。發生於兩個裝置間通過BLE連線進行交換的資料都需經過GATT子程式處理。因此,app和profile會直接使用GATT。


//*GAP:直接與profile和app進行接觸,解決裝置的發現和連線相關的服務,此外GAP也會初始化安全相關的特色。
//*GAP Role Profile:在GAP劇本里所處的4個角色:廣播Advertise,主機central,從機Peripheral,觀察者Observer。
//*ATT協議允許一個裝置去顯示一些資料,對於其他裝置稱之為“Attribute屬性”,在ATT中,那些顯示這些屬性的裝置被稱為server,同等的另一個裝置稱為client。LL層的狀態master和slave和ATT層的這兩個狀態無關。
*/
/*********************************************************************

 * 包含
 */ 
#include "bcomdef.h"
#include "OSAL.h"
#include "OSAL_PwrMgr.h"
#include "OnBoard.h"
#include "hal_led.h"
#include "hal_key.h"
#include "hal_lcd.h"
#include "gatt.h"
#include "ll.h"
#include "hci.h"
#include "gapgattserver.h"
#include "gattservapp.h"
#include "central.h"
#include "gapbondmgr.h"

#include "simpleGATTprofile.h"
#include "simpleBLECentral.h"

//包含串列埠程式
#include "SerialApp.h"

/*********************************************************************
 * 巨集定義
 */

// 藍芽裝置地址長度
#define B_ADDR_STR_LEN                        15

/*********************************************************************
 * 常量
 */

// 掃描從機最大值
#define DEFAULT_MAX_SCAN_RES                  8

//掃描持續時間(ms)
#define DEFAULT_SCAN_DURATION                 4000

// 發現模式 (有限制的, 常規, 全部)
#define DEFAULT_DISCOVERY_MODE                DEVDISC_MODE_ALL

// 開啟主動掃描
#define DEFAULT_DISCOVERY_ACTIVE_SCAN         TRUE

// 關閉掃描白名單
#define DEFAULT_DISCOVERY_WHITE_LIST          FALSE

// 連線時關閉高速掃描
#define DEFAULT_LINK_HIGH_DUTY_CYCLE          FALSE

// 連線時關閉白名單功能
#define DEFAULT_LINK_WHITE_LIST               FALSE

//輪詢RSSI訊號週期(MS)
#define DEFAULT_RSSI_PERIOD                   1000

//當連線時是否允許自動升級
#define DEFAULT_ENABLE_UPDATE_REQUEST         FALSE

// 如果自動啟用引數更新請求,最小連線間隔(計算單位:每次1.25ms) 
#define DEFAULT_UPDATE_MIN_CONN_INTERVAL      20

//最大連線時間間隔(units of 1.25ms) 如果啟用了自動請求更新引數
#define DEFAULT_UPDATE_MAX_CONN_INTERVAL      20

// Slave latency to use if automatic parameter update request is enabled
#define DEFAULT_UPDATE_SLAVE_LATENCY          0

// 監督超時值(units of 10ms) 如果啟用了自動請求更新引數
#define DEFAULT_UPDATE_CONN_TIMEOUT           600

// 預設密碼
#define DEFAULT_PASSCODE                      19655

// 定義GAP模式
#define DEFAULT_PAIRING_MODE                  GAPBOND_PAIRING_MODE_WAIT_FOR_REQ

// 定義配對模式 (是否開啟配對時候需要配對碼)
#define DEFAULT_MITM_MODE                     FALSE

// 定義是否繫結模式
#define DEFAULT_BONDING_MODE                  TRUE

// Default GAP bonding I/O capabilities
#define DEFAULT_IO_CAPABILITIES               GAPBOND_IO_CAP_DISPLAY_ONLY

//定義搜尋器延時(MS)
#define DEFAULT_SVC_DISCOVERY_DELAY           1000

//基於從機的UUID碼,如果真就過濾搜尋結果
#define DEFAULT_DEV_DISC_BY_SVC_UUID          TRUE

//應用程式狀態
enum
{
  BLE_STATE_IDLE,
  BLE_STATE_CONNECTING,
  BLE_STATE_CONNECTED,
  BLE_STATE_DISCONNECTING
};

// 發現裝置狀態
enum
{
  BLE_DISC_STATE_IDLE,                //  閒置的
  BLE_DISC_STATE_SVC,                 // 服務發現
  BLE_DISC_STATE_CHAR                 // 發現特有
};

/*********************************************************************
 * 型別定義
 */

/*********************************************************************
 * 全域性變數
 */

/*********************************************************************
 * 外部變數
 */

/*********************************************************************
 * 外部函式 
 */

/*********************************************************************
 * 區域性變數
 */
//內部的任務/ 事件處理的任務ID
static uint8 simpleBLETaskId;

// GAP GATT 屬性(BLE名稱)
static const uint8 simpleBLEDeviceName[GAP_DEVICE_NAME_LEN] = "Simple BLE Central";

// 掃描結果和掃描結果索引
static uint8 simpleBLEScanRes;
static uint8 simpleBLEScanIdx;

// 掃描結果列表
static gapDevRec_t simpleBLEDevList[DEFAULT_MAX_SCAN_RES];

// 掃描狀態
static uint8 simpleBLEScanning = FALSE;

// RSSI polling state
static uint8 simpleBLERssi = FALSE;

// Connection handle of current connection 
static uint16 simpleBLEConnHandle = GAP_CONNHANDLE_INIT;

// 應用狀態
static uint8 simpleBLEState = BLE_STATE_IDLE;

//探索狀態
static uint8 simpleBLEDiscState = BLE_DISC_STATE_IDLE;

//搜尋開始與結束的控制代碼
static uint16 simpleBLESvcStartHdl = 0;
static uint16 simpleBLESvcEndHdl = 0;

//發現特有裝置控制代碼
static uint16 simpleBLECharHdl = 0;

// Value to write寫的值
static uint8 simpleBLECharVal = 0;

// 讀取的值/寫切換
static bool simpleBLEDoWrite = FALSE;

// GATT讀/寫程式狀態
static bool simpleBLEProcedureInProgress = FALSE;

/*********************************************************************
 * 區域性函式
 */
static void simpleBLECentralProcessGATTMsg( gattMsgEvent_t *pMsg );
static void simpleBLECentralRssiCB( uint16 connHandle, int8  rssi );
static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent );
static void simpleBLECentralPasscodeCB( uint8 *deviceAddr, uint16 connectionHandle,
                                        uint8 uiInputs, uint8 uiOutputs );
static void simpleBLECentralPairStateCB( uint16 connHandle, uint8 state, uint8 status );
static void simpleBLECentral_HandleKeys( uint8 shift, uint8 keys );
static void simpleBLECentral_ProcessOSALMsg( osal_event_hdr_t *pMsg );
static void simpleBLEGATTDiscoveryEvent( gattMsgEvent_t *pMsg );
static void simpleBLECentralStartDiscovery( void );
static bool simpleBLEFindSvcUuid( uint16 uuid, uint8 *pData, uint8 dataLen );
static void simpleBLEAddDeviceInfo( uint8 *pAddr, uint8 addrType );
char *bdAddr2Str ( uint8 *pAddr );

/*********************************************************************
 * 配置回撥函式
 */

// GAP Role 回撥函式
static const gapCentralRoleCB_t simpleBLERoleCB =
{
  simpleBLECentralRssiCB,       // RSSI訊號回撥
  simpleBLECentralEventCB       // 事件回撥
};

// 繫結管理器的回撥函式
static const gapBondCBs_t simpleBLEBondCB =
{
  simpleBLECentralPasscodeCB,
  simpleBLECentralPairStateCB
};

/*********************************************************************
 * 公共函式
 */

/*********************************************************************
 * 函式名:     SimpleBLECentral_Init
 *
 * 描敘:   初始化BLE主機,在任務初始化時候,被呼叫。
 *        
 * 引數:   任務ID
 *                    
 * 返回:  無
 */
void SimpleBLECentral_Init( uint8 task_id )
{
  simpleBLETaskId = task_id;
  //新增串列埠初始化,並傳遞任務id
  SerialApp_Init(simpleBLETaskId);

  SerialPrintString("SimpleBLECentral_SerialPrint Start init.\r\n");
  //設定主機配置引數
  {
    uint8 scanRes = DEFAULT_MAX_SCAN_RES;
    GAPCentralRole_SetParameter ( GAPCENTRALROLE_MAX_SCAN_RES, sizeof( uint8 ), &scanRes );
  }

  // 設定GAP
  GAP_SetParamValue( TGAP_GEN_DISC_SCAN, DEFAULT_SCAN_DURATION );
  GAP_SetParamValue( TGAP_LIM_DISC_SCAN, DEFAULT_SCAN_DURATION );
  GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, (uint8 *) simpleBLEDeviceName );

  //設定GAP的繫結管理器
  {
    uint32 passkey = DEFAULT_PASSCODE;
    uint8 pairMode = DEFAULT_PAIRING_MODE;
    uint8 mitm = DEFAULT_MITM_MODE;
    uint8 ioCap = DEFAULT_IO_CAPABILITIES;
    uint8 bonding = DEFAULT_BONDING_MODE;
    GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof( uint32 ), &passkey );
    GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof( uint8 ), &pairMode );
    GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof( uint8 ), &mitm );
    GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof( uint8 ), &ioCap );
    GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof( uint8 ), &bonding );
  }  

  // 初始化GATT客戶端 
  VOID GATT_InitClient();

  //登記接受到的ATT標誌/通知
    GATT_RegisterForInd( simpleBLETaskId );

  //初始化GATT屬性
  GGS_AddService( GATT_ALL_SERVICES );         // GAP
  GATTServApp_AddService( GATT_ALL_SERVICES ); // GATT attributes

  // 註冊所有按鍵事件- 這個應用會處理所有按鍵事件
  RegisterForKeys( simpleBLETaskId );

  //關閉所有LED
  HalLedSet( (HAL_LED_1 | HAL_LED_2), HAL_LED_MODE_OFF );

  ////標誌SBP_START_DEVICE_EVT啟動對應ID事件
  osal_set_event( simpleBLETaskId, START_DEVICE_EVT );

  SerialPrintString("Ready to Starting\r\n");
}

/*********************************************************************
 * 函式名稱   SimpleBLECentral_ProcessEvent
 *
 * 描述     BLE事件處理函式. 呼叫該函式處理所有BLE事件( 時間, 訊息,使用者定義事件)
 *
 * 引數:   任務ID 
 * 引數:   事件 - 要處理的事件(可包含多個事件).
 *
 * 返回:   失敗:返回未處理的事件
            成功: 0
 */
uint16 SimpleBLECentral_ProcessEvent( uint8 task_id, uint16 events )
{

  VOID task_id; // OSAL required parameter that isn't used in this function

  if ( events & SYS_EVENT_MSG )
  {
    uint8 *pMsg;

    if ( (pMsg = osal_msg_receive( simpleBLETaskId )) != NULL )
    {
      simpleBLECentral_ProcessOSALMsg( (osal_event_hdr_t *)pMsg );

      // 釋放處理訊息
      VOID osal_msg_deallocate( pMsg );
    }

    // 返回未處理的事件
    return (events ^ SYS_EVENT_MSG);
  }

  if ( events & START_DEVICE_EVT )
  {
    //啟動裝置
    VOID GAPCentralRole_StartDevice( (gapCentralRoleCB_t *) &simpleBLERoleCB );

    // 啟動後,註冊繫結管理器
    GAPBondMgr_Register( (gapBondCBs_t *) &simpleBLEBondCB );

    SerialPrintString("BLE Stack is running\r\n");
    return ( events ^ START_DEVICE_EVT );
  }

  if ( events & START_DISCOVERY_EVT )
  {

相關推薦

simpleBLECentral.C簡單翻譯一下方便程式設計特此記錄

三、 宣告:喝水不忘挖井人,轉載請註明出處。 原文地址:http://write.blog.csdn.NET/postedit 聯絡方式:[email protected] 開源四軸(淘寶店): /*BLE中的GAP

【eclipse jar包】在編寫java程式碼時方便程式設計常常會引用別人已經實現的方法通常會封裝成jar包我們在編寫時只需引入到Eclipse中即可。

Eclipse中匯入外部jar包 在編寫java程式碼時,為方便程式設計,常常會引用別人已經實現的方法,通常會封裝成jar包,我們在編寫時,只需引入到Eclipse中即可。 工具/原料 Eclipse

Revit二次開發——如何搭建多版本的框架方便程式設計

       Revit基本兩年一大變。所以在做開發的時候需要做多個版本的才行。但是每個版本做一個專案又很不方便,因為很多程式碼類似,改了前面忘了後面的版本,所以很頭疼,最好能夠幾個版本共用一個類,不同版本通過預編譯來解決。這裡只說怎麼解決多版本共用一個類

分享幾本比較好的pdf書籍包括oracle資料庫mysql資料庫C語言程式設計java程式設計以及linux作業系統等

1.個人認為最好的oracle資料庫學習書籍,找了很久,發現內容最全講解最清晰《Oracle PL/SQL程式設計》上下 連結:https://pan.baidu.com/s/1VxvbW070_-KEFKEwY0iFCg  提取碼:rm1e  2.《linux系統程式設計

C++模板初階(泛型程式設計函式模板類模板)

1.泛型程式設計 怎麼實現一個通用的交換函式呢 使用函式過載雖然可以實現,但是有一下幾個不好的地方: 1. 過載的函式僅僅只是型別不同,程式碼的複用率比較低,只要有新型別出現時,就需要增加對應的函式 2. 程式碼的可維護性比較低,一個出錯可能所有的過載均出錯

Python3抓取頁面資訊網路程式設計簡單傳送QQ郵件

資料收集,資料整理,資料描述,資料分析 # coding=utf-8 import sys import urllib.request req = urllib.request.Request(

(C語言列印圖形題4)程式設計輸入n輸出如下例(n=4)所示的高為n的倒立等腰三角形。

程式設計,輸入n,輸出如下例(n=4)所示的高為n的等腰三角形。          *******            *****             ***              *  

【乾貨】最好的天線基礎知識方便查詢超實用!

天線作為無線電的發射和接收裝置是影響訊號強度和質量的重要裝置,其在行動通訊領域的重要性非常關鍵。通過對天線選型,天 線安裝,天線調整從而保障基站覆蓋區域的訊號強度與質量。對其的 掌握程度是網規與網優工程師的技能基本要求之一。下文重點說明天線要掌握哪些方面及其原理和影響。 1 什麼是天線? 答

大資料之Spark(一)--- Spark簡介模組安裝使用一句話實現WorldCountAPIscala程式設計提交作業到spark叢集指令碼分析

一、Spark簡介 ---------------------------------------------------------- 1.快如閃電的叢集計算 2.大規模快速通用的計算引擎 3.速度: 比hadoop 100x,磁碟計算快10x 4.使用: java

嵌入式Linux網路程式設計網路基礎TCP程式設計socket()bind()listen()accept()connect()send()/recv()close()/shutdown()

文章目錄 1,建立socket檔案描述符socket() 2, 繫結bind() 2.1, 地址相關的資料結構struct sockaddr、struct sockaddr_in、struct in_addr 3,把主動套接字變成被動

有關開發模式的幾個概念-瀑布模型極限程式設計敏捷開發

做開發已經不算是一個新人了,但很多朋友問一些開發模式方面的概念,比如瀑布模型,極限程式設計,敏捷開發等,總感覺給人解釋的一知半解,模模糊糊,今天無意間看到一篇比較淺顯的這方面的文章,轉載一下,也算給自己補充下概念性的知識。  如何快速響應客戶需求變動 ————ruby on

Android封裝多條目Adapter方便快捷便於維護

專案地址 :https://github.com/chaychan/MultipleItemRvAdapter 效果圖,我之前做過的精仿今日頭條,新聞列表中有好幾種佈局: Apk下載地址         請點選左下角“閱讀原文”對應位置下載。   Mul

利用Python自制雷霆戰機小遊戲娛樂程式設計快樂學習!

導語 進群:943752371獲取本文原始碼,想玩的小夥伴可以自己去嘗試下哦!記得進群:943752371哦! 開發工具 Python版本:3.6.4 相關模組: pygame模組; 以及一些Python自帶的模組。 環境搭建 安裝Pyth

基於BaseRecyclerViewAdapterHelper封裝的多條目Adapter方便快捷便於維護

  效果圖,我之前做過的精仿今日頭條,新聞列表中有好幾種佈局: Apk下載地址 專案介紹   MultipleItemRvAdapter是在BaseRecyclerViewAdapterHelper的基礎上對BaseQuickAd

《瘋狂Java講義》讀書筆記(十):多執行緒網路程式設計類載入機制與反射

第十六章:多執行緒1、一般而言,程序包含如下3個特徵:獨立性,動態性,併發性。併發性和並行性是兩個概念,並行指同一時刻,有多條指令在多個處理器上同時執行;併發指同一時刻只能有一條指令執行,但多個程序指令

Hadoop詳解(四)——Shuffle原理Partitioner分割槽原理Combiner程式設計常見的MR演算法

package liuxun.hadoop.mr.dc; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.hadoop.conf.Configuration; imp

windows xp sp3 系統gdi32.dll所有匯出的API函式列表大全(整理在此方便查閱學習)

 gdi32.dll是Windows GDI圖形使用者介面相關程式,包含的函式用來繪製圖像和顯示文 ordinal hint RVA name 1

敏捷開發極限程式設計結對程式設計介紹

      參考:http://zhidao.baidu.com/link?url=O9OtPIuteNEcN0hXNDm0k9H3SIZeBsbONCRdp1dUmNAZLWOEdLvLV9ggDHxCd3iq8-wgLreQSbw00-mdxwLUUq 1、敏捷開發

c#檔案下載無響應?(已解決記錄一下)(我使用的是MVC框架網頁程式設計)

 1.前端js !!!我使用了form表單提交,檔案下載才有反應,還不知道原因,如果有知道的大神,麻煩透露一下哦,嘻嘻 $("#download").click(function () {//按鈕的點選事件 alert("aa");