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:
Fri Oct 26 19:22:39 2012 +0000
Revision:
24:49c6624119ae
Parent:
23:909928cafb95
Child:
48:c0fedfa8c525
Now can adjust parameters through menu; fadeCurve is set when additive mix chosen.

Who changed what in which revision?

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