Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
BT.cpp@1:940070f92554, 2019-11-14 (annotated)
- Committer:
- MwadimeMakokha
- Date:
- Thu Nov 14 14:02:32 2019 +0000
- Revision:
- 1:940070f92554
- Child:
- 2:83d03d7148a5
Add scanning and getting device id based on mac address
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MwadimeMakokha | 1:940070f92554 | 1 | #include "BT.h" |
MwadimeMakokha | 1:940070f92554 | 2 | Serial* BT::modemSerial =0; |
MwadimeMakokha | 1:940070f92554 | 3 | BT::BT(Serial &port){ |
MwadimeMakokha | 1:940070f92554 | 4 | modemSerial = &port; |
MwadimeMakokha | 1:940070f92554 | 5 | } |
MwadimeMakokha | 1:940070f92554 | 6 | void BT::get_bt_status(){ |
MwadimeMakokha | 1:940070f92554 | 7 | send_bt_cmd("AT+BTSTATUS?"); |
MwadimeMakokha | 1:940070f92554 | 8 | get_response(1000,true); |
MwadimeMakokha | 1:940070f92554 | 9 | DEBUG_PRINTLN("%s",modem_response); |
MwadimeMakokha | 1:940070f92554 | 10 | } |
MwadimeMakokha | 1:940070f92554 | 11 | void BT::power_bt_device(bool on){ |
MwadimeMakokha | 1:940070f92554 | 12 | if(on)send_bt_cmd("AT+BTPOWER=1"); |
MwadimeMakokha | 1:940070f92554 | 13 | else send_bt_cmd("AT+BTPOWER=0"); |
MwadimeMakokha | 1:940070f92554 | 14 | get_response(1000,false); |
MwadimeMakokha | 1:940070f92554 | 15 | DEBUG_PRINTLN("%s",modem_response); |
MwadimeMakokha | 1:940070f92554 | 16 | } |
MwadimeMakokha | 1:940070f92554 | 17 | char BT::bt_scan(){ |
MwadimeMakokha | 1:940070f92554 | 18 | send_bt_cmd("AT+BTSCAN=1,10"); |
MwadimeMakokha | 1:940070f92554 | 19 | get_response(10000,true); |
MwadimeMakokha | 1:940070f92554 | 20 | DEBUG_PRINTLN("%s",modem_response); |
MwadimeMakokha | 1:940070f92554 | 21 | wait_ms(2000); |
MwadimeMakokha | 1:940070f92554 | 22 | char* mac_address = get_phone_mac_addr(); |
MwadimeMakokha | 1:940070f92554 | 23 | return get_phone_id(mac_address); |
MwadimeMakokha | 1:940070f92554 | 24 | } |
MwadimeMakokha | 1:940070f92554 | 25 | void BT::bt_pair_device(char id){ |
MwadimeMakokha | 1:940070f92554 | 26 | modemSerial->printf("AT+BTPAIR=0,%c\n\r",id); |
MwadimeMakokha | 1:940070f92554 | 27 | get_response(1000,true); |
MwadimeMakokha | 1:940070f92554 | 28 | DEBUG_PRINTLN("%s",modem_response); |
MwadimeMakokha | 1:940070f92554 | 29 | } |
MwadimeMakokha | 1:940070f92554 | 30 | char* BT::get_phone_mac_addr(){ |
MwadimeMakokha | 1:940070f92554 | 31 | return "74:e6:0f:b1:45:58"; |
MwadimeMakokha | 1:940070f92554 | 32 | } |
MwadimeMakokha | 1:940070f92554 | 33 | char BT::get_phone_id(char* addr){ |
MwadimeMakokha | 1:940070f92554 | 34 | char id=0; |
MwadimeMakokha | 1:940070f92554 | 35 | bool id_found=false; |
MwadimeMakokha | 1:940070f92554 | 36 | char* dev_addr; |
MwadimeMakokha | 1:940070f92554 | 37 | int comma_count =0; |
MwadimeMakokha | 1:940070f92554 | 38 | int arr_index =0; |
MwadimeMakokha | 1:940070f92554 | 39 | while(modem_response[arr_index] != 0){ |
MwadimeMakokha | 1:940070f92554 | 40 | if(comma_count==1)id = modem_response[arr_index++]; |
MwadimeMakokha | 1:940070f92554 | 41 | if(comma_count==3){ |
MwadimeMakokha | 1:940070f92554 | 42 | for(int k=0;k<17;k++){ |
MwadimeMakokha | 1:940070f92554 | 43 | //pcSerial.printf("%c",modem_response[arr_index+k]); |
MwadimeMakokha | 1:940070f92554 | 44 | dev_addr[k] = modem_response[arr_index+k]; |
MwadimeMakokha | 1:940070f92554 | 45 | } |
MwadimeMakokha | 1:940070f92554 | 46 | if(strcmp(dev_addr,addr) == 0){ |
MwadimeMakokha | 1:940070f92554 | 47 | DEBUG_PRINTLN("id = %c",id); |
MwadimeMakokha | 1:940070f92554 | 48 | id_found = true; |
MwadimeMakokha | 1:940070f92554 | 49 | break; |
MwadimeMakokha | 1:940070f92554 | 50 | } |
MwadimeMakokha | 1:940070f92554 | 51 | } |
MwadimeMakokha | 1:940070f92554 | 52 | if(modem_response[arr_index]==',')comma_count++; |
MwadimeMakokha | 1:940070f92554 | 53 | if(modem_response[arr_index]=='\n')comma_count=0; |
MwadimeMakokha | 1:940070f92554 | 54 | arr_index++; |
MwadimeMakokha | 1:940070f92554 | 55 | } |
MwadimeMakokha | 1:940070f92554 | 56 | return id_found?id:'0'; |
MwadimeMakokha | 1:940070f92554 | 57 | } |
MwadimeMakokha | 1:940070f92554 | 58 | |
MwadimeMakokha | 1:940070f92554 | 59 | void BT::send_bt_cmd(char cmd[]){ |
MwadimeMakokha | 1:940070f92554 | 60 | modemSerial->printf(cmd); |
MwadimeMakokha | 1:940070f92554 | 61 | modemSerial->printf("\n\r"); |
MwadimeMakokha | 1:940070f92554 | 62 | } |
MwadimeMakokha | 1:940070f92554 | 63 | void BT::get_response(uint16_t timeout,bool is_multiline){ |
MwadimeMakokha | 1:940070f92554 | 64 | int arr_index=0; |
MwadimeMakokha | 1:940070f92554 | 65 | while(timeout){ |
MwadimeMakokha | 1:940070f92554 | 66 | if(arr_index >= 254) break; |
MwadimeMakokha | 1:940070f92554 | 67 | while(modemSerial->readable()){ |
MwadimeMakokha | 1:940070f92554 | 68 | char c = modemSerial->getc(); |
MwadimeMakokha | 1:940070f92554 | 69 | if(c == '\r') continue; |
MwadimeMakokha | 1:940070f92554 | 70 | if(c=='\n' && arr_index==0){ |
MwadimeMakokha | 1:940070f92554 | 71 | continue; |
MwadimeMakokha | 1:940070f92554 | 72 | } |
MwadimeMakokha | 1:940070f92554 | 73 | if(c=='\n' && !is_multiline){ |
MwadimeMakokha | 1:940070f92554 | 74 | break; |
MwadimeMakokha | 1:940070f92554 | 75 | } |
MwadimeMakokha | 1:940070f92554 | 76 | modem_response[arr_index] = c; |
MwadimeMakokha | 1:940070f92554 | 77 | arr_index++; |
MwadimeMakokha | 1:940070f92554 | 78 | } |
MwadimeMakokha | 1:940070f92554 | 79 | timeout--; |
MwadimeMakokha | 1:940070f92554 | 80 | wait_ms(1); |
MwadimeMakokha | 1:940070f92554 | 81 | } |
MwadimeMakokha | 1:940070f92554 | 82 | modem_response[arr_index] = 0; |
MwadimeMakokha | 1:940070f92554 | 83 | } |