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
- Committer:
- MwadimeMakokha
- Date:
- 2020-01-08
- Revision:
- 3:936c6d909891
- Parent:
- 2:83d03d7148a5
- Child:
- 4:6f32ed1480a4
File content as of revision 3:936c6d909891:
#include "BT.h" Serial* BT::modemSerial =0; BT::BT(Serial &port){ modemSerial = &port; //Test if the modem is good send_bt_cmd("ATE0"); get_response(1000,false); DEBUG_PRINTLN("%s",modem_response); //Power the device and unpair all devices power_bt_device(1); bt_unpair_device(); } void BT::get_bt_status(){ send_bt_cmd("AT+BTSTATUS?"); get_response(1000,true); DEBUG_PRINTLN("%s",modem_response); } void BT::power_bt_device(bool on){ if(on)send_bt_cmd("AT+BTPOWER=1"); else send_bt_cmd("AT+BTPOWER=0"); get_response(1000,false); DEBUG_PRINTLN("%s",modem_response); } char BT::bt_scan(uint32_t timeout){ char id; if(timeout>60000){ int cmd_rounds = timeout/10000; for(int k=0;k<cmd_rounds;k++){ send_bt_cmd("AT+BTSCAN=1,10"); get_response(10000,true); DEBUG_PRINTLN("%s",modem_response); char* mac_address = get_phone_mac_addr(); id = get_phone_id(mac_address); if(id != '0') break ; } } return id; } void BT::bt_pair_device(char id){ DEBUG_PRINTLN("iD returned"); modemSerial->printf("AT+BTPAIR=0,%c\n\r",id); get_response(5000,true); DEBUG_PRINTLN("%s",modem_response); char* passkey = get_phone_passkey(); if(passkey != "error"){ send_bt_cmd("AT+BTPAIR=1,1"); get_response(3000,true); } else{ DEBUG_PRINTLN("Error"); } } char* BT::get_phone_mac_addr(){ return mac_addr_1; } char BT::get_phone_id(char* addr){ char id=0; bool id_found=false; char* dev_addr; int comma_count =0; int arr_index =0; while(modem_response[arr_index] != 0){ if(comma_count==1)id = modem_response[arr_index++]; if(comma_count==3){ for(int k=0;k<17;k++){ dev_addr[k] = modem_response[arr_index+k]; } if(strcmp(dev_addr,addr) == 0){ DEBUG_PRINTLN("id = %c",id); id_found = true; break; } } if(modem_response[arr_index]==',')comma_count++; if(modem_response[arr_index]=='\n')comma_count=0; arr_index++; } return id_found?id:'0'; } char* BT::get_phone_passkey(){ int arr_index = 0; char* passkey=new char[7]; bool passkey_found=false; int comma_count = 0; while(modem_response[arr_index] !=0){ if(comma_count == 2){ int i =0; while(modem_response[arr_index+i] != 0){ passkey[i] = modem_response[arr_index+i]; i++; } passkey[i] = 0; passkey_found = true; break; } if(modem_response[arr_index]==',')comma_count++; arr_index++; } if(passkey_found){ return passkey; } DEBUG_PRINTLN("Error"); return "error"; } void BT::bt_unpair_device(){ send_bt_cmd("AT+BTUNPAIR=0"); get_response(1000,false); } void BT::bt_connect_device(char id){ modemSerial->printf("AT+BTCONNECT=%c,10\n\r",id); get_response(2000,true); DEBUG_PRINTLN("%s",modem_response); } void BT::bt_disconnect_device(char id){ modemSerial->printf("AT+BTDISCONN=%c",id); get_response(2000,true); DEBUG_PRINTLN("%s",modem_response); } void BT::bt_get_profile_id(char id){ modemSerial->printf("AT+BTGETPROF=%c\n\r",id); get_response(2000,true); DEBUG_PRINTLN("%s",modem_response); } void BT::send_bt_cmd(char* cmd){ modemSerial->printf(cmd); modemSerial->printf("\n\r"); } void BT::get_response(uint32_t timeout,bool is_multiline){ int arr_index=0; while(timeout){ if(arr_index >= 254) break; while(modemSerial->readable()){ char c = modemSerial->getc(); if(c == '\r') continue; if(c=='\n' && arr_index==0){ continue; } if(c=='\n' && !is_multiline){ break; } modem_response[arr_index] = c; arr_index++; } timeout--; wait_ms(1); } modem_response[arr_index] = 0; } char* BT::get_response(){ return modem_response; }