The codebase to run the *spark d-fuser controller www.sparkav.co.uk/dvimixer

Dependencies:   SPK-TVOne DMX DmxArtNet NetServicesMin OSC PinDetect mRotaryEncoder iniparser mbed spk_oled_ssd1305 filter

Committer:
tobyspark
Date:
Thu Jul 19 10:46:53 2012 +0000
Revision:
5:f8b285ca41ba
Parent:
0:87aab40d5806
Child:
8:d46cc49f0f37
v18 - DMX

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tobyspark 0:87aab40d5806 1 #include <string>
tobyspark 0:87aab40d5806 2 #include <vector>
tobyspark 0:87aab40d5806 3
tobyspark 0:87aab40d5806 4 class SPKIndexInRange {
tobyspark 0:87aab40d5806 5 public:
tobyspark 0:87aab40d5806 6 void operator = (int newIndex) {
tobyspark 0:87aab40d5806 7 set(newIndex);
tobyspark 0:87aab40d5806 8 }
tobyspark 0:87aab40d5806 9
tobyspark 0:87aab40d5806 10 void operator ++ (int) {
tobyspark 0:87aab40d5806 11 if (idx == max) idx = wrap ? min : max;
tobyspark 0:87aab40d5806 12 else idx++;
tobyspark 0:87aab40d5806 13 }
tobyspark 0:87aab40d5806 14
tobyspark 0:87aab40d5806 15 void operator -- (int) {
tobyspark 0:87aab40d5806 16 if (idx == min) idx = wrap ? max : min;
tobyspark 0:87aab40d5806 17 else idx--;
tobyspark 0:87aab40d5806 18 }
tobyspark 0:87aab40d5806 19
tobyspark 0:87aab40d5806 20 void set (int newIndex) {
tobyspark 0:87aab40d5806 21 if (newIndex > max) idx = max;
tobyspark 0:87aab40d5806 22 else if (newIndex < min) idx = min;
tobyspark 0:87aab40d5806 23 else idx = newIndex;
tobyspark 0:87aab40d5806 24 }
tobyspark 0:87aab40d5806 25
tobyspark 0:87aab40d5806 26 void set (int newMin, int newMax, int newIndex = 0, bool newWrap = false) {
tobyspark 0:87aab40d5806 27 min = newMin;
tobyspark 0:87aab40d5806 28 max = newMax;
tobyspark 0:87aab40d5806 29 wrap = newWrap;
tobyspark 0:87aab40d5806 30 set(newIndex);
tobyspark 0:87aab40d5806 31 }
tobyspark 0:87aab40d5806 32
tobyspark 0:87aab40d5806 33 void setMax(int newMax) {
tobyspark 0:87aab40d5806 34 max = newMax;
tobyspark 0:87aab40d5806 35 }
tobyspark 0:87aab40d5806 36
tobyspark 0:87aab40d5806 37 SPKIndexInRange () {
tobyspark 0:87aab40d5806 38 min = 0;
tobyspark 0:87aab40d5806 39 max = 1;
tobyspark 0:87aab40d5806 40 wrap = true;
tobyspark 0:87aab40d5806 41 idx = 0;
tobyspark 0:87aab40d5806 42 }
tobyspark 0:87aab40d5806 43
tobyspark 0:87aab40d5806 44 SPKIndexInRange (int newMin, int newMax, int newIndex = 0, bool newWrap = false) {
tobyspark 0:87aab40d5806 45 set(newMin, newMax, newIndex, newWrap);
tobyspark 0:87aab40d5806 46 }
tobyspark 0:87aab40d5806 47
tobyspark 0:87aab40d5806 48 int index() {
tobyspark 0:87aab40d5806 49 return idx;
tobyspark 0:87aab40d5806 50 }
tobyspark 0:87aab40d5806 51
tobyspark 0:87aab40d5806 52 private:
tobyspark 0:87aab40d5806 53 int idx;
tobyspark 0:87aab40d5806 54 int min, max;
tobyspark 0:87aab40d5806 55 bool wrap;
tobyspark 0:87aab40d5806 56 };
tobyspark 0:87aab40d5806 57
tobyspark 0:87aab40d5806 58 enum SPKMenuType { menuOfMenus, payload };
tobyspark 0:87aab40d5806 59
tobyspark 0:87aab40d5806 60 class SPKMenu {
tobyspark 0:87aab40d5806 61 public:
tobyspark 0:87aab40d5806 62 SPKMenu() {
tobyspark 0:87aab40d5806 63 selected.set(0, 0, 0, true);
tobyspark 0:87aab40d5806 64 }
tobyspark 0:87aab40d5806 65
tobyspark 0:87aab40d5806 66 virtual SPKMenuType type(void) = 0;
tobyspark 0:87aab40d5806 67
tobyspark 0:87aab40d5806 68 std::string title;
tobyspark 0:87aab40d5806 69
tobyspark 5:f8b285ca41ba 70 // not carried into subclass... whats the c++ way of doing this?
tobyspark 5:f8b285ca41ba 71 SPKMenu& operator = (const int &newIndex) {
tobyspark 0:87aab40d5806 72 selected = newIndex;
tobyspark 5:f8b285ca41ba 73 return *this;
tobyspark 0:87aab40d5806 74 }
tobyspark 0:87aab40d5806 75
tobyspark 0:87aab40d5806 76 void operator ++ () {
tobyspark 0:87aab40d5806 77 selected++;
tobyspark 0:87aab40d5806 78 }
tobyspark 0:87aab40d5806 79
tobyspark 0:87aab40d5806 80 void operator -- () {
tobyspark 0:87aab40d5806 81 selected--;
tobyspark 0:87aab40d5806 82 }
tobyspark 0:87aab40d5806 83
tobyspark 0:87aab40d5806 84 void addMenuItem (std::string menuText) {
tobyspark 0:87aab40d5806 85 text.push_back(menuText);
tobyspark 0:87aab40d5806 86 selected.setMax(text.size()-1);
tobyspark 0:87aab40d5806 87 }
tobyspark 0:87aab40d5806 88
tobyspark 0:87aab40d5806 89 int selectedIndex() {
tobyspark 0:87aab40d5806 90 return selected.index();
tobyspark 0:87aab40d5806 91 }
tobyspark 0:87aab40d5806 92
tobyspark 0:87aab40d5806 93 std::string selectedString() {
tobyspark 0:87aab40d5806 94 return text[selected.index()];
tobyspark 0:87aab40d5806 95 }
tobyspark 0:87aab40d5806 96
tobyspark 0:87aab40d5806 97 protected:
tobyspark 0:87aab40d5806 98 SPKIndexInRange selected;
tobyspark 0:87aab40d5806 99 std::vector<std::string> text;
tobyspark 0:87aab40d5806 100 };
tobyspark 0:87aab40d5806 101
tobyspark 0:87aab40d5806 102 class SPKMenuOfMenus: public SPKMenu {
tobyspark 0:87aab40d5806 103 public:
tobyspark 0:87aab40d5806 104 SPKMenuOfMenus() : SPKMenu() {}
tobyspark 0:87aab40d5806 105
tobyspark 0:87aab40d5806 106 virtual SPKMenuType type() {
tobyspark 0:87aab40d5806 107 return menuOfMenus;
tobyspark 0:87aab40d5806 108 }
tobyspark 0:87aab40d5806 109
tobyspark 0:87aab40d5806 110 void addMenuItem(SPKMenu* menu) {
tobyspark 0:87aab40d5806 111 SPKMenu::addMenuItem(menu->title);
tobyspark 0:87aab40d5806 112 payload.push_back(menu);
tobyspark 0:87aab40d5806 113 }
tobyspark 0:87aab40d5806 114
tobyspark 0:87aab40d5806 115 SPKMenu* selectedMenu() {
tobyspark 0:87aab40d5806 116 return payload[selected.index()];
tobyspark 0:87aab40d5806 117 }
tobyspark 0:87aab40d5806 118
tobyspark 0:87aab40d5806 119 private:
tobyspark 0:87aab40d5806 120 vector<SPKMenu*> payload;
tobyspark 0:87aab40d5806 121 };
tobyspark 0:87aab40d5806 122
tobyspark 0:87aab40d5806 123 class SPKMenuPayload: public SPKMenu {
tobyspark 0:87aab40d5806 124 public:
tobyspark 0:87aab40d5806 125 SPKMenuPayload() : SPKMenu() {
tobyspark 0:87aab40d5806 126 text.push_back("Cancel");
tobyspark 0:87aab40d5806 127 payload1.push_back(0);
tobyspark 0:87aab40d5806 128 payload2.push_back(0);
tobyspark 0:87aab40d5806 129 }
tobyspark 0:87aab40d5806 130
tobyspark 0:87aab40d5806 131 virtual SPKMenuType type() {
tobyspark 0:87aab40d5806 132 return payload;
tobyspark 0:87aab40d5806 133 }
tobyspark 0:87aab40d5806 134
tobyspark 0:87aab40d5806 135 void addMenuItem(std::string menuText, int32_t menuPayload1, int32_t menuPayload2) {
tobyspark 0:87aab40d5806 136 SPKMenu::addMenuItem(menuText);
tobyspark 0:87aab40d5806 137 payload1.push_back(menuPayload1);
tobyspark 0:87aab40d5806 138 payload2.push_back(menuPayload2);
tobyspark 0:87aab40d5806 139 }
tobyspark 0:87aab40d5806 140
tobyspark 0:87aab40d5806 141 int32_t selectedPayload1() {
tobyspark 0:87aab40d5806 142 return payload1[selected.index()];
tobyspark 0:87aab40d5806 143 }
tobyspark 0:87aab40d5806 144
tobyspark 0:87aab40d5806 145 int32_t selectedPayload2() {
tobyspark 0:87aab40d5806 146 return payload2[selected.index()];
tobyspark 0:87aab40d5806 147 }
tobyspark 5:f8b285ca41ba 148
tobyspark 5:f8b285ca41ba 149 SPKMenuPayload& operator = (const int &newIndex) {
tobyspark 5:f8b285ca41ba 150 selected = newIndex;
tobyspark 5:f8b285ca41ba 151 return *this;
tobyspark 5:f8b285ca41ba 152 }
tobyspark 5:f8b285ca41ba 153
tobyspark 5:f8b285ca41ba 154
tobyspark 0:87aab40d5806 155 private:
tobyspark 0:87aab40d5806 156 vector<int32_t> payload1;
tobyspark 0:87aab40d5806 157 vector<int32_t> payload2;
tobyspark 0:87aab40d5806 158 };
tobyspark 0:87aab40d5806 159
tobyspark 0:87aab40d5806 160 class SPKSign {
tobyspark 0:87aab40d5806 161 public:
tobyspark 0:87aab40d5806 162 SPKSign(PinName signWrite, PinName signError) {
tobyspark 0:87aab40d5806 163 writeDO = new DigitalOut(signWrite);
tobyspark 0:87aab40d5806 164 errorDO = new DigitalOut(signError);
tobyspark 0:87aab40d5806 165 }
tobyspark 0:87aab40d5806 166
tobyspark 0:87aab40d5806 167 ~SPKSign() {
tobyspark 0:87aab40d5806 168 delete writeDO;
tobyspark 0:87aab40d5806 169 delete errorDO;
tobyspark 0:87aab40d5806 170 }
tobyspark 0:87aab40d5806 171
tobyspark 0:87aab40d5806 172 void serialWrite() {
tobyspark 0:87aab40d5806 173 signWriteTimeout.detach();
tobyspark 0:87aab40d5806 174 signWriteTimeout.attach(this, &SPKSign::writeOff, 0.25);
tobyspark 0:87aab40d5806 175 *writeDO = 1;
tobyspark 0:87aab40d5806 176 }
tobyspark 0:87aab40d5806 177
tobyspark 0:87aab40d5806 178 void serialError() {
tobyspark 0:87aab40d5806 179 signErrorTimeout.detach();
tobyspark 0:87aab40d5806 180 signErrorTimeout.attach(this, &SPKSign::errorOff, 0.25);
tobyspark 0:87aab40d5806 181 *errorDO = 1;
tobyspark 0:87aab40d5806 182 }
tobyspark 0:87aab40d5806 183
tobyspark 0:87aab40d5806 184 private:
tobyspark 0:87aab40d5806 185 void writeOff() {
tobyspark 0:87aab40d5806 186 *writeDO = 0;
tobyspark 0:87aab40d5806 187 }
tobyspark 0:87aab40d5806 188
tobyspark 0:87aab40d5806 189 void errorOff() {
tobyspark 0:87aab40d5806 190 *errorDO = 0;
tobyspark 0:87aab40d5806 191 }
tobyspark 0:87aab40d5806 192
tobyspark 0:87aab40d5806 193 DigitalOut *writeDO;
tobyspark 0:87aab40d5806 194 DigitalOut *errorDO;
tobyspark 0:87aab40d5806 195 Timeout signWriteTimeout;
tobyspark 0:87aab40d5806 196 Timeout signErrorTimeout;
tobyspark 0:87aab40d5806 197 };
tobyspark 0:87aab40d5806 198
tobyspark 0:87aab40d5806 199
tobyspark 0:87aab40d5806 200