OSCtoCV Library

Dependents:   OSCtoCVConverter

Committer:
casiotone401
Date:
Sun Jan 17 09:30:32 2016 +0000
Revision:
0:cd43a974c54c
Child:
1:981b62bb5c87
added random, lfo mode

Who changed what in which revision?

UserRevisionLine numberNew contents of line
casiotone401 0:cd43a974c54c 1 /*
casiotone401 0:cd43a974c54c 2 OSCtoCV.cpp
casiotone401 0:cd43a974c54c 3 */
casiotone401 0:cd43a974c54c 4
casiotone401 0:cd43a974c54c 5 #include "mbed.h"
casiotone401 0:cd43a974c54c 6 #include "OSCtoCV.h"
casiotone401 0:cd43a974c54c 7
casiotone401 0:cd43a974c54c 8 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 9 // Global Variables
casiotone401 0:cd43a974c54c 10
casiotone401 0:cd43a974c54c 11 // Silentway Calibration Data Mapping
casiotone401 0:cd43a974c54c 12 // http://www.expert-sleepers.co.uk/silentway.html
casiotone401 0:cd43a974c54c 13
casiotone401 0:cd43a974c54c 14 // Chromatic Scale
casiotone401 0:cd43a974c54c 15 const float calibMap1[QUAN_RES1] = {
casiotone401 0:cd43a974c54c 16 0.00076928, 0.00900736, 0.01724544, 0.02548352, 0.03372160,
casiotone401 0:cd43a974c54c 17 0.04195968, 0.05019776, 0.05843584, 0.06667392, 0.07491200,
casiotone401 0:cd43a974c54c 18 0.08315008, 0.09138816, 0.09962624, 0.10786432, 0.11610240,
casiotone401 0:cd43a974c54c 19 0.12434047, 0.13258974, 0.14083999, 0.14909023, 0.15734047,
casiotone401 0:cd43a974c54c 20 0.16559070, 0.17384095, 0.18209119, 0.19034143, 0.19859168,
casiotone401 0:cd43a974c54c 21 0.20684192, 0.21509215, 0.22334240, 0.23159264, 0.23984288,
casiotone401 0:cd43a974c54c 22 0.24809311, 0.25634655, 0.26460093, 0.27285531, 0.28110969,
casiotone401 0:cd43a974c54c 23 0.28936407, 0.29761845, 0.30587283, 0.31412721, 0.32238159,
casiotone401 0:cd43a974c54c 24 0.33063596, 0.33889034, 0.34714472, 0.35539910, 0.36365348,
casiotone401 0:cd43a974c54c 25 0.37190786, 0.38017464, 0.38844886, 0.39672306, 0.40499726,
casiotone401 0:cd43a974c54c 26 0.41327149, 0.42154568, 0.42981988, 0.43809411, 0.44636831,
casiotone401 0:cd43a974c54c 27 0.45464250, 0.46291673, 0.47119093, 0.47946513, 0.48773935,
casiotone401 0:cd43a974c54c 28 0.49601355, 0.50430328, 0.51260746, 0.52091163, 0.52921581,
casiotone401 0:cd43a974c54c 29 0.53751999, 0.54582411, 0.55412829, 0.56243247, 0.57073665,
casiotone401 0:cd43a974c54c 30 0.57904083, 0.58734500, 0.59564912, 0.60395330, 0.61225748,
casiotone401 0:cd43a974c54c 31 0.62056166, 0.62890279, 0.63728637, 0.64566994, 0.65405351,
casiotone401 0:cd43a974c54c 32 0.66243708, 0.67082065, 0.67920423, 0.68758780, 0.69597137,
casiotone401 0:cd43a974c54c 33 0.70435494, 0.71273851, 0.72112209, 0.72950566, 0.73788923,
casiotone401 0:cd43a974c54c 34 0.74627280, 0.75476575, 0.76334614, 0.77192658, 0.78050703,
casiotone401 0:cd43a974c54c 35 0.78908741, 0.79766786, 0.80624831, 0.81482869, 0.82340914,
casiotone401 0:cd43a974c54c 36 0.83198959, 0.84056997, 0.84915042, 0.85773087, 0.86631125,
casiotone401 0:cd43a974c54c 37 0.87489170, 0.88425636, 0.89363104, 0.90300572, 0.91238040,
casiotone401 0:cd43a974c54c 38 0.92175508, 0.93112975, 0.94050443, 0.94987911, 0.95925385,
casiotone401 0:cd43a974c54c 39 0.96862853
casiotone401 0:cd43a974c54c 40 };
casiotone401 0:cd43a974c54c 41
casiotone401 0:cd43a974c54c 42 // Major Scale
casiotone401 0:cd43a974c54c 43 const float calibMap2[QUAN_RES2] = {
casiotone401 0:cd43a974c54c 44 calibMap1[0], calibMap1[2], calibMap1[4], calibMap1[5], calibMap1[7],
casiotone401 0:cd43a974c54c 45 calibMap1[9], calibMap1[11], calibMap1[12], calibMap1[14], calibMap1[16],
casiotone401 0:cd43a974c54c 46 calibMap1[17], calibMap1[19], calibMap1[21], calibMap1[23], calibMap1[24],
casiotone401 0:cd43a974c54c 47 calibMap1[26], calibMap1[28], calibMap1[29], calibMap1[31], calibMap1[33],
casiotone401 0:cd43a974c54c 48 calibMap1[35], calibMap1[36], calibMap1[38], calibMap1[40], calibMap1[41],
casiotone401 0:cd43a974c54c 49 calibMap1[43], calibMap1[45], calibMap1[47], calibMap1[48], calibMap1[50],
casiotone401 0:cd43a974c54c 50 calibMap1[52], calibMap1[53], calibMap1[55], calibMap1[57], calibMap1[59],
casiotone401 0:cd43a974c54c 51 calibMap1[60], calibMap1[62], calibMap1[64], calibMap1[65], calibMap1[67],
casiotone401 0:cd43a974c54c 52 calibMap1[69], calibMap1[71], calibMap1[72], calibMap1[74], calibMap1[76],
casiotone401 0:cd43a974c54c 53 calibMap1[77], calibMap1[79], calibMap1[81], calibMap1[83], calibMap1[84],
casiotone401 0:cd43a974c54c 54 calibMap1[86], calibMap1[88], calibMap1[89], calibMap1[91], calibMap1[93],
casiotone401 0:cd43a974c54c 55 calibMap1[95], calibMap1[96], calibMap1[98], calibMap1[100], calibMap1[101],
casiotone401 0:cd43a974c54c 56 calibMap1[103], calibMap1[105], calibMap1[107], calibMap1[108], calibMap1[110],
casiotone401 0:cd43a974c54c 57 calibMap1[112], calibMap1[113], calibMap1[115]
casiotone401 0:cd43a974c54c 58 };
casiotone401 0:cd43a974c54c 59
casiotone401 0:cd43a974c54c 60 // M7(9)
casiotone401 0:cd43a974c54c 61 const float calibMap3[QUAN_RES3] = {
casiotone401 0:cd43a974c54c 62 calibMap1[0], calibMap1[4], calibMap1[7], calibMap1[11], calibMap1[12],
casiotone401 0:cd43a974c54c 63 calibMap1[14], calibMap1[16], calibMap1[19], calibMap1[23], calibMap1[24],
casiotone401 0:cd43a974c54c 64 calibMap1[26], calibMap1[28], calibMap1[31], calibMap1[35], calibMap1[36],
casiotone401 0:cd43a974c54c 65 calibMap1[38], calibMap1[40], calibMap1[43], calibMap1[47], calibMap1[48],
casiotone401 0:cd43a974c54c 66 calibMap1[50], calibMap1[52], calibMap1[55], calibMap1[59], calibMap1[60],
casiotone401 0:cd43a974c54c 67 calibMap1[62], calibMap1[64], calibMap1[67], calibMap1[71], calibMap1[72],
casiotone401 0:cd43a974c54c 68 calibMap1[76], calibMap1[79], calibMap1[83], calibMap1[84], calibMap1[86],
casiotone401 0:cd43a974c54c 69 calibMap1[88], calibMap1[91], calibMap1[95], calibMap1[96], calibMap1[100],
casiotone401 0:cd43a974c54c 70 calibMap1[103], calibMap1[107], calibMap1[108], calibMap1[110], calibMap1[112],
casiotone401 0:cd43a974c54c 71 calibMap1[115]
casiotone401 0:cd43a974c54c 72 };
casiotone401 0:cd43a974c54c 73
casiotone401 0:cd43a974c54c 74 // m7(9)
casiotone401 0:cd43a974c54c 75 const float calibMap4[QUAN_RES4] = {
casiotone401 0:cd43a974c54c 76 calibMap1[0], calibMap1[3], calibMap1[7], calibMap1[10], calibMap1[12],
casiotone401 0:cd43a974c54c 77 calibMap1[15], calibMap1[19], calibMap1[22], calibMap1[26], calibMap1[27],
casiotone401 0:cd43a974c54c 78 calibMap1[31], calibMap1[34], calibMap1[36], calibMap1[38], calibMap1[39],
casiotone401 0:cd43a974c54c 79 calibMap1[43], calibMap1[46], calibMap1[50], calibMap1[53], calibMap1[55],
casiotone401 0:cd43a974c54c 80 calibMap1[58], calibMap1[60], calibMap1[63], calibMap1[67], calibMap1[70],
casiotone401 0:cd43a974c54c 81 calibMap1[72], calibMap1[74], calibMap1[75], calibMap1[79], calibMap1[82],
casiotone401 0:cd43a974c54c 82 calibMap1[86], calibMap1[89], calibMap1[91], calibMap1[94], calibMap1[96],
casiotone401 0:cd43a974c54c 83 calibMap1[99], calibMap1[103], calibMap1[106], calibMap1[110], calibMap1[113]
casiotone401 0:cd43a974c54c 84 };
casiotone401 0:cd43a974c54c 85
casiotone401 0:cd43a974c54c 86 // Dorian Scale
casiotone401 0:cd43a974c54c 87 const float calibMap5[QUAN_RES5] = {
casiotone401 0:cd43a974c54c 88 calibMap1[0], calibMap1[2], calibMap1[3], calibMap1[5], calibMap1[7],
casiotone401 0:cd43a974c54c 89 calibMap1[9], calibMap1[10], calibMap1[12], calibMap1[14], calibMap1[15],
casiotone401 0:cd43a974c54c 90 calibMap1[17], calibMap1[19], calibMap1[20], calibMap1[21], calibMap1[24],
casiotone401 0:cd43a974c54c 91 calibMap1[26], calibMap1[27], calibMap1[29], calibMap1[31], calibMap1[33],
casiotone401 0:cd43a974c54c 92 calibMap1[34], calibMap1[36], calibMap1[38], calibMap1[39], calibMap1[41],
casiotone401 0:cd43a974c54c 93 calibMap1[43], calibMap1[45], calibMap1[46], calibMap1[48], calibMap1[50],
casiotone401 0:cd43a974c54c 94 calibMap1[51], calibMap1[53], calibMap1[55], calibMap1[57], calibMap1[58],
casiotone401 0:cd43a974c54c 95 calibMap1[60], calibMap1[62], calibMap1[63], calibMap1[65], calibMap1[67],
casiotone401 0:cd43a974c54c 96 calibMap1[69], calibMap1[70], calibMap1[72], calibMap1[74], calibMap1[75],
casiotone401 0:cd43a974c54c 97 calibMap1[77], calibMap1[79], calibMap1[81], calibMap1[82], calibMap1[84],
casiotone401 0:cd43a974c54c 98 calibMap1[86], calibMap1[87], calibMap1[89], calibMap1[91], calibMap1[93],
casiotone401 0:cd43a974c54c 99 calibMap1[94], calibMap1[96], calibMap1[98], calibMap1[99], calibMap1[101],
casiotone401 0:cd43a974c54c 100 calibMap1[103], calibMap1[105], calibMap1[106], calibMap1[108], calibMap1[110],
casiotone401 0:cd43a974c54c 101 calibMap1[111], calibMap1[113], calibMap1[115]
casiotone401 0:cd43a974c54c 102 };
casiotone401 0:cd43a974c54c 103
casiotone401 0:cd43a974c54c 104 // Minor Scale
casiotone401 0:cd43a974c54c 105 const float calibMap6[QUAN_RES6] = {
casiotone401 0:cd43a974c54c 106 calibMap1[0], calibMap1[2], calibMap1[3], calibMap1[5], calibMap1[7],
casiotone401 0:cd43a974c54c 107 calibMap1[8], calibMap1[10], calibMap1[12], calibMap1[14], calibMap1[15],
casiotone401 0:cd43a974c54c 108 calibMap1[17], calibMap1[19], calibMap1[20], calibMap1[22], calibMap1[24],
casiotone401 0:cd43a974c54c 109 calibMap1[26], calibMap1[27], calibMap1[29], calibMap1[31], calibMap1[32],
casiotone401 0:cd43a974c54c 110 calibMap1[34], calibMap1[36], calibMap1[38], calibMap1[39], calibMap1[41],
casiotone401 0:cd43a974c54c 111 calibMap1[43], calibMap1[44], calibMap1[46], calibMap1[48], calibMap1[50],
casiotone401 0:cd43a974c54c 112 calibMap1[51], calibMap1[53], calibMap1[55], calibMap1[56], calibMap1[58],
casiotone401 0:cd43a974c54c 113 calibMap1[60], calibMap1[62], calibMap1[63], calibMap1[65], calibMap1[67],
casiotone401 0:cd43a974c54c 114 calibMap1[68], calibMap1[70], calibMap1[72], calibMap1[74], calibMap1[75],
casiotone401 0:cd43a974c54c 115 calibMap1[77], calibMap1[79], calibMap1[80], calibMap1[82], calibMap1[84],
casiotone401 0:cd43a974c54c 116 calibMap1[86], calibMap1[87], calibMap1[89], calibMap1[91], calibMap1[92],
casiotone401 0:cd43a974c54c 117 calibMap1[94], calibMap1[96], calibMap1[98], calibMap1[99], calibMap1[101],
casiotone401 0:cd43a974c54c 118 calibMap1[103], calibMap1[104], calibMap1[106], calibMap1[108], calibMap1[110],
casiotone401 0:cd43a974c54c 119 calibMap1[111], calibMap1[113], calibMap1[115]
casiotone401 0:cd43a974c54c 120 };
casiotone401 0:cd43a974c54c 121
casiotone401 0:cd43a974c54c 122 // 5th
casiotone401 0:cd43a974c54c 123 const float calibMap7[QUAN_RES7] = {
casiotone401 0:cd43a974c54c 124 calibMap1[0], calibMap1[7], calibMap1[14], calibMap1[21], calibMap1[28],
casiotone401 0:cd43a974c54c 125 calibMap1[35], calibMap1[42], calibMap1[49], calibMap1[56], calibMap1[63],
casiotone401 0:cd43a974c54c 126 calibMap1[70], calibMap1[77], calibMap1[84], calibMap1[91], calibMap1[98],
casiotone401 0:cd43a974c54c 127 calibMap1[105]
casiotone401 0:cd43a974c54c 128 };
casiotone401 0:cd43a974c54c 129
casiotone401 0:cd43a974c54c 130 // Whole tone
casiotone401 0:cd43a974c54c 131 const float calibMap8[QUAN_RES8] = {
casiotone401 0:cd43a974c54c 132 calibMap1[0], calibMap1[1], calibMap1[2], calibMap1[6], calibMap1[8],
casiotone401 0:cd43a974c54c 133 calibMap1[10], calibMap1[12], calibMap1[14], calibMap1[16], calibMap1[18],
casiotone401 0:cd43a974c54c 134 calibMap1[20], calibMap1[22], calibMap1[24], calibMap1[26], calibMap1[28],
casiotone401 0:cd43a974c54c 135 calibMap1[30], calibMap1[32], calibMap1[34], calibMap1[36], calibMap1[38],
casiotone401 0:cd43a974c54c 136 calibMap1[40], calibMap1[42], calibMap1[44], calibMap1[46], calibMap1[48],
casiotone401 0:cd43a974c54c 137 calibMap1[50], calibMap1[52], calibMap1[54], calibMap1[56], calibMap1[58],
casiotone401 0:cd43a974c54c 138 calibMap1[60], calibMap1[62], calibMap1[64], calibMap1[66], calibMap1[68],
casiotone401 0:cd43a974c54c 139 calibMap1[70], calibMap1[72], calibMap1[74], calibMap1[76], calibMap1[78],
casiotone401 0:cd43a974c54c 140 calibMap1[80], calibMap1[82], calibMap1[84], calibMap1[86], calibMap1[88],
casiotone401 0:cd43a974c54c 141 calibMap1[90], calibMap1[92], calibMap1[94], calibMap1[96], calibMap1[98],
casiotone401 0:cd43a974c54c 142 calibMap1[100], calibMap1[102], calibMap1[104], calibMap1[106], calibMap1[108],
casiotone401 0:cd43a974c54c 143 calibMap1[110], calibMap1[112], calibMap1[114]
casiotone401 0:cd43a974c54c 144 };
casiotone401 0:cd43a974c54c 145
casiotone401 0:cd43a974c54c 146 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 147 // Global Variables
casiotone401 0:cd43a974c54c 148
casiotone401 0:cd43a974c54c 149 float gOSC_cv[8];
casiotone401 0:cd43a974c54c 150 float gSeq_cv[16];
casiotone401 0:cd43a974c54c 151 float gGlide;
casiotone401 0:cd43a974c54c 152
casiotone401 0:cd43a974c54c 153 // Sub Mode Status
casiotone401 0:cd43a974c54c 154 int gSubModeCount1 = -1;
casiotone401 0:cd43a974c54c 155 int gSubModeCount2 = -1;
casiotone401 0:cd43a974c54c 156
casiotone401 0:cd43a974c54c 157 // Variables for Sequencer
casiotone401 0:cd43a974c54c 158 float gPulseCount[8] = {0};
casiotone401 0:cd43a974c54c 159 float gGateMode[16] = {0};
casiotone401 0:cd43a974c54c 160 float gSlide[16];
casiotone401 0:cd43a974c54c 161 float gAccent[16] = {0};
casiotone401 0:cd43a974c54c 162
casiotone401 0:cd43a974c54c 163 // Euclidean SEQ Variables
casiotone401 0:cd43a974c54c 164 float gEucA[6], gEucB[6];
casiotone401 0:cd43a974c54c 165
casiotone401 0:cd43a974c54c 166 // Variables for Control
casiotone401 0:cd43a974c54c 167 /*
casiotone401 0:cd43a974c54c 168 gCtrl[0] /ctrl1 BPM
casiotone401 0:cd43a974c54c 169 gCtrl[1] /ctrl2 Quantize mode
casiotone401 0:cd43a974c54c 170 gCtrl[3] /ctrl4 Glide
casiotone401 0:cd43a974c54c 171 gCtrl[4] /ctrl5 M185 Reset Count
casiotone401 0:cd43a974c54c 172
casiotone401 0:cd43a974c54c 173 gCtrlSW[0] /ctrlsw1 Sequencer STOP
casiotone401 0:cd43a974c54c 174 gCtrlSW[1] /ctrlsw2 Euclidean Sequencer reset
casiotone401 0:cd43a974c54c 175 gCtrlSW[2] /ctrlsw3 Sequencer Loop
casiotone401 0:cd43a974c54c 176 gCtrlSW[3] /ctrlsw4 Euclid Seq ON
casiotone401 0:cd43a974c54c 177 gCtrlSW[4] /ctrlsw5 ASR Analog Mode
casiotone401 0:cd43a974c54c 178
casiotone401 0:cd43a974c54c 179 gArdPot[0] /pot1 Arduino pot1
casiotone401 0:cd43a974c54c 180 gArdPot[1] /pot2 Arduino pot2
casiotone401 0:cd43a974c54c 181 gArdSW[0] /sw1 Arduino sw1
casiotone401 0:cd43a974c54c 182 gArdSW[1] /sw2 Arduino sw2
casiotone401 0:cd43a974c54c 183
casiotone401 0:cd43a974c54c 184 */
casiotone401 0:cd43a974c54c 185
casiotone401 0:cd43a974c54c 186 float gCtrl[8];
casiotone401 0:cd43a974c54c 187 bool gCtrlSW[8] = {false};
casiotone401 0:cd43a974c54c 188
casiotone401 0:cd43a974c54c 189 // Variables for Arduino
casiotone401 0:cd43a974c54c 190 uint16_t gArdCV[4];
casiotone401 0:cd43a974c54c 191 float gArdPot[2] = {408.0f, 350.0f};
casiotone401 0:cd43a974c54c 192 bool gArdSW[2] = {false};
casiotone401 0:cd43a974c54c 193
casiotone401 0:cd43a974c54c 194 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 195 // mbed Functions
casiotone401 0:cd43a974c54c 196
casiotone401 0:cd43a974c54c 197 TextLCD gLCD(p9, p10, p11, p12, p13, p14); // rs, e, d4-d7
casiotone401 0:cd43a974c54c 198
casiotone401 0:cd43a974c54c 199 BurstSPI gSPI(p5,p6,p7); // SPI (p6 unconnected)
casiotone401 0:cd43a974c54c 200
casiotone401 0:cd43a974c54c 201 FastOut<p15> gSYNCMODE; // SYNC DAC8568
casiotone401 0:cd43a974c54c 202 FastOut<p16> gLDAC; // LDAC DAC8568
casiotone401 0:cd43a974c54c 203
casiotone401 0:cd43a974c54c 204 DigitalOut gGATES[4] = {p21, p22, p23, p24}; // GateOut
casiotone401 0:cd43a974c54c 205 FastOut<p19> gSUBGATE; // SubGateOut
casiotone401 0:cd43a974c54c 206 FastOut<p25> gCLOCKOUT; // ClockOut
casiotone401 0:cd43a974c54c 207
casiotone401 0:cd43a974c54c 208 AnalogOut gAOUT(p18);
casiotone401 0:cd43a974c54c 209
casiotone401 0:cd43a974c54c 210 AnalogIn gAIN(p17);
casiotone401 0:cd43a974c54c 211 DebouncedInterrupt gSW(p30); // Mode SW
casiotone401 0:cd43a974c54c 212
casiotone401 0:cd43a974c54c 213 // MIDI OUT
casiotone401 0:cd43a974c54c 214 MIDI midi(p28, p27);
casiotone401 0:cd43a974c54c 215
casiotone401 0:cd43a974c54c 216 Timer gTimer; // Timer
casiotone401 0:cd43a974c54c 217 Ticker gPoller; // Ticker for Polling
casiotone401 0:cd43a974c54c 218
casiotone401 0:cd43a974c54c 219 // Ethernet
casiotone401 0:cd43a974c54c 220 #ifdef DHCP
casiotone401 0:cd43a974c54c 221 EthernetNetIf gEth;
casiotone401 0:cd43a974c54c 222 #else
casiotone401 0:cd43a974c54c 223 EthernetNetIf gEth(
casiotone401 0:cd43a974c54c 224 IpAddr(192,168,1,6),
casiotone401 0:cd43a974c54c 225 IpAddr(255,255,255,0),
casiotone401 0:cd43a974c54c 226 IpAddr(192,168,1,1),
casiotone401 0:cd43a974c54c 227 IpAddr(192,168,1,1)
casiotone401 0:cd43a974c54c 228 );
casiotone401 0:cd43a974c54c 229 #endif
casiotone401 0:cd43a974c54c 230
casiotone401 0:cd43a974c54c 231
casiotone401 0:cd43a974c54c 232 // touchOSC Address
casiotone401 0:cd43a974c54c 233 uint8_t touchOSCAddress[] = {192, 168, 1, 7};
casiotone401 0:cd43a974c54c 234 int touchOSCPort = TOSC_PORT;
casiotone401 0:cd43a974c54c 235
casiotone401 0:cd43a974c54c 236 // Set OSC message for sending
casiotone401 0:cd43a974c54c 237 OSCClass osc;
casiotone401 0:cd43a974c54c 238 OSCMessage sendMes;
casiotone401 0:cd43a974c54c 239
casiotone401 0:cd43a974c54c 240 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 241 // SPI Transfer
casiotone401 0:cd43a974c54c 242 // DAC8568 data word length 32bit (8bit shift out)
casiotone401 0:cd43a974c54c 243
casiotone401 0:cd43a974c54c 244 void UpdateCV(int control, int address, const unsigned int *data)
casiotone401 0:cd43a974c54c 245 {
casiotone401 0:cd43a974c54c 246
casiotone401 0:cd43a974c54c 247 switch (control)
casiotone401 0:cd43a974c54c 248 {
casiotone401 0:cd43a974c54c 249 case WRITE_UPDATE_N:
casiotone401 0:cd43a974c54c 250
casiotone401 0:cd43a974c54c 251 gSYNCMODE = _DISABLE;
casiotone401 0:cd43a974c54c 252 gSPI.write(00000000|control); // padding at beginning of byte and control bits
casiotone401 0:cd43a974c54c 253 gSPI.write(address << 4 | *data >> 12); // address(ch) bits
casiotone401 0:cd43a974c54c 254 gSPI.write((*data << 4) >> 8); // middle 8 bits of data
casiotone401 0:cd43a974c54c 255 gSPI.write((*data << 12) >> 8 | 00001111);
casiotone401 0:cd43a974c54c 256 gSYNCMODE = _ENABLE;
casiotone401 0:cd43a974c54c 257 gLDAC = _DISABLE;
casiotone401 0:cd43a974c54c 258 gLDAC = _ENABLE;
casiotone401 0:cd43a974c54c 259
casiotone401 0:cd43a974c54c 260 break;
casiotone401 0:cd43a974c54c 261
casiotone401 0:cd43a974c54c 262 case RESET:
casiotone401 0:cd43a974c54c 263
casiotone401 0:cd43a974c54c 264 gSYNCMODE = _DISABLE;
casiotone401 0:cd43a974c54c 265 gSPI.write(00000111); // Software RESET
casiotone401 0:cd43a974c54c 266 gSPI.write(00000000);
casiotone401 0:cd43a974c54c 267 gSPI.write(00000000);
casiotone401 0:cd43a974c54c 268 gSPI.write(00000000);
casiotone401 0:cd43a974c54c 269 gSYNCMODE = _ENABLE;
casiotone401 0:cd43a974c54c 270
casiotone401 0:cd43a974c54c 271 break;
casiotone401 0:cd43a974c54c 272
casiotone401 0:cd43a974c54c 273 case CLR:
casiotone401 0:cd43a974c54c 274
casiotone401 0:cd43a974c54c 275 gSYNCMODE = _DISABLE;
casiotone401 0:cd43a974c54c 276 gSPI.write(00000101); // CLR Register
casiotone401 0:cd43a974c54c 277 gSPI.write(00000000);
casiotone401 0:cd43a974c54c 278 gSPI.write(00000000);
casiotone401 0:cd43a974c54c 279 gSPI.write(00000011); // Ignore CLR Pin
casiotone401 0:cd43a974c54c 280 gSYNCMODE = _ENABLE;
casiotone401 0:cd43a974c54c 281
casiotone401 0:cd43a974c54c 282 break;
casiotone401 0:cd43a974c54c 283 }
casiotone401 0:cd43a974c54c 284 }
casiotone401 0:cd43a974c54c 285
casiotone401 0:cd43a974c54c 286 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 287 // CV Meter TextLCD bar meter
casiotone401 0:cd43a974c54c 288
casiotone401 0:cd43a974c54c 289 void UpdateCVMeter(int ch, const unsigned int *level)
casiotone401 0:cd43a974c54c 290 {
casiotone401 0:cd43a974c54c 291 gLCD.locate ( ch, 0 );
casiotone401 0:cd43a974c54c 292 gLCD.putc(*level * 0.0002192f); // put custom char
casiotone401 0:cd43a974c54c 293 }
casiotone401 0:cd43a974c54c 294
casiotone401 0:cd43a974c54c 295 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 296 // Check subMode1(gArdSW[0]) (subMode Status & Text LCD Update)
casiotone401 0:cd43a974c54c 297
casiotone401 0:cd43a974c54c 298 int CheckSubMode1(void)
casiotone401 0:cd43a974c54c 299 {
casiotone401 0:cd43a974c54c 300 static int lastSWState = -1;
casiotone401 0:cd43a974c54c 301
casiotone401 0:cd43a974c54c 302 if (gArdSW[0] != lastSWState)
casiotone401 0:cd43a974c54c 303 {
casiotone401 0:cd43a974c54c 304 lastSWState = gArdSW[0];
casiotone401 0:cd43a974c54c 305
casiotone401 0:cd43a974c54c 306 if (gSubModeCount1 < SUBMODE1_TOTAL - 1)
casiotone401 0:cd43a974c54c 307 {
casiotone401 0:cd43a974c54c 308 ++gSubModeCount1;
casiotone401 0:cd43a974c54c 309
casiotone401 0:cd43a974c54c 310 } else {
casiotone401 0:cd43a974c54c 311
casiotone401 0:cd43a974c54c 312 gSubModeCount1 = 0;
casiotone401 0:cd43a974c54c 313 }
casiotone401 0:cd43a974c54c 314
casiotone401 0:cd43a974c54c 315 }
casiotone401 0:cd43a974c54c 316
casiotone401 0:cd43a974c54c 317 return gSubModeCount1;
casiotone401 0:cd43a974c54c 318 }
casiotone401 0:cd43a974c54c 319
casiotone401 0:cd43a974c54c 320 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 321 // Check subMode2(gArdSW[1]) (subMode Status & Text LCD Update)
casiotone401 0:cd43a974c54c 322
casiotone401 0:cd43a974c54c 323 int CheckSubMode2(void)
casiotone401 0:cd43a974c54c 324 {
casiotone401 0:cd43a974c54c 325 static int lastSWState = -1;
casiotone401 0:cd43a974c54c 326
casiotone401 0:cd43a974c54c 327 if (gArdSW[0] != lastSWState)
casiotone401 0:cd43a974c54c 328 {
casiotone401 0:cd43a974c54c 329 lastSWState = gArdSW[0];
casiotone401 0:cd43a974c54c 330
casiotone401 0:cd43a974c54c 331 if (gSubModeCount2 < SUBMODE2_TOTAL - 1)
casiotone401 0:cd43a974c54c 332 {
casiotone401 0:cd43a974c54c 333 ++gSubModeCount2;
casiotone401 0:cd43a974c54c 334
casiotone401 0:cd43a974c54c 335 } else {
casiotone401 0:cd43a974c54c 336
casiotone401 0:cd43a974c54c 337 gSubModeCount2 = 0;
casiotone401 0:cd43a974c54c 338 }
casiotone401 0:cd43a974c54c 339
casiotone401 0:cd43a974c54c 340 }
casiotone401 0:cd43a974c54c 341
casiotone401 0:cd43a974c54c 342 return gSubModeCount2;
casiotone401 0:cd43a974c54c 343 }
casiotone401 0:cd43a974c54c 344
casiotone401 0:cd43a974c54c 345 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 346 // Update subMode Text LCD
casiotone401 0:cd43a974c54c 347 void UpdateSubModeLCD(const char * subModeName)
casiotone401 0:cd43a974c54c 348 {
casiotone401 0:cd43a974c54c 349 gLCD.locate( 0, 1 );
casiotone401 0:cd43a974c54c 350 gLCD.printf(" ");
casiotone401 0:cd43a974c54c 351
casiotone401 0:cd43a974c54c 352 gLCD.locate( 0, 1 );
casiotone401 0:cd43a974c54c 353 gLCD.printf("%s", subModeName);
casiotone401 0:cd43a974c54c 354
casiotone401 0:cd43a974c54c 355 sendMes.setTopAddress("/submode");
casiotone401 0:cd43a974c54c 356 sendMes.setArgs("s", subModeName);
casiotone401 0:cd43a974c54c 357
casiotone401 0:cd43a974c54c 358 osc.sendOsc(&sendMes);
casiotone401 0:cd43a974c54c 359 }