Dependencies:   MQTT

Committer:
micallef25
Date:
Thu Dec 12 17:25:27 2019 +0000
Revision:
7:fd8e0604faaa
Parent:
5:e0d8e5e922f1
stable, passed 1000 simulation regression

Who changed what in which revision?

UserRevisionLine numberNew contents of line
micallef25 2:f10d6fecb345 1 #ifndef _ROAD_H_
micallef25 2:f10d6fecb345 2 #define _ROAD_H_
micallef25 2:f10d6fecb345 3
micallef25 2:f10d6fecb345 4 #include "AccCar.h"
micallef25 2:f10d6fecb345 5 #include "mbed.h"
MannyK 4:64c6fc70ddb7 6 #include "mqtt.h"
micallef25 2:f10d6fecb345 7
micallef25 2:f10d6fecb345 8 // no need to make it dynamic since we know our max upfront
micallef25 2:f10d6fecb345 9 #define MAX_CARS_ON_ROAD 5
micallef25 2:f10d6fecb345 10 #define MAC_CAR_BITS_ON_ROAD 1 << MAX_CAR_ON_ROAD
micallef25 2:f10d6fecb345 11
micallef25 2:f10d6fecb345 12 class AccCar;
micallef25 2:f10d6fecb345 13
micallef25 2:f10d6fecb345 14 class Road {
micallef25 2:f10d6fecb345 15 public:
micallef25 2:f10d6fecb345 16 EventFlags go_flags;
micallef25 2:f10d6fecb345 17 EventFlags done_flags;
micallef25 2:f10d6fecb345 18
MannyK 4:64c6fc70ddb7 19 Road( int id , mqtt* mqtt_singleton);
micallef25 2:f10d6fecb345 20
micallef25 2:f10d6fecb345 21 void add_acc_car(AccCar* car);
micallef25 2:f10d6fecb345 22
micallef25 2:f10d6fecb345 23 void let_cars_update();
micallef25 2:f10d6fecb345 24
micallef25 2:f10d6fecb345 25 void wait_for_car_update();
micallef25 2:f10d6fecb345 26
micallef25 2:f10d6fecb345 27 bool can_car_enter(int speed);
micallef25 2:f10d6fecb345 28
micallef25 2:f10d6fecb345 29 int get_new_car_id();
micallef25 2:f10d6fecb345 30
micallef25 2:f10d6fecb345 31 int get_active_cars();
micallef25 2:f10d6fecb345 32
micallef25 2:f10d6fecb345 33 AccCar* get_car(int id);
micallef25 2:f10d6fecb345 34
micallef25 2:f10d6fecb345 35 AccCar* get_forward_car(int id);
micallef25 2:f10d6fecb345 36
micallef25 2:f10d6fecb345 37 void DESTROY_ALL_CARS();
micallef25 2:f10d6fecb345 38
micallef25 2:f10d6fecb345 39 bool simulating();
micallef25 2:f10d6fecb345 40
micallef25 2:f10d6fecb345 41 int get_road_id();
micallef25 2:f10d6fecb345 42
micallef25 2:f10d6fecb345 43 int get_road_clock();
micallef25 2:f10d6fecb345 44
micallef25 2:f10d6fecb345 45 AccCar* get_last_car();
micallef25 2:f10d6fecb345 46
micallef25 7:fd8e0604faaa 47 int synchronize(int simulating);
micallef25 5:e0d8e5e922f1 48
micallef25 7:fd8e0604faaa 49 void free_msg();
MannyK 4:64c6fc70ddb7 50
micallef25 2:f10d6fecb345 51 private:
micallef25 2:f10d6fecb345 52 // for sharing intersections
micallef25 2:f10d6fecb345 53 int road_id;
micallef25 2:f10d6fecb345 54
micallef25 5:e0d8e5e922f1 55 mqtt* singleton;
micallef25 5:e0d8e5e922f1 56
micallef25 2:f10d6fecb345 57 // store our cars here we only need 5
micallef25 2:f10d6fecb345 58 AccCar* car_table[MAX_CARS_ON_ROAD];
micallef25 2:f10d6fecb345 59
micallef25 2:f10d6fecb345 60 // how many active cars we have
micallef25 2:f10d6fecb345 61 int active_cars;
micallef25 2:f10d6fecb345 62
micallef25 2:f10d6fecb345 63 // each car gets its own bit
micallef25 2:f10d6fecb345 64 int active_car_bits;
micallef25 2:f10d6fecb345 65
micallef25 2:f10d6fecb345 66 //
micallef25 2:f10d6fecb345 67 int road_clock;
micallef25 7:fd8e0604faaa 68
micallef25 7:fd8e0604faaa 69 //
micallef25 7:fd8e0604faaa 70 road_msg_t* msg;
micallef25 2:f10d6fecb345 71 };
micallef25 2:f10d6fecb345 72 #endif