<markdown> BGAPI ===== ## ã¯ã˜ã‚ã« BGAPIã¯**command**,**response**,**event**ã¨ã„ã†3種類ã®å‡¦ç†ã«ã‚ˆã£ã¦å‹•作ã™ã‚‹ã€ イベントドリブンãªè»½é‡APIã§ã™ã€‚実体ã¯é©åˆ‡ãªãƒ•ォーマットã®16進数をé€å—ä¿¡ã—ã¦ã„ã‚‹ã ã‘ã§ã‚り〠ã•ã¾ã–ã¾ãªãƒ—ãƒã‚°ãƒ©ãƒŸãƒ³ã‚°è¨€èªžã«ç°¡å˜ã«ç§»æ¤ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ (å‚考:[Python, C#, Arduinoå‘ã‘ã®å®Ÿè£…例](https://github.com/jrowberg/bglib)) æœ¬æ–‡ç« ã§ã¯ã€BlueGigaç¤¾ã®æä¾›ã™ã‚‹BLESDKã«åŒæ¢±ã•れã¦ã„ã‚‹**bglib**ã®ä½¿ç”¨æ–¹æ³•ã«ã¤ã„ã¦ã€ ç°¡å˜ã«è§£èª¬ã—ã¦ã„ããŸã„ã¨æ€ã„ã¾ã™ã€‚ ## 基本概念 BLE機器ã¨ã®æŽ¥ç¶šï¼Œã‚ャラクタリスティックã®èªã¿æ›¸ãç‰ã®åŸºæœ¬çš„ãªå‡¦ç†ã¯ã‚‚ã¡ã‚ん〠複雑ãªã‚·ã‚¹ãƒ†ãƒ コマンドã¾ã§ã€å…¨ã¦ãŒé–¢æ•°ã¨ã—ã¦å®Ÿè£…ã•れã¦ã„ã¾ã™ã€‚ ユーザã¯ãれらを呼ã³å‡ºã™ã ã‘ã§ã€BGAPIã®å…¨ã¦ã®æ©Ÿèƒ½ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ (実装ファイル:anytypes.h, cmd_def.h, cmd_def.h) PCã‹ã‚‰ä½¿ç”¨ã™ã‚‹å ´åˆã€BlueGiga社ã®BLEドングル,BLED112ã«ä»®æƒ³COMドライãƒã‹ã‚‰ã‚¢ã‚¯ã‚»ã‚¹ã—〠BGAPIã®**command**ã‚’é€ä¿¡ã—ã¾ã™ã€‚**command**ã¯å—ç†ã•れãŸå ´åˆã€å¿…ãš**response**ã‚’è¿”ã—ã¦ãã¾ã™ã€‚ ã“れを仮想COMã‹ã‚‰èªã¿è¾¼ã¿è§£æžã™ã‚‹ã“ã¨ã§ã€ãƒ¦ãƒ¼ã‚¶ã¯**command**ã®å®Ÿè¡Œçµæžœç‰ã®è©³ç´°ãªæƒ…å ±ã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ ã¾ãŸã€ã„ãã¤ã‹ã®å‡¦ç†ã¯çµæžœã‚’**event**ã¨ã—ã¦ã€ä¸å®šæœŸã«è¿”å´ã—ã¦ãã¾ã™ã€‚ ãªã®ã§ã€ãã†ã—ãŸå‡¦ç†ã«å¯¾ã—ã¦ã¯å®Ÿè¡Œå¾Œã€è¤‡æ•°å›žã®ä»®æƒ³COMã‹ã‚‰ã®èªã¿å‡ºã—ãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚ ã“ã†ã—ãŸ**response**ã¨**event**ã¯ã€ã‚¤ãƒ™ãƒ³ãƒˆãƒãƒ³ãƒ‰ãƒ©ã§å‡¦ç†ã™ã‚‹ã“ã¨ã‚’想定ã—ã¦ã„ã¾ã™ã€‚ ãªã®ã§ã€ãƒ¦ãƒ¼ã‚¶ã¯ãã®å®Ÿè£…ã‚’é©å®œæ›¸ãæ›ãˆã‚‹ã“ã¨ã§ä»»æ„ã®å‹•作を実ç¾ã—ã¾ã™ã€‚ (実装ファイル:commands.c) ## 下準備 ### 1. ドライãƒã®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ« [BLED112ã®è£½å“ページ](https://www.bluegiga.com/en-US/products/bled112-bluetooth-smart-dongle/)ã‹ã‚‰ã€ ドライãƒã‚’ダウンãƒãƒ¼ãƒ‰ã—ã¾ã™ã€‚(ダウンãƒãƒ¼ãƒ‰ã«ã¯ä¼šå“¡ç™»éŒ²ãŒå¿…è¦ã§ã™ã€‚) ### 2. シリアル通信処ç†ã®å®Ÿè£… BGAPIを使用ã™ã‚‹ã«ã‚ãŸã£ã¦ã€ã‚³ãƒžãƒ³ãƒ‰é€ä¿¡å‡¦ç†ã¨ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãƒ«ãƒ¼ãƒ—を独自ã«å®Ÿè£…ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ **scan_example**内ã®**output関数**,**read_message関数**ãŒãれãžã‚Œå‚考ã«ãªã‚‹ã‹ã¨æ€ã„ã¾ã™ã€‚ 注æ„点ã¨ã—ã¦ã€ãŠãらã仮想COMã®ãƒ‰ãƒ©ã‚¤ãƒã¯å…¨äºŒé‡é€šä¿¡ã«å¯¾å¿œã—ã¦ã„ã¾ã›ã‚“。 ãã®ãŸã‚ã€ä»®æƒ³COMã®èªã¿æ›¸ãã¯æŽ’ä»–åˆ¶å¾¡ã•れる必è¦ãŒã‚りã¾ã™ã€‚ ## BGAPIを用ã„ãŸBLEæŽ¥ç¶šæ‰‹é † ç°¡å˜ã®ãŸã‚ã€ä¸€éƒ¨ã®**command**ã®å¼•æ•°ã®è§£èª¬ã‚„ã€**response**ã®ç™ºç”Ÿã‚¿ã‚¤ãƒŸãƒ³ã‚°ã«ã¤ã„ã¦ã¯è¨˜è¿°ã—ã¾ã›ã‚“。 1. **ble_cmd_gap_end_procedure()** ç¾åœ¨ã®GAP接続ãŠã‚ˆã³ã€BLEæ©Ÿå™¨ã®æ¤œç´¢ã‚’終了ã—ã¾ã™ã€‚ 2. **ble_cmd_connection_disconnect(uint8 handle)** *handle*ã«æŒ‡å®šã—ãŸæŽ¥ç¶šã‚’ç ´æ£„ã—ã€ãã®æŽ¥ç¶šã‚’åˆ©ç”¨å¯èƒ½ãªçŠ¶æ…‹ã«ã—ã¾ã™ã€‚ 3. **ble_cmd_gap_discover(args...)** アドãƒã‚¿ã‚¤ã‚ºçŠ¶æ…‹ã®BLE機器を検索ã—ã¾ã™ã€‚ æ¤œç´¢çµæžœã¯**ble_evt_connection_status()**ã¨ã—ã¦ç™ºç”Ÿã—〠ãã®ã‚¤ãƒ™ãƒ³ãƒˆãƒãƒ³ãƒ‰ãƒ©å†…ã§å‚ç…§ã™ã‚‹ã“ã¨ãŒå¯èƒ½ã§ã™ã€‚ 4. **ble_cmd_gap_connect_direct(bd_addr address, args...)** *address*ã«6byteã®macアドレスを指定ã™ã‚‹ã“ã¨ã§ã€ãã®BLEæ©Ÿå™¨ã¸æŽ¥ç¶šã—ã¾ã™ã€‚ </markdown>