OSCtoCV Library

Dependents:   OSCtoCVConverter

Committer:
casiotone401
Date:
Thu Feb 25 11:21:37 2016 +0000
Revision:
6:7fb15b1b5459
Parent:
4:fe335dc8d53d
minor change

Who changed what in which revision?

UserRevisionLine numberNew contents of line
casiotone401 0:cd43a974c54c 1 /*
casiotone401 0:cd43a974c54c 2 OSCtoCV Converter Configulation
casiotone401 0:cd43a974c54c 3 */
casiotone401 0:cd43a974c54c 4
casiotone401 0:cd43a974c54c 5 #pragma O3
casiotone401 0:cd43a974c54c 6 #pragma Otime
casiotone401 0:cd43a974c54c 7
casiotone401 0:cd43a974c54c 8 #ifndef OSCtoCV_H
casiotone401 0:cd43a974c54c 9 #define OSCtoCV_H
casiotone401 0:cd43a974c54c 10
casiotone401 0:cd43a974c54c 11 #include "mbed.h"
casiotone401 0:cd43a974c54c 12 #include "FastIO.h" // https://developer.mbed.org/users/Sissors/code/FastIO/
casiotone401 0:cd43a974c54c 13 //#include "FastAnalogIn.h"
casiotone401 0:cd43a974c54c 14 #include "DebouncedInterrupt.h" // https://developer.mbed.org/users/kandangath/code/DebouncedInterrupt/
casiotone401 0:cd43a974c54c 15 #include "BurstSPI.h" // https://developer.mbed.org/users/Sissors/code/BurstSPI/
casiotone401 0:cd43a974c54c 16 #include "TextLCD.h" //edit "writeCommand" "writeData" protected -> public
casiotone401 0:cd43a974c54c 17 #include "EthernetNetIf.h"
casiotone401 0:cd43a974c54c 18 #include "UDPSocket.h"
casiotone401 0:cd43a974c54c 19 #include "OSCReceiver.h"
casiotone401 0:cd43a974c54c 20 #include "mbedOSC.h"
casiotone401 0:cd43a974c54c 21 #include "MIDI.h" // https://developer.mbed.org/users/okini3939/code/MIDI/
casiotone401 0:cd43a974c54c 22
casiotone401 0:cd43a974c54c 23 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 24 // DAC8568 Control Bits (See datasheet)
casiotone401 0:cd43a974c54c 25
casiotone401 0:cd43a974c54c 26 #define WRITE 0x00
casiotone401 0:cd43a974c54c 27 #define UPDATE 0x01
casiotone401 0:cd43a974c54c 28 #define WRITE_UPDATE_ALL 0x02 // LDAC Write to Selected Update All
casiotone401 0:cd43a974c54c 29 #define WRITE_UPDATE_N 0x03 // LDAC Write to Selected Update Respective
casiotone401 0:cd43a974c54c 30 #define POWER 0x04
casiotone401 0:cd43a974c54c 31 #define CLR 0x05 // Clear Code Register
casiotone401 0:cd43a974c54c 32 #define WRITE_LDAC_REG 0x06
casiotone401 0:cd43a974c54c 33 #define RESET 0x07 // Software Reset DAC8568
casiotone401 0:cd43a974c54c 34 #define SETUP_INTERNAL_REF 0x08
casiotone401 0:cd43a974c54c 35
casiotone401 0:cd43a974c54c 36 #define SPI_RATE 20000000 // 20Mbps SPI Clock
casiotone401 4:fe335dc8d53d 37 #define POLLING_INTERVAL 19 // Polling Interval (us)
casiotone401 0:cd43a974c54c 38
casiotone401 0:cd43a974c54c 39 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 40 // OSCtoCV Converter Macros
casiotone401 0:cd43a974c54c 41
casiotone401 0:cd43a974c54c 42 #define Lin 0 // Linear LinearCV
casiotone401 0:cd43a974c54c 43 #define Chr 1 // Chromatic
casiotone401 0:cd43a974c54c 44 #define Maj 2 // Major
casiotone401 0:cd43a974c54c 45 #define M7 3 // Major7
casiotone401 0:cd43a974c54c 46 #define Min7 4 // Minor7
casiotone401 0:cd43a974c54c 47 #define Dor 5 // Dorian
casiotone401 0:cd43a974c54c 48 #define Min 6 // Minor
casiotone401 0:cd43a974c54c 49 #define S5th 7 // 5th
casiotone401 0:cd43a974c54c 50 #define Wht 8 // Wholetone
casiotone401 0:cd43a974c54c 51
casiotone401 4:fe335dc8d53d 52 #define SCALE_TOTAL 9 // Scales total
casiotone401 0:cd43a974c54c 53
casiotone401 4:fe335dc8d53d 54 #define SCALE_AOUT (65535 / SCALE_TOTAL - 1)
casiotone401 0:cd43a974c54c 55
casiotone401 0:cd43a974c54c 56 #define QUAN_RES1 116 // Quantize voltage Steps
casiotone401 0:cd43a974c54c 57 #define QUAN_RES2 68
casiotone401 0:cd43a974c54c 58 #define QUAN_RES3 46
casiotone401 0:cd43a974c54c 59 #define QUAN_RES4 40
casiotone401 0:cd43a974c54c 60 #define QUAN_RES5 68
casiotone401 0:cd43a974c54c 61 #define QUAN_RES6 68
casiotone401 0:cd43a974c54c 62 #define QUAN_RES7 16
casiotone401 0:cd43a974c54c 63 #define QUAN_RES8 58
casiotone401 0:cd43a974c54c 64
casiotone401 0:cd43a974c54c 65 #define SCALING_N 32256.0f
casiotone401 0:cd43a974c54c 66
casiotone401 0:cd43a974c54c 67 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 68 // Ethernet Setting
casiotone401 0:cd43a974c54c 69
casiotone401 4:fe335dc8d53d 70 #define DHCP // address assigned by DHCP
casiotone401 0:cd43a974c54c 71 #define INPUT_PORT 12345 // Input Port Number
casiotone401 0:cd43a974c54c 72 #define TOSC_PORT 9000 // touchOSC Port Number
casiotone401 0:cd43a974c54c 73
casiotone401 0:cd43a974c54c 74 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 75 // SubModeCount
casiotone401 0:cd43a974c54c 76 #define SUBMODE1_TOTAL 8
casiotone401 0:cd43a974c54c 77 #define SUBMODE2_TOTAL 8
casiotone401 0:cd43a974c54c 78
casiotone401 0:cd43a974c54c 79 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 80 // Gate Sequencer Macros
casiotone401 0:cd43a974c54c 81
casiotone401 0:cd43a974c54c 82 #define _DISABLE 0
casiotone401 0:cd43a974c54c 83 #define _ENABLE 1
casiotone401 0:cd43a974c54c 84
casiotone401 0:cd43a974c54c 85 #define GATE1 0
casiotone401 0:cd43a974c54c 86 #define GATE2 1
casiotone401 0:cd43a974c54c 87 #define GATE3 2
casiotone401 0:cd43a974c54c 88 #define GATE4 3
casiotone401 0:cd43a974c54c 89 #define SUBGATE 4
casiotone401 0:cd43a974c54c 90 #define GATE_TOTAL 5
casiotone401 0:cd43a974c54c 91
casiotone401 0:cd43a974c54c 92 #define INVERT 1
casiotone401 0:cd43a974c54c 93 #define NON_INVERT 0
casiotone401 0:cd43a974c54c 94
casiotone401 0:cd43a974c54c 95 #define GATESOUT_ON 0
casiotone401 0:cd43a974c54c 96 #define GATESOUT_OFF 1
casiotone401 0:cd43a974c54c 97
casiotone401 0:cd43a974c54c 98 #define SYNC_ON 0
casiotone401 0:cd43a974c54c 99 #define SYNC_OFF 1
casiotone401 0:cd43a974c54c 100
casiotone401 0:cd43a974c54c 101 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 102 // Beats (Note values)
casiotone401 0:cd43a974c54c 103
casiotone401 0:cd43a974c54c 104 #define N1ST 1 // whole
casiotone401 0:cd43a974c54c 105 #define N2ND 2 // harf
casiotone401 0:cd43a974c54c 106 #define N4TH 4 // quarter
casiotone401 0:cd43a974c54c 107 #define N8TH 8
casiotone401 0:cd43a974c54c 108 #define N16TH 16
casiotone401 0:cd43a974c54c 109 #define N32TH 32
casiotone401 0:cd43a974c54c 110 #define N64TH 64
casiotone401 0:cd43a974c54c 111 #define NDOT2 3 // dotted
casiotone401 0:cd43a974c54c 112 #define NDOT4 7
casiotone401 0:cd43a974c54c 113 #define NDOT8 9
casiotone401 0:cd43a974c54c 114 #define NDOT16 11
casiotone401 0:cd43a974c54c 115 #define NDOT32 13
casiotone401 0:cd43a974c54c 116 #define TRIP2 3 // triplets
casiotone401 0:cd43a974c54c 117 #define TRIP4 6
casiotone401 0:cd43a974c54c 118 #define TRIP8 12
casiotone401 0:cd43a974c54c 119 #define TRIP16 24
casiotone401 0:cd43a974c54c 120 #define TRIP32 48
casiotone401 0:cd43a974c54c 121 #define SYNC24 96
casiotone401 0:cd43a974c54c 122 #define NRESET 0 // Gate Reset
casiotone401 0:cd43a974c54c 123
casiotone401 0:cd43a974c54c 124 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 125 // Sequencer Macros
casiotone401 1:981b62bb5c87 126 #define SHIFTSEQ 0
casiotone401 1:981b62bb5c87 127 #define M185SEQ 1
casiotone401 1:981b62bb5c87 128 #define EUCLID 2
casiotone401 1:981b62bb5c87 129 #define BEATSSEQ 3
casiotone401 0:cd43a974c54c 130
casiotone401 1:981b62bb5c87 131 #define CV_CHANNEL1 1
casiotone401 1:981b62bb5c87 132 #define CV_CHANNEL2 2
casiotone401 1:981b62bb5c87 133 #define CV_CHANNEL3 3
casiotone401 1:981b62bb5c87 134 #define CV_CHANNEL4 4
casiotone401 1:981b62bb5c87 135 #define CV_CHANNEL5 5
casiotone401 1:981b62bb5c87 136 #define CV_CHANNEL6 6
casiotone401 1:981b62bb5c87 137 #define CV_CHANNEL7 7
casiotone401 1:981b62bb5c87 138 #define CV_CHANNEL8 8
casiotone401 1:981b62bb5c87 139
casiotone401 1:981b62bb5c87 140 #define GATE_MODE_ADDRESS "/gatemode" // /gatemode1 ~ gatemode16
casiotone401 0:cd43a974c54c 141 #define STEP_INDICATOR_ADDRESS "/seqstep/" // touchOSC multi toggle(1x16(8)) for Current Step Indicator
casiotone401 1:981b62bb5c87 142 #define RESET_COUNTER_ADDRESS "/reset" // touchOSC label for Sequencer reset count
casiotone401 1:981b62bb5c87 143
casiotone401 1:981b62bb5c87 144 #define ANALOG_JITTER (rand() % 70 - 35)
casiotone401 0:cd43a974c54c 145
casiotone401 0:cd43a974c54c 146 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 147 // M185 Macros
casiotone401 0:cd43a974c54c 148
casiotone401 1:981b62bb5c87 149 #define PULSE_COUNT_ADDRESS "/pulse" // /pulse1 ~ pulse8 M185 Pulse Count
casiotone401 1:981b62bb5c87 150 #define GATE185_MODE_ADDRESS "/185gmode" // /gatemode1 ~ gatemode8 M185 Gate Mode
casiotone401 1:981b62bb5c87 151 #define STEP185_INDICATOR_ADDRESS "/185step/" // touchOSC multi toggle(1x16(8)) for Current Step Indicator
casiotone401 1:981b62bb5c87 152 #define RESET185_COUNTER_ADDRESS "/185reset" // touchOSC label for Sequencer reset count
casiotone401 0:cd43a974c54c 153
casiotone401 0:cd43a974c54c 154 #define SINGLE 0
casiotone401 0:cd43a974c54c 155 #define MUTE 1
casiotone401 0:cd43a974c54c 156 #define MULTI 2
casiotone401 0:cd43a974c54c 157 #define HOLD 3
casiotone401 0:cd43a974c54c 158
casiotone401 0:cd43a974c54c 159 //-------------------------------------------------------------
casiotone401 1:981b62bb5c87 160 // Beats Sequencer Macros
casiotone401 1:981b62bb5c87 161
casiotone401 1:981b62bb5c87 162 #define BEATS_MATRIX_ADDRESS "/bm/" // touchOSC multi toggle(16x16) OSC address
casiotone401 1:981b62bb5c87 163 #define BEATS_PULSE_COUNT_ADDRESS "/bp" // /pulse1 ~ pulse16 BeatsSeq Pulse Count
casiotone401 1:981b62bb5c87 164 #define BEATS_INDICATOR_ADDRESS "/bps/" // touchOSC multi toggle(1x16(8)) for Current Step Indicator
casiotone401 1:981b62bb5c87 165 #define BEATS_COUNTER_ADDRESS "/bprst" // touchOSC label for Sequencer reset count
casiotone401 1:981b62bb5c87 166
casiotone401 1:981b62bb5c87 167 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 168 // Euclidean Sequencer Macros
casiotone401 0:cd43a974c54c 169
casiotone401 0:cd43a974c54c 170 #define READ_DELAY 10 // for debouncing
casiotone401 0:cd43a974c54c 171 #define MAXCHANNELS 4
casiotone401 0:cd43a974c54c 172 #define MAXSTEPS 16 // max step length
casiotone401 0:cd43a974c54c 173 #define TRIGGER_DURATION 2200
casiotone401 0:cd43a974c54c 174
casiotone401 0:cd43a974c54c 175 #define DISPLAY_UPDATE 2000 // how long active channel display is shown
casiotone401 0:cd43a974c54c 176 #define MATRIX_ADDRESS "/matrix/" // touchOSC multi toggle(9x16) OSC address
casiotone401 0:cd43a974c54c 177
casiotone401 0:cd43a974c54c 178
casiotone401 0:cd43a974c54c 179 //-------------------------------------------------------------
casiotone401 1:981b62bb5c87 180 // Global Variables
casiotone401 1:981b62bb5c87 181
casiotone401 1:981b62bb5c87 182 // Silentway Calibration Data Mapping
casiotone401 1:981b62bb5c87 183 // http://www.expert-sleepers.co.uk/silentway.html
casiotone401 1:981b62bb5c87 184
casiotone401 1:981b62bb5c87 185 // Chromatic Scale
casiotone401 1:981b62bb5c87 186 extern const float calibMap1[QUAN_RES1];
casiotone401 1:981b62bb5c87 187
casiotone401 1:981b62bb5c87 188 // Major Scale
casiotone401 1:981b62bb5c87 189 extern const float calibMap2[QUAN_RES2];
casiotone401 1:981b62bb5c87 190
casiotone401 1:981b62bb5c87 191 // M7(9)
casiotone401 1:981b62bb5c87 192 extern const float calibMap3[QUAN_RES3];
casiotone401 1:981b62bb5c87 193
casiotone401 1:981b62bb5c87 194 // m7(9)
casiotone401 1:981b62bb5c87 195 extern const float calibMap4[QUAN_RES4];
casiotone401 1:981b62bb5c87 196
casiotone401 1:981b62bb5c87 197 // Dorian Scale
casiotone401 1:981b62bb5c87 198 extern const float calibMap5[QUAN_RES5];
casiotone401 1:981b62bb5c87 199
casiotone401 1:981b62bb5c87 200 // Minor Scale
casiotone401 1:981b62bb5c87 201 extern const float calibMap6[QUAN_RES6];
casiotone401 1:981b62bb5c87 202
casiotone401 1:981b62bb5c87 203 // 5th
casiotone401 1:981b62bb5c87 204 extern const float calibMap7[QUAN_RES7];
casiotone401 1:981b62bb5c87 205
casiotone401 1:981b62bb5c87 206 // Whole tone
casiotone401 1:981b62bb5c87 207 extern const float calibMap8[QUAN_RES8];
casiotone401 1:981b62bb5c87 208 //-------------------------------------------------------------
casiotone401 1:981b62bb5c87 209
casiotone401 1:981b62bb5c87 210 // Control Voltage
casiotone401 1:981b62bb5c87 211 extern float gOSC_cv[8];
casiotone401 1:981b62bb5c87 212 extern float gSeq_cv[16];
casiotone401 1:981b62bb5c87 213 extern float g185_cv[8];
casiotone401 1:981b62bb5c87 214
casiotone401 1:981b62bb5c87 215 // Glide
casiotone401 1:981b62bb5c87 216 extern float gGlide;
casiotone401 1:981b62bb5c87 217
casiotone401 1:981b62bb5c87 218 // Sub Mode
casiotone401 1:981b62bb5c87 219 extern int gSubModeCount1;
casiotone401 1:981b62bb5c87 220 extern int gSubModeCount2;
casiotone401 1:981b62bb5c87 221
casiotone401 1:981b62bb5c87 222 // Variables for Sequencer
casiotone401 1:981b62bb5c87 223 extern float gPulseCount[8];
casiotone401 1:981b62bb5c87 224 extern float gGateMode[16];
casiotone401 1:981b62bb5c87 225 extern float gGateMode185[8];
casiotone401 1:981b62bb5c87 226 extern float gSlide[16];
casiotone401 1:981b62bb5c87 227 extern float gSlide185[8];
casiotone401 1:981b62bb5c87 228 extern float gAccent[16];
casiotone401 1:981b62bb5c87 229 extern float gAccent185[8];
casiotone401 1:981b62bb5c87 230
casiotone401 1:981b62bb5c87 231 // Variables for Beats Seq
casiotone401 1:981b62bb5c87 232 extern float gPulseCountBeats[16];
casiotone401 1:981b62bb5c87 233 extern float gBeatsLevel[8];
casiotone401 1:981b62bb5c87 234 extern float gBeatsDecay[8];
casiotone401 1:981b62bb5c87 235 extern unsigned int gBeatsMatrix[8][16];
casiotone401 1:981b62bb5c87 236
casiotone401 1:981b62bb5c87 237 // Euclidean SEQ Variables
casiotone401 1:981b62bb5c87 238 extern float gEucA[6], gEucB[6];
casiotone401 1:981b62bb5c87 239
casiotone401 1:981b62bb5c87 240 // Variables for Control
casiotone401 1:981b62bb5c87 241 /*
casiotone401 1:981b62bb5c87 242 gCtrl[0] /ctrl1 BPM
casiotone401 1:981b62bb5c87 243 gCtrl[1] /ctrl2 Quantize mode
casiotone401 1:981b62bb5c87 244 gCtrl[3] /ctrl4 Glide
casiotone401 1:981b62bb5c87 245 gCtrl[4] /ctrl5 Shift CV Seq Reset Count
casiotone401 1:981b62bb5c87 246 gCtrl[5] /ctrl6 M185 Seq Reset Count
casiotone401 1:981b62bb5c87 247 gCtrl[6] /ctrl7 Gate Length
casiotone401 1:981b62bb5c87 248 gCtrl[7] /ctrl8 Beats Seq Reset Count
casiotone401 1:981b62bb5c87 249
casiotone401 1:981b62bb5c87 250 gCtrlSW[0] /ctrlsw1 Sequencer STOP
casiotone401 1:981b62bb5c87 251 gCtrlSW[1] /ctrlsw2 Euclidean Sequencer reset
casiotone401 1:981b62bb5c87 252 gCtrlSW[2] /ctrlsw3 Sequencer Loop
casiotone401 1:981b62bb5c87 253 gCtrlSW[3] /ctrlsw4 Euclid Seq ON
casiotone401 1:981b62bb5c87 254 gCtrlSW[4] /ctrlsw5 ASR Analog Mode
casiotone401 1:981b62bb5c87 255 gCtrlSW[5] /ctrlsw6 Beats Sequencer Random Vel
casiotone401 1:981b62bb5c87 256
casiotone401 1:981b62bb5c87 257 gArdPot[0] /pot1 Arduino pot1 control for Random, LFO
casiotone401 1:981b62bb5c87 258 gArdPot[1] /pot2 Arduino pot2 control for Random, LFO
casiotone401 1:981b62bb5c87 259 gArdSW[0] /sw1 Arduino sw1 control for Sub Mode1
casiotone401 1:981b62bb5c87 260 gArdSW[1] /sw2 Arduino sw2 control for Sub Mode2
casiotone401 1:981b62bb5c87 261 */
casiotone401 1:981b62bb5c87 262
casiotone401 1:981b62bb5c87 263 extern float gCtrl[8];
casiotone401 1:981b62bb5c87 264 extern bool gCtrlSW[8];
casiotone401 1:981b62bb5c87 265
casiotone401 1:981b62bb5c87 266 // Variables for Arduino OSC
casiotone401 1:981b62bb5c87 267 extern uint16_t gArdCV[4];
casiotone401 1:981b62bb5c87 268 extern float gArdPot[2];
casiotone401 1:981b62bb5c87 269 extern bool gArdSW[2];
casiotone401 1:981b62bb5c87 270
casiotone401 1:981b62bb5c87 271
casiotone401 1:981b62bb5c87 272 //-------------------------------------------------------------
casiotone401 1:981b62bb5c87 273 // mbed Functions
casiotone401 1:981b62bb5c87 274
casiotone401 1:981b62bb5c87 275 extern TextLCD gLCD; // rs, e, d4-d7
casiotone401 1:981b62bb5c87 276
casiotone401 1:981b62bb5c87 277 extern BurstSPI gSPI; // SPI (p6 unconnected)
casiotone401 1:981b62bb5c87 278
casiotone401 1:981b62bb5c87 279 extern FastOut<p15> gSYNCMODE; // SYNC DAC8568
casiotone401 1:981b62bb5c87 280 extern FastOut<p16> gLDAC; // LDAC DAC8568
casiotone401 1:981b62bb5c87 281
casiotone401 1:981b62bb5c87 282 // GateOut
casiotone401 1:981b62bb5c87 283 extern DigitalOut gGATES[4]; // GateOut
casiotone401 1:981b62bb5c87 284 extern FastOut<p19> gSUBGATE; // SubGateOut
casiotone401 1:981b62bb5c87 285 extern FastOut<p25> gCLOCKOUT; // ClockOut
casiotone401 1:981b62bb5c87 286
casiotone401 1:981b62bb5c87 287 extern AnalogOut gAOUT;
casiotone401 1:981b62bb5c87 288
casiotone401 1:981b62bb5c87 289 extern AnalogIn gAIN;
casiotone401 1:981b62bb5c87 290 extern DebouncedInterrupt gSW; // Mode SW
casiotone401 1:981b62bb5c87 291
casiotone401 1:981b62bb5c87 292 // MIDI OUT
casiotone401 1:981b62bb5c87 293 extern MIDI midi;
casiotone401 1:981b62bb5c87 294
casiotone401 1:981b62bb5c87 295 extern Timer gTimer; // Timer
casiotone401 1:981b62bb5c87 296 extern Ticker gPoller; // Ticker for Polling
casiotone401 1:981b62bb5c87 297
casiotone401 1:981b62bb5c87 298 // Ethernet
casiotone401 1:981b62bb5c87 299 extern EthernetNetIf gEth;
casiotone401 1:981b62bb5c87 300
casiotone401 1:981b62bb5c87 301 // touchOSC Address
casiotone401 1:981b62bb5c87 302 extern uint8_t touchOSCAddress[];
casiotone401 1:981b62bb5c87 303 extern int touchOSCPort;
casiotone401 1:981b62bb5c87 304
casiotone401 1:981b62bb5c87 305 // Set OSC message for sending
casiotone401 1:981b62bb5c87 306 extern OSCClass osc;
casiotone401 1:981b62bb5c87 307 extern OSCMessage sendMes;
casiotone401 1:981b62bb5c87 308
casiotone401 1:981b62bb5c87 309
casiotone401 1:981b62bb5c87 310 //-------------------------------------------------------------
casiotone401 0:cd43a974c54c 311 // Functions
casiotone401 0:cd43a974c54c 312
casiotone401 0:cd43a974c54c 313 /* Map Function
casiotone401 0:cd43a974c54c 314 Remaps float value from one range to another range.
casiotone401 0:cd43a974c54c 315
casiotone401 0:cd43a974c54c 316 float MapFloat(float x, float in_min, float in_max, float out_min, float out_max)
casiotone401 0:cd43a974c54c 317
casiotone401 0:cd43a974c54c 318 */
casiotone401 0:cd43a974c54c 319 extern inline float MapFloat(float x, float in_min, float in_max, float out_min, float out_max)
casiotone401 0:cd43a974c54c 320 {
casiotone401 0:cd43a974c54c 321 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
casiotone401 0:cd43a974c54c 322 }
casiotone401 0:cd43a974c54c 323
casiotone401 4:fe335dc8d53d 324 // Check current quantize scale
casiotone401 4:fe335dc8d53d 325 extern inline uint8_t CheckQuantizeMode(void)
casiotone401 4:fe335dc8d53d 326 {
casiotone401 4:fe335dc8d53d 327 static uint8_t _qmode;
casiotone401 4:fe335dc8d53d 328 uint8_t qmode;
casiotone401 4:fe335dc8d53d 329
casiotone401 4:fe335dc8d53d 330 qmode = gCtrl[1] * (SCALE_TOTAL - 1); // Sequencer Quantize Mode (gCtrl[1])
casiotone401 4:fe335dc8d53d 331
casiotone401 4:fe335dc8d53d 332 if (_qmode != qmode)
casiotone401 4:fe335dc8d53d 333 {
casiotone401 4:fe335dc8d53d 334 gAOUT.write_u16(SCALE_AOUT * qmode); // write Analog out for send current scale
casiotone401 4:fe335dc8d53d 335 _qmode = qmode;
casiotone401 4:fe335dc8d53d 336 }
casiotone401 4:fe335dc8d53d 337
casiotone401 4:fe335dc8d53d 338 return qmode;
casiotone401 4:fe335dc8d53d 339 }
casiotone401 4:fe335dc8d53d 340
casiotone401 0:cd43a974c54c 341 // Fast strlen function http://www.strchr.com/optimized_strlen_function
casiotone401 0:cd43a974c54c 342 extern inline size_t strlength(const char *s)
casiotone401 0:cd43a974c54c 343 {
casiotone401 0:cd43a974c54c 344 size_t len = 0;
casiotone401 0:cd43a974c54c 345
casiotone401 0:cd43a974c54c 346 for (;;)
casiotone401 0:cd43a974c54c 347 {
casiotone401 0:cd43a974c54c 348 unsigned x = *(unsigned*)s;
casiotone401 0:cd43a974c54c 349 if ((x & 0xFF) == 0) return len;
casiotone401 0:cd43a974c54c 350 if ((x & 0xFF00) == 0) return len + 1;
casiotone401 0:cd43a974c54c 351 if ((x & 0xFF0000) == 0) return len + 2;
casiotone401 0:cd43a974c54c 352 if ((x & 0xFF000000) == 0) return len + 3;
casiotone401 0:cd43a974c54c 353 s += 4, len += 4;
casiotone401 0:cd43a974c54c 354 }
casiotone401 0:cd43a974c54c 355 }
casiotone401 0:cd43a974c54c 356
casiotone401 0:cd43a974c54c 357 // set touchOSC Matrix Address
casiotone401 1:981b62bb5c87 358 extern inline char * SetMatrixAddress(int row, int column, int mode)
casiotone401 0:cd43a974c54c 359 {
casiotone401 0:cd43a974c54c 360 static char address[32];
casiotone401 0:cd43a974c54c 361
casiotone401 1:981b62bb5c87 362 switch (mode)
casiotone401 0:cd43a974c54c 363 {
casiotone401 1:981b62bb5c87 364 case SHIFTSEQ:
casiotone401 1:981b62bb5c87 365
casiotone401 1:981b62bb5c87 366 sprintf(address, "%s%d/1", STEP_INDICATOR_ADDRESS, column + 1);
casiotone401 1:981b62bb5c87 367 break;
casiotone401 1:981b62bb5c87 368
casiotone401 1:981b62bb5c87 369 case M185SEQ:
casiotone401 1:981b62bb5c87 370
casiotone401 1:981b62bb5c87 371 sprintf(address, "%s%d/1", STEP185_INDICATOR_ADDRESS, column + 1);
casiotone401 1:981b62bb5c87 372 break;
casiotone401 0:cd43a974c54c 373
casiotone401 1:981b62bb5c87 374 case BEATSSEQ:
casiotone401 1:981b62bb5c87 375
casiotone401 1:981b62bb5c87 376 sprintf(address, "%s%d/1", BEATS_INDICATOR_ADDRESS, column + 1);
casiotone401 1:981b62bb5c87 377 break;
casiotone401 1:981b62bb5c87 378
casiotone401 1:981b62bb5c87 379 case EUCLID:
casiotone401 1:981b62bb5c87 380
casiotone401 1:981b62bb5c87 381 sprintf(address, "%s%d/%d", MATRIX_ADDRESS, column + 1, row + 1);
casiotone401 1:981b62bb5c87 382 break;
casiotone401 0:cd43a974c54c 383 }
casiotone401 0:cd43a974c54c 384
casiotone401 0:cd43a974c54c 385 return address;
casiotone401 0:cd43a974c54c 386
casiotone401 0:cd43a974c54c 387 /*
casiotone401 0:cd43a974c54c 388 static char address[32];
casiotone401 0:cd43a974c54c 389 char col[2];
casiotone401 0:cd43a974c54c 390 char ch[2];
casiotone401 0:cd43a974c54c 391
casiotone401 0:cd43a974c54c 392 if(euclid)
casiotone401 0:cd43a974c54c 393 {
casiotone401 0:cd43a974c54c 394 strcpy(address, MATRIX_ADDRESS);
casiotone401 0:cd43a974c54c 395
casiotone401 0:cd43a974c54c 396 } else {
casiotone401 0:cd43a974c54c 397
casiotone401 0:cd43a974c54c 398 strcpy(address, STEP_INDICATOR_ADDRESS);
casiotone401 0:cd43a974c54c 399 }
casiotone401 0:cd43a974c54c 400
casiotone401 0:cd43a974c54c 401 sprintf(col, "%d", column + 1);
casiotone401 0:cd43a974c54c 402 strcat(address, col);
casiotone401 0:cd43a974c54c 403
casiotone401 0:cd43a974c54c 404 if(euclid)
casiotone401 0:cd43a974c54c 405 {
casiotone401 0:cd43a974c54c 406 strcat(address, "/");
casiotone401 0:cd43a974c54c 407
casiotone401 0:cd43a974c54c 408 sprintf(ch, "%d", row + 1);
casiotone401 0:cd43a974c54c 409 strcat(address, ch);
casiotone401 0:cd43a974c54c 410
casiotone401 0:cd43a974c54c 411 } else {
casiotone401 0:cd43a974c54c 412
casiotone401 0:cd43a974c54c 413 strcat(address, "/1");
casiotone401 0:cd43a974c54c 414 }
casiotone401 0:cd43a974c54c 415
casiotone401 0:cd43a974c54c 416 return address;
casiotone401 0:cd43a974c54c 417 */
casiotone401 0:cd43a974c54c 418 }
casiotone401 0:cd43a974c54c 419
casiotone401 0:cd43a974c54c 420 // SPI Transfer
casiotone401 0:cd43a974c54c 421 // DAC8568 data word length 32bit (8bit shift out)
casiotone401 1:981b62bb5c87 422 extern void UpdateCV(unsigned int control, unsigned int ch, const unsigned int *data);
casiotone401 0:cd43a974c54c 423
casiotone401 0:cd43a974c54c 424 // Update CV Meter(Text LCD bar meter)
casiotone401 1:981b62bb5c87 425 extern void UpdateCVMeter(unsigned int ch, const unsigned int *level);
casiotone401 0:cd43a974c54c 426
casiotone401 0:cd43a974c54c 427 // Check subMode1(gArdSW[0])
casiotone401 0:cd43a974c54c 428 extern int CheckSubMode1(void);
casiotone401 0:cd43a974c54c 429
casiotone401 0:cd43a974c54c 430 // Check subMode2(gArdSW[1])
casiotone401 0:cd43a974c54c 431 extern int CheckSubMode2(void);
casiotone401 0:cd43a974c54c 432
casiotone401 0:cd43a974c54c 433 // Update subMode Text LCD
casiotone401 1:981b62bb5c87 434 extern void UpdateSubModeLCD(const char * subModeName);
casiotone401 0:cd43a974c54c 435
casiotone401 0:cd43a974c54c 436 #endif