MechaLib
The robust, all-in-one software library for MechaLeague Robots
Loading...
Searching...
No Matches
comms.hpp
Go to the documentation of this file.
1
#pragma once
2
#ifndef COMMS_H
3
#define COMMS_H
4
5
#include <Arduino.h>
6
#include <WiFi.h>
7
#include <ESPmDNS.h>
8
#include <WiFiUdp.h>
9
10
#ifndef TEAM_ID
11
#define TEAM_ID 0
12
#endif
13
14
enum
COMMS_CONN_ERR
{
15
COMMS_SUCCESS
= 0,
16
COMMS_FAILURE
= 1,
17
COMMS_NO_TEAM_ID
= 2,
18
COMMS_INVALID_TEAM_ID
= 3
19
};
20
21
enum
COMMS_MDNS_ERR
{
22
MDNS_SUCCESS
= 0,
23
MDNS_FAILURE
= 1
24
};
25
26
enum
COMMS_CONN_TYPE
{
27
CONN_FIELD
= 0,
28
CONN_BRIDGE
= 1,
29
CONN_AP
= 2
30
};
31
32
class
Comms
{
33
protected
:
34
// Field
35
const
char
*
fieldSSID
=
"MechaLeague-Field"
;
36
const
char
*
fieldPass
=
"12345678"
;
37
38
// MDNS
39
const
char
*
mdnsFormat
=
"mechaleague-bot-"
;
// mechaleague-bot-<team_id>.local
40
41
// Control sockets
42
WiFiUDP
controlServer
;
43
const
uint
controlServerPort
= 1010;
44
45
// Telemetry sockets
46
WiFiUDP
telemetryServer
;
47
const
uint
telemetryServerPort
= 1011;
48
49
bool
validateTeamID
() {
50
if
(
TEAM_ID
> 0 &&
TEAM_ID
<= 9999)
return
true
;
51
return
false
;
52
}
53
54
COMMS_CONN_ERR
connectToWiFi
(
const
char
* ssid,
const
char
* password = NULL) {
55
#ifdef TEAM_ID
56
// Validate team ID
57
if
(!
validateTeamID
())
return
COMMS_CONN_ERR::COMMS_INVALID_TEAM_ID
;
58
59
// Compute IP address if needed
60
// if (localIP) localIP.fromString(generateIPAddress(TEAM_ID));
61
62
// Connect to wifi
63
// WiFi.config(localIP, gateway, subnet, dns1, dns2);
64
WiFi.mode(WIFI_STA);
65
if
(password != NULL) WiFi.begin(ssid, password);
66
else
WiFi.begin(ssid);
67
WiFi.waitForConnectResult();
68
wl_status_t status = WiFi.status();
69
70
// Start control and telemetry servers
71
startServer
();
72
73
// Start MDNS
74
startMDNS
();
75
76
return
status == WL_CONNECTED ?
COMMS_CONN_ERR::COMMS_SUCCESS
:
COMMS_CONN_ERR::COMMS_FAILURE
;
77
78
#else
79
return
COMMS_CONN_ERR::COMMS_NO_TEAM_ID
;
80
#endif
81
}
82
83
public
:
84
void
startMDNS
() {
85
char
mdnsName[
sizeof
(
mdnsFormat
) + 4];
// Enough space for "mechaleague-bot-9999\0"
86
snprintf(mdnsName,
sizeof
(mdnsName),
"%s%d"
,
mdnsFormat
,
TEAM_ID
);
// mechaleague-bot-<team_id>
87
MDNS.begin(mdnsName);
88
}
89
90
void
startServer
() {
91
controlServer
.begin(
controlServerPort
);
92
telemetryServer
.begin(
telemetryServerPort
);
93
}
94
95
COMMS_CONN_ERR
connectToField
() {
96
return
connectToWiFi
(
fieldSSID
,
fieldPass
);
97
}
98
99
// Singleton
100
private
:
101
bool
init =
false
;
102
public
:
103
Comms
() {};
104
static
Comms
&
getInstance
() {
105
static
Comms
instance;
106
return
instance;
107
}
108
};
109
110
#endif
Comms::controlServerPort
const uint controlServerPort
Definition
comms.hpp:43
Comms::telemetryServer
WiFiUDP telemetryServer
Definition
comms.hpp:46
Comms::mdnsFormat
const char * mdnsFormat
Definition
comms.hpp:39
Comms::controlServer
WiFiUDP controlServer
Definition
comms.hpp:42
Comms::fieldSSID
const char * fieldSSID
Definition
comms.hpp:35
Comms::telemetryServerPort
const uint telemetryServerPort
Definition
comms.hpp:47
Comms::getInstance
static Comms & getInstance()
Definition
comms.hpp:104
Comms::connectToWiFi
COMMS_CONN_ERR connectToWiFi(const char *ssid, const char *password=NULL)
Definition
comms.hpp:54
Comms::startServer
void startServer()
Definition
comms.hpp:90
Comms::startMDNS
void startMDNS()
Definition
comms.hpp:84
Comms::Comms
Comms()
Definition
comms.hpp:103
Comms::validateTeamID
bool validateTeamID()
Definition
comms.hpp:49
Comms::connectToField
COMMS_CONN_ERR connectToField()
Definition
comms.hpp:95
Comms::fieldPass
const char * fieldPass
Definition
comms.hpp:36
COMMS_CONN_TYPE
COMMS_CONN_TYPE
Definition
comms.hpp:26
CONN_BRIDGE
@ CONN_BRIDGE
Definition
comms.hpp:28
CONN_FIELD
@ CONN_FIELD
Definition
comms.hpp:27
CONN_AP
@ CONN_AP
Definition
comms.hpp:29
COMMS_MDNS_ERR
COMMS_MDNS_ERR
Definition
comms.hpp:21
MDNS_FAILURE
@ MDNS_FAILURE
Definition
comms.hpp:23
MDNS_SUCCESS
@ MDNS_SUCCESS
Definition
comms.hpp:22
COMMS_CONN_ERR
COMMS_CONN_ERR
Definition
comms.hpp:14
COMMS_SUCCESS
@ COMMS_SUCCESS
Definition
comms.hpp:15
COMMS_NO_TEAM_ID
@ COMMS_NO_TEAM_ID
Definition
comms.hpp:17
COMMS_FAILURE
@ COMMS_FAILURE
Definition
comms.hpp:16
COMMS_INVALID_TEAM_ID
@ COMMS_INVALID_TEAM_ID
Definition
comms.hpp:18
TEAM_ID
#define TEAM_ID
Definition
comms.hpp:11
src
core
comms
comms.hpp
Generated by
1.14.0