Skip to content

Commit 2157b93

Browse files
committed
2 parents 008e524 + 96b4179 commit 2157b93

File tree

2 files changed

+48
-25
lines changed

2 files changed

+48
-25
lines changed

src/board_controller/emotibit/emotibit.cpp

+45-23
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include <stdint.h>
66
#include <string.h>
77

8+
#include "broadcast_server.h"
89
#include "custom_cast.h"
910
#include "json.hpp"
1011
#include "network_interfaces.h"
@@ -20,7 +21,7 @@ Emotibit::Emotibit (struct BrainFlowInputParams params)
2021
{
2122
data_socket = NULL;
2223
control_socket = NULL;
23-
advertise_socket_server = NULL;
24+
adv_socket = NULL;
2425
keep_alive = false;
2526
initialized = false;
2627
control_port = -1;
@@ -70,10 +71,10 @@ int Emotibit::prepare_session ()
7071

7172
if (res != (int)BrainFlowExitCodes::STATUS_OK)
7273
{
73-
if (advertise_socket_server != NULL)
74+
if (adv_socket != NULL)
7475
{
75-
delete advertise_socket_server;
76-
advertise_socket_server = NULL;
76+
delete adv_socket;
77+
adv_socket = NULL;
7778
}
7879
if (data_socket != NULL)
7980
{
@@ -165,11 +166,11 @@ int Emotibit::release_session ()
165166
delete control_socket;
166167
control_socket = NULL;
167168
}
168-
if (advertise_socket_server)
169+
if (adv_socket)
169170
{
170-
advertise_socket_server->close ();
171-
delete advertise_socket_server;
172-
advertise_socket_server = NULL;
171+
adv_socket->close ();
172+
delete adv_socket;
173+
adv_socket = NULL;
173174
}
174175
control_port = -1;
175176
data_port = -1;
@@ -596,14 +597,14 @@ int Emotibit::create_adv_connection ()
596597

597598
for (std::string broadcast_address : broadcast_addresses)
598599
{
600+
BroadCastServer *advertise_socket =
601+
new BroadCastServer (broadcast_address.c_str (), WIFI_ADVERTISING_PORT);
599602
res = (int)BrainFlowExitCodes::STATUS_OK;
600603
safe_logger (
601604
spdlog::level::info, "trying broadcast address: {}", broadcast_address.c_str ());
602605
if (res == (int)BrainFlowExitCodes::STATUS_OK)
603606
{
604-
advertise_socket_server =
605-
new BroadCastServer (broadcast_address.c_str (), WIFI_ADVERTISING_PORT);
606-
int init_res = advertise_socket_server->init ();
607+
int init_res = advertise_socket->init ();
607608
if (init_res != (int)BroadCastServerReturnCodes::STATUS_OK)
608609
{
609610
safe_logger (spdlog::level::err, "failed to init broadcast server socket: {}", res);
@@ -614,7 +615,7 @@ int Emotibit::create_adv_connection ()
614615
{
615616
std::string package = create_package (HELLO_EMOTIBIT, 0, "", 0);
616617
safe_logger (spdlog::level::info, "sending package: {}", package.c_str ());
617-
int bytes_send = advertise_socket_server->send (package.c_str (), (int)package.size ());
618+
int bytes_send = advertise_socket->send (package.c_str (), (int)package.size ());
618619
if (bytes_send != (int)package.size ())
619620
{
620621
safe_logger (
@@ -632,8 +633,8 @@ int Emotibit::create_adv_connection ()
632633
double start_time = get_timestamp ();
633634
for (int i = 0; (i < 100) && (!found); i++)
634635
{
635-
int bytes_recv = advertise_socket_server->recv (
636-
recv_data, max_size, emotibit_ip, max_ip_addr_size);
636+
int bytes_recv =
637+
advertise_socket->recv (recv_data, max_size, emotibit_ip, max_ip_addr_size);
637638
if (bytes_recv > 0)
638639
{
639640
std::vector<std::string> splitted_packages =
@@ -679,19 +680,40 @@ int Emotibit::create_adv_connection ()
679680
res = (int)BrainFlowExitCodes::BOARD_NOT_READY_ERROR;
680681
}
681682
}
682-
if (res != (int)BrainFlowExitCodes::STATUS_OK)
683+
if (advertise_socket != NULL)
683684
{
684-
if (advertise_socket_server != NULL)
685-
{
686-
delete advertise_socket_server;
687-
advertise_socket_server = NULL;
688-
}
685+
delete advertise_socket;
686+
advertise_socket = NULL;
689687
}
690-
else
688+
if (res == (int)BrainFlowExitCodes::STATUS_OK)
691689
{
692690
break;
693691
}
694692
}
693+
// we dont need broadcast anymore, replace it with normal socket
694+
if (res == (int)BrainFlowExitCodes::STATUS_OK)
695+
{
696+
// ugly but makes it safer
697+
#ifdef _WIN32
698+
Sleep (1000);
699+
#else
700+
usleep (1000000);
701+
#endif
702+
adv_socket = new SocketClientUDP (ip_address.c_str (), WIFI_ADVERTISING_PORT);
703+
if (adv_socket->connect () != ((int)SocketClientUDPReturnCodes::STATUS_OK))
704+
{
705+
safe_logger (spdlog::level::err, "Failed to bind adv_socket");
706+
res = (int)BrainFlowExitCodes::SET_PORT_ERROR;
707+
adv_socket->close ();
708+
delete adv_socket;
709+
adv_socket = NULL;
710+
}
711+
else
712+
{
713+
safe_logger (spdlog::level::debug, "adv_connection established, ip: {}, port: {}",
714+
ip_address, WIFI_ADVERTISING_PORT);
715+
}
716+
}
695717
return res;
696718
}
697719

@@ -771,7 +793,7 @@ int Emotibit::send_connect_msg ()
771793
safe_logger (spdlog::level::info, "sending connect package: {}", package.c_str ());
772794

773795
int res = (int)BrainFlowExitCodes::STATUS_OK;
774-
int bytes_send = advertise_socket_server->send (package.c_str (), (int)package.size ());
796+
int bytes_send = adv_socket->send (package.c_str (), (int)package.size ());
775797
if (bytes_send != (int)package.size ())
776798
{
777799
safe_logger (spdlog::level::err, "failed to send connect package, res is {}", bytes_send);
@@ -860,7 +882,7 @@ void Emotibit::ping_thread ()
860882
payload.push_back (std::to_string (data_port));
861883
std::string package = create_package (PING, package_num++, payload);
862884
// safe_logger (spdlog::level::trace, "sending package: {}", package.c_str ());
863-
int bytes_send = advertise_socket_server->send (package.c_str (), (int)package.size ());
885+
int bytes_send = adv_socket->send (package.c_str (), (int)package.size ());
864886
if (bytes_send != (int)package.size ())
865887
{
866888
safe_logger (spdlog::level::err, "failed to send adv package, res is {}", bytes_send);

src/board_controller/emotibit/inc/emotibit.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
#include "board.h"
88
#include "board_controller.h"
99

10-
#include "broadcast_server.h"
1110
#include "socket_client_udp.h"
1211
#include "socket_server_tcp.h"
1312

@@ -24,7 +23,9 @@ class Emotibit : public Board
2423
std::thread connection_thread;
2524
SocketClientUDP *data_socket;
2625
SocketServerTCP *control_socket;
27-
BroadCastServer *advertise_socket_server;
26+
// there is one for broadcast but its used only to find ip, after
27+
// that its replaced by normal udp socket
28+
SocketClientUDP *adv_socket;
2829
std::mutex m;
2930
std::condition_variable cv;
3031
int control_port;

0 commit comments

Comments
 (0)