diff --git a/src/controller/obus_can.cpp b/lib/obus/obus_can.cpp similarity index 99% rename from src/controller/obus_can.cpp rename to lib/obus/obus_can.cpp index 0041ff0..b1ff16b 100644 --- a/src/controller/obus_can.cpp +++ b/lib/obus/obus_can.cpp @@ -1,6 +1,6 @@ #include -#include "obus_can.hpp" +#include "obus_can.h" MCP2515 mcp2515(10); diff --git a/src/controller/obus_can.hpp b/lib/obus/obus_can.h similarity index 100% rename from src/controller/obus_can.hpp rename to lib/obus/obus_can.h diff --git a/src/controller/controller.ino b/src/controller/controller.ino index 3208d10..5849472 100644 --- a/src/controller/controller.ino +++ b/src/controller/controller.ino @@ -1,5 +1,4 @@ -#include "shared.hpp" -#include "obus_can.hpp" +#include #define STATE_INACTIVE 0 @@ -9,8 +8,12 @@ #define OBUS_MAX_STRIKES 3 // Number of strikes allowed until game over #define OBUS_GAME_DURATION 10 // Duration of the game in seconds +#define OBUS_MAX_MODULES 16 +#define OBUS_DISC_DURATION 5 // Duration of discovery round in seconds +#define OBUS_UPDATE_INTERVAL 500 // Number of milliseconds between game updates #define OBUS_GAME_DURATION_MS ((uint32_t) OBUS_GAME_DURATION*1000) +#define OBUS_DISC_DURATION_MS ((uint32_t) OBUS_DISC_DURATION*1000) #define DIVIDE_CEIL(dividend, divisor) ((dividend + (divisor - 1)) / divisor) #define MAX_AMOUNT_PUZZLES 256 // The ID of a puzzle is uint8 @@ -85,6 +88,13 @@ void start_hello() { } +uint16_t full_module_id(struct module mod) { + return \ + ((uint16_t) mod.type << 8) | \ + (uint16_t) mod.id; +} + + void receive_hello() { struct obus_message msg; uint32_t current_time = millis(); @@ -93,11 +103,14 @@ void receive_hello() { if (msg.msg_type == OBUS_MSGTYPE_M_HELLO) { Serial.print(" Registered module "); Serial.println(full_module_id(msg.from)); - connected_modules_ids[nr_connected_modules] = msg.from; - nr_connected_modules++; - if (msg.from.type == OBUS_TYPE_PUZZLE) { - add_module_to_bit_vector(full_module_id(msg.from)); + if (nr_connected_modules < OBUS_MAX_MODULES) { + connected_modules_ids[nr_connected_modules] = msg.from; + nr_connected_modules++; + + if (msg.from.type == OBUS_TYPE_PUZZLE) { + add_module_to_bit_vector(full_module_id(msg.from)); + } } obuscan_send_c_ack(this_module); diff --git a/src/controller/shared.hpp b/src/controller/shared.hpp deleted file mode 100644 index 63effbb..0000000 --- a/src/controller/shared.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef OBUS_SHARED_H -#define OBUS_SHARED_H - -#include "obus_can.hpp" - -#define OBUS_MAX_MODULES 16 -#define OBUS_DISC_DURATION 5 // Duration of discovery round in seconds -#define OBUS_UPDATE_INTERVAL 500 // Number of milliseconds between game updates - -#define OBUS_DISC_DURATION_MS ((uint32_t) OBUS_DISC_DURATION*1000) - -uint16_t full_module_id(struct module mod) { - return \ - ((uint16_t) mod.type << 8) | \ - (uint16_t) mod.id; -} - -#endif /* end of include guard: OBUS_DEFS_H */