Mwadime Makokha / Mbed 2 deprecated BlueToothSIM868

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }