Mwadime Makokha / Mbed 2 deprecated BlueToothSIM868

Dependencies:   mbed

Committer:
MwadimeMakokha
Date:
Thu Nov 14 22:38:08 2019 +0000
Revision:
2:83d03d7148a5
Parent:
1:940070f92554
Child:
3:936c6d909891
connect

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 2:83d03d7148a5 5 send_bt_cmd("ATE0");
MwadimeMakokha 2:83d03d7148a5 6 get_response(1000,false);
MwadimeMakokha 1:940070f92554 7 }
MwadimeMakokha 1:940070f92554 8 void BT::get_bt_status(){
MwadimeMakokha 1:940070f92554 9 send_bt_cmd("AT+BTSTATUS?");
MwadimeMakokha 1:940070f92554 10 get_response(1000,true);
MwadimeMakokha 1:940070f92554 11 DEBUG_PRINTLN("%s",modem_response);
MwadimeMakokha 2:83d03d7148a5 12 }
MwadimeMakokha 2:83d03d7148a5 13
MwadimeMakokha 1:940070f92554 14 void BT::power_bt_device(bool on){
MwadimeMakokha 1:940070f92554 15 if(on)send_bt_cmd("AT+BTPOWER=1");
MwadimeMakokha 1:940070f92554 16 else send_bt_cmd("AT+BTPOWER=0");
MwadimeMakokha 1:940070f92554 17 get_response(1000,false);
MwadimeMakokha 1:940070f92554 18 DEBUG_PRINTLN("%s",modem_response);
MwadimeMakokha 1:940070f92554 19 }
MwadimeMakokha 2:83d03d7148a5 20
MwadimeMakokha 2:83d03d7148a5 21 char BT::bt_scan(uint32_t timeout){
MwadimeMakokha 2:83d03d7148a5 22 char id;
MwadimeMakokha 2:83d03d7148a5 23 if(timeout>60000){
MwadimeMakokha 2:83d03d7148a5 24 int cmd_rounds = timeout/10000;
MwadimeMakokha 2:83d03d7148a5 25 for(int k=0;k<cmd_rounds;k++){
MwadimeMakokha 2:83d03d7148a5 26 send_bt_cmd("AT+BTSCAN=1,10");
MwadimeMakokha 2:83d03d7148a5 27 get_response(10000,true);
MwadimeMakokha 1:940070f92554 28 DEBUG_PRINTLN("%s",modem_response);
MwadimeMakokha 1:940070f92554 29 char* mac_address = get_phone_mac_addr();
MwadimeMakokha 2:83d03d7148a5 30 id = get_phone_id(mac_address);
MwadimeMakokha 2:83d03d7148a5 31 if(id != '0') break ;
MwadimeMakokha 2:83d03d7148a5 32 }
MwadimeMakokha 2:83d03d7148a5 33 }
MwadimeMakokha 2:83d03d7148a5 34 return id;
MwadimeMakokha 1:940070f92554 35 }
MwadimeMakokha 2:83d03d7148a5 36
MwadimeMakokha 1:940070f92554 37 void BT::bt_pair_device(char id){
MwadimeMakokha 2:83d03d7148a5 38 DEBUG_PRINTLN("iD returned");
MwadimeMakokha 1:940070f92554 39 modemSerial->printf("AT+BTPAIR=0,%c\n\r",id);
MwadimeMakokha 2:83d03d7148a5 40 get_response(5000,true);
MwadimeMakokha 1:940070f92554 41 DEBUG_PRINTLN("%s",modem_response);
MwadimeMakokha 2:83d03d7148a5 42 char* passkey = get_phone_passkey();
MwadimeMakokha 2:83d03d7148a5 43 if(passkey != "error"){
MwadimeMakokha 2:83d03d7148a5 44 send_bt_cmd("AT+BTPAIR=1,1");
MwadimeMakokha 2:83d03d7148a5 45 get_response(3000,true);
MwadimeMakokha 2:83d03d7148a5 46 }
MwadimeMakokha 2:83d03d7148a5 47 else{
MwadimeMakokha 2:83d03d7148a5 48 DEBUG_PRINTLN("Error");
MwadimeMakokha 2:83d03d7148a5 49 }
MwadimeMakokha 1:940070f92554 50 }
MwadimeMakokha 2:83d03d7148a5 51
MwadimeMakokha 1:940070f92554 52 char* BT::get_phone_mac_addr(){
MwadimeMakokha 1:940070f92554 53 return "74:e6:0f:b1:45:58";
MwadimeMakokha 1:940070f92554 54 }
MwadimeMakokha 1:940070f92554 55 char BT::get_phone_id(char* addr){
MwadimeMakokha 1:940070f92554 56 char id=0;
MwadimeMakokha 1:940070f92554 57 bool id_found=false;
MwadimeMakokha 1:940070f92554 58 char* dev_addr;
MwadimeMakokha 1:940070f92554 59 int comma_count =0;
MwadimeMakokha 1:940070f92554 60 int arr_index =0;
MwadimeMakokha 1:940070f92554 61 while(modem_response[arr_index] != 0){
MwadimeMakokha 1:940070f92554 62 if(comma_count==1)id = modem_response[arr_index++];
MwadimeMakokha 1:940070f92554 63 if(comma_count==3){
MwadimeMakokha 1:940070f92554 64 for(int k=0;k<17;k++){
MwadimeMakokha 1:940070f92554 65 dev_addr[k] = modem_response[arr_index+k];
MwadimeMakokha 1:940070f92554 66 }
MwadimeMakokha 1:940070f92554 67 if(strcmp(dev_addr,addr) == 0){
MwadimeMakokha 1:940070f92554 68 DEBUG_PRINTLN("id = %c",id);
MwadimeMakokha 1:940070f92554 69 id_found = true;
MwadimeMakokha 1:940070f92554 70 break;
MwadimeMakokha 1:940070f92554 71 }
MwadimeMakokha 1:940070f92554 72 }
MwadimeMakokha 1:940070f92554 73 if(modem_response[arr_index]==',')comma_count++;
MwadimeMakokha 1:940070f92554 74 if(modem_response[arr_index]=='\n')comma_count=0;
MwadimeMakokha 1:940070f92554 75 arr_index++;
MwadimeMakokha 1:940070f92554 76 }
MwadimeMakokha 1:940070f92554 77 return id_found?id:'0';
MwadimeMakokha 1:940070f92554 78 }
MwadimeMakokha 1:940070f92554 79
MwadimeMakokha 2:83d03d7148a5 80 char* BT::get_phone_passkey(){
MwadimeMakokha 2:83d03d7148a5 81 int arr_index = 0;
MwadimeMakokha 2:83d03d7148a5 82 char* passkey=new char[7];
MwadimeMakokha 2:83d03d7148a5 83 bool passkey_found=false;
MwadimeMakokha 2:83d03d7148a5 84 int comma_count = 0;
MwadimeMakokha 2:83d03d7148a5 85 while(modem_response[arr_index] !=0){
MwadimeMakokha 2:83d03d7148a5 86 if(comma_count == 2){
MwadimeMakokha 2:83d03d7148a5 87 int i =0;
MwadimeMakokha 2:83d03d7148a5 88 while(modem_response[arr_index+i] != 0){
MwadimeMakokha 2:83d03d7148a5 89 passkey[i] = modem_response[arr_index+i];
MwadimeMakokha 2:83d03d7148a5 90 i++;
MwadimeMakokha 2:83d03d7148a5 91 }
MwadimeMakokha 2:83d03d7148a5 92 passkey[i] = 0;
MwadimeMakokha 2:83d03d7148a5 93 passkey_found = true;
MwadimeMakokha 2:83d03d7148a5 94 break;
MwadimeMakokha 2:83d03d7148a5 95 }
MwadimeMakokha 2:83d03d7148a5 96 if(modem_response[arr_index]==',')comma_count++;
MwadimeMakokha 2:83d03d7148a5 97 arr_index++;
MwadimeMakokha 2:83d03d7148a5 98 }
MwadimeMakokha 2:83d03d7148a5 99 if(passkey_found){
MwadimeMakokha 2:83d03d7148a5 100 return passkey;
MwadimeMakokha 2:83d03d7148a5 101 }
MwadimeMakokha 2:83d03d7148a5 102 DEBUG_PRINTLN("Error");
MwadimeMakokha 2:83d03d7148a5 103 return "error";
MwadimeMakokha 2:83d03d7148a5 104 }
MwadimeMakokha 2:83d03d7148a5 105
MwadimeMakokha 2:83d03d7148a5 106 void BT::bt_unpair_device(){
MwadimeMakokha 2:83d03d7148a5 107 send_bt_cmd("AT+BTUNPAIR=0");
MwadimeMakokha 2:83d03d7148a5 108 get_response(1000,false);
MwadimeMakokha 2:83d03d7148a5 109 }
MwadimeMakokha 2:83d03d7148a5 110
MwadimeMakokha 2:83d03d7148a5 111 void BT::bt_connect_device(char id,char profile_id){
MwadimeMakokha 2:83d03d7148a5 112 DEBUG_PRINTLN("%c",id);
MwadimeMakokha 2:83d03d7148a5 113 DEBUG_PRINTLN("%c",profile_id);
MwadimeMakokha 2:83d03d7148a5 114 // modemSerial->printf("AT+BTCONNECT=%c,%c\n\r",id,profile_id);
MwadimeMakokha 2:83d03d7148a5 115 send_bt_cmd("AT+BTCONNECT=1,10");
MwadimeMakokha 2:83d03d7148a5 116 get_response(3000,true);
MwadimeMakokha 2:83d03d7148a5 117 DEBUG_PRINTLN("%s",modem_response);
MwadimeMakokha 2:83d03d7148a5 118 }
MwadimeMakokha 2:83d03d7148a5 119
MwadimeMakokha 2:83d03d7148a5 120 char BT::bt_get_profile_id(char id){
MwadimeMakokha 2:83d03d7148a5 121 char profile_id=0;
MwadimeMakokha 2:83d03d7148a5 122 modemSerial->printf("AT+BTGETPROF=%c\n\r",id);
MwadimeMakokha 2:83d03d7148a5 123 get_response(2000,true);
MwadimeMakokha 2:83d03d7148a5 124 int arr_index=0;
MwadimeMakokha 2:83d03d7148a5 125 DEBUG_PRINTLN("%s",modem_response);
MwadimeMakokha 2:83d03d7148a5 126 while(modem_response[arr_index]!='\n'){
MwadimeMakokha 2:83d03d7148a5 127 if(modem_response[arr_index] == ':'){
MwadimeMakokha 2:83d03d7148a5 128 if(modem_response[arr_index+1] == ' '){
MwadimeMakokha 2:83d03d7148a5 129 profile_id = modem_response[arr_index+2];
MwadimeMakokha 2:83d03d7148a5 130 break;
MwadimeMakokha 2:83d03d7148a5 131 }
MwadimeMakokha 2:83d03d7148a5 132 profile_id = modem_response[arr_index+1];
MwadimeMakokha 2:83d03d7148a5 133 break;
MwadimeMakokha 2:83d03d7148a5 134 }
MwadimeMakokha 2:83d03d7148a5 135 arr_index++;
MwadimeMakokha 2:83d03d7148a5 136 }
MwadimeMakokha 2:83d03d7148a5 137 return profile_id;
MwadimeMakokha 2:83d03d7148a5 138 }
MwadimeMakokha 2:83d03d7148a5 139
MwadimeMakokha 2:83d03d7148a5 140 void BT::send_bt_cmd(char* cmd){
MwadimeMakokha 1:940070f92554 141 modemSerial->printf(cmd);
MwadimeMakokha 1:940070f92554 142 modemSerial->printf("\n\r");
MwadimeMakokha 1:940070f92554 143 }
MwadimeMakokha 2:83d03d7148a5 144 void BT::get_response(uint32_t timeout,bool is_multiline){
MwadimeMakokha 1:940070f92554 145 int arr_index=0;
MwadimeMakokha 1:940070f92554 146 while(timeout){
MwadimeMakokha 1:940070f92554 147 if(arr_index >= 254) break;
MwadimeMakokha 1:940070f92554 148 while(modemSerial->readable()){
MwadimeMakokha 1:940070f92554 149 char c = modemSerial->getc();
MwadimeMakokha 1:940070f92554 150 if(c == '\r') continue;
MwadimeMakokha 1:940070f92554 151 if(c=='\n' && arr_index==0){
MwadimeMakokha 1:940070f92554 152 continue;
MwadimeMakokha 1:940070f92554 153 }
MwadimeMakokha 1:940070f92554 154 if(c=='\n' && !is_multiline){
MwadimeMakokha 1:940070f92554 155 break;
MwadimeMakokha 1:940070f92554 156 }
MwadimeMakokha 1:940070f92554 157 modem_response[arr_index] = c;
MwadimeMakokha 1:940070f92554 158 arr_index++;
MwadimeMakokha 1:940070f92554 159 }
MwadimeMakokha 1:940070f92554 160 timeout--;
MwadimeMakokha 1:940070f92554 161 wait_ms(1);
MwadimeMakokha 1:940070f92554 162 }
MwadimeMakokha 1:940070f92554 163 modem_response[arr_index] = 0;
MwadimeMakokha 1:940070f92554 164 }