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:
Sat Mar 10 19:26:44 2012 +0000
Revision:
0:87aab40d5806
Child:
5:f8b285ca41ba
v15 - PCB a la toby; OLED a la toby

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 0:87aab40d5806 70 void operator = (int newIndex) {
tobyspark 0:87aab40d5806 71 selected = newIndex;
tobyspark 0:87aab40d5806 72 }
tobyspark 0:87aab40d5806 73
tobyspark 0:87aab40d5806 74 void operator ++ () {
tobyspark 0:87aab40d5806 75 selected++;
tobyspark 0:87aab40d5806 76 }
tobyspark 0:87aab40d5806 77
tobyspark 0:87aab40d5806 78 void operator -- () {
tobyspark 0:87aab40d5806 79 selected--;
tobyspark 0:87aab40d5806 80 }
tobyspark 0:87aab40d5806 81
tobyspark 0:87aab40d5806 82 void addMenuItem (std::string menuText) {
tobyspark 0:87aab40d5806 83 text.push_back(menuText);
tobyspark 0:87aab40d5806 84 selected.setMax(text.size()-1);
tobyspark 0:87aab40d5806 85 }
tobyspark 0:87aab40d5806 86
tobyspark 0:87aab40d5806 87 int selectedIndex() {
tobyspark 0:87aab40d5806 88 return selected.index();
tobyspark 0:87aab40d5806 89 }
tobyspark 0:87aab40d5806 90
tobyspark 0:87aab40d5806 91 std::string selectedString() {
tobyspark 0:87aab40d5806 92 return text[selected.index()];
tobyspark 0:87aab40d5806 93 }
tobyspark 0:87aab40d5806 94
tobyspark 0:87aab40d5806 95 protected:
tobyspark 0:87aab40d5806 96 SPKIndexInRange selected;
tobyspark 0:87aab40d5806 97 std::vector<std::string> text;
tobyspark 0:87aab40d5806 98 };
tobyspark 0:87aab40d5806 99
tobyspark 0:87aab40d5806 100 class SPKMenuOfMenus: public SPKMenu {
tobyspark 0:87aab40d5806 101 public:
tobyspark 0:87aab40d5806 102 SPKMenuOfMenus() : SPKMenu() {}
tobyspark 0:87aab40d5806 103
tobyspark 0:87aab40d5806 104 virtual SPKMenuType type() {
tobyspark 0:87aab40d5806 105 return menuOfMenus;
tobyspark 0:87aab40d5806 106 }
tobyspark 0:87aab40d5806 107
tobyspark 0:87aab40d5806 108 void addMenuItem(SPKMenu* menu) {
tobyspark 0:87aab40d5806 109 SPKMenu::addMenuItem(menu->title);
tobyspark 0:87aab40d5806 110 payload.push_back(menu);
tobyspark 0:87aab40d5806 111 }
tobyspark 0:87aab40d5806 112
tobyspark 0:87aab40d5806 113 SPKMenu* selectedMenu() {
tobyspark 0:87aab40d5806 114 return payload[selected.index()];
tobyspark 0:87aab40d5806 115 }
tobyspark 0:87aab40d5806 116
tobyspark 0:87aab40d5806 117 private:
tobyspark 0:87aab40d5806 118 vector<SPKMenu*> payload;
tobyspark 0:87aab40d5806 119 };
tobyspark 0:87aab40d5806 120
tobyspark 0:87aab40d5806 121 class SPKMenuPayload: public SPKMenu {
tobyspark 0:87aab40d5806 122 public:
tobyspark 0:87aab40d5806 123 SPKMenuPayload() : SPKMenu() {
tobyspark 0:87aab40d5806 124 text.push_back("Cancel");
tobyspark 0:87aab40d5806 125 payload1.push_back(0);
tobyspark 0:87aab40d5806 126 payload2.push_back(0);
tobyspark 0:87aab40d5806 127 }
tobyspark 0:87aab40d5806 128
tobyspark 0:87aab40d5806 129 virtual SPKMenuType type() {
tobyspark 0:87aab40d5806 130 return payload;
tobyspark 0:87aab40d5806 131 }
tobyspark 0:87aab40d5806 132
tobyspark 0:87aab40d5806 133 void addMenuItem(std::string menuText, int32_t menuPayload1, int32_t menuPayload2) {
tobyspark 0:87aab40d5806 134 SPKMenu::addMenuItem(menuText);
tobyspark 0:87aab40d5806 135 payload1.push_back(menuPayload1);
tobyspark 0:87aab40d5806 136 payload2.push_back(menuPayload2);
tobyspark 0:87aab40d5806 137 }
tobyspark 0:87aab40d5806 138
tobyspark 0:87aab40d5806 139 int32_t selectedPayload1() {
tobyspark 0:87aab40d5806 140 return payload1[selected.index()];
tobyspark 0:87aab40d5806 141 }
tobyspark 0:87aab40d5806 142
tobyspark 0:87aab40d5806 143 int32_t selectedPayload2() {
tobyspark 0:87aab40d5806 144 return payload2[selected.index()];
tobyspark 0:87aab40d5806 145 }
tobyspark 0:87aab40d5806 146
tobyspark 0:87aab40d5806 147 private:
tobyspark 0:87aab40d5806 148 vector<int32_t> payload1;
tobyspark 0:87aab40d5806 149 vector<int32_t> payload2;
tobyspark 0:87aab40d5806 150 };
tobyspark 0:87aab40d5806 151
tobyspark 0:87aab40d5806 152 class SPKSign {
tobyspark 0:87aab40d5806 153 public:
tobyspark 0:87aab40d5806 154 SPKSign(PinName signWrite, PinName signError) {
tobyspark 0:87aab40d5806 155 writeDO = new DigitalOut(signWrite);
tobyspark 0:87aab40d5806 156 errorDO = new DigitalOut(signError);
tobyspark 0:87aab40d5806 157 }
tobyspark 0:87aab40d5806 158
tobyspark 0:87aab40d5806 159 ~SPKSign() {
tobyspark 0:87aab40d5806 160 delete writeDO;
tobyspark 0:87aab40d5806 161 delete errorDO;
tobyspark 0:87aab40d5806 162 }
tobyspark 0:87aab40d5806 163
tobyspark 0:87aab40d5806 164 void serialWrite() {
tobyspark 0:87aab40d5806 165 signWriteTimeout.detach();
tobyspark 0:87aab40d5806 166 signWriteTimeout.attach(this, &SPKSign::writeOff, 0.25);
tobyspark 0:87aab40d5806 167 *writeDO = 1;
tobyspark 0:87aab40d5806 168 }
tobyspark 0:87aab40d5806 169
tobyspark 0:87aab40d5806 170 void serialError() {
tobyspark 0:87aab40d5806 171 signErrorTimeout.detach();
tobyspark 0:87aab40d5806 172 signErrorTimeout.attach(this, &SPKSign::errorOff, 0.25);
tobyspark 0:87aab40d5806 173 *errorDO = 1;
tobyspark 0:87aab40d5806 174 }
tobyspark 0:87aab40d5806 175
tobyspark 0:87aab40d5806 176 private:
tobyspark 0:87aab40d5806 177 void writeOff() {
tobyspark 0:87aab40d5806 178 *writeDO = 0;
tobyspark 0:87aab40d5806 179 }
tobyspark 0:87aab40d5806 180
tobyspark 0:87aab40d5806 181 void errorOff() {
tobyspark 0:87aab40d5806 182 *errorDO = 0;
tobyspark 0:87aab40d5806 183 }
tobyspark 0:87aab40d5806 184
tobyspark 0:87aab40d5806 185 DigitalOut *writeDO;
tobyspark 0:87aab40d5806 186 DigitalOut *errorDO;
tobyspark 0:87aab40d5806 187 Timeout signWriteTimeout;
tobyspark 0:87aab40d5806 188 Timeout signErrorTimeout;
tobyspark 0:87aab40d5806 189 };
tobyspark 0:87aab40d5806 190
tobyspark 0:87aab40d5806 191
tobyspark 0:87aab40d5806 192