-
Notifications
You must be signed in to change notification settings - Fork 0
/
AbstractController.h
95 lines (86 loc) · 3.48 KB
/
AbstractController.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#ifndef ABSTRACTCONTROLLER
#define ABSTRACTCONTROLLER
/*bitwise states*/
/*all lights*/
#define STARTUP 010101010
#define STARTUP_F 010001010
#define NS_CLEAR 000100001
/*#define NS_CLEAR_F 000000000*/
#define NS_STRAIGHT 000100001
/*#define NS_STRAIGHT_F 000000000*/
#define EW_CLEAR 000100001
/*#define EW_CLEAR_F 000000000*/
#define EW_STRAIGHT 000100001
/*#define EW_STRAIGHT_F 000000000*/
#define OTHER_FLASH 000000000
/*north-south lights*/
#define NS_TRAM_G_NS 100100001
/*#define NS_TRAM_G_F_NS 000000000*/
#define NS_TRAM_F_NS 010100001
/*#define NS_TRAM_F_F_NS 000000000*/
#define NS_STRAIGHT_G_PED_G_NS 001000100
/*#define NS_STRAIGHT_G_PED_G_F_NS 000000000*/
#define NS_STRAIGHT_G_PED_F_NS 000100100
#define NS_STRAIGHT_G_PED_F_F_NS 000100000
#define NS_STRAIGHT_G_NS 000100100
/*#define NS_STRAIGHT_G_F_NS 000000000*/
#define NS_STRAIGHT_F_NS 000100010
/*#define NS_STRAIGHT_F_F_NS 000000000*/
#define EW_STRAIGHT_G_PED_G_NS 000100001
/*#define EW_STRAIGHT_G_PED_G_F_NS 000000000*/
#define EW_STRAIGHT_G_PED_F_NS 000100001
/*#define EW_STRAIGHT_G_PED_F_F_NS 000000000*/
#define EW_BOTH_RIGHT_G_NS 000100001
/*#define EW_BOTH_RIGHT_G_F_NS 000000000*/
#define EW_BOTH_RIGHT_F_NS 000100001
/*#define EW_BOTH_RIGHT_F_F_NS 000000000*/
#define EW_STRAIGHT_G_NS 000100001
/*#define EW_STRAIGHT_G_F_NS 000000000*/
#define EW_STRAIGHT_F_NS 000100001
/*#define EW_STRAIGHT_F_F_NS 000000000*/
/*east-west lights*/
#define NS_TRAM_G_EW 000100001
/*#define NS_TRAM_G_F_EW 000000000*/
#define NS_TRAM_F_EW 000100001
/*#define NS_TRAM_F_F_EW 000000000*/
#define NS_STRAIGHT_G_PED_G_EW 000100001
/*#define NS_STRAIGHT_G_PED_G_F_EW 000000000*/
#define NS_STRAIGHT_G_PED_F_EW 000100001
/*#define NS_STRAIGHT_G_PED_F_F_EW 000000000*/
#define NS_STRAIGHT_G_EW 000100001
/*#define NS_STRAIGHT_G_F_EW 000000000*/
#define NS_STRAIGHT_F_EW 000100001
/*#define NS_STRAIGHT_F_F_EW 000000000*/
#define EW_STRAIGHT_G_PED_G_EW 001000100
/*#define EW_STRAIGHT_G_PED_G_F_EW 000000000*/
#define EW_STRAIGHT_G_PED_F_EW 000100100
#define EW_STRAIGHT_G_PED_F_F_EW 000100000
#define EW_BOTH_RIGHT_G_EW 000110000
/*#define EW_BOTH_RIGHT_G_F_EW 000000000*/
#define EW_BOTH_RIGHT_F_EW 000101000
/*#define EW_BOTH_RIGHT_F_F_EW 000000000*/
#define EW_STRAIGHT_G_EW 000100100
/*#define EW_STRAIGHT_G_F_EW 000000000*/
#define EW_STRAIGHT_F_EW 000100010
/*#define EW_STRAIGHT_F_F_EW 000000000*/
/*state format: NSCar|NSTram|NSPed|EWCar|EWCarTurning|EWPed*/
/*state values: R - Red, A - Amber, G - Green, F - Flashing (Amber for Car, Red for Ped), C - Cleared (not on), W - White (tram only)*/
enum state {STARTUP, STARTUP_F, NS_CLEAR, NS_STRAIGHT, EW_CLEAR, EW_STRAIGHT, OTHER_FLASH,
NS_TRAM_G_NS, NS_TRAM_F_NS, NS_STRAIGHT_G_PED_G_NS, NS_STRAIGHT_G_PED_F_NS, NS_STRAIGHT_G_PED_F_F_NS, NS_STRAIGHTG_NS, NS_STRAIGHT_F_NS, EW_STRAIGHT_G_PED_G_NS, EW_STRAIGHT_G_PED_F_NS, EW_BOTH_RIGHT_G_NS, EW_BOTH_RIGHT_F_NS, EW_STRAIGHT_G_NS, EW_STRAIGHT_F_NS,
NS_TRAM_G_EW, NS_TRAM_F_EW, NS_STRAIGHT_G_PED_G_EW, NS_STRAIGHT_G_PED_F_EW, NS_STRAIGHT_G_EW, EW_STRAIGHT_F_EW, EW_STRAIGHT_G_PED_G_EW, EW_STRAIGHT_G_PED_F_EW, EW_STRAIGHT_G_PED_F_F_EW, EW_BOTH_RIGHT_G_EW, EW_BOTH_RIGHT_F_EW, EW_STRAIGHT_G_EW, EW_STRAIGHT_F_EW};
typedef state State;
class AbstractController
{
/*constructor*/
public:
/*functions*/
public:
State nextState();
State getState();
void tick();
/*instance variables*/
private:
State s;
unsigned int t;
};
#endif