-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBLEDevice.cpp
More file actions
110 lines (100 loc) · 3.22 KB
/
Copy pathBLEDevice.cpp
File metadata and controls
110 lines (100 loc) · 3.22 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "BLEDevice.h"
#include <iostream>
using namespace std;
BLEDevice::BLEDevice(string deviceName) {
name = deviceName;
}//class constructor
void BLEDevice::receivePacket(string packet) {
string type = "";
string sender_name = "";
string msg = "";
int counter = 0;
string token = "";
//parsing logic
for(int i = 0; i < packet.length(); i++){
if(packet[i] != '|'){
token += packet[i];
} else {
if(counter == 0){
type = token;
if(type == "DIS"){
device = nullptr;
ConnectionStatus = false;
advertiseStatus = false;
}
} else if(counter == 1){
sender_name = token;
}
token = "";
counter++;
}
}
msg = token;
if(type == "MSG"){cout << sender_name << ": " << msg << endl;}
else if(type == "DIS"){cout<<"disconnected successfully by "<<sender_name<<endl;}
}
void BLEDevice::sendPacket(string type,string message){
if(ConnectionStatus && device != nullptr){
string packet = type + "|" + name + "|" + message;//packet formation
//cout<<packet<<endl;;
device->receivePacket(packet);
} else {
cout << "Device not connected\n";
}
}
void BLEDevice::advertise(){
cout << name << " advertising...\n";
advertiseStatus = true;
}
void BLEDevice::connect(BLEDevice &user){
if(user.advertiseStatus){
cout << name << " connected to " << user.name << endl;
ConnectionStatus = true;
user.ConnectionStatus = true;
} else {
cout << user.name << " is not discoverable\n";
}
if(ConnectionStatus == true){
device = &user;
user.device = this;
advertiseStatus = false;
user.advertiseStatus = false;
}else{
cout<<"connection failed\n";
}
}
BLEDevice* BLEDevice::scan(vector<BLEDevice*> &devices){
cout << name << " scanning...\n";
vector<BLEDevice*> available = {};
int counter = 1;
cout<<"found devices\n";
for(auto device : devices){
if(device->advertiseStatus && device->name != name){
cout <<counter<<"."<< device->name << endl;
available.push_back(device);
counter++;
}
}
//cout<<"availble devices:\n";
if(available.size()==0){
return nullptr;
}
int in;
cout<<"which device to connect:";
cin>>in;
string sys;
getline(cin,sys);
if(in>available.size()){
cout<<"device not found\n";
return nullptr;
}else{
return available[in-1];
}
}
void BLEDevice::disconnect(){
sendPacket("DIS","");
ConnectionStatus = false;
advertiseStatus = false;
device = nullptr;
//cout<<"disconnected and disconnect package sent\n";
}