OSCtoCV Library
OSCtoCV.h
- Committer:
- casiotone401
- Date:
- 2016-01-17
- Revision:
- 0:cd43a974c54c
- Child:
- 1:981b62bb5c87
File content as of revision 0:cd43a974c54c:
/* OSCtoCV Converter Configulation */ #pragma O3 #pragma Otime #ifndef OSCtoCV_H #define OSCtoCV_H #include "mbed.h" #include "FastIO.h" // https://developer.mbed.org/users/Sissors/code/FastIO/ //#include "FastAnalogIn.h" #include "DebouncedInterrupt.h" // https://developer.mbed.org/users/kandangath/code/DebouncedInterrupt/ #include "BurstSPI.h" // https://developer.mbed.org/users/Sissors/code/BurstSPI/ #include "TextLCD.h" //edit "writeCommand" "writeData" protected -> public #include "EthernetNetIf.h" #include "UDPSocket.h" #include "OSCReceiver.h" #include "mbedOSC.h" #include "MIDI.h" // https://developer.mbed.org/users/okini3939/code/MIDI/ //------------------------------------------------------------- // DAC8568 Control Bits (See datasheet) #define WRITE 0x00 #define UPDATE 0x01 #define WRITE_UPDATE_ALL 0x02 // LDAC Write to Selected Update All #define WRITE_UPDATE_N 0x03 // LDAC Write to Selected Update Respective #define POWER 0x04 #define CLR 0x05 // Clear Code Register #define WRITE_LDAC_REG 0x06 #define RESET 0x07 // Software Reset DAC8568 #define SETUP_INTERNAL_REF 0x08 #define SPI_RATE 20000000 // 20Mbps SPI Clock #define POLLING_INTERVAL 28 // Polling Interval (us) //------------------------------------------------------------- // OSCtoCV Converter Macros #define Lin 0 // Linear LinearCV #define Chr 1 // Chromatic #define Maj 2 // Major #define M7 3 // Major7 #define Min7 4 // Minor7 #define Dor 5 // Dorian #define Min 6 // Minor #define S5th 7 // 5th #define Wht 8 // Wholetone #define SCALE_NUM 9 // Scales total #define SCALE_AOUT (65535 / SCALE_NUM - 1) #define QUAN_RES1 116 // Quantize voltage Steps #define QUAN_RES2 68 #define QUAN_RES3 46 #define QUAN_RES4 40 #define QUAN_RES5 68 #define QUAN_RES6 68 #define QUAN_RES7 16 #define QUAN_RES8 58 #define SCALING_N 32256.0f //------------------------------------------------------------- // Ethernet Setting //#define DHCP // address assigned by DHCP #define INPUT_PORT 12345 // Input Port Number #define TOSC_PORT 9000 // touchOSC Port Number //------------------------------------------------------------- // SubModeCount #define SUBMODE1_TOTAL 8 #define SUBMODE2_TOTAL 8 //------------------------------------------------------------- // Gate Sequencer Macros #define _DISABLE 0 #define _ENABLE 1 #define GATE1 0 #define GATE2 1 #define GATE3 2 #define GATE4 3 #define SUBGATE 4 #define GATE_TOTAL 5 #define INVERT 1 #define NON_INVERT 0 #define GATESOUT_ON 0 #define GATESOUT_OFF 1 #define SYNC_ON 0 #define SYNC_OFF 1 //------------------------------------------------------------- // Beats (Note values) #define N1ST 1 // whole #define N2ND 2 // harf #define N4TH 4 // quarter #define N8TH 8 #define N16TH 16 #define N32TH 32 #define N64TH 64 #define NDOT2 3 // dotted #define NDOT4 7 #define NDOT8 9 #define NDOT16 11 #define NDOT32 13 #define TRIP2 3 // triplets #define TRIP4 6 #define TRIP8 12 #define TRIP16 24 #define TRIP32 48 #define SYNC24 96 #define NRESET 0 // Gate Reset //------------------------------------------------------------- // Sequencer Macros #define STEP_INDICATOR_ADDRESS "/seqstep/" // touchOSC multi toggle(1x16(8)) for Current Step Indicator #define RESET_COUNTER_ADDRESS "/reset" // touchOSC label for Sequencer reset count //------------------------------------------------------------- // M185 Macros #define PULSE_COUNT_ADDRESS "/pulse" // /pulse1 ~ pulse8 M185 Pulse Count #define GATE_MODE_ADDRESS "/gatemode" // /gatemode1 ~ gatemode8 M185 Gate Mode #define SINGLE 0 #define MUTE 1 #define MULTI 2 #define HOLD 3 //------------------------------------------------------------- // Euclidean Sequencer Macros #define READ_DELAY 10 // for debouncing #define MAXCHANNELS 4 #define MAXSTEPS 16 // max step length #define TRIGGER_DURATION 2200 #define DISPLAY_UPDATE 2000 // how long active channel display is shown #define MATRIX_ADDRESS "/matrix/" // touchOSC multi toggle(9x16) OSC address //------------------------------------------------------------- // Functions /* Map Function Remaps float value from one range to another range. float MapFloat(float x, float in_min, float in_max, float out_min, float out_max) */ extern inline float MapFloat(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } // Fast strlen function http://www.strchr.com/optimized_strlen_function extern inline size_t strlength(const char *s) { size_t len = 0; for (;;) { unsigned x = *(unsigned*)s; if ((x & 0xFF) == 0) return len; if ((x & 0xFF00) == 0) return len + 1; if ((x & 0xFF0000) == 0) return len + 2; if ((x & 0xFF000000) == 0) return len + 3; s += 4, len += 4; } } // set touchOSC Matrix Address extern inline char * SetMatrixAddress(int row, int column, bool euclid) { static char address[32]; if (euclid) { sprintf(address, "%s%d/%d", MATRIX_ADDRESS, column + 1, row + 1); } else { sprintf(address, "%s%d/1", STEP_INDICATOR_ADDRESS, column + 1); } return address; /* static char address[32]; char col[2]; char ch[2]; if(euclid) { strcpy(address, MATRIX_ADDRESS); } else { strcpy(address, STEP_INDICATOR_ADDRESS); } sprintf(col, "%d", column + 1); strcat(address, col); if(euclid) { strcat(address, "/"); sprintf(ch, "%d", row + 1); strcat(address, ch); } else { strcat(address, "/1"); } return address; */ } // SPI Transfer // DAC8568 data word length 32bit (8bit shift out) extern void UpdateCV(int, int, const unsigned int *); // Update CV Meter(Text LCD bar meter) extern void UpdateCVMeter(int, const unsigned int *); // Check subMode1(gArdSW[0]) extern int CheckSubMode1(void); // Check subMode2(gArdSW[1]) extern int CheckSubMode2(void); // Update subMode Text LCD extern void UpdateSubModeLCD(const char *); //------------------------------------------------------------- // Global Variables // Silentway Calibration Data Mapping // http://www.expert-sleepers.co.uk/silentway.html // Chromatic Scale extern const float calibMap1[QUAN_RES1]; // Major Scale extern const float calibMap2[QUAN_RES2]; // M7(9) extern const float calibMap3[QUAN_RES3]; // m7(9) extern const float calibMap4[QUAN_RES4]; // Dorian Scale extern const float calibMap5[QUAN_RES5]; // Minor Scale extern const float calibMap6[QUAN_RES6]; // 5th extern const float calibMap7[QUAN_RES7]; // Whole tone extern const float calibMap8[QUAN_RES8]; extern float gOSC_cv[8]; extern float gSeq_cv[16]; extern float gGlide; // Sub Mode extern int gSubModeCount1; extern int gSubModeCount2; // Variables for Sequencer extern float gPulseCount[8]; extern float gGateMode[16]; extern float gSlide[16]; extern float gAccent[16]; // Euclidean SEQ Variables extern float gEucA[6], gEucB[6]; // Variables for Control /* gCtrl[0] /ctrl1 BPM gCtrl[1] /ctrl2 Quantize mode gCtrl[3] /ctrl4 Glide gCtrl[4] /ctrl5 M185 Reset Count gCtrlSW[0] /ctrlsw1 Sequencer STOP gCtrlSW[1] /ctrlsw2 Euclidean Sequencer reset gCtrlSW[2] /ctrlsw3 Sequencer Loop gCtrlSW[3] /ctrlsw4 Euclid Seq ON gCtrlSW[4] /ctrlsggSubModeCount1w5 ASR Analog Mode gArdPot[0] /pot1 Arduino pot1 gArdPot[1] /pot2 Arduino pot2 gArdSW[0] /sw1 Arduino sw1 gArdSW[1] /sw2 Arduino sw2 */ extern float gCtrl[8]; extern bool gCtrlSW[8]; // Variables for Arduino OSC extern uint16_t gArdCV[4]; extern float gArdPot[2]; extern bool gArdSW[2]; //------------------------------------------------------------- // mbed Functions extern TextLCD gLCD; // rs, e, d4-d7 extern BurstSPI gSPI; // SPI (p6 unconnected) extern FastOut<p15> gSYNCMODE; // SYNC DAC8568 extern FastOut<p16> gLDAC; // LDAC DAC8568 extern DigitalOut gGATES[4]; // GateOut extern FastOut<p19> gSUBGATE; // SubGateOut extern FastOut<p25> gCLOCKOUT; // ClockOut extern AnalogOut gAOUT; extern AnalogIn gAIN; extern DebouncedInterrupt gSW; // Mode SW // MIDI OUT extern MIDI midi; extern Timer gTimer; // Timer extern Ticker gPoller; // Ticker for Polling // Ethernet extern EthernetNetIf gEth; // touchOSC Address extern uint8_t touchOSCAddress[]; extern int touchOSCPort; // Set OSC message for sending extern OSCClass osc; extern OSCMessage sendMes; #endif