Microsoft從去年訂出藍芽快速配對(Swift Pairing)連接方式,雖然起初windows 10 更新版本1809有不少災情,不過微軟也出了相關補丁;Swift Pairing讓用戶更容易連接周邊裝置,省去了之前連接連牙設備的多步驟,對於大部分的用戶,還是便利許多。
不過再談Swift Pairing之前,必須先從BLE的廣播封包規格談起,BLE頻率是2.4GHz ISM band,範圍由2.402GHz~2.480GHz,共分成40個頻道,其中用來廣播使用37、38、39這3個頻道,用來新裝置配對,斷線回聯…等等功能。如下圖:
廣播封包的格式則如下:
其中Preamble就是一連串的0跟1交叉組成. Ex: 10101010b or 01010101b。而Access Address則固定為0x8E89BED6,共 4個bytes。
因此廣播的封包,所要夾帶的訊息必須在39個Byte內完成,其中這39個byte又必須包括2個byte的PDU Header 及配對裝置自己的6個byte藍芽位址,因此就只剩下31個byte可以使用。如下Figure2.2,而PDU Header 2byte定義如下Figure 2.3,至於各個說明,請参考藍芽規格書Core_V4.2.pdf中的Vol6_Part B_1.4,在此就不細說。
為了說明廣播封包的結構,底下是用TI Sniffer擷取的一台滑鼠廣播封包:
圖中上半部有色彩是Sniffer解讀,圖下半部則是實際資料封包,2者是對應一樣的.
再Packet data的第2個開始的4個字節(藍色mark處)就是Access Address,其中低字節在前(先送出),所以剛好反過來,0x0x8E89BED6,你可能會問我,那第一個0x2E是甚麼,它代表後面的資料長度是多少?(不包括自己),(PS:所有資料開頭都是長度)。
接著0x40 & 0x23就是PDU Header,而接下來跟著的就是裝置的藍芽位址6個字節,一樣是低字節在前。
接下來就是我們要談的資料封包,也是一般韌體RD會去修改的部分,當然Swift Pairing也是包括在這裡面。如下圖藍色mark處:
從FW源代碼的內容角度來看,說明會比較容易,在PixArt BLE PAR2801 reference內¸ 宣告相關的字節如下:
uint8_t ADV_DATA[] = {
0x02,
0x01, // AD Type:
0x05,
0x03,
0x19, //AD type
0xC2, //Appearance: HID Mouse (0x03C2)
0x03,
0x03,
0x03, // UUIDs 0x1812
0x12,
0x18,
0x11, // length
0x09, // AD Type: 09:device full name
0x50, // "P"
0x69, // "i"
0x78, // "x"
0x41, // "A"
0x72, // "r"
0x74, // "t"
0x20, // " "
0x42, // "B"
0x4C, // "L"
0x45, // "E"
0x20, // " "
0x4D, // "M"
0x6F, // "o"
0x75, // "u"
0x73, // "s"
0x65 // "e"
};
若是使用者知道如何去新增裝置,在PC藍芽新增裝置的視窗內,若是PC收到這樣的廣播封包,就會直接出現滑鼠的裝置,且名稱為”PixArt BLE Mouse”,如下畫面:
雖然這樣的操作讓電腦連接配對到新裝置並不難,不就是開啟電腦的”設定”選項,然後再點選”裝置”,然後再找到藍芽與其他裝置”的選項,最後再點選”新增藍芽或其他裝置”,最後….真的是最後了,必須再點”藍芽”,才會看到上面的畫面,天阿,看到這邊好像再繞口令,有鑑於此微軟設計了一個方式,讓使用者再連接配對新裝置變得容易很多,只要符合微軟的規範,當電腦發現有新裝置會再視窗桌面右下角談出一個小視窗(如下),使用者若確定是自己的連接的新裝置,直接按”Connect”即可,省去不少步驟。
要達到這樣的功能,只要在廣播封包內加入6個字節的宣告即可(如下表微軟說明):
但是受限於廣播封包31字節長度的限制,因此只好修改裝置名稱為”PixArt BLE1”,因此FW源代碼內容修改如下:
uint8_t ADV_DATA[] = {
0x06, // length
0xff,
0x06,
0x00,
0x03,
0x00,
0x80,
0x02,
0x01, // AD Type:
0x05,
0x03,
0x19, //AD type
0xC2, //Appearance: HID Mouse (0x03C2)
0x03,
0x03,
0x03, // UUIDs 0x1812
0x12,
0x18,
0x0C, // length
0x09, // AD Type: 09:device full name
0x50, // "P"
0x69, // "i"
0x78, // "x"
0x41, // "A"
0x72, // "r"
0x74, // "t"
0x20, // " "
0x42, // "B"
0x4C, // "L"
0x45, // "E"
0x31, // "1"
};
當電腦收到上面的廣播封包,即在視窗右下角談出如下畫面, 使用者只要點選”連線”即可,省去不少步驟。
至此你可能會問,若裝置名稱太長怎麼辦?廣播封包是否一定要有裝置名稱?以及其他字節代表意義是甚麼? 甚至MAC有支援快速配對嗎? 這就留在下一篇再分享相關AD type定義及長字串名稱如何操作。
評論
BenB
2021年2月3日