與其他相似規格的BLE系統板相比,此套件具有以下強項:
特別值得一提的是,從開箱到完成Pioneer Kit Guide的嘗鮮過程,整個使用者體驗是非常完整流暢的:
總體來說,這套件使用者開發環境設計良好,而整個系統具有強大的功能與彈性,同時適合BLE初學者的入門學習,以及開發者的產品開發。
因為測試需求,最近急需有個BLE HID-Keyboard功能的系統,來做為測試工具。系統方塊圖計畫如下:
正好可以使用這個題目,來進一步熟悉Cypress PSoC BLE套件。所以就規劃以下幾個小型實作步驟,來逐步完成所有開發的工作。
在”Pioneer Kit Guide”中,提到PSoC board原本就具有UART的功能,以及相關的pin腳。所以在這個實作,目的是要確認PC端的Terminal可以與PSoC端,順利的接收與傳送字元。
(1)開啟新專案
然後就可以看到目前系統只有幾個基本的功能模組,其中有UART的功能模組 。
針對UART模組,可以很容易的完成Serial Port參數的設定。
然後使用Build Design,編譯完成後,就會產生許多程式碼,這時候打開main.c,在裡面加入呼叫UART的字元讀寫函數:UART_UartGetChar()以及UART_UartPutChar()。之後再次Build Design,然後燒錄程式。
接下來記得在PC端設定Terminal的UART設定值,其中針對New-line的部分修改,這樣Terminal收到ENTER鍵的時候,呈現的行為就會是我們習慣的換行行為(CR/LF)。
最後,將版子的Pin腳完成連接,將P1.4接P12.7,以及P1.5接P12.6。
完成所有設置後就大功告成,可以在Terminal看到自己輸入的字元。
首先搜尋適當的範例程式,然後按下"Create New Workspace"將整個範例載入:
載入後可以看到除了BLE除了HID的部分,還有Battery Service以及電量偵測的ADC,另外系統還有使用UART,WatchDog Timer,LED以及SW2。現在不需做任何修正,只要記得有這些機制,方便接下來可以用來理解程式與系統運作。
以下是BLE HID-Keyboard的設定,可以用來學習熟悉BLE相關設定,不需要做修改,或者可以嘗試修改GAP Settings中的Device Name。
接下來就可以Build Design以及Program,然後就利用iPad來做實驗,看看範例程式執行的情形。首先打開iPad的藍芽後,就可以看到BLE Keyboard出現在裝置的列表中,點擊之後就會出現配對要求:
完成配對之後打開"備忘錄"APP,就會看到自動依序輸入英文字母與數字後換行。如果使用者壓下SW2,就等於是壓下"Caps Lock",而這時候LED燈會就變成藍色:
同時可以看到系統透過UART,輸出系統程式安插的各種訊息:
至於Battery Service的數值,可以透過CySmart Dongle在PC讀取,或者是CySmart APP在智能手機或平板上來讀取:
同時我們可以使用CySmart USB Dongle,配合PC端的CySmart應用程式來讀取HOGP中HID的keyboard report內容。只要在CySmart應用程式中,依序"Start Scan"–>"Connect" BLE Keyboard,然後"Discover All Attributes","Pair","Enable All Notifications",就可以看到Report的內容。
可以看到內容為8個byte,程式定期改變其中一個byte的內容,關於Report的具體內容格式,請參考HID的相關規範。
經過前面兩個實作後,現在就有充分的信心來完成最後的整合。首先就將UART_UartGetChar()以及UART_UartPutChar()建立function call,然後在主程式中呼叫此function call。
實驗結果卻發現在Terminal的按鍵輸入,常常會收不到回應,跟實作一的結果不同。
這時候想到在實作二中,程式使用到WatchDog Timer,來讓系統在BLE運作之間的等待時刻,能進入Deep Sleep Mode後被喚醒,因此猜想是這個部分影響了UART的接收。所以在以下的程式片段做了修改,避免系統進入Deep Sleep Mode而影響了UART的接收,之後UART就能正常接收與回應。
接下來,因為UART收到的ASCII字元碼,與HID Report的Key Code不相同,所以需要做轉換後,才能給HID report使用。我的作法是透過建立一個Look-up-table,
然後在SimulateKeyboard()中,依照ASCII碼來索引取得HID Key Report所需要的數值。
完成修改後再次進行測試,這時候就可以從PC端的Terminal輸入字元,而在iPad看到所輸入的字元。
在先前的測試,應該很容易就發現一個大問題,就是按鍵的反應太慢,無法滿足快速輸入的test case。這部分是因為Watch Dog Timer設定是100ms中斷一次,每次中斷後,才會去執行到SimulateKeyboard()。所以最快速的解決方法,就是修改Watch Dog Timer的Timeout數值,讓中斷的周期時間縮短。
當然可以預期這樣子修改,相對會造成其他有參考到此timer的功能的時序改變,例如LED閃燈變快,Battery Service的更新週期改變…等。
程式如何修改才是最佳的作法,以及對於BLE運作的影響,還有power consumption的影響程度,這是後續可以進一步探討的的課題。