8
8
#include < vector>
9
9
10
10
#include " devices/uwb_module_util.h"
11
+ #include " epd.h"
11
12
#include " m5stack_utils/m5paper.h"
12
13
#include " message.h"
13
14
#include " sdp/sdp.h"
14
15
#include " utils/config_loader.h"
15
16
16
17
// CONFIG
17
- String device_name = " msg_board " ;
18
+ String device_name;
18
19
19
20
// CANVAS
20
21
M5EPD_Canvas canvas_title (&M5.EPD);
@@ -25,6 +26,7 @@ M5EPD_Canvas canvas_message(&M5.EPD);
25
26
int uwb_id = -1 ;
26
27
std::string packet_description_uwb = " UWB Station" ;
27
28
std::string serialization_format_uwb = " i" ;
29
+ SDPInterfaceDescription interface_description_uwb = std::make_tuple(packet_description_uwb, serialization_format_uwb);
28
30
std::vector<SDPData> data_for_uwb_data_packet;
29
31
30
32
// SDP
@@ -36,15 +38,6 @@ std::vector<Message> message_board;
36
38
// Others
37
39
int loop_counter = 0 ;
38
40
39
- void OnDataRecvV1 (const uint8_t *mac_addr, const uint8_t *data, int data_len) {
40
- uint8_t packet_type = get_packet_type (data);
41
- if (packet_type == smart_device_protocol::Packet::PACKET_TYPE_DEVICE_MESSAGE_BOARD_DATA) {
42
- auto m = Message (data);
43
- message_board.push_back (m);
44
- Serial.printf (" Push message from V1 Data\n " );
45
- }
46
- }
47
-
48
41
void callback_for_v2 (const uint8_t *mac_addr, const std::vector<SDPData> &body) {
49
42
std::string source_name = std::get<std::string>(body[0 ]);
50
43
int32_t duration_until_deletion = std::get<int32_t >(body[1 ]);
@@ -55,43 +48,23 @@ void callback_for_v2(const uint8_t *mac_addr, const std::vector<SDPData> &body)
55
48
Serial.printf (" Push message from V2 Data\n " );
56
49
}
57
50
58
- void load_config () {
51
+ bool load_config (fs::FS &fs, const String &filename ) {
59
52
StaticJsonDocument<1024 > doc;
60
- if (not load_json_from_FS<1024 >(SD, " /config.json" , doc)) {
61
- return ;
53
+ if (not load_json_from_FS<1024 >(fs, filename, doc)) {
54
+ return false ;
55
+ }
56
+ if (not doc.containsKey (" device_name" ) or
57
+ not doc.containsKey (" uwb_id" )) {
58
+ return false ;
62
59
}
63
- if (doc.containsKey (" device_name" ))
64
- device_name = doc[" device_name" ].as <String>();
65
- if (doc.containsKey (" uwb_id" ))
66
- uwb_id = doc[" uwb_id" ].as <int >();
67
- }
68
-
69
- void clear_canvas (M5EPD_Canvas &canvas) {
70
- canvas.clear ();
71
- canvas.setCursor (0 , 0 );
72
- }
73
60
74
- void init_epd (M5EPD_Canvas &canvas_title, M5EPD_Canvas &canvas_status, M5EPD_Canvas &canvas_message) {
75
- canvas_title.createCanvas (540 , 100 );
76
- canvas_status.createCanvas (540 , 60 );
77
- canvas_message.createCanvas (540 , 800 );
78
- canvas_title.setTextSize (3 );
79
- canvas_status.setTextSize (2 );
80
- canvas_message.setTextSize (2 );
81
- clear_canvas (canvas_title);
82
- clear_canvas (canvas_status);
83
- clear_canvas (canvas_message);
84
- }
61
+ device_name = doc[" device_name" ].as <String>();
62
+ uwb_id = doc[" uwb_id" ].as <int >();
85
63
86
- void update_epd (M5EPD_Canvas &canvas_title, M5EPD_Canvas &canvas_status, M5EPD_Canvas &canvas_message) {
87
- canvas_title.pushCanvas (0 , 0 , UPDATE_MODE_DU4);
88
- canvas_status.pushCanvas (0 , 100 , UPDATE_MODE_DU4);
89
- canvas_message.pushCanvas (0 , 160 , UPDATE_MODE_DU4);
64
+ return true ;
90
65
}
91
66
92
67
void setup () {
93
- esp_read_mac (mac_address, ESP_MAC_WIFI_STA);
94
-
95
68
// Init M5Paper
96
69
M5.begin (false , true , true , true , false );
97
70
M5.EPD .SetRotation (90 );
@@ -101,51 +74,90 @@ void setup() {
101
74
Serial.println (" Start init" );
102
75
Serial1.begin (115200 , SERIAL_8N1, M5StackSerialPortInfoList[PORT_C].rx , M5StackSerialPortInfoList[PORT_C].tx );
103
76
77
+ // EPD
78
+ canvas_title.printf (" SDP MESSAGE BOARD\n " );
79
+ update_epd (canvas_title, canvas_status, canvas_message);
80
+
104
81
// Load config
105
- load_config ();
82
+ if (not load_config (SD, " /config.json" )) {
83
+ Serial.println (" Failed to load config" );
84
+ canvas_status.printf (" Failed to load config\n " );
85
+ update_epd (canvas_title, canvas_status, canvas_message);
86
+ while (true ) {
87
+ delay (1000 );
88
+ }
89
+ }
90
+ Serial.println (" Config loaded" );
91
+ clear_canvas (canvas_status);
92
+ canvas_status.printf (" Config loaded\n " );
93
+ update_epd (canvas_title, canvas_status, canvas_message);
94
+
95
+ // Show device name
96
+ canvas_title.printf (" Name: %s\n " , device_name.c_str ());
97
+ update_epd (canvas_title, canvas_status, canvas_message);
106
98
107
99
// Init SDP
108
- init_sdp (mac_address, device_name);
109
- register_sdp_esp_now_recv_callback (OnDataRecvV1);
110
- register_sdp_interface_callback (Message::get_interface_description (), callback_for_v2);
100
+ if (not init_sdp (mac_address, device_name)) {
101
+ Serial.println (" Failed to initialize SDP" );
102
+ canvas_status.printf (" Failed to initialize SDP\n " );
103
+ update_epd (canvas_title, canvas_status, canvas_message);
104
+ while (true ) {
105
+ delay (1000 );
106
+ }
107
+ }
108
+ if (not register_sdp_interface_callback (Message::get_interface_description (), callback_for_v2)) {
109
+ Serial.println (" Failed to register callback for V2" );
110
+ canvas_status.printf (" Failed to register callback for V2\n " );
111
+ update_epd (canvas_title, canvas_status, canvas_message);
112
+ while (true ) {
113
+ delay (1000 );
114
+ }
115
+ }
111
116
Serial.println (" SDP Initialized!" );
117
+ clear_canvas (canvas_status);
118
+ canvas_status.printf (" SDP Initialized!\n " );
119
+ update_epd (canvas_title, canvas_status, canvas_message);
120
+
121
+ // Show Address
122
+ canvas_title.printf (" ADDR: %2x:%2x:%2x:%2x:%2x:%2x\n " ,
123
+ mac_address[0 ], mac_address[1 ],
124
+ mac_address[2 ], mac_address[3 ],
125
+ mac_address[4 ], mac_address[5 ]);
126
+ Serial.printf (" ADDR: %2x:%2x:%2x:%2x:%2x:%2x\n " ,
127
+ mac_address[0 ], mac_address[1 ],
128
+ mac_address[2 ], mac_address[3 ],
129
+ mac_address[4 ], mac_address[5 ]);
130
+ update_epd (canvas_title, canvas_status, canvas_message);
112
131
113
132
// UWB Initialized
114
- if (uwb_id >= 0 ) {
133
+ if (uwb_id >= 0 ) {
115
134
bool result = initUWB (false , uwb_id, Serial1);
116
135
data_for_uwb_data_packet.clear ();
117
136
data_for_uwb_data_packet.push_back (SDPData (uwb_id));
118
137
if (result) {
119
138
Serial.println (" Success for initialization of UWB" );
139
+ Serial.printf (" UWB_ID: %d\n " , uwb_id);
140
+ canvas_title.printf (" UWB_ID: %d\n " , uwb_id);
120
141
} else {
121
142
uwb_id = -1 ;
122
143
resetUWB (Serial1);
123
144
Serial.println (" Failed to initialize UWB" );
145
+ canvas_title.printf (" Failed to initialize UWB\n " );
124
146
}
125
147
} else {
126
148
resetUWB (Serial1);
127
149
Serial.println (" UWB is not used" );
150
+ canvas_title.printf (" UWB is not used\n " );
128
151
}
129
-
130
- // Show device info
131
- canvas_title.printf (" ENR & SDP MESSAGE BOARD\n " );
132
- canvas_title.printf (" Name: %s\n " , device_name.c_str ());
133
- canvas_title.printf (" ADDR: %2x:%2x:%2x:%2x:%2x:%2x\n " ,
134
- mac_address[0 ], mac_address[1 ],
135
- mac_address[2 ], mac_address[3 ],
136
- mac_address[4 ], mac_address[5 ]);
137
- canvas_title.printf (" UWB_ID: %d\n " , uwb_id);
138
152
update_epd (canvas_title, canvas_status, canvas_message);
153
+
154
+ delay (3000 );
139
155
}
140
156
141
157
void loop () {
142
158
Serial.printf (" Loop %d\n " , loop_counter);
143
159
uint8_t buf[250 ];
144
160
145
- // Manually Send V1 Meta Packet
146
- create_device_message_board_meta_packet (buf, device_name.c_str ());
147
- broadcast_sdp_esp_now_packet ((uint8_t *)buf, sizeof (buf));
148
-
149
161
// Show Battery voltage
150
162
uint32_t battery_voltage = M5.getBatteryVoltage ();
151
163
clear_canvas (canvas_status);
@@ -155,7 +167,7 @@ void loop() {
155
167
canvas_status.printf (" x Battery: %u\n " , battery_voltage);
156
168
}
157
169
158
- // Shoe messages
170
+ // Show messages and send SDP packet
159
171
clear_canvas (canvas_message);
160
172
for (auto m = message_board.begin (); m != message_board.end ();) {
161
173
if (millis () > m->deadline ) {
@@ -170,15 +182,21 @@ void loop() {
170
182
canvas_message.printf (" Duration until deletion(sec): %d\n " , (int )((m->deadline - millis ()) / 1000 ));
171
183
canvas_message.printf (" Message: %s\n\n " , m->message );
172
184
173
- m->to_v1_packet (buf);
174
- broadcast_sdp_esp_now_packet ((uint8_t *)buf, sizeof (buf));
175
- delay (10 );
176
185
m->to_v2_packet (buf);
177
186
broadcast_sdp_esp_now_packet ((uint8_t *)buf, sizeof (buf));
178
187
delay (10 );
179
188
}
180
189
update_epd (canvas_title, canvas_status, canvas_message);
181
190
191
+ // Send UWB packet
192
+ if (uwb_id >= 0 ) {
193
+ if (not send_sdp_data_packet (interface_description_uwb, data_for_uwb_data_packet)) {
194
+ Serial.println (" Failed to send UWB packet" );
195
+ canvas_status.printf (" Failed to send UWB packet\n " );
196
+ update_epd (canvas_title, canvas_status, canvas_message);
197
+ }
198
+ }
199
+
182
200
delay (100 );
183
201
loop_counter++;
184
202
}
0 commit comments