
not running
Diff: Communication.h
- Revision:
- 2:16b3bd337db2
- Parent:
- 0:3b4906b8a747
--- a/Communication.h Tue Dec 10 23:40:25 2019 +0000 +++ b/Communication.h Wed Dec 11 20:20:12 2019 +0000 @@ -2,15 +2,19 @@ #define _COMMUNICATION_H_ #include "mbed.h" +#include "rtos.h" #include "MQTTNetwork.h" #include "MQTTClient.h" #include "MQTTmbed.h" +#include <string.h> +#include <queue> +#include <mutex> typedef struct { - int speed; // speed for AccCar, -1 for Road - int position; // position for AccCar, update number for Road - char* topic; + char id; + char speed; // speed for AccCar, -1 for Road + char position; // position for AccCar, update number for Road } message_t; class Communication { @@ -22,35 +26,40 @@ static int flags[5]; // Singleton - static Communication *getInstance(); + static Communication *getInstance(char* t1, char* t2, char* t3, char* t4); // MQTT Setup void setup_wifi(); - void setup_mqtt(MQTTNetwork &network); + void setup_mqtt(MQTTNetwork* network); static void message_arrived(MQTT::MessageData& md); static void control_arrived(MQTT::MessageData& md); static void sync_arrived(MQTT::MessageData& md); int send_message(char* topic); - int subscribe_to_topic_position(char* topic); int subscribe_to_topic_control(char* topic); int subscribe_to_topic_sync(char* topic); - void publish_car(char* topic, int speed, int position); - void publish_road(char* topic, int num); + void publish_car(int id, int speed, int position); + void publish_road(int num); void start(); // function for serving requests (single thread) void reset(); // function to create and start the singleton thread void stop(); -private: +//private: static Communication *singleton; WiFiInterface *wifi; + MQTTNetwork* network; MQTT::Client<MQTTNetwork, Countdown> *client; - Thread* thread; + static Thread* thread; + + Mutex* mutex; + std::queue<message_t>* q; - MemoryPool<message_t, 10> mpool; - Queue<message_t, 10> q_car; + char* topic_pub_position; + char* topic_sub_control; + char* topic_pub_receive; + char* topic_sub_send; - Communication(); + Communication(char* t1, char* t2, char* t3, char* t4); };