Mwadime Makokha / Mbed 2 deprecated BlueToothSIM868

Dependencies:   mbed

Committer:
MwadimeMakokha
Date:
Wed Jan 08 11:23:14 2020 +0000
Revision:
3:936c6d909891
Parent:
2:83d03d7148a5
Child:
4:6f32ed1480a4
Initial Commit

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