├── .gitignore ├── README.md ├── arduino └── midi2cv │ ├── arp.cpp │ ├── arp.h │ ├── eeprom.cpp │ ├── eeprom.h │ └── midi2cv.ino ├── cmd └── midi2cv │ ├── main.go │ ├── main_test.go │ └── split_test.go ├── docs ├── module1.0.jpg ├── pcb1.0.jpg └── webconfig.png ├── kicad ├── frontpanel │ ├── frontpanel.kicad_pcb │ ├── frontpanel.pro │ ├── frontpanel.sch │ └── plots │ │ ├── frontpanel-B.Cu.gbr │ │ ├── frontpanel-B.Mask.gbr │ │ ├── frontpanel-B.SilkS.gbr │ │ ├── frontpanel-Edge.Cuts.gbr │ │ ├── frontpanel-F.Cu.gbr │ │ ├── frontpanel-F.Mask.gbr │ │ ├── frontpanel-F.SilkS.gbr │ │ ├── frontpanel-NPTH.drl │ │ ├── frontpanel-PTH.drl │ │ └── frontpanel.zip └── midi2cv │ ├── midi2cv-cache.lib │ ├── midi2cv.kicad_pcb │ ├── midi2cv.net │ ├── midi2cv.pro │ ├── midi2cv.sch │ ├── plots │ ├── midi2cv-B.Cu.gbr │ ├── midi2cv-B.Mask.gbr │ ├── midi2cv-B.SilkS.gbr │ ├── midi2cv-Eco1.User.gbr │ ├── midi2cv-Edge.Cuts.gbr │ ├── midi2cv-F.Cu.gbr │ ├── midi2cv-F.Mask.gbr │ ├── midi2cv-F.SilkS.gbr │ ├── midi2cv-NPTH.drl │ ├── midi2cv-PTH.drl │ └── midi2cv.zip │ └── trigout.sch └── webconfig ├── .editorconfig ├── .gitignore ├── Makefile ├── README.md ├── config.js ├── css ├── main.less ├── theme.less └── variables.less ├── favicon.png ├── index-dist.html ├── index.html ├── lib ├── app.js ├── comps │ ├── selectArpSync.js │ ├── selectChannel.js │ ├── selectControlChange.js │ ├── selectNote.js │ ├── selectNumber.js │ ├── selectOutputDevice.js │ ├── selectPortClock.js │ ├── selectPortMode.js │ ├── selectPortTrigger.js │ └── selectTranspose.js ├── home.js ├── midi │ ├── data.js │ ├── midi.js │ └── util.js ├── panels │ ├── config │ │ ├── configPanel.js │ │ └── configTable.js │ └── monitor.js ├── store │ ├── config.js │ ├── midi.js │ └── store.js └── util │ └── sortable.js ├── package.json └── webserver.go /.gitignore: -------------------------------------------------------------------------------- 1 | *bak 2 | .vscode 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | MIARPH * MIDI2CV + ARPEGGIATOR 2 | ============================== 3 | 4 | Miarph is an Arduino based MIDI2CV converter with 4 0-5V 12 bit DAC's and 10 trigger outputs. 5 | 6 | ![Preview 1.0 PCB](docs/pcb1.0.jpg) 7 | 8 | ![Preview 1.0 Module](docs/module1.0.jpg) 9 | 10 | [![Video Demo](http://img.youtube.com/vi/SEof3n9Ys9w/0.jpg)](http://www.youtube.com/watch?v=SEof3n9Ys9w) 11 | 12 | [![Video Demo](http://img.youtube.com/vi/0akh9hcQQY0/0.jpg)](http://www.youtube.com/watch?v=0akh9hcQQY0) 13 | 14 | ## Features 15 | 16 | * 4 individual 0-5v 12 bit DAC's (MCP4922 based) 17 | * 10 Trigger outputs 18 | * Dual Arpeggiator 19 | * SYSEX configurable. 20 | * Two MIDI-CC controller outputs. 21 | * Two Midi Note + Trigger outputs. 22 | * Split note (single channel) or two individual channel operations. 23 | * 8 individually programmable gate triggers to be either drum trigger or clock divider. 24 | 25 | ## Building Notes 26 | 27 | * Use a real Arduino Nano or atleast one with a real FTDI chip. 28 | * There is no tuning possibility, but a stable LM7805 is key. 29 | * The LED is on the wrong side but easy fixable using 2 short wires. (This is the only mistake on the PCB). 30 | * The LED resistor is dependent on your LED specs. 31 | * Capacitors have three holes, always use the square one and one of the others. Both 2.54mm and 5.08mm caps will fit. 32 | * Polarized caps should have their positive in the square hole and the negative pointing outwards the board. (See image above!) 33 | * Remove the jumper and power cable before programming! 34 | * DO NOT CONNECT POWER AND USB AT THE SAME TIME! 35 | 36 | ## BUGS 37 | 38 | * It crashes at split note change. But after a reset it is correctly read from eeprom. 39 | * Transpose is buggy, but required because it can only support 60 MIDI notes. 40 | 41 | ## Programming Using Webconfig 42 | 43 | See https://midi.tomarus.io/miarph/ 44 | 45 | You need a modern browser like Opera or Chrome to use this site. 46 | 47 | Note that all values are initially *unknown* until you actually change something. 48 | The device has no MIDI output so config values can't be read back. 49 | 50 | After initially building the device, you should set all of your defaults once via webconfig. 51 | After changing values it is stored on the device's eeprom and used at the next power up. 52 | 53 | ![Webconfig Screenshot](docs/webconfig.png) 54 | 55 | ## Programming Using the Commandline 56 | 57 | Use the ```midi2cv``` Go utility to program the device. 58 | 59 | Example: 60 | 61 | ```./midi2cv write 0x01 0x77``` 62 | 63 | Where ```0x01``` is the address and ```0x77``` the value. 64 | 65 | List of addresses to program: 66 | 67 | | Address | Description | Example value | 68 | | -- | -- | -- | 69 | | 0x00 | unused | -- | 70 | | 0x01 | Split keyboard at note | 0x40 (use 0x00 for no split) | 71 | | 0x02 | MIDI 1 Channel | 0x01 | 72 | | 0x03 | MIDI 2 Channel | 0x02 | 73 | | 0x04 | Transpose Channel 1 | 0x40 | 74 | | 0x05 | Transpose Channel 2 | 0x40 | 75 | | 0x06 | Control Change Number Channel 1 | 0x07 (0x07 = volume) | 76 | | 0x07 | Control Change Number Channel 2 | 0x6A (0x6A = filter cutoff) | 77 | | 0x08 | Control Change Channel 1 | 0x01 | 78 | | 0x09 | Control Change Channel 2 | 0x02 | 79 | | 0x0a | Pitchbend Channel 1 | 0x02 (number of notes) | 80 | | 0x0b | Pitchbend Channel 2 | 0x0c (number of notes) | 81 | | 0x0c | Midi Channel 1 sync | 0x00 (00 = use potmeter, otherwise nr of midi clock ticks) | 82 | | 0x0d | Midi Channel 2 sync | 0x00 (00 = use potmeter, otherwise nr of midi clock ticks) | 83 | | 0x0e | Clockticks to advance the clock divider | 0x03 (0x03 = sync to quarter notes) | 84 | | 0x0f | unused | -- | 85 | | 0x10..0x18 | Port Mode (0 = clock divider, 1 = drum trigger) | 0x00 | 86 | | 0x18..0x20 | Port Trigger Note | 0x36 | 87 | | 0x20..0x28 | Port Clock Divider Division (0=1/1, 1=1/2, 2=1/4, 3=1/8, etc) | 0x00 | 88 | 89 | ## Bill Of Materials 90 | 91 | |Designator |Package |Quantity|Designation |PartNo| 92 | |-----------------------------|----------------------------------------|--------|------------|------| 93 | |RV1 |Potentiometer_Alps_RK09K_Single_Vertical|1 |B10K | | 94 | |NANO |Arduino_Nano_Silk |1 |Nano v3 | | 95 | |C1 |GenericCap |1 |100uF | | 96 | |C2 |GenericCap |1 |10uF | | 97 | |C3,C4,C5,C6,C7,C8,C9 |GenericCap |7 |100nF | | 98 | |D1 |LED_D3.0mm |1 |LED | | 99 | |D2,D3,D4 |D_DO-35_SOD27_P7.62mm_Horizontal |3 |D | | 100 | |J1 |PinHeader_1x02_P2.54mm_Vertical |1 |ProgramJmpr | | 101 | |J2 |IDC-Header_2x05_P2.54mm_Vertical |1 |Power | | 102 | |J3,J14,J15 |PinSocket_1x04_P2.54mm_Vertical |3 |Conn_01x04_M| | 103 | |J4,J24,J25 |PinHeader_1x04_P2.54mm_Vertical |3 |Conn_01x04_F| | 104 | |J5 |PinSocket_1x08_P2.54mm_Vertical |1 |Conn_01x08_M| | 105 | |J6 |PinHeader_1x08_P2.54mm_Vertical |1 |Conn_01x08_F| | 106 | |J7 |Jack_3.5mm_QingPu_WQP-PJ366ST_Vertical |1 |Midi Input | | 107 | |J8-J13,J16-J23 |Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical |14 |Misc | | 108 | |R1,R2 |R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm |2 |2K2 | | 109 | |R3,R4,R5,R6 |R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm |4 |1K | | 110 | |R7 |R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm |1 |220 | | 111 | |R8,R9,R10,R11,R12,R13,R14,R15|R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm |8 |100 | | 112 | |U1 |TO-220-3_Horizontal_TabDown |1 |L7805 | | 113 | |U2 |DIP-8_W7.62mm |1 |24LC256 | | 114 | |U5 |DIP-4_W7.62mm |1 |PC817 | PC817XNNSZ1B | 115 | |U6,U8 |DIP-14_W7.62mm |2 |TL074 | | 116 | |U7 |DIP-16_W7.62mm |1 |74HC595 | | 117 | |U3,U4 |DIP-14_W7.62mm |2 |MCP4922 | | 118 | -------------------------------------------------------------------------------- /arduino/midi2cv/arp.cpp: -------------------------------------------------------------------------------- 1 | #include "arp.h" 2 | 3 | int bound(int val) 4 | { 5 | if (val < 0) 6 | { 7 | return 0; 8 | } 9 | else if (val > 4095) 10 | { 11 | return 4095; 12 | } 13 | else 14 | { 15 | return val; 16 | } 17 | } 18 | 19 | Arp::Arp() 20 | { 21 | this->maxnote = 0; 22 | this->maxpnote = 0; 23 | this->curnote = 0; 24 | this->time = millis(); 25 | this->lastNoteOff = millis(); 26 | 27 | this->Pitch = 0; 28 | this->Transpose = 0; 29 | } 30 | 31 | void Arp::Reset() 32 | { 33 | this->curnote = 0; 34 | } 35 | 36 | int Arp::PlayNote() 37 | { 38 | this->curnote++; 39 | if (this->curnote >= this->maxpnote) 40 | { 41 | this->curnote = 0; 42 | } 43 | return scaleNote(this->pnotes[this->curnote]); 44 | } 45 | 46 | int Arp::CheckPlayNote(int speed) 47 | { 48 | int val = map(speed, 0, 1023, MIN_ARP_SPEED, MAX_ARP_SPEED); 49 | 50 | unsigned long newtime = this->time + val; 51 | if (millis() >= newtime) 52 | { 53 | this->time = newtime; 54 | return this->PlayNote(); 55 | } 56 | return -1; 57 | } 58 | 59 | int Arp::HandleNoteOn(byte note) 60 | { 61 | int val = -1; 62 | 63 | if (this->lastNoteOff < millis() - 20) 64 | { 65 | this->removeAllPlayingNotes(); 66 | } 67 | 68 | if (this->maxnote == 0) 69 | { 70 | val = this->scaleNote(note); 71 | this->curnote = 0; 72 | this->time = millis(); 73 | } 74 | 75 | this->notes[this->maxnote] = note; 76 | this->maxnote++; 77 | 78 | this->pnotes[this->maxpnote] = note; 79 | this->maxpnote++; 80 | 81 | return val; 82 | } 83 | 84 | bool Arp::HandleNoteOff(byte note) 85 | { 86 | int j = 0; 87 | for (int i = 0; i < this->maxnote; i++) 88 | { 89 | if (this->notes[i] != note) 90 | { 91 | this->notes[j++] = this->notes[i]; 92 | } 93 | } 94 | if (this->maxnote > 0) 95 | this->maxnote--; 96 | return this->maxnote == 0; 97 | } 98 | 99 | void Arp::removeAllPlayingNotes() 100 | { 101 | for (int i = 0; i < this->maxnote; i++) 102 | { 103 | this->pnotes[i] = this->notes[i]; 104 | } 105 | this->maxpnote = this->maxnote; 106 | } 107 | 108 | int Arp::scaleNote(byte note) 109 | { 110 | return bound(map(note - this->Transpose + 64, 0, 59, 0, 4095) + this->Pitch); 111 | } 112 | -------------------------------------------------------------------------------- /arduino/midi2cv/arp.h: -------------------------------------------------------------------------------- 1 | #ifndef ARP_H 2 | #define ARP_H 3 | 4 | #include "Arduino.h" 5 | 6 | #define NOTE_BUFFER 32 // max nr of notes to be arpeggiating 7 | #define MIN_ARP_SPEED 10 // min duration in ms 8 | #define MAX_ARP_SPEED 300 // max duration in ms 9 | 10 | class Arp 11 | { 12 | public: 13 | Arp(); 14 | void Reset(); 15 | int PlayNote(); 16 | int CheckPlayNote(int speed); 17 | int HandleNoteOn(byte note); 18 | bool HandleNoteOff(byte note); 19 | 20 | int Transpose; 21 | int Pitch; 22 | 23 | private: 24 | void removeAllPlayingNotes(); 25 | int scaleNote(byte note); 26 | 27 | long time; 28 | long lastNoteOff; 29 | int curnote; 30 | int maxnote; 31 | int maxpnote; 32 | byte notes[NOTE_BUFFER]; 33 | byte pnotes[NOTE_BUFFER]; 34 | }; 35 | 36 | #endif -------------------------------------------------------------------------------- /arduino/midi2cv/eeprom.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "eeprom.h" 3 | 4 | Config::Config(byte addr) 5 | { 6 | Wire.begin(); 7 | this->devaddr = addr; 8 | } 9 | 10 | void Config::Load() 11 | { 12 | byte *s = (byte *)this; 13 | for (int i = 0; i < sizeof(this->mem); i++) 14 | { 15 | *s++ = this->readAddr(i); 16 | } 17 | } 18 | 19 | void Config::Write(int addr, byte val) 20 | { 21 | this->writeAddr(addr, val); 22 | this->setmem(addr, val); 23 | } 24 | 25 | byte Config::Len() 26 | { 27 | return sizeof(this->mem); 28 | } 29 | 30 | // 31 | 32 | void Config::setmem(int addr, byte val) 33 | { 34 | // hacketyhack 35 | byte *s = (byte *)this; 36 | s += addr; 37 | *s = val; 38 | } 39 | 40 | void Config::writeAll() 41 | { 42 | const byte *s = (const byte *)this; 43 | for (int i = 0; i < sizeof(this->mem); i++) 44 | { 45 | this->writeAddr(i, *s++); 46 | } 47 | } 48 | 49 | void Config::writeAddr(unsigned int addr, byte data) 50 | { 51 | Wire.beginTransmission(this->devaddr); 52 | Wire.write((int)(addr >> 8)); 53 | Wire.write((int)(addr & 0xFF)); 54 | Wire.write(data); 55 | Wire.endTransmission(); 56 | delay(10); 57 | } 58 | 59 | byte Config::readAddr(unsigned int addr) 60 | { 61 | Wire.beginTransmission(this->devaddr); 62 | Wire.write((int)(addr >> 8)); 63 | Wire.write((int)(addr & 0xFF)); 64 | Wire.endTransmission(); 65 | Wire.requestFrom(this->devaddr, 1); 66 | 67 | byte r = 0xaa; 68 | if (Wire.available()) 69 | r = Wire.read(); 70 | delay(10); 71 | return r; 72 | } -------------------------------------------------------------------------------- /arduino/midi2cv/eeprom.h: -------------------------------------------------------------------------------- 1 | #ifndef EEPROM_H 2 | #define EEPROM_H 3 | 4 | #include "Arduino.h" 5 | 6 | struct cfgmem 7 | { 8 | // 0x00 9 | byte _mode; // TODO: not implemented yet 10 | byte split; // split at key N instead of 2 midi channels, set transpose1+2 too 11 | byte midi1; // midi input channel 1 12 | byte midi2; // midi input channel 2 13 | // 0x04 14 | byte transpose1; // transpose channel 1 15 | byte transpose2; // transpose channel 2 16 | byte cc1; // cc msg number for channel 1 17 | byte cc2; // cc msg number for channel 2 18 | // 0x08 19 | byte cc1ch; // midi channel for cc msgs chan 1 20 | byte cc2ch; // midi channel for cc msgs chan 2 21 | byte pb1range; // pitchbend output1 range 22 | byte pb2range; // pitchbend output2 range 23 | // 0x0c 24 | byte midi1sync; // 0 = use pot for speed, 1..N = use N midi clock ticks for speed 25 | byte midi2sync; // 1..N = use N midi clock ticks for speed 26 | byte clockticks; // Advance the clock divider each this many midi clock ticks 27 | byte _reserved; 28 | // 0x10 29 | byte pmode[8]; // pmode == 0 use port for clock divider, pmode == 1 use port for drum trigger 30 | byte pnote[8]; // drum trigger note if pmode == 1 31 | byte pclock[8]; // clock division if pmode ==0, division is 1< 2 | #include 3 | #include 4 | 5 | #include "eeprom.h" 6 | #include "arp.h" 7 | 8 | #define PIN_595_SER 4 9 | #define PIN_595_SRCLK 5 10 | #define PIN_595_RCLK 6 11 | #define PIN_DAC2_CS 7 12 | #define PIN_LED 8 13 | #define PIN_GATE2 9 14 | #define PIN_DAC1_CS 10 15 | #define PIN_GATE1 12 16 | #define PIN_POT_SPEED A0 17 | 18 | // Only change this if you have more than one Miarph 19 | #define MIARPH_DEVICE_ID 0x4f 20 | 21 | MIDI_CREATE_DEFAULT_INSTANCE(); 22 | 23 | Config cfg(0x50); // I2C addr of 24LC256 24 | 25 | DAC_MCP49xx dac1(DAC_MCP49xx::MCP4922, PIN_DAC1_CS); // DAC model, CS pin, LDAC pin 26 | DAC_MCP49xx dac2(DAC_MCP49xx::MCP4922, PIN_DAC2_CS); // DAC model, CS pin, LDAC pin 27 | 28 | Arp arp1; 29 | Arp arp2; 30 | 31 | void setup() 32 | { 33 | pinMode(PIN_595_SER, OUTPUT); 34 | pinMode(PIN_595_SRCLK, OUTPUT); 35 | pinMode(PIN_595_RCLK, OUTPUT); 36 | 37 | pinMode(PIN_DAC1_CS, OUTPUT); 38 | pinMode(PIN_DAC2_CS, OUTPUT); 39 | 40 | pinMode(PIN_LED, OUTPUT); 41 | pinMode(PIN_GATE1, OUTPUT); 42 | pinMode(PIN_GATE2, OUTPUT); 43 | 44 | digitalWrite(PIN_LED, true); 45 | digitalWrite(PIN_GATE1, false); 46 | digitalWrite(PIN_GATE2, false); 47 | 48 | cfg.Load(); 49 | arp1.Transpose = cfg.mem.transpose1; 50 | arp2.Transpose = cfg.mem.transpose2; 51 | arp1.Pitch = 0; 52 | arp2.Pitch = 0; 53 | 54 | dac1.setSPIDivider(SPI_CLOCK_DIV2); 55 | dac1.setAutomaticallyLatchDual(false); 56 | dac1.setPortWrite(true); 57 | 58 | dac2.setSPIDivider(SPI_CLOCK_DIV2); 59 | dac2.setAutomaticallyLatchDual(false); 60 | dac2.setPortWrite(false); // false cos non standard spi port 61 | 62 | dac1.output2(0, 0); 63 | dac2.output2(0, 0); 64 | 65 | MIDI.begin(0); // channel 66 | MIDI.setHandleClock(handleClock); 67 | MIDI.setHandleNoteOn(handleNoteOn); 68 | MIDI.setHandleNoteOff(handleNoteOff); 69 | MIDI.setHandleControlChange(handleControl); 70 | MIDI.setHandleStop(handleStop); 71 | MIDI.setHandleStart(handleStart); 72 | MIDI.setHandleSystemExclusive(handleSysex); 73 | MIDI.setHandlePitchBend(handlePitchBend); 74 | } 75 | 76 | bool onoff; 77 | void toggleled() 78 | { 79 | onoff = !onoff; 80 | digitalWrite(PIN_LED, onoff); 81 | } 82 | 83 | void loop() 84 | { 85 | MIDI.read(); 86 | 87 | int speed = analogRead(PIN_POT_SPEED); 88 | if (cfg.mem.midi1sync == 0) 89 | { 90 | int val = arp1.CheckPlayNote(speed); 91 | if (val != -1) 92 | dac1.outputA(val); 93 | } 94 | if (cfg.mem.midi2sync == 0) 95 | { 96 | int val = arp2.CheckPlayNote(speed); 97 | if (val != -1) 98 | dac1.outputB(val); 99 | } 100 | } 101 | 102 | byte shiftreg = 0; 103 | 104 | void handleNoteOn(byte chan, byte note, byte vel) 105 | { 106 | if (chan == cfg.mem.midi1 && cfg.mem.split > 0) 107 | { 108 | if (note >= cfg.mem.split) 109 | { 110 | int val = arp1.HandleNoteOn(note); 111 | if (val != -1) 112 | { 113 | digitalWrite(PIN_GATE1, true); 114 | dac1.outputA(val); 115 | } 116 | } 117 | if (note < cfg.mem.split) 118 | { 119 | int val = arp2.HandleNoteOn(note); 120 | if (val != -1) 121 | { 122 | digitalWrite(PIN_GATE2, true); 123 | dac1.outputB(val); 124 | } 125 | } 126 | return; 127 | } 128 | 129 | if (chan == cfg.mem.midi1) 130 | { 131 | int val = arp1.HandleNoteOn(note); 132 | if (val != -1) 133 | { 134 | digitalWrite(PIN_GATE1, true); 135 | dac1.outputA(val); 136 | return; 137 | } 138 | } 139 | 140 | if (chan == cfg.mem.midi2) 141 | { 142 | int val = arp2.HandleNoteOn(note); 143 | if (val != -1) 144 | { 145 | digitalWrite(PIN_GATE2, true); 146 | dac1.outputB(val); 147 | } 148 | } 149 | 150 | bool triggered = false; 151 | for (int i = 0; i < 8; i++) 152 | { 153 | if (cfg.mem.pmode[i] == 1 && note == cfg.mem.pnote[i]) { 154 | shiftreg = shiftreg ^ 1 << i; 155 | triggered = true; 156 | } 157 | } 158 | if (triggered) { 159 | shiftOut(PIN_595_SER, PIN_595_SRCLK, PIN_595_RCLK, shiftreg); 160 | } 161 | } 162 | 163 | void handleNoteOff(byte chan, byte note, byte vel) 164 | { 165 | if (chan == cfg.mem.midi1 && cfg.mem.split > 0) 166 | { 167 | if (note >= cfg.mem.split) 168 | { 169 | bool gate = arp1.HandleNoteOff(note); 170 | if (gate) 171 | digitalWrite(PIN_GATE1, false); 172 | } 173 | if (note < cfg.mem.split) 174 | { 175 | bool gate = arp2.HandleNoteOff(note); 176 | if (gate) 177 | digitalWrite(PIN_GATE2, false); 178 | } 179 | return; 180 | } 181 | 182 | if (chan == cfg.mem.midi1) 183 | { 184 | bool gate = arp1.HandleNoteOff(note); 185 | if (gate) 186 | { 187 | digitalWrite(PIN_GATE1, false); 188 | return; 189 | } 190 | } 191 | 192 | if (chan == cfg.mem.midi2) 193 | { 194 | bool gate = arp2.HandleNoteOff(note); 195 | if (gate) 196 | { 197 | digitalWrite(PIN_GATE2, false); 198 | } 199 | } 200 | 201 | bool triggered = false; 202 | for (int i = 0; i < 8; i++) 203 | { 204 | if (cfg.mem.pmode[i] == 1 && note == cfg.mem.pnote[i]) { 205 | shiftreg = shiftreg & ~(1 << i); 206 | triggered = true; 207 | } 208 | } 209 | if (triggered) { 210 | shiftOut(PIN_595_SER, PIN_595_SRCLK, PIN_595_RCLK, shiftreg); 211 | } 212 | } 213 | 214 | // handle sustain pedal 215 | void handleControl(byte chan, byte cc, byte val) 216 | { 217 | if (cc == cfg.mem.cc1 && chan == cfg.mem.cc1ch) 218 | { 219 | dac2.outputA(val * 32); 220 | return; 221 | } 222 | 223 | if (cc == cfg.mem.cc2 && chan == cfg.mem.cc2ch) 224 | { 225 | dac2.outputB(val * 32); 226 | return; 227 | } 228 | } 229 | 230 | void handleStop() 231 | { 232 | // maxpnote = 0; 233 | // maxnote = 0; 234 | // curnote = 0; 235 | } 236 | 237 | static void handleSysex(byte *array, unsigned size) 238 | { 239 | if (size < 5) 240 | return; 241 | if (!(array[1] == 0x7d && array[2] == 0x2a && array[3] == MIARPH_DEVICE_ID)) 242 | return; 243 | 244 | for (int i = 4; i < size - 1; i++) 245 | { 246 | int command = array[i]; 247 | if (command >= 0x40) 248 | { 249 | return; 250 | } 251 | 252 | switch (command) 253 | { 254 | case 1: // cmd 0x01 = write a config byte 255 | { 256 | cfg.Write(array[i + 1], array[i + 2]); // addr = byte1, val = byte2 257 | if (array[i + 1] == 0x04) 258 | { 259 | arp1.Transpose = array[i + 2]; 260 | } 261 | if (array[i + 1] == 0x05) 262 | { 263 | arp2.Transpose = array[i + 2]; 264 | } 265 | break; 266 | } 267 | } 268 | } 269 | } 270 | 271 | int ticks = 0; 272 | int midi1ticks = 0; 273 | int midi2ticks = 0; 274 | byte clock = 0xff; 275 | byte oldclock = 0xff; 276 | 277 | void handleStart() 278 | { 279 | ticks = cfg.mem.clockticks - 1; 280 | midi1ticks = cfg.mem.midi1sync; 281 | midi2ticks = cfg.mem.midi2sync; 282 | clock = 0xff; 283 | oldclock = 0xff; 284 | arp1.Reset(); 285 | arp2.Reset(); 286 | } 287 | 288 | void handleClock(void) 289 | { 290 | midi1ticks++; 291 | if (cfg.mem.midi1sync > 0 && midi1ticks >= cfg.mem.midi1sync) 292 | { 293 | midi1ticks = 0; 294 | int val = arp1.PlayNote(); 295 | if (val != -1) 296 | { 297 | dac1.outputA(val); 298 | } 299 | } 300 | 301 | midi2ticks++; 302 | if (cfg.mem.midi2sync > 0 && midi2ticks >= cfg.mem.midi2sync) 303 | { 304 | midi2ticks = 0; 305 | int val = arp2.PlayNote(); 306 | if (val != -1) 307 | { 308 | dac1.outputB(val); 309 | } 310 | } 311 | 312 | ticks++; 313 | if (ticks >= cfg.mem.clockticks) 314 | { 315 | toggleled(); 316 | ticks = 0; 317 | clock++; 318 | byte val = oldclock ^ clock; 319 | oldclock = clock; 320 | for (int i = 0; i < 8; i++) { 321 | if (cfg.mem.pmode[i] == 0) { 322 | if (val & 1 << (cfg.mem.pclock[i]+1)) { 323 | shiftreg = shiftreg ^ 1 << i; 324 | } else { 325 | shiftreg = shiftreg & ~(1 << i); 326 | } 327 | } 328 | } 329 | } 330 | shiftOut(PIN_595_SER, PIN_595_SRCLK, PIN_595_RCLK, shiftreg); 331 | } 332 | 333 | // shiftOut sets the 8 programmable gates to the 334 | // individual bits of the data byte input. 335 | void shiftOut(int ser, int srclk, int rclk, byte data) 336 | { 337 | digitalWrite(rclk, 0); 338 | for (int i = 7; i >= 0; i--) 339 | { 340 | digitalWrite(srclk, 0); 341 | digitalWrite(ser, data & (1 << i)); 342 | digitalWrite(srclk, 1); 343 | } 344 | digitalWrite(rclk, 1); 345 | } 346 | 347 | void handlePitchBend(byte chan, int val) 348 | { 349 | if (cfg.mem.split > 0) 350 | { 351 | arp1.Pitch = (val / (16384 / (4096 / 60)) * cfg.mem.pb1range); 352 | arp2.Pitch = (val / (16384 / (4096 / 60)) * cfg.mem.pb2range); 353 | return; 354 | } 355 | 356 | if (chan == cfg.mem.midi1) 357 | { 358 | arp1.Pitch = (val / (16384 / (4096 / 60)) * cfg.mem.pb1range); 359 | } 360 | 361 | if (chan == cfg.mem.midi2) 362 | { 363 | arp2.Pitch = (val / (16384 / (4096 / 60)) * cfg.mem.pb2range); 364 | } 365 | } -------------------------------------------------------------------------------- /cmd/midi2cv/main.go: -------------------------------------------------------------------------------- 1 | // Command midiconfig provides configuration for the MIDI router. 2 | package main 3 | 4 | import ( 5 | "flag" 6 | "fmt" 7 | "log" 8 | "os" 9 | "strconv" 10 | "strings" 11 | 12 | "github.com/scgolang/midi" 13 | ) 14 | 15 | const deviceID = 0x4f 16 | 17 | // byteconv converts a string to a byte. 18 | func byteconv(in string) byte { 19 | base := 10 20 | if strings.HasPrefix(in, "0x") { 21 | in = strings.TrimPrefix(in, "0x") 22 | base = 16 23 | } 24 | n, _ := strconv.ParseUint(in, base, 32) 25 | return byte(n & 0xff) 26 | } 27 | 28 | func sysexWrite(device *midi.Device, addr, data byte) { 29 | var req = []byte{0xf0, 0x7d, 0x2a, deviceID, 0x01, addr, data, 0xf7} 30 | n, err := device.Write(req) 31 | if err != nil { 32 | log.Fatalf("can't send configuration request: %v", err) 33 | } 34 | if n != len(req) { 35 | log.Fatalf("can't send all configuration data: %d != %d", n, len(req)) 36 | } 37 | } 38 | 39 | func main() { 40 | flag.Usage = func() { 41 | fmt.Fprintf(flag.CommandLine.Output(), "Usage of %s:\n", os.Args[0]) 42 | fmt.Fprintf(flag.CommandLine.Output(), "\t%s [flags] command [args]\n", os.Args[0]) 43 | fmt.Fprintf(flag.CommandLine.Output(), "\t%s [flags] write 0xADDR 0xBYTE\n", os.Args[0]) 44 | fmt.Fprintf(flag.CommandLine.Output(), "\t%s [flags] reset\n", os.Args[0]) 45 | flag.PrintDefaults() 46 | } 47 | optL := flag.Bool("l", false, "List devices") 48 | optD := flag.String("d", "", "Device to use") 49 | flag.Parse() 50 | command := flag.Args() 51 | if (*optD == "" || len(command) == 0) && !*optL { 52 | flag.Usage() 53 | os.Exit(0) 54 | } 55 | 56 | devices, err := midi.Devices() 57 | if err != nil { 58 | log.Fatal(err) 59 | } 60 | if len(devices) == 0 { 61 | log.Fatal("No MIDI devices detected") 62 | } 63 | 64 | if *optL { 65 | for _, d := range devices { 66 | fmt.Printf("%s\t%s\n", d.ID, d.Name) 67 | } 68 | os.Exit(0) 69 | } 70 | 71 | // 72 | 73 | var device *midi.Device 74 | for _, d := range devices { 75 | if d.ID == *optD || d.Name == *optD { 76 | device = d 77 | break 78 | } 79 | } 80 | if device == nil { 81 | log.Fatalf("can't find midi device: %s", *optD) 82 | } 83 | if err := device.Open(); err != nil { 84 | log.Fatal(err) 85 | } 86 | 87 | // 88 | 89 | switch command[0] { 90 | case "write": 91 | sysexWrite(device, byteconv(command[1]), byteconv(command[2])) 92 | case "reset": 93 | // length should match that from eeprom.h 94 | for i := 0; i < 40; i++ { 95 | sysexWrite(device, byte(i), 0) 96 | } 97 | default: 98 | fmt.Printf("Supported command: %s\n", command[0]) 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /cmd/midi2cv/main_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "testing" 5 | ) 6 | 7 | func TestConv(t *testing.T) { 8 | var tests = []struct { 9 | in string 10 | out byte 11 | }{ 12 | {"0x04", 4}, 13 | {"32", 32}, 14 | } 15 | for _, ts := range tests { 16 | out := byteconv(ts.in) 17 | if out != ts.out { 18 | t.Fatalf("in != out %d (%v != %v)", out, ts.in, ts.out) 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /cmd/midi2cv/split_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "testing" 4 | 5 | func TestSplit(t *testing.T) { 6 | split := 48 7 | t1 := -24 8 | t2 := 36 9 | 10 | note := 84 11 | if note >= split { 12 | note = note + t1 13 | t.Logf("split=%d", note) 14 | } 15 | 16 | note = 32 17 | if note < split { 18 | note = note + t2 19 | t.Logf("split=%d", note) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /docs/module1.0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomarus/midi2cv/f4459f32e96db2297f37528a04699a8ae761d4a6/docs/module1.0.jpg -------------------------------------------------------------------------------- /docs/pcb1.0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomarus/midi2cv/f4459f32e96db2297f37528a04699a8ae761d4a6/docs/pcb1.0.jpg -------------------------------------------------------------------------------- /docs/webconfig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomarus/midi2cv/f4459f32e96db2297f37528a04699a8ae761d4a6/docs/webconfig.png -------------------------------------------------------------------------------- /kicad/frontpanel/frontpanel.kicad_pcb: -------------------------------------------------------------------------------- 1 | (kicad_pcb (version 20171130) (host pcbnew 5.0.2+dfsg1-1~bpo9+1) 2 | 3 | (general 4 | (thickness 1.6) 5 | (drawings 33) 6 | (tracks 0) 7 | (zones 0) 8 | (modules 21) 9 | (nets 1) 10 | ) 11 | 12 | (page A4) 13 | (layers 14 | (0 F.Cu signal) 15 | (31 B.Cu signal) 16 | (32 B.Adhes user hide) 17 | (33 F.Adhes user hide) 18 | (34 B.Paste user) 19 | (35 F.Paste user) 20 | (36 B.SilkS user) 21 | (37 F.SilkS user) 22 | (38 B.Mask user) 23 | (39 F.Mask user hide) 24 | (40 Dwgs.User user hide) 25 | (41 Cmts.User user hide) 26 | (42 Eco1.User user) 27 | (43 Eco2.User user hide) 28 | (44 Edge.Cuts user) 29 | (45 Margin user hide) 30 | (46 B.CrtYd user hide) 31 | (47 F.CrtYd user hide) 32 | (48 B.Fab user hide) 33 | (49 F.Fab user hide) 34 | ) 35 | 36 | (setup 37 | (last_trace_width 0.25) 38 | (user_trace_width 0.5) 39 | (trace_clearance 0.2) 40 | (zone_clearance 0.508) 41 | (zone_45_only no) 42 | (trace_min 0.2) 43 | (segment_width 0.2) 44 | (edge_width 0.15) 45 | (via_size 0.8) 46 | (via_drill 0.4) 47 | (via_min_size 0.4) 48 | (via_min_drill 0.3) 49 | (uvia_size 0.3) 50 | (uvia_drill 0.1) 51 | (uvias_allowed no) 52 | (uvia_min_size 0.2) 53 | (uvia_min_drill 0.1) 54 | (pcb_text_width 0.3) 55 | (pcb_text_size 1.5 1.5) 56 | (mod_edge_width 0.15) 57 | (mod_text_size 1 1) 58 | (mod_text_width 0.15) 59 | (pad_size 8.4 8.4) 60 | (pad_drill 6.4) 61 | (pad_to_mask_clearance 0) 62 | (solder_mask_min_width 0.25) 63 | (aux_axis_origin 112.776 14.478) 64 | (visible_elements FFFFFF7F) 65 | (pcbplotparams 66 | (layerselection 0x010f0_ffffffff) 67 | (usegerberextensions false) 68 | (usegerberattributes false) 69 | (usegerberadvancedattributes false) 70 | (creategerberjobfile false) 71 | (excludeedgelayer true) 72 | (linewidth 0.100000) 73 | (plotframeref false) 74 | (viasonmask false) 75 | (mode 1) 76 | (useauxorigin false) 77 | (hpglpennumber 1) 78 | (hpglpenspeed 20) 79 | (hpglpendiameter 15.000000) 80 | (psnegative false) 81 | (psa4output false) 82 | (plotreference true) 83 | (plotvalue false) 84 | (plotinvisibletext false) 85 | (padsonsilk false) 86 | (subtractmaskfromsilk false) 87 | (outputformat 1) 88 | (mirror false) 89 | (drillshape 0) 90 | (scaleselection 1) 91 | (outputdirectory "plots/")) 92 | ) 93 | 94 | (net 0 "") 95 | 96 | (net_class Default "This is the default net class." 97 | (clearance 0.2) 98 | (trace_width 0.25) 99 | (via_dia 0.8) 100 | (via_drill 0.4) 101 | (uvia_dia 0.3) 102 | (uvia_drill 0.1) 103 | ) 104 | 105 | (module MountingHole:MountingHole_6.4mm_M6 (layer F.Cu) (tedit 5CE6D1EE) (tstamp 5CE6F4A6) 106 | (at 133.096 34.417) 107 | (descr "Mounting Hole 6.4mm, no annular, M6") 108 | (tags "mounting hole 6.4mm no annular m6") 109 | (attr virtual) 110 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 111 | (effects (font (size 1 1) (thickness 0.15))) 112 | ) 113 | (fp_text value MountingHole_6.4mm_M6 (at 0 7.4) (layer F.Fab) 114 | (effects (font (size 1 1) (thickness 0.15))) 115 | ) 116 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 117 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 118 | (fp_text user %R (at 0.3 0) (layer F.Fab) 119 | (effects (font (size 1 1) (thickness 0.15))) 120 | ) 121 | (pad 1 np_thru_hole circle (at 0 0) (size 6.4 6.4) (drill 6.4) (layers *.Cu *.Mask)) 122 | ) 123 | 124 | (module MountingHole:MountingHole_3.2mm_M3 (layer F.Cu) (tedit 5CE6CA56) (tstamp 5CE6F491) 125 | (at 120.396 34.417) 126 | (descr "Mounting Hole 3.2mm, no annular, M3") 127 | (tags "mounting hole 3.2mm no annular m3") 128 | (attr virtual) 129 | (fp_text reference REF** (at 0 -4.2) (layer F.SilkS) hide 130 | (effects (font (size 1 1) (thickness 0.15))) 131 | ) 132 | (fp_text value MountingHole_3.2mm_M3 (at 0 4.2) (layer F.Fab) 133 | (effects (font (size 1 1) (thickness 0.15))) 134 | ) 135 | (fp_text user %R (at 0.3 0) (layer F.Fab) 136 | (effects (font (size 1 1) (thickness 0.15))) 137 | ) 138 | (fp_circle (center 0 0) (end 3.2 0) (layer Cmts.User) (width 0.15)) 139 | (fp_circle (center 0 0) (end 3.45 0) (layer F.CrtYd) (width 0.05)) 140 | (pad 1 np_thru_hole circle (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 141 | ) 142 | 143 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE5) (tstamp 5CF33149) 144 | (at 120.396 56.261) 145 | (descr "Mounting Hole 6.4mm, M6") 146 | (tags "mounting hole 6.4mm m6") 147 | (attr virtual) 148 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 149 | (effects (font (size 1 1) (thickness 0.15))) 150 | ) 151 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 152 | (effects (font (size 1 1) (thickness 0.15))) 153 | ) 154 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 155 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 156 | (fp_text user %R (at 0.3 0) (layer F.Fab) 157 | (effects (font (size 1 1) (thickness 0.15))) 158 | ) 159 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 160 | ) 161 | 162 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDEB) (tstamp 5CF33142) 163 | (at 145.796 56.261) 164 | (descr "Mounting Hole 6.4mm, M6") 165 | (tags "mounting hole 6.4mm m6") 166 | (attr virtual) 167 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 168 | (effects (font (size 1 1) (thickness 0.15))) 169 | ) 170 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 171 | (effects (font (size 1 1) (thickness 0.15))) 172 | ) 173 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 174 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 175 | (fp_text user %R (at 0.3 0) (layer F.Fab) 176 | (effects (font (size 1 1) (thickness 0.15))) 177 | ) 178 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 179 | ) 180 | 181 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE8) (tstamp 5CF3313B) 182 | (at 133.096 56.261) 183 | (descr "Mounting Hole 6.4mm, M6") 184 | (tags "mounting hole 6.4mm m6") 185 | (attr virtual) 186 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 187 | (effects (font (size 1 1) (thickness 0.15))) 188 | ) 189 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 190 | (effects (font (size 1 1) (thickness 0.15))) 191 | ) 192 | (fp_text user %R (at 0.3 0) (layer F.Fab) 193 | (effects (font (size 1 1) (thickness 0.15))) 194 | ) 195 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 196 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 197 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 198 | ) 199 | 200 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE8) (tstamp 5CF3311D) 201 | (at 133.096 71.501) 202 | (descr "Mounting Hole 6.4mm, M6") 203 | (tags "mounting hole 6.4mm m6") 204 | (attr virtual) 205 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 206 | (effects (font (size 1 1) (thickness 0.15))) 207 | ) 208 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 209 | (effects (font (size 1 1) (thickness 0.15))) 210 | ) 211 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 212 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 213 | (fp_text user %R (at 0.3 0) (layer F.Fab) 214 | (effects (font (size 1 1) (thickness 0.15))) 215 | ) 216 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 217 | ) 218 | 219 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDEB) (tstamp 5CF33116) 220 | (at 145.796 71.501) 221 | (descr "Mounting Hole 6.4mm, M6") 222 | (tags "mounting hole 6.4mm m6") 223 | (attr virtual) 224 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 225 | (effects (font (size 1 1) (thickness 0.15))) 226 | ) 227 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 228 | (effects (font (size 1 1) (thickness 0.15))) 229 | ) 230 | (fp_text user %R (at 0.3 0) (layer F.Fab) 231 | (effects (font (size 1 1) (thickness 0.15))) 232 | ) 233 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 234 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 235 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 236 | ) 237 | 238 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE5) (tstamp 5CF3310D) 239 | (at 120.396 71.501) 240 | (descr "Mounting Hole 6.4mm, M6") 241 | (tags "mounting hole 6.4mm m6") 242 | (attr virtual) 243 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 244 | (effects (font (size 1 1) (thickness 0.15))) 245 | ) 246 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 247 | (effects (font (size 1 1) (thickness 0.15))) 248 | ) 249 | (fp_text user %R (at 0.3 0) (layer F.Fab) 250 | (effects (font (size 1 1) (thickness 0.15))) 251 | ) 252 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 253 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 254 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 255 | ) 256 | 257 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE8) (tstamp 5CF330EF) 258 | (at 133.096 86.741) 259 | (descr "Mounting Hole 6.4mm, M6") 260 | (tags "mounting hole 6.4mm m6") 261 | (attr virtual) 262 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 263 | (effects (font (size 1 1) (thickness 0.15))) 264 | ) 265 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 266 | (effects (font (size 1 1) (thickness 0.15))) 267 | ) 268 | (fp_text user %R (at 0.3 0) (layer F.Fab) 269 | (effects (font (size 1 1) (thickness 0.15))) 270 | ) 271 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 272 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 273 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 274 | ) 275 | 276 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDEB) (tstamp 5CF330E8) 277 | (at 145.796 86.741) 278 | (descr "Mounting Hole 6.4mm, M6") 279 | (tags "mounting hole 6.4mm m6") 280 | (attr virtual) 281 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 282 | (effects (font (size 1 1) (thickness 0.15))) 283 | ) 284 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 285 | (effects (font (size 1 1) (thickness 0.15))) 286 | ) 287 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 288 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 289 | (fp_text user %R (at 0.3 0) (layer F.Fab) 290 | (effects (font (size 1 1) (thickness 0.15))) 291 | ) 292 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 293 | ) 294 | 295 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE5) (tstamp 5CF330DF) 296 | (at 120.396 86.741) 297 | (descr "Mounting Hole 6.4mm, M6") 298 | (tags "mounting hole 6.4mm m6") 299 | (attr virtual) 300 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 301 | (effects (font (size 1 1) (thickness 0.15))) 302 | ) 303 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 304 | (effects (font (size 1 1) (thickness 0.15))) 305 | ) 306 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 307 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 308 | (fp_text user %R (at 0.3 0) (layer F.Fab) 309 | (effects (font (size 1 1) (thickness 0.15))) 310 | ) 311 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 312 | ) 313 | 314 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE8) (tstamp 5CF330C1) 315 | (at 133.096 101.981) 316 | (descr "Mounting Hole 6.4mm, M6") 317 | (tags "mounting hole 6.4mm m6") 318 | (attr virtual) 319 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 320 | (effects (font (size 1 1) (thickness 0.15))) 321 | ) 322 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 323 | (effects (font (size 1 1) (thickness 0.15))) 324 | ) 325 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 326 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 327 | (fp_text user %R (at 0.3 0) (layer F.Fab) 328 | (effects (font (size 1 1) (thickness 0.15))) 329 | ) 330 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 331 | ) 332 | 333 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDEB) (tstamp 5CF330BA) 334 | (at 145.796 101.981) 335 | (descr "Mounting Hole 6.4mm, M6") 336 | (tags "mounting hole 6.4mm m6") 337 | (attr virtual) 338 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 339 | (effects (font (size 1 1) (thickness 0.15))) 340 | ) 341 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 342 | (effects (font (size 1 1) (thickness 0.15))) 343 | ) 344 | (fp_text user %R (at 0.3 0) (layer F.Fab) 345 | (effects (font (size 1 1) (thickness 0.15))) 346 | ) 347 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 348 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 349 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 350 | ) 351 | 352 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE5) (tstamp 5CF330B1) 353 | (at 120.396 101.981) 354 | (descr "Mounting Hole 6.4mm, M6") 355 | (tags "mounting hole 6.4mm m6") 356 | (attr virtual) 357 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 358 | (effects (font (size 1 1) (thickness 0.15))) 359 | ) 360 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 361 | (effects (font (size 1 1) (thickness 0.15))) 362 | ) 363 | (fp_text user %R (at 0.3 0) (layer F.Fab) 364 | (effects (font (size 1 1) (thickness 0.15))) 365 | ) 366 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 367 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 368 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 369 | ) 370 | 371 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDEB) (tstamp 5CF32FF2) 372 | (at 145.796 117.221) 373 | (descr "Mounting Hole 6.4mm, M6") 374 | (tags "mounting hole 6.4mm m6") 375 | (attr virtual) 376 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 377 | (effects (font (size 1 1) (thickness 0.15))) 378 | ) 379 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 380 | (effects (font (size 1 1) (thickness 0.15))) 381 | ) 382 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 383 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 384 | (fp_text user %R (at 0.3 0) (layer F.Fab) 385 | (effects (font (size 1 1) (thickness 0.15))) 386 | ) 387 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 388 | ) 389 | 390 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE8) (tstamp 5CF32FB1) 391 | (at 133.096 117.221) 392 | (descr "Mounting Hole 6.4mm, M6") 393 | (tags "mounting hole 6.4mm m6") 394 | (attr virtual) 395 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 396 | (effects (font (size 1 1) (thickness 0.15))) 397 | ) 398 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 399 | (effects (font (size 1 1) (thickness 0.15))) 400 | ) 401 | (fp_text user %R (at 0.3 0) (layer F.Fab) 402 | (effects (font (size 1 1) (thickness 0.15))) 403 | ) 404 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 405 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 406 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 407 | ) 408 | 409 | (module MountingHole:MountingHole_3.2mm_M3 (layer F.Cu) (tedit 5CE6CA56) (tstamp 5CF3265A) 410 | (at 120.276 17.478) 411 | (descr "Mounting Hole 3.2mm, no annular, M3") 412 | (tags "mounting hole 3.2mm no annular m3") 413 | (attr virtual) 414 | (fp_text reference REF** (at 0 -4.2) (layer F.SilkS) hide 415 | (effects (font (size 1 1) (thickness 0.15))) 416 | ) 417 | (fp_text value MountingHole_3.2mm_M3 (at 0 4.2) (layer F.Fab) 418 | (effects (font (size 1 1) (thickness 0.15))) 419 | ) 420 | (fp_circle (center 0 0) (end 3.45 0) (layer F.CrtYd) (width 0.05)) 421 | (fp_circle (center 0 0) (end 3.2 0) (layer Cmts.User) (width 0.15)) 422 | (fp_text user %R (at 0.3 0) (layer F.Fab) 423 | (effects (font (size 1 1) (thickness 0.15))) 424 | ) 425 | (pad 1 np_thru_hole circle (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 426 | ) 427 | 428 | (module MountingHole:MountingHole_3.2mm_M3 (layer F.Cu) (tedit 5CE6CB37) (tstamp 5CF3267B) 429 | (at 145.696 17.478) 430 | (descr "Mounting Hole 3.2mm, no annular, M3") 431 | (tags "mounting hole 3.2mm no annular m3") 432 | (attr virtual) 433 | (fp_text reference REF** (at 0 -4.2) (layer F.SilkS) hide 434 | (effects (font (size 1 1) (thickness 0.15))) 435 | ) 436 | (fp_text value MountingHole_3.2mm_M3 (at 0 4.2) (layer F.Fab) 437 | (effects (font (size 1 1) (thickness 0.15))) 438 | ) 439 | (fp_circle (center 0 0) (end 3.45 0) (layer F.CrtYd) (width 0.05)) 440 | (fp_circle (center 0 0) (end 3.2 0) (layer Cmts.User) (width 0.15)) 441 | (fp_text user %R (at 0.3 0) (layer F.Fab) 442 | (effects (font (size 1 1) (thickness 0.15))) 443 | ) 444 | (pad "" np_thru_hole circle (at -0.02 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 445 | ) 446 | 447 | (module MountingHole:MountingHole_3.2mm_M3 (layer F.Cu) (tedit 5CE6CB32) (tstamp 5CF326AC) 448 | (at 145.676 139.978) 449 | (descr "Mounting Hole 3.2mm, no annular, M3") 450 | (tags "mounting hole 3.2mm no annular m3") 451 | (attr virtual) 452 | (fp_text reference REF** (at 0 -4.2) (layer F.SilkS) hide 453 | (effects (font (size 1 1) (thickness 0.15))) 454 | ) 455 | (fp_text value MountingHole_3.2mm_M3 (at 0 4.2) (layer F.Fab) 456 | (effects (font (size 1 1) (thickness 0.15))) 457 | ) 458 | (fp_circle (center 0 0) (end 3.45 0) (layer F.CrtYd) (width 0.05)) 459 | (fp_circle (center 0 0) (end 3.2 0) (layer Cmts.User) (width 0.15)) 460 | (fp_text user %R (at 0.3 0) (layer F.Fab) 461 | (effects (font (size 1 1) (thickness 0.15))) 462 | ) 463 | (pad 1 np_thru_hole circle (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 464 | ) 465 | 466 | (module MountingHole:MountingHole_3.2mm_M3 (layer F.Cu) (tedit 5CE6CB2F) (tstamp 5CF326C2) 467 | (at 120.276 139.978) 468 | (descr "Mounting Hole 3.2mm, no annular, M3") 469 | (tags "mounting hole 3.2mm no annular m3") 470 | (attr virtual) 471 | (fp_text reference REF** (at 0 -4.2) (layer F.SilkS) hide 472 | (effects (font (size 1 1) (thickness 0.15))) 473 | ) 474 | (fp_text value MountingHole_3.2mm_M3 (at 0 4.2) (layer F.Fab) 475 | (effects (font (size 1 1) (thickness 0.15))) 476 | ) 477 | (fp_circle (center 0 0) (end 3.45 0) (layer F.CrtYd) (width 0.05)) 478 | (fp_circle (center 0 0) (end 3.2 0) (layer Cmts.User) (width 0.15)) 479 | (fp_text user %R (at 0.3 0) (layer F.Fab) 480 | (effects (font (size 1 1) (thickness 0.15))) 481 | ) 482 | (pad 1 np_thru_hole circle (at 0 0) (size 3.2 3.2) (drill 3.2) (layers *.Cu *.Mask)) 483 | ) 484 | 485 | (module MountingHole:MountingHole_6.4mm_M6_Pad (layer F.Cu) (tedit 5CE6CDE5) (tstamp 5CF32F9A) 486 | (at 120.396 117.221) 487 | (descr "Mounting Hole 6.4mm, M6") 488 | (tags "mounting hole 6.4mm m6") 489 | (attr virtual) 490 | (fp_text reference REF** (at 0 -7.4) (layer F.SilkS) hide 491 | (effects (font (size 1 1) (thickness 0.15))) 492 | ) 493 | (fp_text value MountingHole_6.4mm_M6_Pad (at 0 7.4) (layer F.Fab) 494 | (effects (font (size 1 1) (thickness 0.15))) 495 | ) 496 | (fp_circle (center 0 0) (end 6.65 0) (layer F.CrtYd) (width 0.05)) 497 | (fp_circle (center 0 0) (end 6.4 0) (layer Cmts.User) (width 0.15)) 498 | (fp_text user %R (at 0.3 0) (layer F.Fab) 499 | (effects (font (size 1 1) (thickness 0.15))) 500 | ) 501 | (pad 1 thru_hole circle (at 0 0) (size 8.4 8.4) (drill 6.4) (layers *.Cu *.Mask)) 502 | ) 503 | 504 | (gr_poly (pts (xy 141.732 122.936) (xy 139.7 122.936) (xy 139.7 111.76) (xy 152.4 111.76) (xy 152.4 122.936)) (layer B.SilkS) (width 0.15)) 505 | (gr_text JLCJLCJLCJLC (at 133.096 132.08) (layer F.SilkS) 506 | (effects (font (size 1.5 1.5) (thickness 0.3))) 507 | ) 508 | (gr_text ACT (at 120.396 38.1) (layer B.SilkS) (tstamp 5CE6F488) 509 | (effects (font (size 1 1) (thickness 0.25)) (justify mirror)) 510 | ) 511 | (gr_text "ARP LEN" (at 133.096 40.64) (layer B.SilkS) (tstamp 5CE6F485) 512 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 513 | ) 514 | (gr_text TOMARUS (at 132.842 140.081) (layer B.SilkS) 515 | (effects (font (size 2.5 2.5) (thickness 0.5)) (justify mirror)) 516 | ) 517 | (gr_text Miarph (at 132.842 17.526) (layer B.SilkS) (tstamp 5CE6E32D) 518 | (effects (font (size 3 3) (thickness 0.5)) (justify mirror)) 519 | ) 520 | (gr_text GATE2 (at 120.396 109.22) (layer B.SilkS) 521 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 522 | ) 523 | (gr_text CV2 (at 120.396 93.98) (layer B.SilkS) 524 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 525 | ) 526 | (gr_text GATE1 (at 120.396 78.74) (layer B.SilkS) 527 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 528 | ) 529 | (gr_text CV1 (at 120.396 63.5) (layer B.SilkS) 530 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 531 | ) 532 | (gr_text P6 (at 133.096 93.98) (layer B.SilkS) 533 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 534 | ) 535 | (gr_text P5 (at 145.796 93.98) (layer B.SilkS) 536 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 537 | ) 538 | (gr_text P4 (at 133.096 78.74) (layer B.SilkS) 539 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 540 | ) 541 | (gr_text P3 (at 145.796 78.74) (layer B.SilkS) 542 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 543 | ) 544 | (gr_text P2 (at 133.096 63.5) (layer B.SilkS) 545 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 546 | ) 547 | (gr_text P1 (at 145.796 63.5) (layer B.SilkS) 548 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 549 | ) 550 | (gr_text P8 (at 133.096 109.22) (layer B.SilkS) 551 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 552 | ) 553 | (gr_text P7 (at 145.796 109.22) (layer B.SilkS) 554 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 555 | ) 556 | (gr_text CC2 (at 120.396 124.46) (layer B.SilkS) 557 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 558 | ) 559 | (gr_text CC1 (at 133.096 124.46) (layer B.SilkS) 560 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 561 | ) 562 | (gr_text "MIDI IN" (at 145.796 124.46) (layer B.SilkS) 563 | (effects (font (size 1.5 1.5) (thickness 0.3)) (justify mirror)) 564 | ) 565 | (gr_line (start 153.416 143.002) (end 153.416 142.748) (layer Edge.Cuts) (width 0.15)) 566 | (gr_line (start 112.776 143.002) (end 112.776 142.748) (layer Edge.Cuts) (width 0.15)) 567 | (gr_line (start 112.776 14.478) (end 112.776 14.732) (layer Edge.Cuts) (width 0.15)) 568 | (gr_line (start 153.416 14.478) (end 153.416 14.732) (layer Edge.Cuts) (width 0.15)) 569 | (gr_line (start 153.416 142.748) (end 153.416 127) (layer Edge.Cuts) (width 0.15)) 570 | (gr_line (start 112.776 143.002) (end 153.416 143.002) (layer Edge.Cuts) (width 0.15)) 571 | (gr_line (start 112.776 127) (end 112.776 142.748) (layer Edge.Cuts) (width 0.15)) 572 | (gr_line (start 153.416 14.732) (end 153.416 30.48) (layer Edge.Cuts) (width 0.15)) 573 | (gr_line (start 112.776 14.478) (end 153.416 14.478) (layer Edge.Cuts) (width 0.15)) 574 | (gr_line (start 112.776 30.48) (end 112.776 14.732) (layer Edge.Cuts) (width 0.15)) 575 | (gr_line (start 112.776 127) (end 112.776 30.48) (layer Edge.Cuts) (width 0.15)) 576 | (gr_line (start 153.416 30.48) (end 153.416 127) (layer Edge.Cuts) (width 0.15)) 577 | 578 | ) 579 | -------------------------------------------------------------------------------- /kicad/frontpanel/frontpanel.pro: -------------------------------------------------------------------------------- 1 | update=22/05/2015 07:44:53 2 | version=1 3 | last_client=kicad 4 | [general] 5 | version=1 6 | RootSch= 7 | BoardNm= 8 | [pcbnew] 9 | version=1 10 | LastNetListRead= 11 | UseCmpFile=1 12 | PadDrill=0.600000000000 13 | PadDrillOvalY=0.600000000000 14 | PadSizeH=1.500000000000 15 | PadSizeV=1.500000000000 16 | PcbTextSizeV=1.500000000000 17 | PcbTextSizeH=1.500000000000 18 | PcbTextThickness=0.300000000000 19 | ModuleTextSizeV=1.000000000000 20 | ModuleTextSizeH=1.000000000000 21 | ModuleTextSizeThickness=0.150000000000 22 | SolderMaskClearance=0.000000000000 23 | SolderMaskMinWidth=0.000000000000 24 | DrawSegmentWidth=0.200000000000 25 | BoardOutlineThickness=0.100000000000 26 | ModuleOutlineThickness=0.150000000000 27 | [cvpcb] 28 | version=1 29 | NetIExt=net 30 | [eeschema] 31 | version=1 32 | LibDir= 33 | [eeschema/libraries] 34 | -------------------------------------------------------------------------------- /kicad/frontpanel/frontpanel.sch: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 4 2 | EELAYER 26 0 3 | EELAYER END 4 | $Descr A4 11693 8268 5 | encoding utf-8 6 | Sheet 1 1 7 | Title "" 8 | Date "" 9 | Rev "" 10 | Comp "" 11 | Comment1 "" 12 | Comment2 "" 13 | Comment3 "" 14 | Comment4 "" 15 | $EndDescr 16 | $EndSCHEMATC 17 | -------------------------------------------------------------------------------- /kicad/frontpanel/plots/frontpanel-B.Cu.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2+dfsg1-1~bpo9+1* 2 | G04 #@! TF.CreationDate,2019-05-24T18:29:25+02:00* 3 | G04 #@! TF.ProjectId,frontpanel,66726f6e-7470-4616-9e65-6c2e6b696361,rev?* 4 | G04 #@! TF.SameCoordinates,Original* 5 | G04 #@! TF.FileFunction,Copper,L2,Bot* 6 | G04 #@! TF.FilePolarity,Positive* 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 5.0.2+dfsg1-1~bpo9+1) date Fri 24 May 2019 06:29:25 PM CEST* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | G04 #@! TA.AperFunction,ComponentPad* 15 | %ADD10C,8.400000*% 16 | G04 #@! TD* 17 | G04 APERTURE END LIST* 18 | D10* 19 | G04 #@! TO.P,REF\002A\002A,1* 20 | G04 #@! TO.N,N/C* 21 | X120396000Y-56261000D03* 22 | G04 #@! TD* 23 | G04 #@! TO.P,REF\002A\002A,1* 24 | G04 #@! TO.N,N/C* 25 | X145796000Y-56261000D03* 26 | G04 #@! TD* 27 | G04 #@! TO.P,REF\002A\002A,1* 28 | G04 #@! TO.N,N/C* 29 | X133096000Y-56261000D03* 30 | G04 #@! TD* 31 | G04 #@! TO.P,REF\002A\002A,1* 32 | G04 #@! TO.N,N/C* 33 | X133096000Y-71501000D03* 34 | G04 #@! TD* 35 | G04 #@! TO.P,REF\002A\002A,1* 36 | G04 #@! TO.N,N/C* 37 | X145796000Y-71501000D03* 38 | G04 #@! TD* 39 | G04 #@! TO.P,REF\002A\002A,1* 40 | G04 #@! TO.N,N/C* 41 | X120396000Y-71501000D03* 42 | G04 #@! TD* 43 | G04 #@! TO.P,REF\002A\002A,1* 44 | G04 #@! TO.N,N/C* 45 | X133096000Y-86741000D03* 46 | G04 #@! TD* 47 | G04 #@! TO.P,REF\002A\002A,1* 48 | G04 #@! TO.N,N/C* 49 | X145796000Y-86741000D03* 50 | G04 #@! TD* 51 | G04 #@! TO.P,REF\002A\002A,1* 52 | G04 #@! TO.N,N/C* 53 | X120396000Y-86741000D03* 54 | G04 #@! TD* 55 | G04 #@! TO.P,REF\002A\002A,1* 56 | G04 #@! TO.N,N/C* 57 | X133096000Y-101981000D03* 58 | G04 #@! TD* 59 | G04 #@! TO.P,REF\002A\002A,1* 60 | G04 #@! TO.N,N/C* 61 | X145796000Y-101981000D03* 62 | G04 #@! TD* 63 | G04 #@! TO.P,REF\002A\002A,1* 64 | G04 #@! TO.N,N/C* 65 | X120396000Y-101981000D03* 66 | G04 #@! TD* 67 | G04 #@! TO.P,REF\002A\002A,1* 68 | G04 #@! TO.N,N/C* 69 | X145796000Y-117221000D03* 70 | G04 #@! TD* 71 | G04 #@! TO.P,REF\002A\002A,1* 72 | G04 #@! TO.N,N/C* 73 | X133096000Y-117221000D03* 74 | G04 #@! TD* 75 | G04 #@! TO.P,REF\002A\002A,1* 76 | G04 #@! TO.N,N/C* 77 | X120396000Y-117221000D03* 78 | G04 #@! TD* 79 | M02* 80 | -------------------------------------------------------------------------------- /kicad/frontpanel/plots/frontpanel-B.SilkS.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2+dfsg1-1~bpo9+1* 2 | G04 #@! TF.CreationDate,2019-05-24T18:29:25+02:00* 3 | G04 #@! TF.ProjectId,frontpanel,66726f6e-7470-4616-9e65-6c2e6b696361,rev?* 4 | G04 #@! TF.SameCoordinates,Original* 5 | G04 #@! TF.FileFunction,Legend,Bot* 6 | G04 #@! TF.FilePolarity,Positive* 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 5.0.2+dfsg1-1~bpo9+1) date Fri 24 May 2019 06:29:25 PM CEST* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,0.150000*% 15 | %ADD11C,0.250000*% 16 | %ADD12C,0.300000*% 17 | %ADD13C,0.500000*% 18 | G04 APERTURE END LIST* 19 | D10* 20 | G36* 21 | X141732000Y-122936000D02* 22 | X139700000Y-122936000D01* 23 | X139700000Y-111760000D01* 24 | X152400000Y-111760000D01* 25 | X152400000Y-122936000D01* 26 | X141732000Y-122936000D01* 27 | G37* 28 | X141732000Y-122936000D02* 29 | X139700000Y-122936000D01* 30 | X139700000Y-111760000D01* 31 | X152400000Y-111760000D01* 32 | X152400000Y-122936000D01* 33 | X141732000Y-122936000D01* 34 | D11* 35 | X121515047Y-38266666D02* 36 | X121038857Y-38266666D01* 37 | X121610285Y-38552380D02* 38 | X121276952Y-37552380D01* 39 | X120943619Y-38552380D01* 40 | X120038857Y-38457142D02* 41 | X120086476Y-38504761D01* 42 | X120229333Y-38552380D01* 43 | X120324571Y-38552380D01* 44 | X120467428Y-38504761D01* 45 | X120562666Y-38409523D01* 46 | X120610285Y-38314285D01* 47 | X120657904Y-38123809D01* 48 | X120657904Y-37980952D01* 49 | X120610285Y-37790476D01* 50 | X120562666Y-37695238D01* 51 | X120467428Y-37600000D01* 52 | X120324571Y-37552380D01* 53 | X120229333Y-37552380D01* 54 | X120086476Y-37600000D01* 55 | X120038857Y-37647619D01* 56 | X119753142Y-37552380D02* 57 | X119181714Y-37552380D01* 58 | X119467428Y-38552380D02* 59 | X119467428Y-37552380D01* 60 | D12* 61 | X137596000Y-40890000D02* 62 | X136881714Y-40890000D01* 63 | X137738857Y-41318571D02* 64 | X137238857Y-39818571D01* 65 | X136738857Y-41318571D01* 66 | X135381714Y-41318571D02* 67 | X135881714Y-40604285D01* 68 | X136238857Y-41318571D02* 69 | X136238857Y-39818571D01* 70 | X135667428Y-39818571D01* 71 | X135524571Y-39890000D01* 72 | X135453142Y-39961428D01* 73 | X135381714Y-40104285D01* 74 | X135381714Y-40318571D01* 75 | X135453142Y-40461428D01* 76 | X135524571Y-40532857D01* 77 | X135667428Y-40604285D01* 78 | X136238857Y-40604285D01* 79 | X134738857Y-41318571D02* 80 | X134738857Y-39818571D01* 81 | X134167428Y-39818571D01* 82 | X134024571Y-39890000D01* 83 | X133953142Y-39961428D01* 84 | X133881714Y-40104285D01* 85 | X133881714Y-40318571D01* 86 | X133953142Y-40461428D01* 87 | X134024571Y-40532857D01* 88 | X134167428Y-40604285D01* 89 | X134738857Y-40604285D01* 90 | X131381714Y-41318571D02* 91 | X132096000Y-41318571D01* 92 | X132096000Y-39818571D01* 93 | X130881714Y-40532857D02* 94 | X130381714Y-40532857D01* 95 | X130167428Y-41318571D02* 96 | X130881714Y-41318571D01* 97 | X130881714Y-39818571D01* 98 | X130167428Y-39818571D01* 99 | X129524571Y-41318571D02* 100 | X129524571Y-39818571D01* 101 | X128667428Y-41318571D01* 102 | X128667428Y-39818571D01* 103 | D13* 104 | X141115809Y-138711952D02* 105 | X139687238Y-138711952D01* 106 | X140401523Y-141211952D02* 107 | X140401523Y-138711952D01* 108 | X138377714Y-138711952D02* 109 | X137901523Y-138711952D01* 110 | X137663428Y-138831000D01* 111 | X137425333Y-139069095D01* 112 | X137306285Y-139545285D01* 113 | X137306285Y-140378619D01* 114 | X137425333Y-140854809D01* 115 | X137663428Y-141092904D01* 116 | X137901523Y-141211952D01* 117 | X138377714Y-141211952D01* 118 | X138615809Y-141092904D01* 119 | X138853904Y-140854809D01* 120 | X138972952Y-140378619D01* 121 | X138972952Y-139545285D01* 122 | X138853904Y-139069095D01* 123 | X138615809Y-138831000D01* 124 | X138377714Y-138711952D01* 125 | X136234857Y-141211952D02* 126 | X136234857Y-138711952D01* 127 | X135401523Y-140497666D01* 128 | X134568190Y-138711952D01* 129 | X134568190Y-141211952D01* 130 | X133496761Y-140497666D02* 131 | X132306285Y-140497666D01* 132 | X133734857Y-141211952D02* 133 | X132901523Y-138711952D01* 134 | X132068190Y-141211952D01* 135 | X129806285Y-141211952D02* 136 | X130639619Y-140021476D01* 137 | X131234857Y-141211952D02* 138 | X131234857Y-138711952D01* 139 | X130282476Y-138711952D01* 140 | X130044380Y-138831000D01* 141 | X129925333Y-138950047D01* 142 | X129806285Y-139188142D01* 143 | X129806285Y-139545285D01* 144 | X129925333Y-139783380D01* 145 | X130044380Y-139902428D01* 146 | X130282476Y-140021476D01* 147 | X131234857Y-140021476D01* 148 | X128734857Y-138711952D02* 149 | X128734857Y-140735761D01* 150 | X128615809Y-140973857D01* 151 | X128496761Y-141092904D01* 152 | X128258666Y-141211952D01* 153 | X127782476Y-141211952D01* 154 | X127544380Y-141092904D01* 155 | X127425333Y-140973857D01* 156 | X127306285Y-140735761D01* 157 | X127306285Y-138711952D01* 158 | X126234857Y-141092904D02* 159 | X125877714Y-141211952D01* 160 | X125282476Y-141211952D01* 161 | X125044380Y-141092904D01* 162 | X124925333Y-140973857D01* 163 | X124806285Y-140735761D01* 164 | X124806285Y-140497666D01* 165 | X124925333Y-140259571D01* 166 | X125044380Y-140140523D01* 167 | X125282476Y-140021476D01* 168 | X125758666Y-139902428D01* 169 | X125996761Y-139783380D01* 170 | X126115809Y-139664333D01* 171 | X126234857Y-139426238D01* 172 | X126234857Y-139188142D01* 173 | X126115809Y-138950047D01* 174 | X125996761Y-138831000D01* 175 | X125758666Y-138711952D01* 176 | X125163428Y-138711952D01* 177 | X124806285Y-138831000D01* 178 | X139556285Y-18883142D02* 179 | X139556285Y-15883142D01* 180 | X138556285Y-18026000D01* 181 | X137556285Y-15883142D01* 182 | X137556285Y-18883142D01* 183 | X136127714Y-18883142D02* 184 | X136127714Y-16883142D01* 185 | X136127714Y-15883142D02* 186 | X136270571Y-16026000D01* 187 | X136127714Y-16168857D01* 188 | X135984857Y-16026000D01* 189 | X136127714Y-15883142D01* 190 | X136127714Y-16168857D01* 191 | X133413428Y-18883142D02* 192 | X133413428Y-17311714D01* 193 | X133556285Y-17026000D01* 194 | X133842000Y-16883142D01* 195 | X134413428Y-16883142D01* 196 | X134699142Y-17026000D01* 197 | X133413428Y-18740285D02* 198 | X133699142Y-18883142D01* 199 | X134413428Y-18883142D01* 200 | X134699142Y-18740285D01* 201 | X134842000Y-18454571D01* 202 | X134842000Y-18168857D01* 203 | X134699142Y-17883142D01* 204 | X134413428Y-17740285D01* 205 | X133699142Y-17740285D01* 206 | X133413428Y-17597428D01* 207 | X131984857Y-18883142D02* 208 | X131984857Y-16883142D01* 209 | X131984857Y-17454571D02* 210 | X131842000Y-17168857D01* 211 | X131699142Y-17026000D01* 212 | X131413428Y-16883142D01* 213 | X131127714Y-16883142D01* 214 | X130127714Y-16883142D02* 215 | X130127714Y-19883142D01* 216 | X130127714Y-17026000D02* 217 | X129842000Y-16883142D01* 218 | X129270571Y-16883142D01* 219 | X128984857Y-17026000D01* 220 | X128842000Y-17168857D01* 221 | X128699142Y-17454571D01* 222 | X128699142Y-18311714D01* 223 | X128842000Y-18597428D01* 224 | X128984857Y-18740285D01* 225 | X129270571Y-18883142D01* 226 | X129842000Y-18883142D01* 227 | X130127714Y-18740285D01* 228 | X127413428Y-18883142D02* 229 | X127413428Y-15883142D01* 230 | X126127714Y-18883142D02* 231 | X126127714Y-17311714D01* 232 | X126270571Y-17026000D01* 233 | X126556285Y-16883142D01* 234 | X126984857Y-16883142D01* 235 | X127270571Y-17026000D01* 236 | X127413428Y-17168857D01* 237 | D12* 238 | X122610285Y-108470000D02* 239 | X122753142Y-108398571D01* 240 | X122967428Y-108398571D01* 241 | X123181714Y-108470000D01* 242 | X123324571Y-108612857D01* 243 | X123396000Y-108755714D01* 244 | X123467428Y-109041428D01* 245 | X123467428Y-109255714D01* 246 | X123396000Y-109541428D01* 247 | X123324571Y-109684285D01* 248 | X123181714Y-109827142D01* 249 | X122967428Y-109898571D01* 250 | X122824571Y-109898571D01* 251 | X122610285Y-109827142D01* 252 | X122538857Y-109755714D01* 253 | X122538857Y-109255714D01* 254 | X122824571Y-109255714D01* 255 | X121967428Y-109470000D02* 256 | X121253142Y-109470000D01* 257 | X122110285Y-109898571D02* 258 | X121610285Y-108398571D01* 259 | X121110285Y-109898571D01* 260 | X120824571Y-108398571D02* 261 | X119967428Y-108398571D01* 262 | X120396000Y-109898571D02* 263 | X120396000Y-108398571D01* 264 | X119467428Y-109112857D02* 265 | X118967428Y-109112857D01* 266 | X118753142Y-109898571D02* 267 | X119467428Y-109898571D01* 268 | X119467428Y-108398571D01* 269 | X118753142Y-108398571D01* 270 | X118181714Y-108541428D02* 271 | X118110285Y-108470000D01* 272 | X117967428Y-108398571D01* 273 | X117610285Y-108398571D01* 274 | X117467428Y-108470000D01* 275 | X117396000Y-108541428D01* 276 | X117324571Y-108684285D01* 277 | X117324571Y-108827142D01* 278 | X117396000Y-109041428D01* 279 | X118253142Y-109898571D01* 280 | X117324571Y-109898571D01* 281 | X121288857Y-94515714D02* 282 | X121360285Y-94587142D01* 283 | X121574571Y-94658571D01* 284 | X121717428Y-94658571D01* 285 | X121931714Y-94587142D01* 286 | X122074571Y-94444285D01* 287 | X122146000Y-94301428D01* 288 | X122217428Y-94015714D01* 289 | X122217428Y-93801428D01* 290 | X122146000Y-93515714D01* 291 | X122074571Y-93372857D01* 292 | X121931714Y-93230000D01* 293 | X121717428Y-93158571D01* 294 | X121574571Y-93158571D01* 295 | X121360285Y-93230000D01* 296 | X121288857Y-93301428D01* 297 | X120860285Y-93158571D02* 298 | X120360285Y-94658571D01* 299 | X119860285Y-93158571D01* 300 | X119431714Y-93301428D02* 301 | X119360285Y-93230000D01* 302 | X119217428Y-93158571D01* 303 | X118860285Y-93158571D01* 304 | X118717428Y-93230000D01* 305 | X118646000Y-93301428D01* 306 | X118574571Y-93444285D01* 307 | X118574571Y-93587142D01* 308 | X118646000Y-93801428D01* 309 | X119503142Y-94658571D01* 310 | X118574571Y-94658571D01* 311 | X122610285Y-77990000D02* 312 | X122753142Y-77918571D01* 313 | X122967428Y-77918571D01* 314 | X123181714Y-77990000D01* 315 | X123324571Y-78132857D01* 316 | X123396000Y-78275714D01* 317 | X123467428Y-78561428D01* 318 | X123467428Y-78775714D01* 319 | X123396000Y-79061428D01* 320 | X123324571Y-79204285D01* 321 | X123181714Y-79347142D01* 322 | X122967428Y-79418571D01* 323 | X122824571Y-79418571D01* 324 | X122610285Y-79347142D01* 325 | X122538857Y-79275714D01* 326 | X122538857Y-78775714D01* 327 | X122824571Y-78775714D01* 328 | X121967428Y-78990000D02* 329 | X121253142Y-78990000D01* 330 | X122110285Y-79418571D02* 331 | X121610285Y-77918571D01* 332 | X121110285Y-79418571D01* 333 | X120824571Y-77918571D02* 334 | X119967428Y-77918571D01* 335 | X120396000Y-79418571D02* 336 | X120396000Y-77918571D01* 337 | X119467428Y-78632857D02* 338 | X118967428Y-78632857D01* 339 | X118753142Y-79418571D02* 340 | X119467428Y-79418571D01* 341 | X119467428Y-77918571D01* 342 | X118753142Y-77918571D01* 343 | X117324571Y-79418571D02* 344 | X118181714Y-79418571D01* 345 | X117753142Y-79418571D02* 346 | X117753142Y-77918571D01* 347 | X117896000Y-78132857D01* 348 | X118038857Y-78275714D01* 349 | X118181714Y-78347142D01* 350 | X121288857Y-64035714D02* 351 | X121360285Y-64107142D01* 352 | X121574571Y-64178571D01* 353 | X121717428Y-64178571D01* 354 | X121931714Y-64107142D01* 355 | X122074571Y-63964285D01* 356 | X122146000Y-63821428D01* 357 | X122217428Y-63535714D01* 358 | X122217428Y-63321428D01* 359 | X122146000Y-63035714D01* 360 | X122074571Y-62892857D01* 361 | X121931714Y-62750000D01* 362 | X121717428Y-62678571D01* 363 | X121574571Y-62678571D01* 364 | X121360285Y-62750000D01* 365 | X121288857Y-62821428D01* 366 | X120860285Y-62678571D02* 367 | X120360285Y-64178571D01* 368 | X119860285Y-62678571D01* 369 | X118574571Y-64178571D02* 370 | X119431714Y-64178571D01* 371 | X119003142Y-64178571D02* 372 | X119003142Y-62678571D01* 373 | X119146000Y-62892857D01* 374 | X119288857Y-63035714D01* 375 | X119431714Y-63107142D01* 376 | X134203142Y-94658571D02* 377 | X134203142Y-93158571D01* 378 | X133631714Y-93158571D01* 379 | X133488857Y-93230000D01* 380 | X133417428Y-93301428D01* 381 | X133346000Y-93444285D01* 382 | X133346000Y-93658571D01* 383 | X133417428Y-93801428D01* 384 | X133488857Y-93872857D01* 385 | X133631714Y-93944285D01* 386 | X134203142Y-93944285D01* 387 | X132060285Y-93158571D02* 388 | X132346000Y-93158571D01* 389 | X132488857Y-93230000D01* 390 | X132560285Y-93301428D01* 391 | X132703142Y-93515714D01* 392 | X132774571Y-93801428D01* 393 | X132774571Y-94372857D01* 394 | X132703142Y-94515714D01* 395 | X132631714Y-94587142D01* 396 | X132488857Y-94658571D01* 397 | X132203142Y-94658571D01* 398 | X132060285Y-94587142D01* 399 | X131988857Y-94515714D01* 400 | X131917428Y-94372857D01* 401 | X131917428Y-94015714D01* 402 | X131988857Y-93872857D01* 403 | X132060285Y-93801428D01* 404 | X132203142Y-93730000D01* 405 | X132488857Y-93730000D01* 406 | X132631714Y-93801428D01* 407 | X132703142Y-93872857D01* 408 | X132774571Y-94015714D01* 409 | X146903142Y-94658571D02* 410 | X146903142Y-93158571D01* 411 | X146331714Y-93158571D01* 412 | X146188857Y-93230000D01* 413 | X146117428Y-93301428D01* 414 | X146046000Y-93444285D01* 415 | X146046000Y-93658571D01* 416 | X146117428Y-93801428D01* 417 | X146188857Y-93872857D01* 418 | X146331714Y-93944285D01* 419 | X146903142Y-93944285D01* 420 | X144688857Y-93158571D02* 421 | X145403142Y-93158571D01* 422 | X145474571Y-93872857D01* 423 | X145403142Y-93801428D01* 424 | X145260285Y-93730000D01* 425 | X144903142Y-93730000D01* 426 | X144760285Y-93801428D01* 427 | X144688857Y-93872857D01* 428 | X144617428Y-94015714D01* 429 | X144617428Y-94372857D01* 430 | X144688857Y-94515714D01* 431 | X144760285Y-94587142D01* 432 | X144903142Y-94658571D01* 433 | X145260285Y-94658571D01* 434 | X145403142Y-94587142D01* 435 | X145474571Y-94515714D01* 436 | X134203142Y-79418571D02* 437 | X134203142Y-77918571D01* 438 | X133631714Y-77918571D01* 439 | X133488857Y-77990000D01* 440 | X133417428Y-78061428D01* 441 | X133346000Y-78204285D01* 442 | X133346000Y-78418571D01* 443 | X133417428Y-78561428D01* 444 | X133488857Y-78632857D01* 445 | X133631714Y-78704285D01* 446 | X134203142Y-78704285D01* 447 | X132060285Y-78418571D02* 448 | X132060285Y-79418571D01* 449 | X132417428Y-77847142D02* 450 | X132774571Y-78918571D01* 451 | X131846000Y-78918571D01* 452 | X146903142Y-79418571D02* 453 | X146903142Y-77918571D01* 454 | X146331714Y-77918571D01* 455 | X146188857Y-77990000D01* 456 | X146117428Y-78061428D01* 457 | X146046000Y-78204285D01* 458 | X146046000Y-78418571D01* 459 | X146117428Y-78561428D01* 460 | X146188857Y-78632857D01* 461 | X146331714Y-78704285D01* 462 | X146903142Y-78704285D01* 463 | X145546000Y-77918571D02* 464 | X144617428Y-77918571D01* 465 | X145117428Y-78490000D01* 466 | X144903142Y-78490000D01* 467 | X144760285Y-78561428D01* 468 | X144688857Y-78632857D01* 469 | X144617428Y-78775714D01* 470 | X144617428Y-79132857D01* 471 | X144688857Y-79275714D01* 472 | X144760285Y-79347142D01* 473 | X144903142Y-79418571D01* 474 | X145331714Y-79418571D01* 475 | X145474571Y-79347142D01* 476 | X145546000Y-79275714D01* 477 | X134203142Y-64178571D02* 478 | X134203142Y-62678571D01* 479 | X133631714Y-62678571D01* 480 | X133488857Y-62750000D01* 481 | X133417428Y-62821428D01* 482 | X133346000Y-62964285D01* 483 | X133346000Y-63178571D01* 484 | X133417428Y-63321428D01* 485 | X133488857Y-63392857D01* 486 | X133631714Y-63464285D01* 487 | X134203142Y-63464285D01* 488 | X132774571Y-62821428D02* 489 | X132703142Y-62750000D01* 490 | X132560285Y-62678571D01* 491 | X132203142Y-62678571D01* 492 | X132060285Y-62750000D01* 493 | X131988857Y-62821428D01* 494 | X131917428Y-62964285D01* 495 | X131917428Y-63107142D01* 496 | X131988857Y-63321428D01* 497 | X132846000Y-64178571D01* 498 | X131917428Y-64178571D01* 499 | X146903142Y-64178571D02* 500 | X146903142Y-62678571D01* 501 | X146331714Y-62678571D01* 502 | X146188857Y-62750000D01* 503 | X146117428Y-62821428D01* 504 | X146046000Y-62964285D01* 505 | X146046000Y-63178571D01* 506 | X146117428Y-63321428D01* 507 | X146188857Y-63392857D01* 508 | X146331714Y-63464285D01* 509 | X146903142Y-63464285D01* 510 | X144617428Y-64178571D02* 511 | X145474571Y-64178571D01* 512 | X145046000Y-64178571D02* 513 | X145046000Y-62678571D01* 514 | X145188857Y-62892857D01* 515 | X145331714Y-63035714D01* 516 | X145474571Y-63107142D01* 517 | X134203142Y-109898571D02* 518 | X134203142Y-108398571D01* 519 | X133631714Y-108398571D01* 520 | X133488857Y-108470000D01* 521 | X133417428Y-108541428D01* 522 | X133346000Y-108684285D01* 523 | X133346000Y-108898571D01* 524 | X133417428Y-109041428D01* 525 | X133488857Y-109112857D01* 526 | X133631714Y-109184285D01* 527 | X134203142Y-109184285D01* 528 | X132488857Y-109041428D02* 529 | X132631714Y-108970000D01* 530 | X132703142Y-108898571D01* 531 | X132774571Y-108755714D01* 532 | X132774571Y-108684285D01* 533 | X132703142Y-108541428D01* 534 | X132631714Y-108470000D01* 535 | X132488857Y-108398571D01* 536 | X132203142Y-108398571D01* 537 | X132060285Y-108470000D01* 538 | X131988857Y-108541428D01* 539 | X131917428Y-108684285D01* 540 | X131917428Y-108755714D01* 541 | X131988857Y-108898571D01* 542 | X132060285Y-108970000D01* 543 | X132203142Y-109041428D01* 544 | X132488857Y-109041428D01* 545 | X132631714Y-109112857D01* 546 | X132703142Y-109184285D01* 547 | X132774571Y-109327142D01* 548 | X132774571Y-109612857D01* 549 | X132703142Y-109755714D01* 550 | X132631714Y-109827142D01* 551 | X132488857Y-109898571D01* 552 | X132203142Y-109898571D01* 553 | X132060285Y-109827142D01* 554 | X131988857Y-109755714D01* 555 | X131917428Y-109612857D01* 556 | X131917428Y-109327142D01* 557 | X131988857Y-109184285D01* 558 | X132060285Y-109112857D01* 559 | X132203142Y-109041428D01* 560 | X146903142Y-109898571D02* 561 | X146903142Y-108398571D01* 562 | X146331714Y-108398571D01* 563 | X146188857Y-108470000D01* 564 | X146117428Y-108541428D01* 565 | X146046000Y-108684285D01* 566 | X146046000Y-108898571D01* 567 | X146117428Y-109041428D01* 568 | X146188857Y-109112857D01* 569 | X146331714Y-109184285D01* 570 | X146903142Y-109184285D01* 571 | X145546000Y-108398571D02* 572 | X144546000Y-108398571D01* 573 | X145188857Y-109898571D01* 574 | X121396000Y-124995714D02* 575 | X121467428Y-125067142D01* 576 | X121681714Y-125138571D01* 577 | X121824571Y-125138571D01* 578 | X122038857Y-125067142D01* 579 | X122181714Y-124924285D01* 580 | X122253142Y-124781428D01* 581 | X122324571Y-124495714D01* 582 | X122324571Y-124281428D01* 583 | X122253142Y-123995714D01* 584 | X122181714Y-123852857D01* 585 | X122038857Y-123710000D01* 586 | X121824571Y-123638571D01* 587 | X121681714Y-123638571D01* 588 | X121467428Y-123710000D01* 589 | X121396000Y-123781428D01* 590 | X119896000Y-124995714D02* 591 | X119967428Y-125067142D01* 592 | X120181714Y-125138571D01* 593 | X120324571Y-125138571D01* 594 | X120538857Y-125067142D01* 595 | X120681714Y-124924285D01* 596 | X120753142Y-124781428D01* 597 | X120824571Y-124495714D01* 598 | X120824571Y-124281428D01* 599 | X120753142Y-123995714D01* 600 | X120681714Y-123852857D01* 601 | X120538857Y-123710000D01* 602 | X120324571Y-123638571D01* 603 | X120181714Y-123638571D01* 604 | X119967428Y-123710000D01* 605 | X119896000Y-123781428D01* 606 | X119324571Y-123781428D02* 607 | X119253142Y-123710000D01* 608 | X119110285Y-123638571D01* 609 | X118753142Y-123638571D01* 610 | X118610285Y-123710000D01* 611 | X118538857Y-123781428D01* 612 | X118467428Y-123924285D01* 613 | X118467428Y-124067142D01* 614 | X118538857Y-124281428D01* 615 | X119396000Y-125138571D01* 616 | X118467428Y-125138571D01* 617 | X134096000Y-124995714D02* 618 | X134167428Y-125067142D01* 619 | X134381714Y-125138571D01* 620 | X134524571Y-125138571D01* 621 | X134738857Y-125067142D01* 622 | X134881714Y-124924285D01* 623 | X134953142Y-124781428D01* 624 | X135024571Y-124495714D01* 625 | X135024571Y-124281428D01* 626 | X134953142Y-123995714D01* 627 | X134881714Y-123852857D01* 628 | X134738857Y-123710000D01* 629 | X134524571Y-123638571D01* 630 | X134381714Y-123638571D01* 631 | X134167428Y-123710000D01* 632 | X134096000Y-123781428D01* 633 | X132596000Y-124995714D02* 634 | X132667428Y-125067142D01* 635 | X132881714Y-125138571D01* 636 | X133024571Y-125138571D01* 637 | X133238857Y-125067142D01* 638 | X133381714Y-124924285D01* 639 | X133453142Y-124781428D01* 640 | X133524571Y-124495714D01* 641 | X133524571Y-124281428D01* 642 | X133453142Y-123995714D01* 643 | X133381714Y-123852857D01* 644 | X133238857Y-123710000D01* 645 | X133024571Y-123638571D01* 646 | X132881714Y-123638571D01* 647 | X132667428Y-123710000D01* 648 | X132596000Y-123781428D01* 649 | X131167428Y-125138571D02* 650 | X132024571Y-125138571D01* 651 | X131596000Y-125138571D02* 652 | X131596000Y-123638571D01* 653 | X131738857Y-123852857D01* 654 | X131881714Y-123995714D01* 655 | X132024571Y-124067142D01* 656 | X149474571Y-125138571D02* 657 | X149474571Y-123638571D01* 658 | X148974571Y-124710000D01* 659 | X148474571Y-123638571D01* 660 | X148474571Y-125138571D01* 661 | X147760285Y-125138571D02* 662 | X147760285Y-123638571D01* 663 | X147046000Y-125138571D02* 664 | X147046000Y-123638571D01* 665 | X146688857Y-123638571D01* 666 | X146474571Y-123710000D01* 667 | X146331714Y-123852857D01* 668 | X146260285Y-123995714D01* 669 | X146188857Y-124281428D01* 670 | X146188857Y-124495714D01* 671 | X146260285Y-124781428D01* 672 | X146331714Y-124924285D01* 673 | X146474571Y-125067142D01* 674 | X146688857Y-125138571D01* 675 | X147046000Y-125138571D01* 676 | X145546000Y-125138571D02* 677 | X145546000Y-123638571D01* 678 | X143688857Y-125138571D02* 679 | X143688857Y-123638571D01* 680 | X142974571Y-125138571D02* 681 | X142974571Y-123638571D01* 682 | X142117428Y-125138571D01* 683 | X142117428Y-123638571D01* 684 | M02* 685 | -------------------------------------------------------------------------------- /kicad/frontpanel/plots/frontpanel-Edge.Cuts.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2+dfsg1-1~bpo9+1* 2 | G04 #@! TF.CreationDate,2019-05-24T18:29:25+02:00* 3 | G04 #@! TF.ProjectId,frontpanel,66726f6e-7470-4616-9e65-6c2e6b696361,rev?* 4 | G04 #@! TF.SameCoordinates,Original* 5 | G04 #@! TF.FileFunction,Profile,NP* 6 | %FSLAX46Y46*% 7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 8 | G04 Created by KiCad (PCBNEW 5.0.2+dfsg1-1~bpo9+1) date Fri 24 May 2019 06:29:25 PM CEST* 9 | %MOMM*% 10 | %LPD*% 11 | G01* 12 | G04 APERTURE LIST* 13 | %ADD10C,0.150000*% 14 | G04 APERTURE END LIST* 15 | D10* 16 | X153416000Y-143002000D02* 17 | X153416000Y-142748000D01* 18 | X112776000Y-143002000D02* 19 | X112776000Y-142748000D01* 20 | X112776000Y-14478000D02* 21 | X112776000Y-14732000D01* 22 | X153416000Y-14478000D02* 23 | X153416000Y-14732000D01* 24 | X153416000Y-142748000D02* 25 | X153416000Y-127000000D01* 26 | X112776000Y-143002000D02* 27 | X153416000Y-143002000D01* 28 | X112776000Y-127000000D02* 29 | X112776000Y-142748000D01* 30 | X153416000Y-14732000D02* 31 | X153416000Y-30480000D01* 32 | X112776000Y-14478000D02* 33 | X153416000Y-14478000D01* 34 | X112776000Y-30480000D02* 35 | X112776000Y-14732000D01* 36 | X112776000Y-127000000D02* 37 | X112776000Y-30480000D01* 38 | X153416000Y-30480000D02* 39 | X153416000Y-127000000D01* 40 | M02* 41 | -------------------------------------------------------------------------------- /kicad/frontpanel/plots/frontpanel-F.Cu.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2+dfsg1-1~bpo9+1* 2 | G04 #@! TF.CreationDate,2019-05-24T18:29:25+02:00* 3 | G04 #@! TF.ProjectId,frontpanel,66726f6e-7470-4616-9e65-6c2e6b696361,rev?* 4 | G04 #@! TF.SameCoordinates,Original* 5 | G04 #@! TF.FileFunction,Copper,L1,Top* 6 | G04 #@! TF.FilePolarity,Positive* 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 5.0.2+dfsg1-1~bpo9+1) date Fri 24 May 2019 06:29:25 PM CEST* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | G04 #@! TA.AperFunction,ComponentPad* 15 | %ADD10C,8.400000*% 16 | G04 #@! TD* 17 | G04 APERTURE END LIST* 18 | D10* 19 | G04 #@! TO.P,REF\002A\002A,1* 20 | G04 #@! TO.N,N/C* 21 | X120396000Y-56261000D03* 22 | G04 #@! TD* 23 | G04 #@! TO.P,REF\002A\002A,1* 24 | G04 #@! TO.N,N/C* 25 | X145796000Y-56261000D03* 26 | G04 #@! TD* 27 | G04 #@! TO.P,REF\002A\002A,1* 28 | G04 #@! TO.N,N/C* 29 | X133096000Y-56261000D03* 30 | G04 #@! TD* 31 | G04 #@! TO.P,REF\002A\002A,1* 32 | G04 #@! TO.N,N/C* 33 | X133096000Y-71501000D03* 34 | G04 #@! TD* 35 | G04 #@! TO.P,REF\002A\002A,1* 36 | G04 #@! TO.N,N/C* 37 | X145796000Y-71501000D03* 38 | G04 #@! TD* 39 | G04 #@! TO.P,REF\002A\002A,1* 40 | G04 #@! TO.N,N/C* 41 | X120396000Y-71501000D03* 42 | G04 #@! TD* 43 | G04 #@! TO.P,REF\002A\002A,1* 44 | G04 #@! TO.N,N/C* 45 | X133096000Y-86741000D03* 46 | G04 #@! TD* 47 | G04 #@! TO.P,REF\002A\002A,1* 48 | G04 #@! TO.N,N/C* 49 | X145796000Y-86741000D03* 50 | G04 #@! TD* 51 | G04 #@! TO.P,REF\002A\002A,1* 52 | G04 #@! TO.N,N/C* 53 | X120396000Y-86741000D03* 54 | G04 #@! TD* 55 | G04 #@! TO.P,REF\002A\002A,1* 56 | G04 #@! TO.N,N/C* 57 | X133096000Y-101981000D03* 58 | G04 #@! TD* 59 | G04 #@! TO.P,REF\002A\002A,1* 60 | G04 #@! TO.N,N/C* 61 | X145796000Y-101981000D03* 62 | G04 #@! TD* 63 | G04 #@! TO.P,REF\002A\002A,1* 64 | G04 #@! TO.N,N/C* 65 | X120396000Y-101981000D03* 66 | G04 #@! TD* 67 | G04 #@! TO.P,REF\002A\002A,1* 68 | G04 #@! TO.N,N/C* 69 | X145796000Y-117221000D03* 70 | G04 #@! TD* 71 | G04 #@! TO.P,REF\002A\002A,1* 72 | G04 #@! TO.N,N/C* 73 | X133096000Y-117221000D03* 74 | G04 #@! TD* 75 | G04 #@! TO.P,REF\002A\002A,1* 76 | G04 #@! TO.N,N/C* 77 | X120396000Y-117221000D03* 78 | G04 #@! TD* 79 | M02* 80 | -------------------------------------------------------------------------------- /kicad/frontpanel/plots/frontpanel-F.SilkS.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2+dfsg1-1~bpo9+1* 2 | G04 #@! TF.CreationDate,2019-05-24T18:29:25+02:00* 3 | G04 #@! TF.ProjectId,frontpanel,66726f6e-7470-4616-9e65-6c2e6b696361,rev?* 4 | G04 #@! TF.SameCoordinates,Original* 5 | G04 #@! TF.FileFunction,Legend,Top* 6 | G04 #@! TF.FilePolarity,Positive* 7 | %FSLAX46Y46*% 8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 9 | G04 Created by KiCad (PCBNEW 5.0.2+dfsg1-1~bpo9+1) date Fri 24 May 2019 06:29:25 PM CEST* 10 | %MOMM*% 11 | %LPD*% 12 | G01* 13 | G04 APERTURE LIST* 14 | %ADD10C,0.300000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | X126167428Y-131258571D02* 18 | X126167428Y-132330000D01* 19 | X126096000Y-132544285D01* 20 | X125953142Y-132687142D01* 21 | X125738857Y-132758571D01* 22 | X125596000Y-132758571D01* 23 | X127596000Y-132758571D02* 24 | X126881714Y-132758571D01* 25 | X126881714Y-131258571D01* 26 | X128953142Y-132615714D02* 27 | X128881714Y-132687142D01* 28 | X128667428Y-132758571D01* 29 | X128524571Y-132758571D01* 30 | X128310285Y-132687142D01* 31 | X128167428Y-132544285D01* 32 | X128096000Y-132401428D01* 33 | X128024571Y-132115714D01* 34 | X128024571Y-131901428D01* 35 | X128096000Y-131615714D01* 36 | X128167428Y-131472857D01* 37 | X128310285Y-131330000D01* 38 | X128524571Y-131258571D01* 39 | X128667428Y-131258571D01* 40 | X128881714Y-131330000D01* 41 | X128953142Y-131401428D01* 42 | X130024571Y-131258571D02* 43 | X130024571Y-132330000D01* 44 | X129953142Y-132544285D01* 45 | X129810285Y-132687142D01* 46 | X129596000Y-132758571D01* 47 | X129453142Y-132758571D01* 48 | X131453142Y-132758571D02* 49 | X130738857Y-132758571D01* 50 | X130738857Y-131258571D01* 51 | X132810285Y-132615714D02* 52 | X132738857Y-132687142D01* 53 | X132524571Y-132758571D01* 54 | X132381714Y-132758571D01* 55 | X132167428Y-132687142D01* 56 | X132024571Y-132544285D01* 57 | X131953142Y-132401428D01* 58 | X131881714Y-132115714D01* 59 | X131881714Y-131901428D01* 60 | X131953142Y-131615714D01* 61 | X132024571Y-131472857D01* 62 | X132167428Y-131330000D01* 63 | X132381714Y-131258571D01* 64 | X132524571Y-131258571D01* 65 | X132738857Y-131330000D01* 66 | X132810285Y-131401428D01* 67 | X133881714Y-131258571D02* 68 | X133881714Y-132330000D01* 69 | X133810285Y-132544285D01* 70 | X133667428Y-132687142D01* 71 | X133453142Y-132758571D01* 72 | X133310285Y-132758571D01* 73 | X135310285Y-132758571D02* 74 | X134596000Y-132758571D01* 75 | X134596000Y-131258571D01* 76 | X136667428Y-132615714D02* 77 | X136596000Y-132687142D01* 78 | X136381714Y-132758571D01* 79 | X136238857Y-132758571D01* 80 | X136024571Y-132687142D01* 81 | X135881714Y-132544285D01* 82 | X135810285Y-132401428D01* 83 | X135738857Y-132115714D01* 84 | X135738857Y-131901428D01* 85 | X135810285Y-131615714D01* 86 | X135881714Y-131472857D01* 87 | X136024571Y-131330000D01* 88 | X136238857Y-131258571D01* 89 | X136381714Y-131258571D01* 90 | X136596000Y-131330000D01* 91 | X136667428Y-131401428D01* 92 | X137738857Y-131258571D02* 93 | X137738857Y-132330000D01* 94 | X137667428Y-132544285D01* 95 | X137524571Y-132687142D01* 96 | X137310285Y-132758571D01* 97 | X137167428Y-132758571D01* 98 | X139167428Y-132758571D02* 99 | X138453142Y-132758571D01* 100 | X138453142Y-131258571D01* 101 | X140524571Y-132615714D02* 102 | X140453142Y-132687142D01* 103 | X140238857Y-132758571D01* 104 | X140096000Y-132758571D01* 105 | X139881714Y-132687142D01* 106 | X139738857Y-132544285D01* 107 | X139667428Y-132401428D01* 108 | X139596000Y-132115714D01* 109 | X139596000Y-131901428D01* 110 | X139667428Y-131615714D01* 111 | X139738857Y-131472857D01* 112 | X139881714Y-131330000D01* 113 | X140096000Y-131258571D01* 114 | X140238857Y-131258571D01* 115 | X140453142Y-131330000D01* 116 | X140524571Y-131401428D01* 117 | M02* 118 | -------------------------------------------------------------------------------- /kicad/frontpanel/plots/frontpanel-NPTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ;DRILL file {KiCad 5.0.2+dfsg1-1~bpo9+1} date Fri 24 May 2019 06:29:29 PM CEST 3 | ;FORMAT={-:-/ absolute / inch / decimal} 4 | FMAT,2 5 | INCH,TZ 6 | T1C0.1260 7 | T2C0.2520 8 | % 9 | G90 10 | G05 11 | T1 12 | X4.7353Y-0.6881 13 | X5.7353Y-0.6881 14 | X4.7353Y-5.5109 15 | X5.7353Y-5.5109 16 | X4.74Y-1.355 17 | T2 18 | X5.24Y-1.355 19 | T0 20 | M30 21 | -------------------------------------------------------------------------------- /kicad/frontpanel/plots/frontpanel-PTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ;DRILL file {KiCad 5.0.2+dfsg1-1~bpo9+1} date Fri 24 May 2019 06:29:29 PM CEST 3 | ;FORMAT={-:-/ absolute / inch / decimal} 4 | FMAT,2 5 | INCH,TZ 6 | T1C0.2520 7 | % 8 | G90 9 | G05 10 | T1 11 | X5.24Y-4.615 12 | X4.74Y-4.015 13 | X5.74Y-3.415 14 | X5.24Y-3.415 15 | X4.74Y-2.815 16 | X5.74Y-2.815 17 | X4.74Y-2.215 18 | X5.74Y-2.215 19 | X5.24Y-2.815 20 | X5.24Y-2.215 21 | X5.74Y-4.615 22 | X4.74Y-3.415 23 | X5.74Y-4.015 24 | X5.24Y-4.015 25 | X4.74Y-4.615 26 | T0 27 | M30 28 | -------------------------------------------------------------------------------- /kicad/frontpanel/plots/frontpanel.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomarus/midi2cv/f4459f32e96db2297f37528a04699a8ae761d4a6/kicad/frontpanel/plots/frontpanel.zip -------------------------------------------------------------------------------- /kicad/midi2cv/midi2cv-cache.lib: -------------------------------------------------------------------------------- 1 | EESchema-LIBRARY Version 2.4 2 | #encoding utf-8 3 | # 4 | # 74xx_74HC595 5 | # 6 | DEF 74xx_74HC595 U 0 20 Y Y 1 F N 7 | F0 "U" -300 550 50 H V C CNN 8 | F1 "74xx_74HC595" -300 -650 50 H V C CNN 9 | F2 "" 0 0 50 H I C CNN 10 | F3 "" 0 0 50 H I C CNN 11 | ALIAS 74LS595 74HCT595 12 | $FPLIST 13 | DIP*W7.62mm* 14 | SOIC*3.9x9.9mm*P1.27mm* 15 | TSSOP*4.4x5mm*P0.65mm* 16 | SOIC*5.3x10.2mm*P1.27mm* 17 | SOIC*7.5x10.3mm*P1.27mm* 18 | $ENDFPLIST 19 | DRAW 20 | S -300 500 300 -600 1 1 10 f 21 | X QB 1 400 300 100 L 50 50 1 0 T 22 | X ~SRCLR 10 -400 100 100 R 50 50 1 0 I 23 | X SRCLK 11 -400 200 100 R 50 50 1 0 I 24 | X RCLK 12 -400 -100 100 R 50 50 1 0 I 25 | X ~OE 13 -400 -200 100 R 50 50 1 0 I 26 | X SER 14 -400 400 100 R 50 50 1 0 I 27 | X QA 15 400 400 100 L 50 50 1 0 T 28 | X VCC 16 0 600 100 D 50 50 1 0 W 29 | X QC 2 400 200 100 L 50 50 1 0 T 30 | X QD 3 400 100 100 L 50 50 1 0 T 31 | X QE 4 400 0 100 L 50 50 1 0 T 32 | X QF 5 400 -100 100 L 50 50 1 0 T 33 | X QG 6 400 -200 100 L 50 50 1 0 T 34 | X QH 7 400 -300 100 L 50 50 1 0 T 35 | X GND 8 0 -700 100 U 50 50 1 0 W 36 | X QH' 9 400 -500 100 L 50 50 1 0 O 37 | ENDDRAW 38 | ENDDEF 39 | # 40 | # Amplifier_Operational_TL074 41 | # 42 | DEF Amplifier_Operational_TL074 U 0 5 Y Y 5 L N 43 | F0 "U" 0 200 50 H V L CNN 44 | F1 "Amplifier_Operational_TL074" 0 -200 50 H V L CNN 45 | F2 "" -50 100 50 H I C CNN 46 | F3 "" 50 200 50 H I C CNN 47 | ALIAS LM324 TLC274 TLC279 TL074 LM324A MCP6004 TL084 TL064 LMV324 LMC6484 MCP604 MC33079 MC33174 MC33179 OPA1604 OPA4134 OPA4340UA OPA4376 MCP6L94 TSV914 ADA4807-4 48 | $FPLIST 49 | SOIC*3.9x8.7mm*P1.27mm* 50 | DIP*W7.62mm* 51 | TSSOP*4.4x5mm*P0.65mm* 52 | SSOP*5.3x6.2mm*P0.65mm* 53 | MSOP*3x3mm*P0.5mm* 54 | $ENDFPLIST 55 | DRAW 56 | P 4 1 1 10 -200 200 200 0 -200 -200 -200 200 f 57 | P 4 2 1 10 -200 200 200 0 -200 -200 -200 200 f 58 | P 4 3 1 10 -200 200 200 0 -200 -200 -200 200 f 59 | P 4 4 1 10 -200 200 200 0 -200 -200 -200 200 f 60 | X ~ 1 300 0 100 L 50 50 1 1 O 61 | X - 2 -300 -100 100 R 50 50 1 1 I 62 | X + 3 -300 100 100 R 50 50 1 1 I 63 | X + 5 -300 100 100 R 50 50 2 1 I 64 | X - 6 -300 -100 100 R 50 50 2 1 I 65 | X ~ 7 300 0 100 L 50 50 2 1 O 66 | X + 10 -300 100 100 R 50 50 3 1 I 67 | X ~ 8 300 0 100 L 50 50 3 1 O 68 | X - 9 -300 -100 100 R 50 50 3 1 I 69 | X + 12 -300 100 100 R 50 50 4 1 I 70 | X - 13 -300 -100 100 R 50 50 4 1 I 71 | X ~ 14 300 0 100 L 50 50 4 1 O 72 | X V- 11 -100 -300 150 U 50 50 5 1 W 73 | X V+ 4 -100 300 150 D 50 50 5 1 W 74 | ENDDRAW 75 | ENDDEF 76 | # 77 | # Analog_DAC_MCP4922 78 | # 79 | DEF Analog_DAC_MCP4922 U 0 40 Y Y 1 F N 80 | F0 "U" -75 425 50 H V R CNN 81 | F1 "Analog_DAC_MCP4922" -75 350 50 H V R CNN 82 | F2 "" 800 -300 50 H I C CNN 83 | F3 "" 800 -300 50 H I C CNN 84 | ALIAS MCP4912 MCP4922 85 | $FPLIST 86 | DIP*W7.62mm* 87 | SOIC*3.9x8.7mm*P1.27mm* 88 | TSSOP*4.4x5mm*P0.65mm* 89 | $ENDFPLIST 90 | DRAW 91 | T 900 -80 -265 50 0 0 0 CNTRL Normal 0 L B 92 | T 0 150 -150 50 0 0 0 DAC Normal 0 C C 93 | T 0 150 50 50 0 0 0 DAC Normal 0 C C 94 | S -400 300 400 -400 0 1 10 f 95 | S -50 -350 -150 75 0 1 0 N 96 | P 2 0 0 0 140 -230 130 -240 N 97 | P 2 0 0 0 140 -230 150 -240 N 98 | P 2 0 0 0 140 130 130 140 N 99 | P 2 0 0 0 140 130 150 140 N 100 | P 2 0 0 0 400 -300 370 -300 N 101 | P 2 0 0 0 400 200 370 200 N 102 | P 3 0 0 0 160 -300 140 -300 140 -230 N 103 | P 3 0 0 0 170 200 140 200 140 130 N 104 | P 4 0 0 0 275 -150 375 -150 375 -200 400 -200 N 105 | P 4 0 0 0 275 50 375 50 375 100 400 100 N 106 | P 2 0 1 0 50 -150 -50 -150 N 107 | P 2 0 1 0 50 50 -50 50 N 108 | P 6 0 1 0 275 -150 225 -75 50 -75 50 -225 225 -225 275 -150 N 109 | P 6 0 1 0 275 50 225 125 50 125 50 -25 225 -25 275 50 N 110 | X Vdd 1 0 400 100 D 50 50 1 1 W 111 | X VB 10 500 -200 100 L 50 50 1 1 O 112 | X VrefB 11 500 -300 100 L 50 50 1 1 I 113 | X Vss 12 0 -500 100 U 50 50 1 1 W 114 | X VrefA 13 500 200 100 L 50 50 1 1 I 115 | X VA 14 500 100 100 L 50 50 1 1 O 116 | X NC 2 -300 -500 100 U 50 50 1 1 N N 117 | X ~CS 3 -500 -300 100 R 50 50 1 1 I 118 | X SCK 4 -500 0 100 R 50 50 1 1 I C 119 | X SDI 5 -500 -200 100 R 50 50 1 1 I 120 | X NC 6 -200 -500 100 U 50 50 1 1 N N 121 | X NC 7 -100 -500 100 U 50 50 1 1 N N 122 | X ~LDAC 8 -500 -100 100 R 50 50 1 1 I 123 | X ~SHDN 9 -500 200 100 R 50 50 1 1 O 124 | ENDDRAW 125 | ENDDEF 126 | # 127 | # Connector_AudioJack2_SwitchT 128 | # 129 | DEF Connector_AudioJack2_SwitchT J 0 20 Y Y 1 F N 130 | F0 "J" 0 350 50 H V C CNN 131 | F1 "Connector_AudioJack2_SwitchT" 0 250 50 H V C CNN 132 | F2 "" 0 0 50 H I C CNN 133 | F3 "" 0 0 50 H I C CNN 134 | $FPLIST 135 | Jack* 136 | $ENDFPLIST 137 | DRAW 138 | S -100 0 -150 -100 0 1 10 F 139 | S 100 150 -100 -200 0 1 10 f 140 | P 2 0 1 0 70 -10 80 -30 N 141 | P 4 0 1 10 0 0 25 -25 50 0 100 0 N 142 | P 4 0 1 0 100 -100 70 -100 70 -10 60 -30 N 143 | P 5 0 1 10 100 100 -25 100 -25 0 -50 -25 -75 0 N 144 | X ~ S 200 100 100 L 50 50 1 1 P 145 | X ~ T 200 0 100 L 50 50 1 1 P 146 | X ~ TN 200 -100 100 L 50 50 1 1 P 147 | ENDDRAW 148 | ENDDEF 149 | # 150 | # Connector_AudioJack3 151 | # 152 | DEF Connector_AudioJack3 J 0 20 Y Y 1 F N 153 | F0 "J" 0 350 50 H V C CNN 154 | F1 "Connector_AudioJack3" 0 250 50 H V C CNN 155 | F2 "" 0 0 50 H I C CNN 156 | F3 "" 0 0 50 H I C CNN 157 | $FPLIST 158 | Jack* 159 | $ENDFPLIST 160 | DRAW 161 | S -200 -200 -250 -100 0 1 10 F 162 | S 100 150 -200 -200 0 1 10 f 163 | P 4 0 1 10 0 -100 25 -125 50 -100 100 -100 N 164 | P 5 0 1 10 -75 -100 -50 -125 -25 -100 -25 0 100 0 N 165 | P 5 0 1 10 100 100 -100 100 -100 -100 -125 -125 -150 -100 N 166 | X ~ R 200 0 100 L 50 50 1 1 P 167 | X ~ S 200 100 100 L 50 50 1 1 P 168 | X ~ T 200 -100 100 L 50 50 1 1 P 169 | ENDDRAW 170 | ENDDEF 171 | # 172 | # Connector_Conn_01x02_Female 173 | # 174 | DEF Connector_Conn_01x02_Female J 0 40 Y N 1 F N 175 | F0 "J" 0 100 50 H V C CNN 176 | F1 "Connector_Conn_01x02_Female" 0 -200 50 H V C CNN 177 | F2 "" 0 0 50 H I C CNN 178 | F3 "" 0 0 50 H I C CNN 179 | $FPLIST 180 | Connector*:*_1x??_* 181 | $ENDFPLIST 182 | DRAW 183 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 184 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 185 | P 2 1 1 6 -50 -100 -20 -100 N 186 | P 2 1 1 6 -50 0 -20 0 N 187 | X Pin_1 1 -200 0 150 R 50 50 1 1 P 188 | X Pin_2 2 -200 -100 150 R 50 50 1 1 P 189 | ENDDRAW 190 | ENDDEF 191 | # 192 | # Connector_Conn_01x04_Female 193 | # 194 | DEF Connector_Conn_01x04_Female J 0 40 Y N 1 F N 195 | F0 "J" 0 200 50 H V C CNN 196 | F1 "Connector_Conn_01x04_Female" 0 -300 50 H V C CNN 197 | F2 "" 0 0 50 H I C CNN 198 | F3 "" 0 0 50 H I C CNN 199 | $FPLIST 200 | Connector*:*_1x??_* 201 | $ENDFPLIST 202 | DRAW 203 | A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220 204 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 205 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 206 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 207 | P 2 1 1 6 -50 -200 -20 -200 N 208 | P 2 1 1 6 -50 -100 -20 -100 N 209 | P 2 1 1 6 -50 0 -20 0 N 210 | P 2 1 1 6 -50 100 -20 100 N 211 | X Pin_1 1 -200 100 150 R 50 50 1 1 P 212 | X Pin_2 2 -200 0 150 R 50 50 1 1 P 213 | X Pin_3 3 -200 -100 150 R 50 50 1 1 P 214 | X Pin_4 4 -200 -200 150 R 50 50 1 1 P 215 | ENDDRAW 216 | ENDDEF 217 | # 218 | # Connector_Conn_01x04_Male 219 | # 220 | DEF Connector_Conn_01x04_Male J 0 40 Y N 1 F N 221 | F0 "J" 0 200 50 H V C CNN 222 | F1 "Connector_Conn_01x04_Male" 0 -300 50 H V C CNN 223 | F2 "" 0 0 50 H I C CNN 224 | F3 "" 0 0 50 H I C CNN 225 | $FPLIST 226 | Connector*:*_1x??_* 227 | $ENDFPLIST 228 | DRAW 229 | S 34 -195 0 -205 1 1 6 F 230 | S 34 -95 0 -105 1 1 6 F 231 | S 34 5 0 -5 1 1 6 F 232 | S 34 105 0 95 1 1 6 F 233 | P 2 1 1 6 50 -200 34 -200 N 234 | P 2 1 1 6 50 -100 34 -100 N 235 | P 2 1 1 6 50 0 34 0 N 236 | P 2 1 1 6 50 100 34 100 N 237 | X Pin_1 1 200 100 150 L 50 50 1 1 P 238 | X Pin_2 2 200 0 150 L 50 50 1 1 P 239 | X Pin_3 3 200 -100 150 L 50 50 1 1 P 240 | X Pin_4 4 200 -200 150 L 50 50 1 1 P 241 | ENDDRAW 242 | ENDDEF 243 | # 244 | # Connector_Conn_01x08_Female 245 | # 246 | DEF Connector_Conn_01x08_Female J 0 40 Y N 1 F N 247 | F0 "J" 0 400 50 H V C CNN 248 | F1 "Connector_Conn_01x08_Female" 0 -500 50 H V C CNN 249 | F2 "" 0 0 50 H I C CNN 250 | F3 "" 0 0 50 H I C CNN 251 | $FPLIST 252 | Connector*:*_1x??_* 253 | $ENDFPLIST 254 | DRAW 255 | A 0 -400 20 901 -901 1 1 6 N 0 -380 0 -420 256 | A 0 -300 20 901 -901 1 1 6 N 0 -280 0 -320 257 | A 0 -200 20 901 -901 1 1 6 N 0 -180 0 -220 258 | A 0 -100 20 901 -901 1 1 6 N 0 -80 0 -120 259 | A 0 0 20 901 -901 1 1 6 N 0 20 0 -20 260 | A 0 100 20 901 -901 1 1 6 N 0 120 0 80 261 | A 0 200 20 901 -901 1 1 6 N 0 220 0 180 262 | A 0 300 20 901 -901 1 1 6 N 0 320 0 280 263 | P 2 1 1 6 -50 -400 -20 -400 N 264 | P 2 1 1 6 -50 -300 -20 -300 N 265 | P 2 1 1 6 -50 -200 -20 -200 N 266 | P 2 1 1 6 -50 -100 -20 -100 N 267 | P 2 1 1 6 -50 0 -20 0 N 268 | P 2 1 1 6 -50 100 -20 100 N 269 | P 2 1 1 6 -50 200 -20 200 N 270 | P 2 1 1 6 -50 300 -20 300 N 271 | X Pin_1 1 -200 300 150 R 50 50 1 1 P 272 | X Pin_2 2 -200 200 150 R 50 50 1 1 P 273 | X Pin_3 3 -200 100 150 R 50 50 1 1 P 274 | X Pin_4 4 -200 0 150 R 50 50 1 1 P 275 | X Pin_5 5 -200 -100 150 R 50 50 1 1 P 276 | X Pin_6 6 -200 -200 150 R 50 50 1 1 P 277 | X Pin_7 7 -200 -300 150 R 50 50 1 1 P 278 | X Pin_8 8 -200 -400 150 R 50 50 1 1 P 279 | ENDDRAW 280 | ENDDEF 281 | # 282 | # Connector_Conn_01x08_Male 283 | # 284 | DEF Connector_Conn_01x08_Male J 0 40 Y N 1 F N 285 | F0 "J" 0 400 50 H V C CNN 286 | F1 "Connector_Conn_01x08_Male" 0 -500 50 H V C CNN 287 | F2 "" 0 0 50 H I C CNN 288 | F3 "" 0 0 50 H I C CNN 289 | $FPLIST 290 | Connector*:*_1x??_* 291 | $ENDFPLIST 292 | DRAW 293 | S 34 -395 0 -405 1 1 6 F 294 | S 34 -295 0 -305 1 1 6 F 295 | S 34 -195 0 -205 1 1 6 F 296 | S 34 -95 0 -105 1 1 6 F 297 | S 34 5 0 -5 1 1 6 F 298 | S 34 105 0 95 1 1 6 F 299 | S 34 205 0 195 1 1 6 F 300 | S 34 305 0 295 1 1 6 F 301 | P 2 1 1 6 50 -400 34 -400 N 302 | P 2 1 1 6 50 -300 34 -300 N 303 | P 2 1 1 6 50 -200 34 -200 N 304 | P 2 1 1 6 50 -100 34 -100 N 305 | P 2 1 1 6 50 0 34 0 N 306 | P 2 1 1 6 50 100 34 100 N 307 | P 2 1 1 6 50 200 34 200 N 308 | P 2 1 1 6 50 300 34 300 N 309 | X Pin_1 1 200 300 150 L 50 50 1 1 P 310 | X Pin_2 2 200 200 150 L 50 50 1 1 P 311 | X Pin_3 3 200 100 150 L 50 50 1 1 P 312 | X Pin_4 4 200 0 150 L 50 50 1 1 P 313 | X Pin_5 5 200 -100 150 L 50 50 1 1 P 314 | X Pin_6 6 200 -200 150 L 50 50 1 1 P 315 | X Pin_7 7 200 -300 150 L 50 50 1 1 P 316 | X Pin_8 8 200 -400 150 L 50 50 1 1 P 317 | ENDDRAW 318 | ENDDEF 319 | # 320 | # Connector_Generic_Conn_02x05_Odd_Even 321 | # 322 | DEF Connector_Generic_Conn_02x05_Odd_Even J 0 40 Y N 1 F N 323 | F0 "J" 50 300 50 H V C CNN 324 | F1 "Connector_Generic_Conn_02x05_Odd_Even" 50 -300 50 H V C CNN 325 | F2 "" 0 0 50 H I C CNN 326 | F3 "" 0 0 50 H I C CNN 327 | $FPLIST 328 | Connector*:*_2x??_* 329 | $ENDFPLIST 330 | DRAW 331 | S -50 -195 0 -205 1 1 6 N 332 | S -50 -95 0 -105 1 1 6 N 333 | S -50 5 0 -5 1 1 6 N 334 | S -50 105 0 95 1 1 6 N 335 | S -50 205 0 195 1 1 6 N 336 | S -50 250 150 -250 1 1 10 f 337 | S 150 -195 100 -205 1 1 6 N 338 | S 150 -95 100 -105 1 1 6 N 339 | S 150 5 100 -5 1 1 6 N 340 | S 150 105 100 95 1 1 6 N 341 | S 150 205 100 195 1 1 6 N 342 | X Pin_1 1 -200 200 150 R 50 50 1 1 P 343 | X Pin_10 10 300 -200 150 L 50 50 1 1 P 344 | X Pin_2 2 300 200 150 L 50 50 1 1 P 345 | X Pin_3 3 -200 100 150 R 50 50 1 1 P 346 | X Pin_4 4 300 100 150 L 50 50 1 1 P 347 | X Pin_5 5 -200 0 150 R 50 50 1 1 P 348 | X Pin_6 6 300 0 150 L 50 50 1 1 P 349 | X Pin_7 7 -200 -100 150 R 50 50 1 1 P 350 | X Pin_8 8 300 -100 150 L 50 50 1 1 P 351 | X Pin_9 9 -200 -200 150 R 50 50 1 1 P 352 | ENDDRAW 353 | ENDDEF 354 | # 355 | # Device_C 356 | # 357 | DEF Device_C C 0 10 N Y 1 F N 358 | F0 "C" 25 100 50 H V L CNN 359 | F1 "Device_C" 25 -100 50 H V L CNN 360 | F2 "" 38 -150 50 H I C CNN 361 | F3 "" 0 0 50 H I C CNN 362 | $FPLIST 363 | C_* 364 | $ENDFPLIST 365 | DRAW 366 | P 2 0 1 20 -80 -30 80 -30 N 367 | P 2 0 1 20 -80 30 80 30 N 368 | X ~ 1 0 150 110 D 50 50 1 1 P 369 | X ~ 2 0 -150 110 U 50 50 1 1 P 370 | ENDDRAW 371 | ENDDEF 372 | # 373 | # Device_CP 374 | # 375 | DEF Device_CP C 0 10 N Y 1 F N 376 | F0 "C" 25 100 50 H V L CNN 377 | F1 "Device_CP" 25 -100 50 H V L CNN 378 | F2 "" 38 -150 50 H I C CNN 379 | F3 "" 0 0 50 H I C CNN 380 | $FPLIST 381 | CP_* 382 | $ENDFPLIST 383 | DRAW 384 | S -90 20 -90 40 0 1 0 N 385 | S -90 20 90 20 0 1 0 N 386 | S 90 -20 -90 -40 0 1 0 F 387 | S 90 40 -90 40 0 1 0 N 388 | S 90 40 90 20 0 1 0 N 389 | P 2 0 1 0 -70 90 -30 90 N 390 | P 2 0 1 0 -50 110 -50 70 N 391 | X ~ 1 0 150 110 D 50 50 1 1 P 392 | X ~ 2 0 -150 110 U 50 50 1 1 P 393 | ENDDRAW 394 | ENDDEF 395 | # 396 | # Device_D 397 | # 398 | DEF Device_D D 0 40 N N 1 F N 399 | F0 "D" 0 100 50 H V C CNN 400 | F1 "Device_D" 0 -100 50 H V C CNN 401 | F2 "" 0 0 50 H I C CNN 402 | F3 "" 0 0 50 H I C CNN 403 | $FPLIST 404 | TO-???* 405 | *_Diode_* 406 | *SingleDiode* 407 | D_* 408 | $ENDFPLIST 409 | DRAW 410 | P 2 0 1 8 -50 50 -50 -50 N 411 | P 2 0 1 0 50 0 -50 0 N 412 | P 4 0 1 8 50 50 50 -50 -50 0 50 50 N 413 | X K 1 -150 0 100 R 50 50 1 1 P 414 | X A 2 150 0 100 L 50 50 1 1 P 415 | ENDDRAW 416 | ENDDEF 417 | # 418 | # Device_LED 419 | # 420 | DEF Device_LED D 0 40 N N 1 F N 421 | F0 "D" 0 100 50 H V C CNN 422 | F1 "Device_LED" 0 -100 50 H V C CNN 423 | F2 "" 0 0 50 H I C CNN 424 | F3 "" 0 0 50 H I C CNN 425 | $FPLIST 426 | LED* 427 | LED_SMD:* 428 | LED_THT:* 429 | $ENDFPLIST 430 | DRAW 431 | P 2 0 1 8 -50 -50 -50 50 N 432 | P 2 0 1 0 -50 0 50 0 N 433 | P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N 434 | P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N 435 | P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N 436 | X K 1 -150 0 100 R 50 50 1 1 P 437 | X A 2 150 0 100 L 50 50 1 1 P 438 | ENDDRAW 439 | ENDDEF 440 | # 441 | # Device_R 442 | # 443 | DEF Device_R R 0 0 N Y 1 F N 444 | F0 "R" 80 0 50 V V C CNN 445 | F1 "Device_R" 0 0 50 V V C CNN 446 | F2 "" -70 0 50 V I C CNN 447 | F3 "" 0 0 50 H I C CNN 448 | $FPLIST 449 | R_* 450 | $ENDFPLIST 451 | DRAW 452 | S -40 -100 40 100 0 1 10 N 453 | X ~ 1 0 150 50 D 50 50 1 1 P 454 | X ~ 2 0 -150 50 U 50 50 1 1 P 455 | ENDDRAW 456 | ENDDEF 457 | # 458 | # Device_R_POT 459 | # 460 | DEF Device_R_POT RV 0 40 Y N 1 F N 461 | F0 "RV" -175 0 50 V V C CNN 462 | F1 "Device_R_POT" -100 0 50 V V C CNN 463 | F2 "" 0 0 50 H I C CNN 464 | F3 "" 0 0 50 H I C CNN 465 | $FPLIST 466 | Potentiometer* 467 | $ENDFPLIST 468 | DRAW 469 | S 40 100 -40 -100 0 1 10 N 470 | P 2 0 1 0 100 0 60 0 N 471 | P 4 0 1 0 45 0 90 20 90 -20 45 0 F 472 | X 1 1 0 150 50 D 50 50 1 1 P 473 | X 2 2 150 0 50 L 50 50 1 1 P 474 | X 3 3 0 -150 50 U 50 50 1 1 P 475 | ENDDRAW 476 | ENDDEF 477 | # 478 | # Isolator_PC817 479 | # 480 | DEF Isolator_PC817 U 0 40 Y Y 1 F N 481 | F0 "U" -200 200 50 H V L CNN 482 | F1 "Isolator_PC817" 0 200 50 H V L CNN 483 | F2 "Package_DIP:DIP-4_W7.62mm" -200 -200 50 H I L CIN 484 | F3 "" 0 0 50 H I L CNN 485 | $FPLIST 486 | DIP*W7.62mm* 487 | $ENDFPLIST 488 | DRAW 489 | S -200 150 200 -150 0 1 10 f 490 | P 2 0 1 10 -125 -25 -75 -25 N 491 | P 2 0 1 0 100 25 175 100 N 492 | P 2 0 1 0 175 -100 100 -25 F 493 | P 2 0 1 0 175 -100 200 -100 N 494 | P 2 0 1 0 175 100 200 100 N 495 | P 3 0 1 0 -200 100 -100 100 -100 -25 N 496 | P 3 0 1 0 -100 -25 -100 -100 -200 -100 N 497 | P 3 0 1 20 100 75 100 -75 100 -75 N 498 | P 4 0 1 10 -100 -25 -125 25 -75 25 -100 -25 N 499 | P 5 0 1 0 -20 -20 30 -20 15 -25 15 -15 30 -20 N 500 | P 5 0 1 0 -20 20 30 20 15 15 15 25 30 20 N 501 | P 5 0 1 0 120 -65 140 -45 160 -85 120 -65 120 -65 F 502 | X ~ 1 -300 100 100 R 50 50 1 1 P 503 | X ~ 2 -300 -100 100 R 50 50 1 1 P 504 | X ~ 3 300 -100 100 L 50 50 1 1 P 505 | X ~ 4 300 100 100 L 50 50 1 1 P 506 | ENDDRAW 507 | ENDDEF 508 | # 509 | # Memory_EEPROM_24LC256 510 | # 511 | DEF Memory_EEPROM_24LC256 U 0 20 Y Y 1 F N 512 | F0 "U" -300 250 50 H V C CNN 513 | F1 "Memory_EEPROM_24LC256" 100 -250 50 H V L CNN 514 | F2 "" 0 0 50 H I C CNN 515 | F3 "" 0 0 50 H I C CNN 516 | ALIAS 24LC02 24LC00 24LC04 24LC08 24LC01 24LC512 24LC64 24LC1025 24LC32 24LC256 24LC128 CAT24C256 517 | $FPLIST 518 | DIP*W7.62mm* 519 | SOIC*3.9x4.9mm* 520 | TSSOP*4.4x3mm*P0.65mm* 521 | DFN*3x2mm*P0.5mm* 522 | $ENDFPLIST 523 | DRAW 524 | S -300 200 300 -200 1 1 10 f 525 | X A0 1 -400 100 100 R 50 50 1 1 I 526 | X A1 2 -400 0 100 R 50 50 1 1 I 527 | X A2 3 -400 -100 100 R 50 50 1 1 I 528 | X GND 4 0 -300 100 U 50 50 1 1 W 529 | X SDA 5 400 100 100 L 50 50 1 1 B 530 | X SCL 6 400 0 100 L 50 50 1 1 I 531 | X WP 7 400 -100 100 L 50 50 1 1 I 532 | X VCC 8 0 300 100 D 50 50 1 1 W 533 | ENDDRAW 534 | ENDDEF 535 | # 536 | # Regulator_Linear_L7805 537 | # 538 | DEF Regulator_Linear_L7805 U 0 10 Y Y 1 F N 539 | F0 "U" -150 125 50 H V C CNN 540 | F1 "Regulator_Linear_L7805" 0 125 50 H V L CNN 541 | F2 "" 25 -150 50 H I L CIN 542 | F3 "" 0 -50 50 H I C CNN 543 | ALIAS L7806 L7808 L7885 L7809 L7812 L7815 L7818 L7824 544 | $FPLIST 545 | TO?252* 546 | TO?263* 547 | TO?220* 548 | $ENDFPLIST 549 | DRAW 550 | S -200 75 200 -200 0 1 10 f 551 | X IN 1 -300 0 100 R 50 50 1 1 W 552 | X GND 2 0 -300 100 U 50 50 1 1 W 553 | X OUT 3 300 0 100 L 50 50 1 1 w 554 | ENDDRAW 555 | ENDDEF 556 | # 557 | # Tomarus_Arduino_Nano_v3.x 558 | # 559 | DEF Tomarus_Arduino_Nano_v3.x A 0 40 Y Y 1 F N 560 | F0 "A" -200 1025 50 H V R CNN 561 | F1 "Tomarus_Arduino_Nano_v3.x" -200 950 50 H V R CNN 562 | F2 "Module:Arduino_Nano" 150 -950 50 H I L CNN 563 | F3 "" 0 -1000 50 H I C CNN 564 | ALIAS Arduino_Nano_v2.x 565 | $FPLIST 566 | Arduino*Nano* 567 | $ENDFPLIST 568 | DRAW 569 | S -400 900 400 -900 0 1 10 f 570 | X D1/TX 1 -500 500 100 R 50 50 1 1 B 571 | X D7 10 -500 -100 100 R 50 50 1 1 B 572 | X D8 11 -500 -200 100 R 50 50 1 1 B 573 | X D9 12 -500 -300 100 R 50 50 1 1 B 574 | X D10 13 -500 -400 100 R 50 50 1 1 B 575 | X D11 14 -500 -500 100 R 50 50 1 1 B 576 | X D12 15 -500 -600 100 R 50 50 1 1 B 577 | X D13 16 -500 -700 100 R 50 50 1 1 B 578 | X 3V3 17 100 1000 100 D 50 50 1 1 w 579 | X AREF 18 500 200 100 L 50 50 1 1 I 580 | X A0 19 500 0 100 L 50 50 1 1 B 581 | X D0/RX 2 -500 600 100 R 50 50 1 1 B 582 | X A1 20 500 -100 100 L 50 50 1 1 B 583 | X A2 21 500 -200 100 L 50 50 1 1 B 584 | X A3 22 500 -300 100 L 50 50 1 1 B 585 | X A4 23 500 -400 100 L 50 50 1 1 B 586 | X A5 24 500 -500 100 L 50 50 1 1 B 587 | X A6 25 500 -600 100 L 50 50 1 1 B 588 | X A7 26 500 -700 100 L 50 50 1 1 B 589 | X +5V 27 200 1000 100 D 50 50 1 1 W 590 | X RESET 28 500 600 100 L 50 50 1 1 I 591 | X GND 29 100 -1000 100 U 50 50 1 1 W 592 | X RESET 3 500 500 100 L 50 50 1 1 I 593 | X VIN 30 -100 1000 100 D 50 50 1 1 W 594 | X GND 4 0 -1000 100 U 50 50 1 1 W 595 | X D2 5 -500 400 100 R 50 50 1 1 B 596 | X D3 6 -500 300 100 R 50 50 1 1 B 597 | X D4 7 -500 200 100 R 50 50 1 1 B 598 | X D5 8 -500 100 100 R 50 50 1 1 B 599 | X D6 9 -500 0 100 R 50 50 1 1 B 600 | ENDDRAW 601 | ENDDEF 602 | # 603 | # power_+5V 604 | # 605 | DEF power_+5V #PWR 0 0 Y Y 1 F P 606 | F0 "#PWR" 0 -150 50 H I C CNN 607 | F1 "power_+5V" 0 140 50 H V C CNN 608 | F2 "" 0 0 50 H I C CNN 609 | F3 "" 0 0 50 H I C CNN 610 | DRAW 611 | P 2 0 1 0 -30 50 0 100 N 612 | P 2 0 1 0 0 0 0 100 N 613 | P 2 0 1 0 0 100 30 50 N 614 | X +5V 1 0 0 0 U 50 50 1 1 W N 615 | ENDDRAW 616 | ENDDEF 617 | # 618 | # power_GND 619 | # 620 | DEF power_GND #PWR 0 0 Y Y 1 F P 621 | F0 "#PWR" 0 -250 50 H I C CNN 622 | F1 "power_GND" 0 -150 50 H V C CNN 623 | F2 "" 0 0 50 H I C CNN 624 | F3 "" 0 0 50 H I C CNN 625 | DRAW 626 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 627 | X GND 1 0 0 0 D 50 50 1 1 W N 628 | ENDDRAW 629 | ENDDEF 630 | # 631 | # power_GNDA 632 | # 633 | DEF power_GNDA #PWR 0 0 Y Y 1 F P 634 | F0 "#PWR" 0 -250 50 H I C CNN 635 | F1 "power_GNDA" 0 -150 50 H V C CNN 636 | F2 "" 0 0 50 H I C CNN 637 | F3 "" 0 0 50 H I C CNN 638 | DRAW 639 | P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N 640 | X GNDA 1 0 0 0 D 50 50 1 1 W N 641 | ENDDRAW 642 | ENDDEF 643 | # 644 | # power_PWR_FLAG 645 | # 646 | DEF power_PWR_FLAG #FLG 0 0 N N 1 F P 647 | F0 "#FLG" 0 75 50 H I C CNN 648 | F1 "power_PWR_FLAG" 0 150 50 H V C CNN 649 | F2 "" 0 0 50 H I C CNN 650 | F3 "" 0 0 50 H I C CNN 651 | DRAW 652 | P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N 653 | X pwr 1 0 0 0 U 50 50 0 0 w 654 | ENDDRAW 655 | ENDDEF 656 | # 657 | #End Library 658 | -------------------------------------------------------------------------------- /kicad/midi2cv/midi2cv.pro: -------------------------------------------------------------------------------- 1 | update=Mon 03 Jun 2019 10:24:40 PM CEST 2 | version=1 3 | last_client=kicad 4 | [general] 5 | version=1 6 | RootSch= 7 | BoardNm= 8 | [pcbnew] 9 | version=1 10 | LastNetListRead= 11 | UseCmpFile=1 12 | PadDrill=0.600000000000 13 | PadDrillOvalY=0.600000000000 14 | PadSizeH=1.500000000000 15 | PadSizeV=1.500000000000 16 | PcbTextSizeV=1.500000000000 17 | PcbTextSizeH=1.500000000000 18 | PcbTextThickness=0.300000000000 19 | ModuleTextSizeV=1.000000000000 20 | ModuleTextSizeH=1.000000000000 21 | ModuleTextSizeThickness=0.150000000000 22 | SolderMaskClearance=0.000000000000 23 | SolderMaskMinWidth=0.000000000000 24 | DrawSegmentWidth=0.200000000000 25 | BoardOutlineThickness=0.100000000000 26 | ModuleOutlineThickness=0.150000000000 27 | [cvpcb] 28 | version=1 29 | NetIExt=net 30 | [eeschema] 31 | version=1 32 | LibDir= 33 | [eeschema/libraries] 34 | [schematic_editor] 35 | version=1 36 | PageLayoutDescrFile= 37 | PlotDirectoryName= 38 | SubpartIdSeparator=0 39 | SubpartFirstId=65 40 | NetFmtName= 41 | SpiceAjustPassiveValues=0 42 | LabSize=50 43 | ERC_TestSimilarLabels=1 44 | -------------------------------------------------------------------------------- /kicad/midi2cv/plots/midi2cv-Eco1.User.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2+dfsg1-1~bpo9+1* 2 | G04 #@! TF.CreationDate,2019-05-25T00:57:50+02:00* 3 | G04 #@! TF.ProjectId,midi2cv,6d696469-3263-4762-9e6b-696361645f70,rev?* 4 | G04 #@! TF.SameCoordinates,Original* 5 | G04 #@! TF.FileFunction,Other,ECO1* 6 | %FSLAX46Y46*% 7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 8 | G04 Created by KiCad (PCBNEW 5.0.2+dfsg1-1~bpo9+1) date Sat 25 May 2019 12:57:50 AM CEST* 9 | %MOMM*% 10 | %LPD*% 11 | G01* 12 | G04 APERTURE LIST* 13 | %ADD10C,0.300000*% 14 | %ADD11C,0.150000*% 15 | G04 APERTURE END LIST* 16 | D10* 17 | X67834285Y-22546571D02* 18 | X68334285Y-24046571D01* 19 | X68834285Y-22546571D01* 20 | X69334285Y-23475142D02* 21 | X70477142Y-23475142D01* 22 | X72048571Y-23903714D02* 23 | X71977142Y-23975142D01* 24 | X71762857Y-24046571D01* 25 | X71620000Y-24046571D01* 26 | X71405714Y-23975142D01* 27 | X71262857Y-23832285D01* 28 | X71191428Y-23689428D01* 29 | X71120000Y-23403714D01* 30 | X71120000Y-23189428D01* 31 | X71191428Y-22903714D01* 32 | X71262857Y-22760857D01* 33 | X71405714Y-22618000D01* 34 | X71620000Y-22546571D01* 35 | X71762857Y-22546571D01* 36 | X71977142Y-22618000D01* 37 | X72048571Y-22689428D01* 38 | X73334285Y-23046571D02* 39 | X73334285Y-24046571D01* 40 | X72691428Y-23046571D02* 41 | X72691428Y-23832285D01* 42 | X72762857Y-23975142D01* 43 | X72905714Y-24046571D01* 44 | X73120000Y-24046571D01* 45 | X73262857Y-23975142D01* 46 | X73334285Y-23903714D01* 47 | X73834285Y-23046571D02* 48 | X74405714Y-23046571D01* 49 | X74048571Y-22546571D02* 50 | X74048571Y-23832285D01* 51 | X74120000Y-23975142D01* 52 | X74262857Y-24046571D01* 53 | X74405714Y-24046571D01* 54 | X67834285Y-133290571D02* 55 | X68334285Y-134790571D01* 56 | X68834285Y-133290571D01* 57 | X69334285Y-134219142D02* 58 | X70477142Y-134219142D01* 59 | X72048571Y-134647714D02* 60 | X71977142Y-134719142D01* 61 | X71762857Y-134790571D01* 62 | X71620000Y-134790571D01* 63 | X71405714Y-134719142D01* 64 | X71262857Y-134576285D01* 65 | X71191428Y-134433428D01* 66 | X71120000Y-134147714D01* 67 | X71120000Y-133933428D01* 68 | X71191428Y-133647714D01* 69 | X71262857Y-133504857D01* 70 | X71405714Y-133362000D01* 71 | X71620000Y-133290571D01* 72 | X71762857Y-133290571D01* 73 | X71977142Y-133362000D01* 74 | X72048571Y-133433428D01* 75 | X73334285Y-133790571D02* 76 | X73334285Y-134790571D01* 77 | X72691428Y-133790571D02* 78 | X72691428Y-134576285D01* 79 | X72762857Y-134719142D01* 80 | X72905714Y-134790571D01* 81 | X73120000Y-134790571D01* 82 | X73262857Y-134719142D01* 83 | X73334285Y-134647714D01* 84 | X73834285Y-133790571D02* 85 | X74405714Y-133790571D01* 86 | X74048571Y-133290571D02* 87 | X74048571Y-134576285D01* 88 | X74120000Y-134719142D01* 89 | X74262857Y-134790571D01* 90 | X74405714Y-134790571D01* 91 | D11* 92 | X71120000Y-25400000D02* 93 | X71120000Y-132080000D01* 94 | M02* 95 | -------------------------------------------------------------------------------- /kicad/midi2cv/plots/midi2cv-Edge.Cuts.gbr: -------------------------------------------------------------------------------- 1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,5.0.2+dfsg1-1~bpo9+1* 2 | G04 #@! TF.CreationDate,2019-05-25T00:57:50+02:00* 3 | G04 #@! TF.ProjectId,midi2cv,6d696469-3263-4762-9e6b-696361645f70,rev?* 4 | G04 #@! TF.SameCoordinates,Original* 5 | G04 #@! TF.FileFunction,Profile,NP* 6 | %FSLAX46Y46*% 7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)* 8 | G04 Created by KiCad (PCBNEW 5.0.2+dfsg1-1~bpo9+1) date Sat 25 May 2019 12:57:50 AM CEST* 9 | %MOMM*% 10 | %LPD*% 11 | G01* 12 | G04 APERTURE LIST* 13 | %ADD10C,0.150000*% 14 | G04 APERTURE END LIST* 15 | D10* 16 | X71120000Y-30480000D02* 17 | X71120000Y-127000000D01* 18 | X111760000Y-30480000D02* 19 | X91440000Y-30480000D01* 20 | X111760000Y-127000000D02* 21 | X91440000Y-127000000D01* 22 | X91440000Y-30480000D02* 23 | X30480000Y-30480000D01* 24 | X111760000Y-127000000D02* 25 | X111760000Y-30480000D01* 26 | X30480000Y-127000000D02* 27 | X91440000Y-127000000D01* 28 | X30480000Y-30480000D02* 29 | X30480000Y-127000000D01* 30 | M02* 31 | -------------------------------------------------------------------------------- /kicad/midi2cv/plots/midi2cv-NPTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ;DRILL file {KiCad 5.0.2+dfsg1-1~bpo9+1} date Sat 25 May 2019 12:57:45 AM CEST 3 | ;FORMAT={-:-/ absolute / inch / decimal} 4 | FMAT,2 5 | INCH,TZ 6 | T1C0.0787 7 | T2C0.1378 8 | % 9 | G90 10 | G05 11 | T1 12 | X3.4283Y-1.3744 13 | X3.7748Y-1.3744 14 | T2 15 | X2.6659Y-3.01 16 | T0 17 | M30 18 | -------------------------------------------------------------------------------- /kicad/midi2cv/plots/midi2cv-PTH.drl: -------------------------------------------------------------------------------- 1 | M48 2 | ;DRILL file {KiCad 5.0.2+dfsg1-1~bpo9+1} date Sat 25 May 2019 12:57:45 AM CEST 3 | ;FORMAT={-:-/ absolute / inch / decimal} 4 | FMAT,2 5 | INCH,TZ 6 | T1C0.0157 7 | T2C0.0315 8 | T3C0.0354 9 | T4C0.0394 10 | T5C0.0400 11 | T6C0.0429 12 | T7C0.0433 13 | T8C0.0630 14 | T9C0.0709 15 | % 16 | G90 17 | G05 18 | T1 19 | X1.28Y-1.84 20 | X1.45Y-3.08 21 | X1.48Y-3.01 22 | X1.5Y-3.14 23 | X1.5825Y-3.1309 24 | X1.5954Y-1.9358 25 | X1.6063Y-2.822 26 | X1.61Y-1.82 27 | X1.7062Y-2.359 28 | X1.74Y-2.38 29 | X1.8Y-2.43 30 | X1.8085Y-4.77 31 | X1.81Y-2.1363 32 | X1.89Y-4.77 33 | X1.95Y-1.58 34 | X2.12Y-4.4623 35 | X2.16Y-4.61 36 | X2.29Y-1.89 37 | X3.26Y-1.5 38 | X3.27Y-1.59 39 | X3.37Y-2.35 40 | X3.98Y-2.99 41 | T2 42 | X1.49Y-4.48 43 | X1.49Y-4.78 44 | X3.36Y-2.54 45 | X3.36Y-2.84 46 | X3.27Y-1.43 47 | X3.27Y-1.73 48 | X1.63Y-4.48 49 | X1.63Y-4.78 50 | X1.73Y-4.48 51 | X1.73Y-4.78 52 | X3.36Y-3.14 53 | X3.36Y-3.44 54 | X3.86Y-4.34 55 | X3.86Y-4.64 56 | X3.36Y-2.14 57 | X3.36Y-2.44 58 | X2.17Y-1.4391 59 | X2.17Y-1.5391 60 | X2.17Y-1.6391 61 | X2.17Y-1.7391 62 | X2.17Y-1.8391 63 | X2.17Y-1.9391 64 | X2.17Y-2.0391 65 | X2.47Y-1.4391 66 | X2.47Y-1.5391 67 | X2.47Y-1.6391 68 | X2.47Y-1.7391 69 | X2.47Y-1.8391 70 | X2.47Y-1.9391 71 | X2.47Y-2.0391 72 | X1.36Y-4.48 73 | X1.36Y-4.78 74 | X1.73Y-2.94 75 | X1.73Y-3.24 76 | X1.6Y-2.94 77 | X1.6Y-3.24 78 | X2.02Y-2.22 79 | X2.02Y-2.52 80 | X2.12Y-2.22 81 | X2.12Y-2.52 82 | X2.22Y-2.22 83 | X2.22Y-2.52 84 | X2.32Y-2.22 85 | X2.32Y-2.52 86 | X2.42Y-2.22 87 | X2.42Y-2.52 88 | X2.52Y-2.22 89 | X2.52Y-2.52 90 | X2.62Y-2.22 91 | X2.62Y-2.52 92 | X2.72Y-2.22 93 | X2.72Y-2.52 94 | X1.44Y-3.53 95 | X1.44Y-3.63 96 | X1.44Y-3.73 97 | X1.44Y-3.83 98 | X1.74Y-3.53 99 | X1.74Y-3.63 100 | X1.74Y-3.73 101 | X1.74Y-3.83 102 | X3.86Y-2.54 103 | X3.86Y-2.84 104 | X2.4245Y-4.1723 105 | X2.4245Y-4.2723 106 | X2.4245Y-4.3723 107 | X2.4245Y-4.4723 108 | X2.4245Y-4.5723 109 | X2.4245Y-4.6723 110 | X2.4245Y-4.7723 111 | X2.7245Y-4.1723 112 | X2.7245Y-4.2723 113 | X2.7245Y-4.3723 114 | X2.7245Y-4.4723 115 | X2.7245Y-4.5723 116 | X2.7245Y-4.6723 117 | X2.7245Y-4.7723 118 | X3.86Y-3.94 119 | X3.86Y-4.24 120 | X1.29Y-2.44 121 | X1.29Y-2.54 122 | X1.29Y-2.64 123 | X1.29Y-2.74 124 | X1.29Y-2.84 125 | X1.29Y-2.94 126 | X1.29Y-3.04 127 | X1.29Y-3.14 128 | X1.29Y-3.24 129 | X1.29Y-3.34 130 | X1.29Y-3.44 131 | X1.29Y-3.54 132 | X1.29Y-3.64 133 | X1.29Y-3.74 134 | X1.29Y-3.84 135 | X1.89Y-2.44 136 | X1.89Y-2.54 137 | X1.89Y-2.64 138 | X1.89Y-2.74 139 | X1.89Y-2.84 140 | X1.89Y-2.94 141 | X1.89Y-3.04 142 | X1.89Y-3.14 143 | X1.89Y-3.24 144 | X1.89Y-3.34 145 | X1.89Y-3.44 146 | X1.89Y-3.54 147 | X1.89Y-3.64 148 | X1.89Y-3.74 149 | X1.89Y-3.84 150 | X3.86Y-3.52 151 | X3.86Y-3.82 152 | X2.0145Y-4.1723 153 | X2.0145Y-4.2723 154 | X2.0145Y-4.3723 155 | X2.0145Y-4.4723 156 | X2.0145Y-4.5723 157 | X2.0145Y-4.6723 158 | X2.0145Y-4.7723 159 | X2.3145Y-4.1723 160 | X2.3145Y-4.2723 161 | X2.3145Y-4.3723 162 | X2.3145Y-4.4723 163 | X2.3145Y-4.5723 164 | X2.3145Y-4.6723 165 | X2.3145Y-4.7723 166 | X1.53Y-1.44 167 | X1.53Y-1.54 168 | X1.53Y-1.64 169 | X1.53Y-1.74 170 | X1.53Y-1.84 171 | X1.53Y-1.94 172 | X1.53Y-2.04 173 | X1.83Y-1.44 174 | X1.83Y-1.54 175 | X1.83Y-1.64 176 | X1.83Y-1.74 177 | X1.83Y-1.84 178 | X1.83Y-1.94 179 | X1.83Y-2.04 180 | X3.36Y-3.54 181 | X3.36Y-3.84 182 | X3.86Y-2.14 183 | X3.86Y-2.44 184 | X3.86Y-3.12 185 | X3.86Y-3.42 186 | X3.36Y-4.34 187 | X3.36Y-4.64 188 | X1.39Y-4.35 189 | X1.69Y-4.35 190 | X3.36Y-3.94 191 | X3.36Y-4.24 192 | T3 193 | X3.05Y-1.39 194 | X3.15Y-1.39 195 | T4 196 | X3.5031Y-1.65 197 | X3.6016Y-1.65 198 | X3.7Y-1.65 199 | X1.29Y-1.45 200 | X1.29Y-1.55 201 | X1.29Y-1.65 202 | X1.29Y-1.75 203 | X1.66Y-4.93 204 | X1.76Y-4.93 205 | X1.86Y-4.93 206 | X1.96Y-4.93 207 | X2.06Y-4.93 208 | X2.16Y-4.93 209 | X2.26Y-4.93 210 | X2.36Y-4.93 211 | X2.41Y-1.29 212 | X2.51Y-1.29 213 | X2.61Y-1.29 214 | X2.71Y-1.29 215 | X4.01Y-1.29 216 | X4.11Y-1.29 217 | X4.21Y-1.29 218 | X4.31Y-1.29 219 | X1.3Y-4.22 220 | X1.4Y-4.22 221 | X1.29Y-1.29 222 | X1.39Y-1.29 223 | X1.49Y-1.29 224 | X1.59Y-1.29 225 | X2.89Y-1.29 226 | X2.99Y-1.29 227 | X3.09Y-1.29 228 | X3.19Y-1.29 229 | X3.26Y-4.93 230 | X3.36Y-4.93 231 | X3.46Y-4.93 232 | X3.56Y-4.93 233 | X3.66Y-4.93 234 | X3.76Y-4.93 235 | X3.86Y-4.93 236 | X3.96Y-4.93 237 | X2.89Y-1.45 238 | X2.89Y-1.55 239 | X2.89Y-1.65 240 | X2.89Y-1.75 241 | T5 242 | X2.18Y-3.72 243 | X2.18Y-3.82 244 | X2.28Y-3.72 245 | X2.28Y-3.82 246 | X2.38Y-3.72 247 | X2.38Y-3.82 248 | X2.48Y-3.72 249 | X2.48Y-3.82 250 | X2.58Y-3.72 251 | X2.58Y-3.82 252 | T6 253 | X2.46Y-3.4 254 | X2.56Y-3.4 255 | X2.66Y-3.4 256 | X2.58Y-1.74 257 | X2.58Y-1.84 258 | X2.58Y-1.94 259 | X2.0645Y-4.04 260 | X2.1645Y-4.04 261 | X2.2645Y-4.04 262 | X2.07Y-3.4 263 | X2.17Y-3.4 264 | X2.27Y-3.4 265 | X1.94Y-1.74 266 | X1.94Y-1.84 267 | X1.94Y-1.94 268 | X1.42Y-1.74 269 | X1.42Y-1.84 270 | X1.42Y-1.94 271 | X2.02Y-2.63 272 | X2.12Y-2.63 273 | X2.22Y-2.63 274 | X2.48Y-4.04 275 | X2.58Y-4.04 276 | X2.68Y-4.04 277 | X2.06Y-1.74 278 | X2.06Y-1.84 279 | X2.06Y-1.94 280 | T7 281 | X2.01Y-2.91 282 | X2.01Y-3.01 283 | X2.01Y-3.11 284 | T8 285 | X3.6Y-3.16 286 | X3.1Y-3.16 287 | X3.6Y-1.96 288 | X4.1Y-4.36 289 | X3.6Y-4.36 290 | X3.6Y-2.56 291 | X3.6Y-3.76 292 | X3.1Y-2.56 293 | X3.1Y-4.36 294 | X4.1Y-3.76 295 | X4.1Y-1.96 296 | X3.1Y-1.96 297 | X4.1Y-3.16 298 | X3.1Y-3.76 299 | X4.1Y-2.56 300 | T9 301 | X3.6Y-3.282 302 | X3.6Y-3.6088 303 | X3.1Y-3.282 304 | X3.1Y-3.6088 305 | X3.6Y-2.082 306 | X3.6Y-2.4088 307 | X4.1Y-4.482 308 | X4.1Y-4.8088 309 | X3.6Y-4.482 310 | X3.6Y-4.8088 311 | X3.6Y-2.682 312 | X3.6Y-3.0088 313 | X3.6Y-3.882 314 | X3.6Y-4.2088 315 | X3.1Y-2.682 316 | X3.1Y-3.0088 317 | X3.1Y-4.482 318 | X3.1Y-4.8088 319 | X4.1Y-3.882 320 | X4.1Y-4.2088 321 | X4.1Y-2.082 322 | X4.1Y-2.4088 323 | X3.1Y-2.082 324 | X3.1Y-2.4088 325 | X4.1Y-3.282 326 | X4.1Y-3.6088 327 | X3.1Y-3.882 328 | X3.1Y-4.2088 329 | X4.1Y-2.682 330 | X4.1Y-3.0088 331 | T0 332 | M30 333 | -------------------------------------------------------------------------------- /kicad/midi2cv/plots/midi2cv.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomarus/midi2cv/f4459f32e96db2297f37528a04699a8ae761d4a6/kicad/midi2cv/plots/midi2cv.zip -------------------------------------------------------------------------------- /kicad/midi2cv/trigout.sch: -------------------------------------------------------------------------------- 1 | EESchema Schematic File Version 4 2 | LIBS:midi2cv-cache 3 | EELAYER 26 0 4 | EELAYER END 5 | $Descr A4 11693 8268 6 | encoding utf-8 7 | Sheet 2 2 8 | Title "" 9 | Date "" 10 | Rev "" 11 | Comp "" 12 | Comment1 "" 13 | Comment2 "" 14 | Comment3 "" 15 | Comment4 "" 16 | $EndDescr 17 | $Comp 18 | L 74xx:74HC595 U7 19 | U 1 1 5CD9B07A 20 | P 2450 3550 21 | F 0 "U7" H 2550 4200 50 0000 C CNN 22 | F 1 "74HC595" H 2650 4100 50 0000 C CNN 23 | F 2 "Package_DIP:DIP-16_W7.62mm" H 2450 3550 50 0001 C CNN 24 | F 3 "http://www.ti.com/lit/ds/symlink/sn74hc595.pdf" H 2450 3550 50 0001 C CNN 25 | 1 2450 3550 26 | 1 0 0 -1 27 | $EndComp 28 | $Comp 29 | L Amplifier_Operational:TL074 U6 30 | U 1 1 5CD9B1A4 31 | P 4600 1050 32 | F 0 "U6" H 4600 1417 50 0000 C CNN 33 | F 1 "TL074" H 4600 1326 50 0000 C CNN 34 | F 2 "Package_DIP:DIP-14_W7.62mm" H 4550 1150 50 0001 C CNN 35 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 4650 1250 50 0001 C CNN 36 | 1 4600 1050 37 | 1 0 0 -1 38 | $EndComp 39 | $Comp 40 | L Amplifier_Operational:TL074 U6 41 | U 2 1 5CD9B3A9 42 | P 4600 1750 43 | F 0 "U6" H 4600 2117 50 0000 C CNN 44 | F 1 "TL074" H 4600 2026 50 0000 C CNN 45 | F 2 "Package_DIP:DIP-14_W7.62mm" H 4550 1850 50 0001 C CNN 46 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 4650 1950 50 0001 C CNN 47 | 2 4600 1750 48 | 1 0 0 -1 49 | $EndComp 50 | $Comp 51 | L Amplifier_Operational:TL074 U6 52 | U 3 1 5CD9B429 53 | P 4600 2450 54 | F 0 "U6" H 4600 2817 50 0000 C CNN 55 | F 1 "TL074" H 4600 2726 50 0000 C CNN 56 | F 2 "Package_DIP:DIP-14_W7.62mm" H 4550 2550 50 0001 C CNN 57 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 4650 2650 50 0001 C CNN 58 | 3 4600 2450 59 | 1 0 0 -1 60 | $EndComp 61 | $Comp 62 | L Amplifier_Operational:TL074 U6 63 | U 4 1 5CD9B49E 64 | P 4600 3150 65 | F 0 "U6" H 4600 3517 50 0000 C CNN 66 | F 1 "TL074" H 4600 3426 50 0000 C CNN 67 | F 2 "Package_DIP:DIP-14_W7.62mm" H 4550 3250 50 0001 C CNN 68 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 4650 3350 50 0001 C CNN 69 | 4 4600 3150 70 | 1 0 0 -1 71 | $EndComp 72 | $Comp 73 | L Amplifier_Operational:TL074 U6 74 | U 5 1 5CD9B528 75 | P 1500 6550 76 | F 0 "U6" H 1458 6596 50 0000 L CNN 77 | F 1 "TL074" H 1458 6505 50 0000 L CNN 78 | F 2 "Package_DIP:DIP-14_W7.62mm" H 1450 6650 50 0001 C CNN 79 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 1550 6750 50 0001 C CNN 80 | 5 1500 6550 81 | 1 0 0 -1 82 | $EndComp 83 | $Comp 84 | L Amplifier_Operational:TL074 U8 85 | U 5 1 5CD9B63E 86 | P 2600 6550 87 | F 0 "U8" H 2558 6596 50 0000 L CNN 88 | F 1 "TL074" H 2558 6505 50 0000 L CNN 89 | F 2 "Package_DIP:DIP-14_W7.62mm" H 2550 6650 50 0001 C CNN 90 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 2650 6750 50 0001 C CNN 91 | 5 2600 6550 92 | 1 0 0 -1 93 | $EndComp 94 | $Comp 95 | L Amplifier_Operational:TL074 U8 96 | U 1 1 5CD9B6B4 97 | P 4600 3850 98 | F 0 "U8" H 4600 4217 50 0000 C CNN 99 | F 1 "TL074" H 4600 4126 50 0000 C CNN 100 | F 2 "Package_DIP:DIP-14_W7.62mm" H 4550 3950 50 0001 C CNN 101 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 4650 4050 50 0001 C CNN 102 | 1 4600 3850 103 | 1 0 0 -1 104 | $EndComp 105 | $Comp 106 | L Amplifier_Operational:TL074 U8 107 | U 2 1 5CD9B727 108 | P 4600 4550 109 | F 0 "U8" H 4600 4917 50 0000 C CNN 110 | F 1 "TL074" H 4600 4826 50 0000 C CNN 111 | F 2 "Package_DIP:DIP-14_W7.62mm" H 4550 4650 50 0001 C CNN 112 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 4650 4750 50 0001 C CNN 113 | 2 4600 4550 114 | 1 0 0 -1 115 | $EndComp 116 | $Comp 117 | L Amplifier_Operational:TL074 U8 118 | U 3 1 5CD9B7D9 119 | P 4600 5250 120 | F 0 "U8" H 4600 5617 50 0000 C CNN 121 | F 1 "TL074" H 4600 5526 50 0000 C CNN 122 | F 2 "Package_DIP:DIP-14_W7.62mm" H 4550 5350 50 0001 C CNN 123 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 4650 5450 50 0001 C CNN 124 | 3 4600 5250 125 | 1 0 0 -1 126 | $EndComp 127 | $Comp 128 | L Amplifier_Operational:TL074 U8 129 | U 4 1 5CD9B8C0 130 | P 4600 5950 131 | F 0 "U8" H 4600 6317 50 0000 C CNN 132 | F 1 "TL074" H 4600 6226 50 0000 C CNN 133 | F 2 "Package_DIP:DIP-14_W7.62mm" H 4550 6050 50 0001 C CNN 134 | F 3 "http://www.ti.com/lit/ds/symlink/tl071.pdf" H 4650 6150 50 0001 C CNN 135 | 4 4600 5950 136 | 1 0 0 -1 137 | $EndComp 138 | $Comp 139 | L Connector:AudioJack2_SwitchT J16 140 | U 1 1 5CD9BA73 141 | P 9100 1050 142 | F 0 "J16" H 8920 983 50 0000 R CNN 143 | F 1 "P1" H 8920 1074 50 0000 R CNN 144 | F 2 "Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHoles" H 9100 1050 50 0001 C CNN 145 | F 3 "~" H 9100 1050 50 0001 C CNN 146 | 1 9100 1050 147 | -1 0 0 1 148 | $EndComp 149 | $Comp 150 | L Connector:AudioJack2_SwitchT J17 151 | U 1 1 5CD9BB73 152 | P 9100 1750 153 | F 0 "J17" H 8920 1683 50 0000 R CNN 154 | F 1 "P2" H 8920 1774 50 0000 R CNN 155 | F 2 "Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHoles" H 9100 1750 50 0001 C CNN 156 | F 3 "~" H 9100 1750 50 0001 C CNN 157 | 1 9100 1750 158 | -1 0 0 1 159 | $EndComp 160 | $Comp 161 | L Connector:AudioJack2_SwitchT J18 162 | U 1 1 5CD9BBDF 163 | P 9100 2450 164 | F 0 "J18" H 8920 2383 50 0000 R CNN 165 | F 1 "P3" H 8920 2474 50 0000 R CNN 166 | F 2 "Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHoles" H 9100 2450 50 0001 C CNN 167 | F 3 "~" H 9100 2450 50 0001 C CNN 168 | 1 9100 2450 169 | -1 0 0 1 170 | $EndComp 171 | $Comp 172 | L Connector:AudioJack2_SwitchT J19 173 | U 1 1 5CD9BC21 174 | P 9100 3150 175 | F 0 "J19" H 8920 3083 50 0000 R CNN 176 | F 1 "P4" H 8920 3174 50 0000 R CNN 177 | F 2 "Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHoles" H 9100 3150 50 0001 C CNN 178 | F 3 "~" H 9100 3150 50 0001 C CNN 179 | 1 9100 3150 180 | -1 0 0 1 181 | $EndComp 182 | $Comp 183 | L Connector:AudioJack2_SwitchT J20 184 | U 1 1 5CD9BC61 185 | P 9100 3850 186 | F 0 "J20" H 8920 3783 50 0000 R CNN 187 | F 1 "P5" H 8920 3874 50 0000 R CNN 188 | F 2 "Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHoles" H 9100 3850 50 0001 C CNN 189 | F 3 "~" H 9100 3850 50 0001 C CNN 190 | 1 9100 3850 191 | -1 0 0 1 192 | $EndComp 193 | $Comp 194 | L Connector:AudioJack2_SwitchT J21 195 | U 1 1 5CD9BCA3 196 | P 9100 4550 197 | F 0 "J21" H 8920 4483 50 0000 R CNN 198 | F 1 "P6" H 8920 4574 50 0000 R CNN 199 | F 2 "Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHoles" H 9100 4550 50 0001 C CNN 200 | F 3 "~" H 9100 4550 50 0001 C CNN 201 | 1 9100 4550 202 | -1 0 0 1 203 | $EndComp 204 | $Comp 205 | L Connector:AudioJack2_SwitchT J22 206 | U 1 1 5CD9BCF1 207 | P 9100 5250 208 | F 0 "J22" H 8920 5183 50 0000 R CNN 209 | F 1 "P7" H 8920 5274 50 0000 R CNN 210 | F 2 "Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHoles" H 9100 5250 50 0001 C CNN 211 | F 3 "~" H 9100 5250 50 0001 C CNN 212 | 1 9100 5250 213 | -1 0 0 1 214 | $EndComp 215 | $Comp 216 | L Connector:AudioJack2_SwitchT J23 217 | U 1 1 5CD9BD31 218 | P 9100 5950 219 | F 0 "J23" H 8920 5883 50 0000 R CNN 220 | F 1 "P8" H 8920 5974 50 0000 R CNN 221 | F 2 "Connector_Audio:Jack_3.5mm_QingPu_WQP-PJ398SM_Vertical_CircularHoles" H 9100 5950 50 0001 C CNN 222 | F 3 "~" H 9100 5950 50 0001 C CNN 223 | 1 9100 5950 224 | -1 0 0 1 225 | $EndComp 226 | $Comp 227 | L Device:R R8 228 | U 1 1 5CD9C6D8 229 | P 8550 1050 230 | F 0 "R8" V 8757 1050 50 0000 C CNN 231 | F 1 "100" V 8666 1050 50 0000 C CNN 232 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 8480 1050 50 0001 C CNN 233 | F 3 "~" H 8550 1050 50 0001 C CNN 234 | 1 8550 1050 235 | 0 -1 -1 0 236 | $EndComp 237 | $Comp 238 | L Device:R R9 239 | U 1 1 5CD9C820 240 | P 8550 1750 241 | F 0 "R9" V 8757 1750 50 0000 C CNN 242 | F 1 "100" V 8666 1750 50 0000 C CNN 243 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 8480 1750 50 0001 C CNN 244 | F 3 "~" H 8550 1750 50 0001 C CNN 245 | 1 8550 1750 246 | 0 -1 -1 0 247 | $EndComp 248 | $Comp 249 | L Device:R R10 250 | U 1 1 5CD9CA19 251 | P 8550 2450 252 | F 0 "R10" V 8757 2450 50 0000 C CNN 253 | F 1 "100" V 8666 2450 50 0000 C CNN 254 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 8480 2450 50 0001 C CNN 255 | F 3 "~" H 8550 2450 50 0001 C CNN 256 | 1 8550 2450 257 | 0 -1 -1 0 258 | $EndComp 259 | $Comp 260 | L Device:R R11 261 | U 1 1 5CD9CA6D 262 | P 8550 3150 263 | F 0 "R11" V 8757 3150 50 0000 C CNN 264 | F 1 "100" V 8666 3150 50 0000 C CNN 265 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 8480 3150 50 0001 C CNN 266 | F 3 "~" H 8550 3150 50 0001 C CNN 267 | 1 8550 3150 268 | 0 -1 -1 0 269 | $EndComp 270 | $Comp 271 | L Device:R R12 272 | U 1 1 5CD9CAC5 273 | P 8550 3850 274 | F 0 "R12" V 8757 3850 50 0000 C CNN 275 | F 1 "100" V 8666 3850 50 0000 C CNN 276 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 8480 3850 50 0001 C CNN 277 | F 3 "~" H 8550 3850 50 0001 C CNN 278 | 1 8550 3850 279 | 0 -1 -1 0 280 | $EndComp 281 | $Comp 282 | L Device:R R13 283 | U 1 1 5CD9CB1D 284 | P 8550 4550 285 | F 0 "R13" V 8757 4550 50 0000 C CNN 286 | F 1 "100" V 8666 4550 50 0000 C CNN 287 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 8480 4550 50 0001 C CNN 288 | F 3 "~" H 8550 4550 50 0001 C CNN 289 | 1 8550 4550 290 | 0 -1 -1 0 291 | $EndComp 292 | $Comp 293 | L Device:R R14 294 | U 1 1 5CD9CCF0 295 | P 8550 5250 296 | F 0 "R14" V 8757 5250 50 0000 C CNN 297 | F 1 "100" V 8666 5250 50 0000 C CNN 298 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 8480 5250 50 0001 C CNN 299 | F 3 "~" H 8550 5250 50 0001 C CNN 300 | 1 8550 5250 301 | 0 -1 -1 0 302 | $EndComp 303 | $Comp 304 | L Device:R R15 305 | U 1 1 5CD9CD60 306 | P 8550 5950 307 | F 0 "R15" V 8757 5950 50 0000 C CNN 308 | F 1 "100" V 8666 5950 50 0000 C CNN 309 | F 2 "Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_Horizontal" V 8480 5950 50 0001 C CNN 310 | F 3 "~" H 8550 5950 50 0001 C CNN 311 | 1 8550 5950 312 | 0 -1 -1 0 313 | $EndComp 314 | Text GLabel 1950 3450 0 50 Input ~ 0 315 | +5V 316 | $Comp 317 | L power:GND #PWR031 318 | U 1 1 5CD9DB2C 319 | P 1950 3750 320 | F 0 "#PWR031" H 1950 3500 50 0001 C CNN 321 | F 1 "GND" V 1955 3622 50 0000 R CNN 322 | F 2 "" H 1950 3750 50 0001 C CNN 323 | F 3 "" H 1950 3750 50 0001 C CNN 324 | 1 1950 3750 325 | 0 1 1 0 326 | $EndComp 327 | Text GLabel 2450 2650 1 50 Input ~ 0 328 | +5V 329 | Wire Wire Line 330 | 1950 3750 2050 3750 331 | Wire Wire Line 332 | 2050 3450 1950 3450 333 | Wire Wire Line 334 | 2450 4350 2450 4250 335 | Text GLabel 1950 3150 0 50 Input ~ 0 336 | 595_SER 337 | Text GLabel 1950 3350 0 50 Input ~ 0 338 | 595_SRCLK 339 | Text GLabel 1950 3650 0 50 Input ~ 0 340 | 595_RCLK 341 | Wire Wire Line 342 | 1950 3150 2050 3150 343 | Wire Wire Line 344 | 2050 3350 1950 3350 345 | Wire Wire Line 346 | 1950 3650 2050 3650 347 | Wire Wire Line 348 | 3450 950 4300 950 349 | Wire Wire Line 350 | 3650 2350 4300 2350 351 | Wire Wire Line 352 | 3550 1650 4300 1650 353 | Wire Wire Line 354 | 4300 3050 3750 3050 355 | Wire Wire Line 356 | 3750 3750 4300 3750 357 | Wire Wire Line 358 | 3650 4450 4300 4450 359 | Wire Wire Line 360 | 3550 5150 4300 5150 361 | Wire Wire Line 362 | 3450 5850 4300 5850 363 | Wire Wire Line 364 | 4300 1150 4300 1300 365 | Wire Wire Line 366 | 4300 1300 4900 1300 367 | Wire Wire Line 368 | 4900 1300 4900 1050 369 | Wire Wire Line 370 | 4300 1850 4300 2000 371 | Wire Wire Line 372 | 4300 2000 4900 2000 373 | Wire Wire Line 374 | 4900 2000 4900 1750 375 | Wire Wire Line 376 | 4300 2550 4300 2700 377 | Wire Wire Line 378 | 4300 2700 4900 2700 379 | Wire Wire Line 380 | 4900 2700 4900 2450 381 | Wire Wire Line 382 | 4300 3250 4300 3400 383 | Wire Wire Line 384 | 4300 3400 4900 3400 385 | Wire Wire Line 386 | 4900 3400 4900 3150 387 | Wire Wire Line 388 | 4300 3950 4300 4100 389 | Wire Wire Line 390 | 4300 4100 4900 4100 391 | Wire Wire Line 392 | 4900 4100 4900 3850 393 | Wire Wire Line 394 | 4300 4650 4300 4800 395 | Wire Wire Line 396 | 4300 4800 4900 4800 397 | Wire Wire Line 398 | 4900 4800 4900 4550 399 | Wire Wire Line 400 | 4300 5350 4300 5500 401 | Wire Wire Line 402 | 4300 5500 4900 5500 403 | Wire Wire Line 404 | 4900 5500 4900 5250 405 | Wire Wire Line 406 | 4300 6050 4300 6200 407 | Wire Wire Line 408 | 4300 6200 4900 6200 409 | Wire Wire Line 410 | 4900 6200 4900 5950 411 | Text GLabel 1400 6150 1 50 Input ~ 0 412 | +12V 413 | Text GLabel 2500 6150 1 50 Input ~ 0 414 | +12V 415 | Text GLabel 2500 6950 3 50 Input ~ 0 416 | -12V 417 | Text GLabel 1400 6950 3 50 Input ~ 0 418 | -12V 419 | Wire Wire Line 420 | 8850 6100 8850 6050 421 | Wire Wire Line 422 | 8850 6050 8900 6050 423 | Wire Wire Line 424 | 8900 5350 8850 5350 425 | Wire Wire Line 426 | 8850 5350 8850 5400 427 | Wire Wire Line 428 | 8900 4650 8850 4650 429 | Wire Wire Line 430 | 8850 4650 8850 4700 431 | Wire Wire Line 432 | 8850 4000 8850 3950 433 | Wire Wire Line 434 | 8850 3950 8900 3950 435 | Wire Wire Line 436 | 8900 3250 8850 3250 437 | Wire Wire Line 438 | 8850 3250 8850 3300 439 | Wire Wire Line 440 | 8850 2600 8850 2550 441 | Wire Wire Line 442 | 8850 2550 8900 2550 443 | Wire Wire Line 444 | 8900 1850 8850 1850 445 | Wire Wire Line 446 | 8850 1850 8850 1900 447 | Wire Wire Line 448 | 8850 1200 8850 1150 449 | Wire Wire Line 450 | 8850 1150 8900 1150 451 | NoConn ~ 8900 950 452 | NoConn ~ 8900 1650 453 | NoConn ~ 8900 2350 454 | NoConn ~ 8900 3050 455 | NoConn ~ 8900 3750 456 | NoConn ~ 8900 4450 457 | NoConn ~ 8900 5150 458 | NoConn ~ 8900 5850 459 | NoConn ~ 2850 4050 460 | Wire Wire Line 461 | 5450 3450 5450 3150 462 | Wire Wire Line 463 | 5550 3350 5550 2450 464 | Wire Wire Line 465 | 5650 1750 5650 3250 466 | Wire Wire Line 467 | 5750 3150 5750 1050 468 | Wire Wire Line 469 | 7800 3450 7800 3150 470 | Wire Wire Line 471 | 7700 3350 7700 2450 472 | Wire Wire Line 473 | 7600 1750 7600 3250 474 | Wire Wire Line 475 | 7500 3150 7500 1050 476 | Wire Wire Line 477 | 7800 3550 7800 3850 478 | Wire Wire Line 479 | 5450 3550 5450 3850 480 | Wire Wire Line 481 | 5550 4550 5550 3650 482 | Wire Wire Line 483 | 5650 3750 5650 5250 484 | Wire Wire Line 485 | 5750 5950 5750 3850 486 | Wire Wire Line 487 | 7700 3650 7700 4550 488 | Wire Wire Line 489 | 7600 5250 7600 3750 490 | Wire Wire Line 491 | 7500 3850 7500 5950 492 | Wire Wire Line 493 | 5750 3150 6400 3150 494 | Wire Wire Line 495 | 5650 3250 6400 3250 496 | Wire Wire Line 497 | 5550 3350 6400 3350 498 | Wire Wire Line 499 | 5450 3450 6400 3450 500 | Wire Wire Line 501 | 5450 3550 6400 3550 502 | Wire Wire Line 503 | 5550 3650 6400 3650 504 | Wire Wire Line 505 | 5650 3750 6400 3750 506 | Wire Wire Line 507 | 5750 3850 6400 3850 508 | Wire Wire Line 509 | 5750 1050 4900 1050 510 | Connection ~ 4900 1050 511 | Wire Wire Line 512 | 4900 1750 5650 1750 513 | Connection ~ 4900 1750 514 | Wire Wire Line 515 | 5550 2450 4900 2450 516 | Connection ~ 4900 2450 517 | Wire Wire Line 518 | 4900 3150 5450 3150 519 | Connection ~ 4900 3150 520 | Wire Wire Line 521 | 5450 3850 4900 3850 522 | Connection ~ 4900 3850 523 | Wire Wire Line 524 | 4900 4550 5550 4550 525 | Connection ~ 4900 4550 526 | Wire Wire Line 527 | 5650 5250 4900 5250 528 | Connection ~ 4900 5250 529 | Wire Wire Line 530 | 5750 5950 4900 5950 531 | Connection ~ 4900 5950 532 | Wire Wire Line 533 | 7500 5950 8400 5950 534 | Wire Wire Line 535 | 8700 5950 8900 5950 536 | Wire Wire Line 537 | 8900 5250 8700 5250 538 | Wire Wire Line 539 | 8400 5250 7600 5250 540 | Wire Wire Line 541 | 7700 4550 8400 4550 542 | Wire Wire Line 543 | 8700 4550 8900 4550 544 | Wire Wire Line 545 | 8900 3850 8700 3850 546 | Wire Wire Line 547 | 8400 3850 7800 3850 548 | Wire Wire Line 549 | 7800 3150 8400 3150 550 | Wire Wire Line 551 | 8700 3150 8900 3150 552 | Wire Wire Line 553 | 8900 2450 8700 2450 554 | Wire Wire Line 555 | 8400 2450 7700 2450 556 | Wire Wire Line 557 | 8900 1750 8700 1750 558 | Wire Wire Line 559 | 8400 1750 7600 1750 560 | Wire Wire Line 561 | 7500 1050 8400 1050 562 | Wire Wire Line 563 | 8700 1050 8900 1050 564 | Wire Wire Line 565 | 7500 3150 7000 3150 566 | Wire Wire Line 567 | 7000 3850 7500 3850 568 | Wire Wire Line 569 | 7600 3750 7000 3750 570 | Wire Wire Line 571 | 7000 3650 7700 3650 572 | Wire Wire Line 573 | 7800 3550 7000 3550 574 | Wire Wire Line 575 | 7000 3450 7800 3450 576 | Wire Wire Line 577 | 7700 3350 7000 3350 578 | Wire Wire Line 579 | 7000 3250 7600 3250 580 | Wire Wire Line 581 | 2850 3150 3450 3150 582 | Wire Wire Line 583 | 2850 3250 3550 3250 584 | Wire Wire Line 585 | 2850 3350 3650 3350 586 | Wire Wire Line 587 | 2850 3450 3750 3450 588 | Wire Wire Line 589 | 2850 3550 3750 3550 590 | Wire Wire Line 591 | 2850 3650 3650 3650 592 | Wire Wire Line 593 | 2850 3750 3550 3750 594 | Wire Wire Line 595 | 2850 3850 3450 3850 596 | Wire Wire Line 597 | 3450 3850 3450 5850 598 | Wire Wire Line 599 | 3550 3750 3550 5150 600 | Wire Wire Line 601 | 3650 3650 3650 4450 602 | Wire Wire Line 603 | 3750 3550 3750 3750 604 | Wire Wire Line 605 | 3750 3050 3750 3450 606 | Wire Wire Line 607 | 3650 2350 3650 3350 608 | Wire Wire Line 609 | 3550 1650 3550 3250 610 | Wire Wire Line 611 | 3450 950 3450 3150 612 | Wire Wire Line 613 | 1400 6950 1400 6900 614 | Wire Wire Line 615 | 2500 6850 2500 6900 616 | Wire Wire Line 617 | 1400 6250 1400 6200 618 | $Comp 619 | L Device:C C8 620 | U 1 1 5D1E3762 621 | P 2750 6200 622 | F 0 "C8" V 2600 6200 50 0000 C CNN 623 | F 1 "100nF" V 2900 6200 50 0000 C CNN 624 | F 2 "Tomarus:GenericCap" H 2788 6050 50 0001 C CNN 625 | F 3 "~" H 2750 6200 50 0001 C CNN 626 | 1 2750 6200 627 | 0 1 1 0 628 | $EndComp 629 | Wire Wire Line 630 | 2500 6150 2500 6200 631 | Connection ~ 2500 6200 632 | Wire Wire Line 633 | 2500 6200 2500 6250 634 | $Comp 635 | L power:GND #PWR033 636 | U 1 1 5D1F6BB0 637 | P 3000 6250 638 | F 0 "#PWR033" H 3000 6000 50 0001 C CNN 639 | F 1 "GND" H 3005 6077 50 0000 C CNN 640 | F 2 "" H 3000 6250 50 0001 C CNN 641 | F 3 "" H 3000 6250 50 0001 C CNN 642 | 1 3000 6250 643 | 1 0 0 -1 644 | $EndComp 645 | Wire Wire Line 646 | 3000 6250 3000 6200 647 | $Comp 648 | L Device:C C9 649 | U 1 1 5D1FBCDF 650 | P 2750 6900 651 | F 0 "C9" V 2600 6900 50 0000 C CNN 652 | F 1 "100nF" V 2900 6900 50 0000 C CNN 653 | F 2 "Tomarus:GenericCap" H 2788 6750 50 0001 C CNN 654 | F 3 "~" H 2750 6900 50 0001 C CNN 655 | 1 2750 6900 656 | 0 1 1 0 657 | $EndComp 658 | Connection ~ 2500 6900 659 | Wire Wire Line 660 | 2500 6900 2500 6950 661 | $Comp 662 | L power:GND #PWR034 663 | U 1 1 5D200F66 664 | P 3000 6950 665 | F 0 "#PWR034" H 3000 6700 50 0001 C CNN 666 | F 1 "GND" H 3005 6777 50 0000 C CNN 667 | F 2 "" H 3000 6950 50 0001 C CNN 668 | F 3 "" H 3000 6950 50 0001 C CNN 669 | 1 3000 6950 670 | 1 0 0 -1 671 | $EndComp 672 | Wire Wire Line 673 | 3000 6950 3000 6900 674 | $Comp 675 | L Device:C C6 676 | U 1 1 5D20662C 677 | P 1650 6900 678 | F 0 "C6" V 1500 6900 50 0000 C CNN 679 | F 1 "100nF" V 1800 6900 50 0000 C CNN 680 | F 2 "Tomarus:GenericCap" H 1688 6750 50 0001 C CNN 681 | F 3 "~" H 1650 6900 50 0001 C CNN 682 | 1 1650 6900 683 | 0 1 1 0 684 | $EndComp 685 | Connection ~ 1400 6900 686 | Wire Wire Line 687 | 1400 6900 1400 6850 688 | $Comp 689 | L power:GND #PWR030 690 | U 1 1 5D20BED9 691 | P 1900 6950 692 | F 0 "#PWR030" H 1900 6700 50 0001 C CNN 693 | F 1 "GND" H 1905 6777 50 0000 C CNN 694 | F 2 "" H 1900 6950 50 0001 C CNN 695 | F 3 "" H 1900 6950 50 0001 C CNN 696 | 1 1900 6950 697 | 1 0 0 -1 698 | $EndComp 699 | Wire Wire Line 700 | 1900 6950 1900 6900 701 | $Comp 702 | L Device:C C5 703 | U 1 1 5D211BFC 704 | P 1650 6200 705 | F 0 "C5" V 1500 6200 50 0000 C CNN 706 | F 1 "100nF" V 1800 6200 50 0000 C CNN 707 | F 2 "Tomarus:GenericCap" H 1688 6050 50 0001 C CNN 708 | F 3 "~" H 1650 6200 50 0001 C CNN 709 | 1 1650 6200 710 | 0 1 1 0 711 | $EndComp 712 | Connection ~ 1400 6200 713 | Wire Wire Line 714 | 1400 6200 1400 6150 715 | $Comp 716 | L power:GND #PWR029 717 | U 1 1 5D217B35 718 | P 1900 6250 719 | F 0 "#PWR029" H 1900 6000 50 0001 C CNN 720 | F 1 "GND" H 1905 6077 50 0000 C CNN 721 | F 2 "" H 1900 6250 50 0001 C CNN 722 | F 3 "" H 1900 6250 50 0001 C CNN 723 | 1 1900 6250 724 | 1 0 0 -1 725 | $EndComp 726 | Wire Wire Line 727 | 1900 6250 1900 6200 728 | Wire Wire Line 729 | 1800 6200 1900 6200 730 | Wire Wire Line 731 | 1800 6900 1900 6900 732 | Wire Wire Line 733 | 2900 6900 3000 6900 734 | Wire Wire Line 735 | 2900 6200 3000 6200 736 | Wire Wire Line 737 | 2500 6200 2600 6200 738 | Wire Wire Line 739 | 2500 6900 2600 6900 740 | Wire Wire Line 741 | 1400 6200 1500 6200 742 | Wire Wire Line 743 | 1400 6900 1500 6900 744 | $Comp 745 | L Device:C C7 746 | U 1 1 5D29C9F6 747 | P 2150 2750 748 | F 0 "C7" V 2000 2750 50 0000 C CNN 749 | F 1 "100nF" V 2300 2750 50 0000 C CNN 750 | F 2 "Tomarus:GenericCap" H 2188 2600 50 0001 C CNN 751 | F 3 "~" H 2150 2750 50 0001 C CNN 752 | 1 2150 2750 753 | 0 1 1 0 754 | $EndComp 755 | Wire Wire Line 756 | 2450 2650 2450 2750 757 | Wire Wire Line 758 | 2300 2750 2450 2750 759 | Connection ~ 2450 2750 760 | Wire Wire Line 761 | 2450 2750 2450 2950 762 | $Comp 763 | L power:GND #PWR028 764 | U 1 1 5D2A98B1 765 | P 1900 2750 766 | F 0 "#PWR028" H 1900 2500 50 0001 C CNN 767 | F 1 "GND" V 1905 2622 50 0000 R CNN 768 | F 2 "" H 1900 2750 50 0001 C CNN 769 | F 3 "" H 1900 2750 50 0001 C CNN 770 | 1 1900 2750 771 | 0 1 1 0 772 | $EndComp 773 | Wire Wire Line 774 | 1900 2750 2000 2750 775 | $Comp 776 | L power:GNDA #PWR035 777 | U 1 1 5D2D1E70 778 | P 8850 1200 779 | F 0 "#PWR035" H 8850 950 50 0001 C CNN 780 | F 1 "GNDA" H 8855 1027 50 0000 C CNN 781 | F 2 "" H 8850 1200 50 0001 C CNN 782 | F 3 "" H 8850 1200 50 0001 C CNN 783 | 1 8850 1200 784 | 1 0 0 -1 785 | $EndComp 786 | $Comp 787 | L power:GNDA #PWR036 788 | U 1 1 5D2D1FE5 789 | P 8850 1900 790 | F 0 "#PWR036" H 8850 1650 50 0001 C CNN 791 | F 1 "GNDA" H 8855 1727 50 0000 C CNN 792 | F 2 "" H 8850 1900 50 0001 C CNN 793 | F 3 "" H 8850 1900 50 0001 C CNN 794 | 1 8850 1900 795 | 1 0 0 -1 796 | $EndComp 797 | $Comp 798 | L power:GNDA #PWR037 799 | U 1 1 5D2D2034 800 | P 8850 2600 801 | F 0 "#PWR037" H 8850 2350 50 0001 C CNN 802 | F 1 "GNDA" H 8855 2427 50 0000 C CNN 803 | F 2 "" H 8850 2600 50 0001 C CNN 804 | F 3 "" H 8850 2600 50 0001 C CNN 805 | 1 8850 2600 806 | 1 0 0 -1 807 | $EndComp 808 | $Comp 809 | L power:GNDA #PWR038 810 | U 1 1 5D2D2083 811 | P 8850 3300 812 | F 0 "#PWR038" H 8850 3050 50 0001 C CNN 813 | F 1 "GNDA" H 8855 3127 50 0000 C CNN 814 | F 2 "" H 8850 3300 50 0001 C CNN 815 | F 3 "" H 8850 3300 50 0001 C CNN 816 | 1 8850 3300 817 | 1 0 0 -1 818 | $EndComp 819 | $Comp 820 | L power:GNDA #PWR039 821 | U 1 1 5D2D20D2 822 | P 8850 4000 823 | F 0 "#PWR039" H 8850 3750 50 0001 C CNN 824 | F 1 "GNDA" H 8855 3827 50 0000 C CNN 825 | F 2 "" H 8850 4000 50 0001 C CNN 826 | F 3 "" H 8850 4000 50 0001 C CNN 827 | 1 8850 4000 828 | 1 0 0 -1 829 | $EndComp 830 | $Comp 831 | L power:GNDA #PWR040 832 | U 1 1 5D2D2CF6 833 | P 8850 4700 834 | F 0 "#PWR040" H 8850 4450 50 0001 C CNN 835 | F 1 "GNDA" H 8855 4527 50 0000 C CNN 836 | F 2 "" H 8850 4700 50 0001 C CNN 837 | F 3 "" H 8850 4700 50 0001 C CNN 838 | 1 8850 4700 839 | 1 0 0 -1 840 | $EndComp 841 | $Comp 842 | L power:GNDA #PWR041 843 | U 1 1 5D2D2D45 844 | P 8850 5400 845 | F 0 "#PWR041" H 8850 5150 50 0001 C CNN 846 | F 1 "GNDA" H 8855 5227 50 0000 C CNN 847 | F 2 "" H 8850 5400 50 0001 C CNN 848 | F 3 "" H 8850 5400 50 0001 C CNN 849 | 1 8850 5400 850 | 1 0 0 -1 851 | $EndComp 852 | $Comp 853 | L power:GNDA #PWR042 854 | U 1 1 5D2D2D94 855 | P 8850 6100 856 | F 0 "#PWR042" H 8850 5850 50 0001 C CNN 857 | F 1 "GNDA" H 8855 5927 50 0000 C CNN 858 | F 2 "" H 8850 6100 50 0001 C CNN 859 | F 3 "" H 8850 6100 50 0001 C CNN 860 | 1 8850 6100 861 | 1 0 0 -1 862 | $EndComp 863 | $Comp 864 | L power:GND #PWR032 865 | U 1 1 5CD9DB8F 866 | P 2450 4350 867 | F 0 "#PWR032" H 2450 4100 50 0001 C CNN 868 | F 1 "GND" H 2455 4177 50 0000 C CNN 869 | F 2 "" H 2450 4350 50 0001 C CNN 870 | F 3 "" H 2450 4350 50 0001 C CNN 871 | 1 2450 4350 872 | 1 0 0 -1 873 | $EndComp 874 | $Comp 875 | L Connector:Conn_01x04_Male J14 876 | U 1 1 5CE478A9 877 | P 6600 3350 878 | F 0 "J14" H 6700 2900 50 0000 R CNN 879 | F 1 "Conn_01x04_Male" H 7250 3000 50 0000 R CNN 880 | F 2 "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" H 6600 3350 50 0001 C CNN 881 | F 3 "~" H 6600 3350 50 0001 C CNN 882 | 1 6600 3350 883 | -1 0 0 1 884 | $EndComp 885 | $Comp 886 | L Connector:Conn_01x04_Male J15 887 | U 1 1 5CE47981 888 | P 6600 3750 889 | F 0 "J15" H 6700 4050 50 0000 R CNN 890 | F 1 "Conn_01x04_Male" H 7250 3950 50 0000 R CNN 891 | F 2 "Connector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_Vertical" H 6600 3750 50 0001 C CNN 892 | F 3 "~" H 6600 3750 50 0001 C CNN 893 | 1 6600 3750 894 | -1 0 0 1 895 | $EndComp 896 | $Comp 897 | L Connector:Conn_01x04_Female J24 898 | U 1 1 5CE47D41 899 | P 6800 3350 900 | F 0 "J24" H 6800 2900 50 0000 C CNN 901 | F 1 "Conn_01x04_Female" H 6500 3000 50 0000 C CNN 902 | F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 6800 3350 50 0001 C CNN 903 | F 3 "~" H 6800 3350 50 0001 C CNN 904 | 1 6800 3350 905 | -1 0 0 1 906 | $EndComp 907 | $Comp 908 | L Connector:Conn_01x04_Female J25 909 | U 1 1 5CE47E01 910 | P 6800 3750 911 | F 0 "J25" H 6800 4050 50 0000 C CNN 912 | F 1 "Conn_01x04_Female" H 6500 3950 50 0000 C CNN 913 | F 2 "Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_Vertical" H 6800 3750 50 0001 C CNN 914 | F 3 "~" H 6800 3750 50 0001 C CNN 915 | 1 6800 3750 916 | -1 0 0 1 917 | $EndComp 918 | $EndSCHEMATC 919 | -------------------------------------------------------------------------------- /webconfig/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | trim_trailing_whitespace = true 5 | insert_final_newline = true 6 | end_of_line = lf 7 | indent_style = tab 8 | 9 | [{*.{js,json}}] 10 | indent_style = tab -------------------------------------------------------------------------------- /webconfig/.gitignore: -------------------------------------------------------------------------------- 1 | jspm_packages 2 | node_modules 3 | -------------------------------------------------------------------------------- /webconfig/Makefile: -------------------------------------------------------------------------------- 1 | run: 2 | go run webserver.go 3 | 4 | dist: 5 | mkdir dist 6 | cp index-dist.html dist/index.html 7 | cp favicon.png dist/ 8 | jspm bundle-sfx lib/app.js dist/bundle.js --minify 9 | 10 | clean: 11 | rm -rf dist 12 | -------------------------------------------------------------------------------- /webconfig/README.md: -------------------------------------------------------------------------------- 1 | Web Config for Miarph MIDI2CV 2 | ============================= 3 | 4 | ## Quick Start 5 | 6 | 1. Clone the source code. 7 | 1. Make sure you have jspm installed, if not; `npm install jspm` 8 | 1. Install jspm dependencies, `jspm install` 9 | 1. Start a webserver to serve the index.html or use the supplied go webserver `go run webserver.go` 10 | 11 | ## Building 12 | 13 | 1. `make dist` or use jspm build. 14 | 15 | I'm a NodeJS noob so this is it for now. If you want to work on this project, you probably know how to get it running. 16 | -------------------------------------------------------------------------------- /webconfig/config.js: -------------------------------------------------------------------------------- 1 | System.config({ 2 | baseURL: "/", 3 | defaultJSExtensions: true, 4 | transpiler: "babel", 5 | babelOptions: { 6 | "stage": 0, 7 | "optional": [ 8 | "runtime", 9 | "optimisation.modules.system" 10 | ] 11 | }, 12 | paths: { 13 | "github:*": "jspm_packages/github/*", 14 | "npm:*": "jspm_packages/npm/*" 15 | }, 16 | 17 | map: { 18 | "babel": "npm:babel-core@5.8.38", 19 | "babel-runtime": "npm:babel-runtime@5.8.38", 20 | "bootstrap-less": "github:distros/bootstrap-less@3.3.9", 21 | "core-js": "npm:core-js@1.2.6", 22 | "highcharts": "npm:highcharts@4.2.4", 23 | "history": "npm:history@2.1.0", 24 | "jquery": "npm:jquery@2.2.4", 25 | "less": "npm:systemjs-less-plugin@1.8.1", 26 | "react": "npm:react@15.0.1", 27 | "react-bootstrap": "npm:react-bootstrap@0.29.0", 28 | "react-dom": "npm:react-dom@15.0.1", 29 | "react-redux": "npm:react-redux@4.4.5", 30 | "react-router": "npm:react-router@2.3.0", 31 | "redux": "npm:redux@3.5.1", 32 | "redux-thunk": "npm:redux-thunk@2.0.1", 33 | "github:distros/bootstrap-less@3.3.9": { 34 | "jquery": "github:components/jquery@3.0.0" 35 | }, 36 | "github:jspm/nodelibs-assert@0.1.0": { 37 | "assert": "npm:assert@1.3.0" 38 | }, 39 | "github:jspm/nodelibs-buffer@0.1.0": { 40 | "buffer": "npm:buffer@3.6.0" 41 | }, 42 | "github:jspm/nodelibs-domain@0.1.0": { 43 | "domain-browser": "npm:domain-browser@1.1.7" 44 | }, 45 | "github:jspm/nodelibs-events@0.1.1": { 46 | "events": "npm:events@1.0.2" 47 | }, 48 | "github:jspm/nodelibs-http@1.7.1": { 49 | "Base64": "npm:Base64@0.2.1", 50 | "events": "github:jspm/nodelibs-events@0.1.1", 51 | "inherits": "npm:inherits@2.0.1", 52 | "stream": "github:jspm/nodelibs-stream@0.1.0", 53 | "url": "github:jspm/nodelibs-url@0.1.0", 54 | "util": "github:jspm/nodelibs-util@0.1.0" 55 | }, 56 | "github:jspm/nodelibs-https@0.1.0": { 57 | "https-browserify": "npm:https-browserify@0.0.0" 58 | }, 59 | "github:jspm/nodelibs-os@0.1.0": { 60 | "os-browserify": "npm:os-browserify@0.1.2" 61 | }, 62 | "github:jspm/nodelibs-path@0.1.0": { 63 | "path-browserify": "npm:path-browserify@0.0.0" 64 | }, 65 | "github:jspm/nodelibs-process@0.1.2": { 66 | "process": "npm:process@0.11.2" 67 | }, 68 | "github:jspm/nodelibs-stream@0.1.0": { 69 | "stream-browserify": "npm:stream-browserify@1.0.0" 70 | }, 71 | "github:jspm/nodelibs-string_decoder@0.1.0": { 72 | "string_decoder": "npm:string_decoder@0.10.31" 73 | }, 74 | "github:jspm/nodelibs-url@0.1.0": { 75 | "url": "npm:url@0.10.3" 76 | }, 77 | "github:jspm/nodelibs-util@0.1.0": { 78 | "util": "npm:util@0.10.3" 79 | }, 80 | "github:jspm/nodelibs-zlib@0.1.0": { 81 | "browserify-zlib": "npm:browserify-zlib@0.1.4" 82 | }, 83 | "npm:acorn@1.2.2": { 84 | "fs": "github:jspm/nodelibs-fs@0.1.2", 85 | "path": "github:jspm/nodelibs-path@0.1.0", 86 | "process": "github:jspm/nodelibs-process@0.1.2", 87 | "stream": "github:jspm/nodelibs-stream@0.1.0" 88 | }, 89 | "npm:asap@2.0.3": { 90 | "domain": "github:jspm/nodelibs-domain@0.1.0", 91 | "process": "github:jspm/nodelibs-process@0.1.2" 92 | }, 93 | "npm:assert@1.3.0": { 94 | "util": "npm:util@0.10.3" 95 | }, 96 | "npm:babel-plugin-syntax-flow@6.5.0": { 97 | "babel-runtime": "npm:babel-runtime@5.8.38" 98 | }, 99 | "npm:babel-runtime@5.8.38": { 100 | "process": "github:jspm/nodelibs-process@0.1.2" 101 | }, 102 | "npm:browserify-zlib@0.1.4": { 103 | "assert": "github:jspm/nodelibs-assert@0.1.0", 104 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 105 | "pako": "npm:pako@0.2.8", 106 | "process": "github:jspm/nodelibs-process@0.1.2", 107 | "readable-stream": "npm:readable-stream@2.1.0", 108 | "util": "github:jspm/nodelibs-util@0.1.0" 109 | }, 110 | "npm:buffer@3.6.0": { 111 | "base64-js": "npm:base64-js@0.0.8", 112 | "child_process": "github:jspm/nodelibs-child_process@0.1.0", 113 | "fs": "github:jspm/nodelibs-fs@0.1.2", 114 | "ieee754": "npm:ieee754@1.1.6", 115 | "isarray": "npm:isarray@1.0.0", 116 | "process": "github:jspm/nodelibs-process@0.1.2" 117 | }, 118 | "npm:core-js@1.2.6": { 119 | "fs": "github:jspm/nodelibs-fs@0.1.2", 120 | "path": "github:jspm/nodelibs-path@0.1.0", 121 | "process": "github:jspm/nodelibs-process@0.1.2", 122 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 123 | }, 124 | "npm:core-util-is@1.0.2": { 125 | "buffer": "github:jspm/nodelibs-buffer@0.1.0" 126 | }, 127 | "npm:domain-browser@1.1.7": { 128 | "events": "github:jspm/nodelibs-events@0.1.1", 129 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 130 | }, 131 | "npm:encoding@0.1.12": { 132 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 133 | "iconv-lite": "npm:iconv-lite@0.4.13" 134 | }, 135 | "npm:falafel@1.2.0": { 136 | "acorn": "npm:acorn@1.2.2", 137 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 138 | "foreach": "npm:foreach@2.0.5", 139 | "isarray": "npm:isarray@0.0.1", 140 | "object-keys": "npm:object-keys@1.0.9" 141 | }, 142 | "npm:fbjs@0.8.1": { 143 | "babel-plugin-syntax-flow": "npm:babel-plugin-syntax-flow@6.5.0", 144 | "core-js": "npm:core-js@1.2.6", 145 | "isomorphic-fetch": "npm:isomorphic-fetch@2.2.1", 146 | "loose-envify": "npm:loose-envify@1.1.0", 147 | "process": "github:jspm/nodelibs-process@0.1.2", 148 | "promise": "npm:promise@7.1.1", 149 | "ua-parser-js": "npm:ua-parser-js@0.7.10" 150 | }, 151 | "npm:highcharts@4.2.4": { 152 | "process": "github:jspm/nodelibs-process@0.1.2" 153 | }, 154 | "npm:history@2.1.0": { 155 | "deep-equal": "npm:deep-equal@1.0.1", 156 | "invariant": "npm:invariant@2.2.1", 157 | "process": "github:jspm/nodelibs-process@0.1.2", 158 | "query-string": "npm:query-string@3.0.3", 159 | "warning": "npm:warning@2.1.0" 160 | }, 161 | "npm:https-browserify@0.0.0": { 162 | "http": "github:jspm/nodelibs-http@1.7.1" 163 | }, 164 | "npm:iconv-lite@0.4.13": { 165 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 166 | "process": "github:jspm/nodelibs-process@0.1.2", 167 | "stream": "github:jspm/nodelibs-stream@0.1.0", 168 | "string_decoder": "github:jspm/nodelibs-string_decoder@0.1.0", 169 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 170 | }, 171 | "npm:inherits@2.0.1": { 172 | "util": "github:jspm/nodelibs-util@0.1.0" 173 | }, 174 | "npm:inline-process-browser@2.0.1": { 175 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 176 | "falafel": "npm:falafel@1.2.0", 177 | "process": "github:jspm/nodelibs-process@0.1.2", 178 | "through2": "npm:through2@0.6.5" 179 | }, 180 | "npm:invariant@2.2.1": { 181 | "loose-envify": "npm:loose-envify@1.1.0", 182 | "process": "github:jspm/nodelibs-process@0.1.2" 183 | }, 184 | "npm:isarray@1.0.0": { 185 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 186 | }, 187 | "npm:isomorphic-fetch@2.2.1": { 188 | "node-fetch": "npm:node-fetch@1.5.1", 189 | "whatwg-fetch": "npm:whatwg-fetch@0.11.0" 190 | }, 191 | "npm:lodash-compat@3.10.2": { 192 | "process": "github:jspm/nodelibs-process@0.1.2" 193 | }, 194 | "npm:lodash@4.11.1": { 195 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 196 | "process": "github:jspm/nodelibs-process@0.1.2" 197 | }, 198 | "npm:loose-envify@1.1.0": { 199 | "js-tokens": "npm:js-tokens@1.0.3", 200 | "process": "github:jspm/nodelibs-process@0.1.2", 201 | "stream": "github:jspm/nodelibs-stream@0.1.0", 202 | "util": "github:jspm/nodelibs-util@0.1.0" 203 | }, 204 | "npm:node-fetch@1.5.1": { 205 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 206 | "encoding": "npm:encoding@0.1.12", 207 | "http": "github:jspm/nodelibs-http@1.7.1", 208 | "https": "github:jspm/nodelibs-https@0.1.0", 209 | "is-stream": "npm:is-stream@1.1.0", 210 | "stream": "github:jspm/nodelibs-stream@0.1.0", 211 | "url": "github:jspm/nodelibs-url@0.1.0", 212 | "util": "github:jspm/nodelibs-util@0.1.0", 213 | "zlib": "github:jspm/nodelibs-zlib@0.1.0" 214 | }, 215 | "npm:os-browserify@0.1.2": { 216 | "os": "github:jspm/nodelibs-os@0.1.0" 217 | }, 218 | "npm:pako@0.2.8": { 219 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 220 | "process": "github:jspm/nodelibs-process@0.1.2" 221 | }, 222 | "npm:path-browserify@0.0.0": { 223 | "process": "github:jspm/nodelibs-process@0.1.2" 224 | }, 225 | "npm:process-nextick-args@1.0.6": { 226 | "process": "github:jspm/nodelibs-process@0.1.2" 227 | }, 228 | "npm:process@0.11.2": { 229 | "assert": "github:jspm/nodelibs-assert@0.1.0" 230 | }, 231 | "npm:promise@7.1.1": { 232 | "asap": "npm:asap@2.0.3", 233 | "fs": "github:jspm/nodelibs-fs@0.1.2" 234 | }, 235 | "npm:punycode@1.3.2": { 236 | "process": "github:jspm/nodelibs-process@0.1.2" 237 | }, 238 | "npm:query-string@3.0.3": { 239 | "strict-uri-encode": "npm:strict-uri-encode@1.1.0" 240 | }, 241 | "npm:react-bootstrap@0.29.0": { 242 | "babel-runtime": "npm:babel-runtime@5.8.38", 243 | "classnames": "npm:classnames@2.2.3", 244 | "dom-helpers": "npm:dom-helpers@2.4.0", 245 | "invariant": "npm:invariant@2.2.1", 246 | "keycode": "npm:keycode@2.1.1", 247 | "lodash-compat": "npm:lodash-compat@3.10.2", 248 | "process": "github:jspm/nodelibs-process@0.1.2", 249 | "react": "npm:react@15.0.1", 250 | "react-dom": "npm:react-dom@15.0.1", 251 | "react-overlays": "npm:react-overlays@0.6.3", 252 | "react-prop-types": "npm:react-prop-types@0.3.0", 253 | "uncontrollable": "npm:uncontrollable@3.2.3", 254 | "warning": "npm:warning@2.1.0" 255 | }, 256 | "npm:react-dom@15.0.1": { 257 | "react": "npm:react@15.0.1" 258 | }, 259 | "npm:react-overlays@0.6.3": { 260 | "classnames": "npm:classnames@2.2.3", 261 | "dom-helpers": "npm:dom-helpers@2.4.0", 262 | "react": "npm:react@15.0.1", 263 | "react-dom": "npm:react-dom@15.0.1", 264 | "react-prop-types": "npm:react-prop-types@0.2.2", 265 | "warning": "npm:warning@2.1.0" 266 | }, 267 | "npm:react-prop-types@0.2.2": { 268 | "warning": "npm:warning@2.1.0" 269 | }, 270 | "npm:react-prop-types@0.3.0": { 271 | "warning": "npm:warning@2.1.0" 272 | }, 273 | "npm:react-redux@4.4.5": { 274 | "hoist-non-react-statics": "npm:hoist-non-react-statics@1.0.5", 275 | "invariant": "npm:invariant@2.2.1", 276 | "lodash": "npm:lodash@4.11.1", 277 | "loose-envify": "npm:loose-envify@1.1.0", 278 | "process": "github:jspm/nodelibs-process@0.1.2", 279 | "react": "npm:react@15.0.1", 280 | "redux": "npm:redux@3.5.1" 281 | }, 282 | "npm:react-router@2.3.0": { 283 | "history": "npm:history@2.1.0", 284 | "invariant": "npm:invariant@2.2.1", 285 | "process": "github:jspm/nodelibs-process@0.1.2", 286 | "warning": "npm:warning@2.1.0" 287 | }, 288 | "npm:react@15.0.1": { 289 | "fbjs": "npm:fbjs@0.8.1", 290 | "loose-envify": "npm:loose-envify@1.1.0", 291 | "object-assign": "npm:object-assign@4.0.1", 292 | "process": "github:jspm/nodelibs-process@0.1.2" 293 | }, 294 | "npm:readable-stream@1.0.34": { 295 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 296 | "core-util-is": "npm:core-util-is@1.0.2", 297 | "events": "github:jspm/nodelibs-events@0.1.1", 298 | "inherits": "npm:inherits@2.0.1", 299 | "isarray": "npm:isarray@0.0.1", 300 | "process": "github:jspm/nodelibs-process@0.1.2", 301 | "stream-browserify": "npm:stream-browserify@1.0.0", 302 | "string_decoder": "npm:string_decoder@0.10.31" 303 | }, 304 | "npm:readable-stream@1.1.14": { 305 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 306 | "core-util-is": "npm:core-util-is@1.0.2", 307 | "events": "github:jspm/nodelibs-events@0.1.1", 308 | "inherits": "npm:inherits@2.0.1", 309 | "isarray": "npm:isarray@0.0.1", 310 | "process": "github:jspm/nodelibs-process@0.1.2", 311 | "stream-browserify": "npm:stream-browserify@1.0.0", 312 | "string_decoder": "npm:string_decoder@0.10.31" 313 | }, 314 | "npm:readable-stream@2.1.0": { 315 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 316 | "core-util-is": "npm:core-util-is@1.0.2", 317 | "events": "github:jspm/nodelibs-events@0.1.1", 318 | "inherits": "npm:inherits@2.0.1", 319 | "inline-process-browser": "npm:inline-process-browser@2.0.1", 320 | "isarray": "npm:isarray@1.0.0", 321 | "process": "github:jspm/nodelibs-process@0.1.2", 322 | "process-nextick-args": "npm:process-nextick-args@1.0.6", 323 | "stream": "github:jspm/nodelibs-stream@0.1.0", 324 | "string_decoder": "npm:string_decoder@0.10.31", 325 | "unreachable-branch-transform": "npm:unreachable-branch-transform@0.5.1", 326 | "util-deprecate": "npm:util-deprecate@1.0.2" 327 | }, 328 | "npm:recast@0.11.5": { 329 | "assert": "github:jspm/nodelibs-assert@0.1.0", 330 | "ast-types": "npm:ast-types@0.8.16", 331 | "esprima": "npm:esprima@2.7.2", 332 | "os": "github:jspm/nodelibs-os@0.1.0", 333 | "private": "npm:private@0.1.6", 334 | "process": "github:jspm/nodelibs-process@0.1.2", 335 | "source-map": "npm:source-map@0.5.3" 336 | }, 337 | "npm:redux@3.5.1": { 338 | "lodash": "npm:lodash@4.11.1", 339 | "lodash-es": "npm:lodash-es@4.11.1", 340 | "loose-envify": "npm:loose-envify@1.1.0", 341 | "process": "github:jspm/nodelibs-process@0.1.2", 342 | "symbol-observable": "npm:symbol-observable@0.2.2" 343 | }, 344 | "npm:source-map@0.5.3": { 345 | "process": "github:jspm/nodelibs-process@0.1.2" 346 | }, 347 | "npm:stream-browserify@1.0.0": { 348 | "events": "github:jspm/nodelibs-events@0.1.1", 349 | "inherits": "npm:inherits@2.0.1", 350 | "readable-stream": "npm:readable-stream@1.1.14" 351 | }, 352 | "npm:string_decoder@0.10.31": { 353 | "buffer": "github:jspm/nodelibs-buffer@0.1.0" 354 | }, 355 | "npm:through2@0.6.5": { 356 | "process": "github:jspm/nodelibs-process@0.1.2", 357 | "readable-stream": "npm:readable-stream@1.0.34", 358 | "util": "github:jspm/nodelibs-util@0.1.0", 359 | "xtend": "npm:xtend@4.0.1" 360 | }, 361 | "npm:ua-parser-js@0.7.10": { 362 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 363 | }, 364 | "npm:uncontrollable@3.2.3": { 365 | "invariant": "npm:invariant@2.2.1", 366 | "process": "github:jspm/nodelibs-process@0.1.2", 367 | "react": "npm:react@15.0.1" 368 | }, 369 | "npm:unreachable-branch-transform@0.5.1": { 370 | "esmangle-evaluator": "npm:esmangle-evaluator@1.0.0", 371 | "recast": "npm:recast@0.11.5", 372 | "stream": "github:jspm/nodelibs-stream@0.1.0", 373 | "util": "github:jspm/nodelibs-util@0.1.0" 374 | }, 375 | "npm:url@0.10.3": { 376 | "assert": "github:jspm/nodelibs-assert@0.1.0", 377 | "punycode": "npm:punycode@1.3.2", 378 | "querystring": "npm:querystring@0.2.0", 379 | "util": "github:jspm/nodelibs-util@0.1.0" 380 | }, 381 | "npm:util-deprecate@1.0.2": { 382 | "util": "github:jspm/nodelibs-util@0.1.0" 383 | }, 384 | "npm:util@0.10.3": { 385 | "inherits": "npm:inherits@2.0.1", 386 | "process": "github:jspm/nodelibs-process@0.1.2" 387 | }, 388 | "npm:warning@2.1.0": { 389 | "loose-envify": "npm:loose-envify@1.1.0", 390 | "process": "github:jspm/nodelibs-process@0.1.2" 391 | }, 392 | "npm:xtend@4.0.1": { 393 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 394 | } 395 | } 396 | }); 397 | -------------------------------------------------------------------------------- /webconfig/css/main.less: -------------------------------------------------------------------------------- 1 | @import '../jspm_packages/github/distros/bootstrap-less@3.3.9/bootstrap/bootstrap.less'; 2 | @import "./variables.less"; 3 | @import "./theme.less"; 4 | -------------------------------------------------------------------------------- /webconfig/css/theme.less: -------------------------------------------------------------------------------- 1 | // Custom 3.3.5 2 | // Bootswatch 3 | // ----------------------------------------------------- 4 | 5 | 6 | // Navbar ===================================================================== 7 | 8 | // Buttons ==================================================================== 9 | 10 | // Typography ================================================================= 11 | 12 | // Tables ===================================================================== 13 | 14 | // Forms ====================================================================== 15 | 16 | // Navs ======================================================================= 17 | 18 | // Indicators ================================================================= 19 | 20 | // Progress bars ============================================================== 21 | 22 | // Containers ================================================================= 23 | 24 | body { 25 | overflow-x: hidden; 26 | /*padding: 82px 0 8px 0;*/ 27 | } 28 | 29 | .btn { 30 | /*border-radius: 0 !important;*/ 31 | } 32 | 33 | .panel { 34 | /*border: none;*/ 35 | } 36 | 37 | .navbar-brand { 38 | color: #eee; 39 | } 40 | 41 | .nav > li > a { 42 | padding: 4px; 43 | border: 1px dotted @gray-dark; 44 | } 45 | 46 | .nav > li.selected { 47 | background: @gray; 48 | } 49 | 50 | .nav > li > a { 51 | color: @gray-lighter; 52 | } 53 | 54 | .nav > li > a:hover { 55 | background: @gray; 56 | } 57 | 58 | //.nav > li.selected > a { 59 | // color: @gray-lighter; 60 | //} 61 | 62 | .btn:focus, a:focus { 63 | outline: none; 64 | } 65 | 66 | .table { 67 | padding-bottom: 0px; 68 | margin-bottom: 5px; 69 | } 70 | 71 | .panel { 72 | padding-bottom: 0px; 73 | margin-bottom: 2px; 74 | } 75 | 76 | .panel-header { 77 | font-size: 10pt; 78 | color: #aaa; 79 | font-weight: bold; 80 | } 81 | 82 | .form-control-inline { 83 | min-width: 0; 84 | width: 6em; 85 | display: inline; 86 | } 87 | 88 | .form-control-inline input[type="text"] { 89 | border: 0px; 90 | background-color: #333; 91 | color: #eee; 92 | } 93 | 94 | select:not([multiple]) { 95 | border-radius: 1px; 96 | margin-left: 3px; 97 | margin-right: 3px; 98 | } 99 | 100 | select.square:not([multiple]) { 101 | border: 0px; 102 | line-height: 1; 103 | height: 20px; 104 | border-radius: 0px; 105 | background-color: #333; 106 | color: #eee; 107 | margin-left: 0px; 108 | margin-right: 0px; 109 | 110 | -webkit-appearance: none; 111 | -moz-appearance: none; 112 | background-position: right 50%; 113 | background-repeat: no-repeat; 114 | background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAMCAYAAABSgIzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZFNDEwNjlGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZFNDEwNkFGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkU0MTA2N0Y3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkU0MTA2OEY3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuGsgwQAAAA5SURBVHjaYvz//z8DOYCJgUxAf42MQIzTk0D/M+KzkRGPoQSdykiKJrBGpOhgJFYTWNEIiEeAAAMAzNENEOH+do8AAAAASUVORK5CYII=); 115 | 116 | _padding: 0px; 117 | padding-left: .5em; 118 | padding-right: 1.5em; 119 | } 120 | -------------------------------------------------------------------------------- /webconfig/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tomarus/midi2cv/f4459f32e96db2297f37528a04699a8ae761d4a6/webconfig/favicon.png -------------------------------------------------------------------------------- /webconfig/index-dist.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Miarph Webconfig 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /webconfig/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Miarph Webconfig 8 | 9 | 10 | 11 | 12 | 13 | 14 | 17 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /webconfig/lib/app.js: -------------------------------------------------------------------------------- 1 | console.log('Launching app..') 2 | 3 | import React from 'react' 4 | import ReactDOM from 'react-dom' 5 | import {Route, Router} from 'react-router' 6 | import {Provider} from 'react-redux' 7 | 8 | import store from 'lib/store/store' 9 | 10 | import Homepage from 'lib/home' 11 | 12 | import 'css/main.less!less' 13 | 14 | import { useRouterHistory } from 'react-router' 15 | import { createHashHistory } from 'history' 16 | const appHistory = useRouterHistory(createHashHistory)({ queryKey: false }) 17 | 18 | import {InitMIDI} from 'lib/midi/midi' 19 | InitMIDI(store) 20 | 21 | ReactDOM.render( 22 | 23 | 24 | 25 | 26 | , document.getElementById('react-div')) 27 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectArpSync.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {FormControl, FormGroup} from 'react-bootstrap' 3 | 4 | export default ((props) => 5 | 6 | { props.onChange(props.index, parseInt(e.target.value, 10)) }}> 8 | 9 | 10 | {[...Array(96).keys()].map((index) => 11 | 12 | )} 13 | 14 | 15 | ) 16 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectChannel.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { FormControl, FormGroup } from 'react-bootstrap' 3 | 4 | export default ((props) => 5 | 6 | { props.onChange(props.index, parseInt(e.target.value, 10)) }}> 8 | 9 | {[...Array(16).keys()].map((index) => 10 | 11 | )} 12 | 13 | 14 | ) 15 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectControlChange.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {FormControl, FormGroup} from 'react-bootstrap' 3 | import {connect} from 'react-redux' 4 | import data from 'lib/midi/data' 5 | 6 | const mapStateToProps = (state, props) => ({ 7 | inputs: state.midi.inputs 8 | }) 9 | 10 | const hex = val => { 11 | let hex = val.toString(16) 12 | while (hex.length < 2) hex = '0' + hex 13 | return '0x' + hex 14 | } 15 | 16 | export default connect(mapStateToProps)((props) => 17 | 18 | { props.onChange(props.index, parseInt(e.target.value, 10)) }}> 20 | 21 | {data.Controllers.map((input, index) => 22 | 23 | )} 24 | 25 | 26 | ) 27 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectNote.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Button, ButtonGroup, Form, FormControl, FormGroup} from 'react-bootstrap' 3 | 4 | import {Note} from 'lib/midi/util' 5 | 6 | export default class extends React.Component { 7 | static propTypes = { 8 | note: React.PropTypes.number, 9 | onChange: React.PropTypes.func 10 | } 11 | 12 | state = { 13 | notes: [], 14 | note: 48 15 | } 16 | 17 | componentDidMount () { 18 | let notes = [] 19 | notes.push(()) 20 | notes.push(()) 21 | for (let i = 1; i<127; i++) { 22 | notes.push(()) 23 | } 24 | this.setState({notes, note: this.props.note}) 25 | } 26 | 27 | componentWillReceiveProps (props) { 28 | if (props.note !== this.state.note) { 29 | this.setState({note: props.note}) 30 | } 31 | } 32 | 33 | setNote (note) { 34 | if (note < 0 || note > 127) return 35 | this.setState({note}) 36 | this.props.onChange(note) 37 | } 38 | 39 | handleChange = (event) => { 40 | let note = parseInt(event.target.value, 10) 41 | this.setNote(note) 42 | } 43 | 44 | render () { 45 | return ( 46 | 47 | 48 | {this.state.notes} 49 | 50 | 51 | ) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectNumber.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {FormControl, FormGroup} from 'react-bootstrap' 3 | 4 | export default ((props) => 5 | 6 | { props.onChange(props.index, parseInt(e.target.value, 10)) }}> 8 | 9 | {[...Array(props.max-props.min+1).keys()].map((index) => 10 | 11 | )} 12 | 13 | 14 | ) 15 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectOutputDevice.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {FormControl, FormGroup} from 'react-bootstrap' 3 | import {connect} from 'react-redux' 4 | 5 | const mapStateToProps = (state, props) => ({ 6 | outputs: state.midi.outputs 7 | }) 8 | 9 | export default connect(mapStateToProps)((props) => 10 | 11 | { props.onChange(parseInt(e.target.value, 10)) }}> 13 | {props.outputs.map((output, index) => 14 | 15 | )} 16 | 17 | 18 | ) 19 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectPortClock.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default ((props) => 4 | 11 | ) 12 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectPortMode.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export default ((props) => 4 | 12 | ) 13 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectPortTrigger.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {FormControl, FormGroup} from 'react-bootstrap' 3 | 4 | import data from 'lib/midi/data' 5 | 6 | export default ((props) => 7 | 8 | { props.onChange(props.index, parseInt(e.target.value, 10)) }}> 10 | 11 | {data.GMPercussion.map((value, index) => 12 | 13 | )} 14 | 15 | 16 | ) 17 | -------------------------------------------------------------------------------- /webconfig/lib/comps/selectTranspose.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {FormControl, FormGroup} from 'react-bootstrap' 3 | 4 | export default ((props) => 5 | 6 | { props.onChange(props.index, parseInt(e.target.value, 10)) }}> 8 | 9 | {[...Array(127).keys()].map((index) => 10 | 11 | )} 12 | 13 | 14 | ) 15 | -------------------------------------------------------------------------------- /webconfig/lib/home.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {connect} from 'react-redux' 3 | 4 | import {Col, Jumbotron, Navbar, Nav, Row} from 'react-bootstrap' 5 | 6 | import Config from 'lib/panels/config/configPanel' 7 | import Monitor from 'lib/panels/monitor' 8 | 9 | const mapStateToProps = (state) => ({ 10 | status: state.midi.status, 11 | error: state.midi.error 12 | }) 13 | 14 | const Navigation = () => 15 | 16 | 17 | 18 | 19 | 20 |   21 | Webconfig for Miarph MIDI2CV Eurorack module 22 | 23 | 24 | 25 | 26 | 27 | 36 | 37 | 38 | 39 | const Main = () => 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | const Init = () => 52 |

Initializing...

53 | 54 | const Error = (props) => 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 |

No MIDI Available

63 |

This website requires Web MIDI and atleast one MIDI port.

64 |

For more information on Web MIDI visit https://www.midi.org/articles/about-web-midi

65 |

View this project on github.

66 |

67 | If you really think this is an error, you might view your console output to see any error mesages returned from the MIDI system. 68 | 69 | 70 |
71 |
72 | 73 | 74 |
75 | 76 | @connect(mapStateToProps) 77 | export default class extends React.Component { 78 | render () { 79 | let content 80 | if (this.props.error !== '') { 81 | content = () 82 | } else if (this.props.status === 0) { 83 | content = () 84 | } else { 85 | content = (
) 86 | } 87 | 88 | return ( 89 |
90 | 91 | {content} 92 |
93 | ) 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /webconfig/lib/midi/data.js: -------------------------------------------------------------------------------- 1 | const Status = [ 2 | 'Note Off', 3 | 'Note On', 4 | 'Poly Press', 5 | 'Controller', 6 | 'Program Change', 7 | 'Channel Pressure', 8 | 'Pitch Bend' 9 | ] 10 | 11 | const System = [ 12 | 'System Exclusive', 13 | 'Time Code', 14 | 'Song Position', 15 | 'Song Select', 16 | 'Unknown System 04', 17 | 'Unknown System 05', 18 | 'Tune Request', 19 | 'EOX', 20 | 'Clock Tick', 21 | 'Unknown System 09', 22 | 'Start', 23 | 'Continue', 24 | 'Stop', 25 | 'Unknown System 0d', 26 | 'Active Sensing', 27 | 'System Reset' 28 | ] 29 | // offset is note 35 (0x23) 30 | const GMPercussion = [ 31 | 'Bass Drum 2', 32 | 'Bass Drum 1', 33 | 'Side Stick/Rimshot', 34 | 'Snare Drum 1', 35 | 'Hand Clap', 36 | 'Snare Drum 2', 37 | 'Low Tom 2', 38 | 'Closed Hi-hat', 39 | 'Low Tom 1', 40 | 'Pedal Hi-hat', 41 | 'Mid Tom 2', 42 | 'Open Hi-hat', 43 | 'Mid Tom 1', 44 | 'High Tom 2', 45 | 'Crash Cymbal 1', 46 | 'High Tom 1', 47 | 'Ride Cymbal 1', 48 | 'Chinese Cymbal', 49 | 'Ride Bell', 50 | 'Tambourine', 51 | 'Splash Cymbal', 52 | 'Cowbell', 53 | 'Crash Cymbal 2', 54 | 'Vibra Slap', 55 | 'Ride Cymbal 2', 56 | 'High Bongo', 57 | 'Low Bongo', 58 | 'Mute High Conga', 59 | 'Open High Conga', 60 | 'Low Conga', 61 | 'High Timbale', 62 | 'Low Timbale', 63 | 'High Agogô', 64 | 'Low Agogô', 65 | 'Cabasa', 66 | 'Maracas', 67 | 'Short Whistle', 68 | 'Long Whistle', 69 | 'Short Güiro', 70 | 'Long Güiro', 71 | 'Claves', 72 | 'High Wood Block', 73 | 'Low Wood Block', 74 | 'Mute Cuíca', 75 | 'Open Cuíca', 76 | 'Mute Triangle', 77 | 'Open Triangle' 78 | ] 79 | 80 | let Controllers = [ 81 | 'Bank Select', // 0x00 82 | 'Mod Wheel', 83 | 'Breath', 84 | 'Unknown CC 03', 85 | 'Foot Ctrlr', 86 | 'Portamento', 87 | 'Data MSB', 88 | 'Volume', 89 | 'Balance', // 0x08 90 | 'Unknown CC 09', 91 | 'Pan', 92 | 'Expression', 93 | 'Effect 1', 94 | 'Effect 2', 95 | 'Unknown CC 0e', 96 | 'Unknown CC 0f', 97 | 'General 1', // 0x10 98 | 'General 2', 99 | 'General 3', 100 | 'General 4', 101 | 'Unknown CC 14', 102 | 'Unknown CC 15', 103 | 'Unknown CC 16', 104 | 'Unknown CC 17', 105 | 'Unknown CC 18', // 0x18 106 | 'Unknown CC 19', 107 | 'Unknown CC 1a', 108 | 'Unknown CC 1b', 109 | 'Unknown CC 1c', 110 | 'Unknown CC 1d', 111 | 'Unknown CC 1e', 112 | 'Unknown CC 1f', 113 | 'Ctrlr 00 LSB', // 0x20 114 | 'Ctrlr 01 LSB', 115 | 'Ctrlr 02 LSB', 116 | 'Ctrlr 03 LSB', 117 | 'Ctrlr 04 LSB', 118 | 'Ctrlr 05 LSB', 119 | 'Ctrlr 06 LSB', 120 | 'Ctrlr 07 LSB', 121 | 'Ctrlr 08 LSB', 122 | 'Ctrlr 09 LSB', 123 | 'Ctrlr 0a LSB', 124 | 'Ctrlr 0b LSB', 125 | 'Ctrlr 0c LSB', 126 | 'Ctrlr 0d LSB', 127 | 'Ctrlr 0e LSB', 128 | 'Ctrlr 0f LSB', 129 | 'Ctrlr 10 LSB', // 0x30 130 | 'Ctrlr 11 LSB', 131 | 'Ctrlr 12 LSB', 132 | 'Ctrlr 13 LSB', 133 | 'Ctrlr 14 LSB', 134 | 'Ctrlr 15 LSB', 135 | 'Ctrlr 16 LSB', 136 | 'Ctrlr 17 LSB', 137 | 'Ctrlr 18 LSB', 138 | 'Ctrlr 19 LSB', 139 | 'Ctrlr 1a LSB', 140 | 'Ctrlr 1b LSB', 141 | 'Ctrlr 1c LSB', 142 | 'Ctrlr 1d LSB', 143 | 'Ctrlr 1e LSB', 144 | 'Ctrlr 1f LSB', 145 | 'Sustain', // 0x40 146 | 'Portamento', 147 | 'Sustenuto', 148 | 'Soft', 149 | 'Legato', 150 | 'Hold 2', 151 | 'Sound Ctrl 1', 152 | 'Sound Ctrl 2', 153 | 'Sound Ctrl 3', // 0x48 154 | 'Sound Ctrl 4', 155 | 'Sound Ctrl 5', 156 | 'Sound Ctrl 6', 157 | 'Sound Ctrl 7', 158 | 'Sound Ctrl 8', 159 | 'Sound Ctrl 9', 160 | 'Sound Ctrl 10', 161 | 'Switch 1', // 0x50 162 | 'Switch 2', 163 | 'Switch 3', 164 | 'Switch 4', 165 | 'Portamento CC', 166 | 'Unknown CC 55', 167 | 'Unknown CC 56', 168 | 'Unknown CC 57', 169 | 'Unknown CC 58', // 0x58 170 | 'Unknown CC 59', 171 | 'Unknown CC 5a', 172 | 'Effect 1 Depth', 173 | 'Effect 2 Depth', 174 | 'Effect 3 Depth', 175 | 'Effect 4 Depth', 176 | 'Effect 5 Depth', 177 | 'Data Increment', // 0x60 178 | 'Data Decrement', 179 | 'Custom LSB', 180 | 'Custom MSB', 181 | 'Registered LSB', 182 | 'Registered MSB', 183 | 'Unknown CC 66', 184 | 'Unknown CC 67', 185 | 'Unknown CC 68', // 0x68 186 | 'Unknown CC 69', 187 | 'Unknown CC 6a', 188 | 'Unknown CC 6b', 189 | 'Unknown CC 6c', 190 | 'Unknown CC 6d', 191 | 'Unknown CC 6e', 192 | 'Unknown CC 6f', 193 | 'Unknown CC 70', // 0x70 194 | 'Unknown CC 71', 195 | 'Unknown CC 72', 196 | 'Unknown CC 73', 197 | 'Unknown CC 74', 198 | 'Unknown CC 75', 199 | 'Unknown CC 76', 200 | 'Unknown CC 77', 201 | 'Unknown CC 78', // 0x78 202 | 'Reset All CC', 203 | 'Local Control', 204 | 'All Notes Off', 205 | 'Omni Mode Off', 206 | 'Omni Mode On', 207 | 'Mono Mode', 208 | 'Poly Mode' 209 | ] 210 | 211 | const data = {Controllers, GMPercussion, Status, System} 212 | export default data 213 | -------------------------------------------------------------------------------- /webconfig/lib/midi/midi.js: -------------------------------------------------------------------------------- 1 | import { Hex } from 'lib/midi/util' 2 | 3 | import { setErrorAction, setMidiAction, setPortsAction, setStatusAction } from 'lib/store/midi' 4 | import { setConfigAction, setOutputDeviceAction, setPortModeAction, setPortClockAction, setPortTriggerAction, setDeviceIdAction} from 'lib/store/config' 5 | 6 | let midiAccess = null 7 | let store 8 | let listeners = [] 9 | let outputDevices= [] 10 | let outputDevice = 0 11 | 12 | function onMIDISuccess(access) { 13 | console.log('MIDI System Initialized') 14 | midiAccess = access 15 | store.dispatch(setMidiAction(access)) 16 | refreshDevices(access) 17 | } 18 | 19 | function onMIDIFailure(msg) { 20 | console.error('Failed to get MIDI access', msg) 21 | store.dispatch(setErrorAction('Failed to initialize MIDI: ' + msg)) 22 | } 23 | 24 | function refreshDevices(midiAccess) { 25 | let inputs = [] 26 | let outputs = [] 27 | 28 | let iter = midiAccess.inputs.values() 29 | for (let i = iter.next(); i && !i.done; i = iter.next()) { 30 | i.value.hex = Hex(i.value.id) 31 | i.value.onmidimessage = listener 32 | inputs.push(i.value) 33 | } 34 | 35 | iter = midiAccess.outputs.values() 36 | for (let i = iter.next(); i && !i.done; i = iter.next()) { 37 | i.value.hex = Hex(i.value.id) 38 | outputs.push(i.value) 39 | } 40 | 41 | store.dispatch(setPortsAction(inputs, outputs)) 42 | if (outputs.length === 0) { 43 | store.dispatch(setErrorAction('Can not find any MIDI ports. Make sure you have atleast one MIDI device connected to your computer.')) 44 | return 45 | } 46 | outputDevices = outputs 47 | store.dispatch(setStatusAction(1)) 48 | } 49 | 50 | // listener is our global midi input listener 51 | // parses and dispatches msgs to separate listeners 52 | function listener(event) { 53 | let status = parseInt(event.data[0], 10) 54 | 55 | let channel = 0 56 | if (status >= 0x80 && status < 0xf0) { 57 | channel = status & 15 58 | } 59 | 60 | let ev = { 61 | timestamp: event.timeStamp, 62 | data: event.data, 63 | source: event.target, 64 | status: status, 65 | channel: channel 66 | } 67 | 68 | listeners.forEach((f) => { f(ev) }) 69 | } 70 | 71 | export function AddListener(f) { 72 | listeners.push(f) 73 | } 74 | 75 | export function RemoveListener(f) { 76 | let i = listeners.indexOf(f) 77 | if (i > -1) { 78 | listeners.splice(i, 1) 79 | } 80 | } 81 | 82 | export function RefreshMidi() { 83 | if (midiAccess !== null) { 84 | let iter = midiAccess.inputs.values() 85 | for (let i = iter.next(); i && !i.done; i = iter.next()) { 86 | i.value.onmidimessage = null 87 | } 88 | } 89 | 90 | if (navigator.requestMIDIAccess === undefined) { 91 | store.dispatch(setErrorAction('Unsupported Browser')) 92 | return 93 | } 94 | 95 | navigator.requestMIDIAccess({ sysex: true }).then(onMIDISuccess, onMIDIFailure) 96 | } 97 | 98 | export function MidiOUTAll(bytes) { 99 | midiAccess.outputs.forEach((output) => { 100 | output.send(bytes) 101 | }) 102 | } 103 | 104 | export function MidiOUT(device, bytes) { 105 | device.send(bytes) 106 | } 107 | 108 | var deviceID = 0x4f 109 | 110 | function MidiOUTAddress(address, value) { 111 | MidiOUT(outputDevices[outputDevice], [ 112 | 0xf0, 0x7d, // sysex, non commercial / educational manufacturer id. 113 | 0x2a, deviceID, // my own little secret magic number id for this device. 114 | 0x01, // COMMAND 0x01 = write config byte. 115 | address & 0x7f, // write address to configure. 116 | value & 0x7f, // write value to configure. 117 | 0xf7 // mark end of sysex. 118 | ]) 119 | } 120 | 121 | // Forwards to all devices except name 122 | export function MidiOUTForward(name, bytes) { 123 | midiAccess.outputs.forEach((output) => { 124 | if (output.name !== name) { 125 | output.send(bytes) 126 | } 127 | }) 128 | } 129 | 130 | export function InitMIDI(newStore) { 131 | store = newStore 132 | RefreshMidi() 133 | } 134 | 135 | export function SetConfigAddress(address, value) { 136 | if (value == -1) { 137 | return 138 | } 139 | MidiOUTAddress(address, value) 140 | store.dispatch(setConfigAction(address, value)) 141 | } 142 | 143 | export function SetOutputDevice(device) { 144 | outputDevice = device 145 | store.dispatch(setOutputDeviceAction(device)) 146 | } 147 | 148 | export function SetPortMode(index, value) { 149 | if (value == -1) { 150 | return 151 | } 152 | // See arduino/eeprom.h, 16 is address of modes 153 | MidiOUTAddress(16 + index, value) 154 | store.dispatch(setPortModeAction(index, value)) 155 | } 156 | 157 | export function SetPortClock(index, value) { 158 | if (value == -1) { 159 | return 160 | } 161 | // See arduino/eeprom.h, 32 is address of clocks 162 | MidiOUTAddress(32 + index, value) 163 | store.dispatch(setPortClockAction(index, value)) 164 | } 165 | 166 | export function SetPortTrigger(index, value) { 167 | if (value == -1) { 168 | return 169 | } 170 | // See arduino/eeprom.h, 24 is address of triggers 171 | MidiOUTAddress(24 + index, value) 172 | store.dispatch(setPortTriggerAction(index, value)) 173 | } 174 | 175 | export function SetDeviceID(id) { 176 | store.dispatch(setDeviceIdAction(id)) 177 | deviceID = id 178 | } -------------------------------------------------------------------------------- /webconfig/lib/midi/util.js: -------------------------------------------------------------------------------- 1 | import data from 'lib/midi/data' 2 | 3 | export function Pad (num, places) { 4 | let zero = places - num.toString().length + 1 5 | return Array(+(zero > 0 && zero)).join('0') + num 6 | } 7 | 8 | export function Timestamp (time) { 9 | let t = window.performance.timing.fetchStart + time 10 | let d = new Date(t) 11 | let opts = { 12 | hour12: false 13 | } 14 | return d.toLocaleTimeString('en-us', opts) + '.' + Pad((t % 1000).toFixed(0), 3) 15 | } 16 | 17 | let notes = ['C-', 'C#', 'D-', 'D#', 'E-', 'F-', 'F#', 'G-', 'G#', 'A-', 'A#', 'B-'] 18 | 19 | export function Note (note) { 20 | return notes[note % 12] + (Math.round(note / 12 - 0.5)) 21 | } 22 | 23 | // Hex formats an integer to a hex string. 24 | export function Hex (value) { 25 | let num = parseInt(value) 26 | if (num < 0) { 27 | num = 0xFFFFFFFF + num + 1 28 | } 29 | return num.toString(16) 30 | } 31 | 32 | // Status returns a string from a status value. 33 | export function Status (msg) { 34 | let base = msg.status >> 4 & 15 35 | switch (base) { 36 | case 0x8: 37 | case 0x9: 38 | return data.Status[base - 8] + ' ' + Note(msg.data[1]) 39 | case 0xb: 40 | let c = parseInt(msg.data[1], 10) 41 | return 'CC ' + msg.data[1] + ' ' + data.Controllers[c] 42 | case 0xf: 43 | return data.System[msg.status & 15] 44 | default: 45 | return data.Status[base - 8] 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /webconfig/lib/panels/config/configPanel.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Col, Panel} from 'react-bootstrap' 3 | import {connect} from 'react-redux' 4 | 5 | import ConfigTable from 'lib/panels/config/configTable' 6 | 7 | const mapStateToProps = (state) => { 8 | return { 9 | inputs: state.midi.inputs 10 | } 11 | } 12 | 13 | const ConfigPanelHeader = () => 14 |
15 | Setup Configuration 16 |
17 | 18 | 19 | export default connect(mapStateToProps)((props) => 20 |
21 | 22 |
23 | ) 24 | -------------------------------------------------------------------------------- /webconfig/lib/panels/config/configTable.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { connect } from 'react-redux' 3 | import { Col, Panel, Row } from 'react-bootstrap' 4 | 5 | import { SetConfigAddress, SetOutputDevice, SetPortMode, SetPortClock, SetPortTrigger, SetDeviceID } from 'lib/midi/midi' 6 | 7 | import SelectArpSync from 'lib/comps/selectArpSync' 8 | import SelectChannel from 'lib/comps/selectChannel' 9 | import SelectControlChange from 'lib/comps/selectControlChange' 10 | import SelectNote from 'lib/comps/selectNote' 11 | import SelectNumber from 'lib/comps/selectNumber' 12 | import SelectOutputDevice from 'lib/comps/selectOutputDevice' 13 | import SelectPortClock from 'lib/comps/selectPortClock' 14 | import SelectPortMode from 'lib/comps/selectPortMode' 15 | import SelectPortTrigger from 'lib/comps/selectPortTrigger' 16 | import SelectTranspose from 'lib/comps/selectTranspose' 17 | 18 | const mapStateToProps = (state) => { 19 | return { 20 | device: state.config.device, 21 | deviceid: state.config.deviceid, 22 | split: state.config.split, 23 | ch1: state.config.channel1, 24 | ch2: state.config.channel2, 25 | transpose1: state.config.transpose1, 26 | transpose2: state.config.transpose2, 27 | cc1: state.config.cc1, 28 | cc2: state.config.cc2, 29 | ccch1: state.config.ccchannel1, 30 | ccch2: state.config.ccchannel2, 31 | pitchbend1: state.config.pitchbend1, 32 | pitchbend2: state.config.pitchbend2, 33 | midi1sync: state.config.midi1sync, 34 | midi2sync: state.config.midi2sync, 35 | clockticks: state.config.clockticks, 36 | portmodes: state.config.portmodes, 37 | porttriggers: state.config.porttriggers, 38 | portclocks: state.config.portclocks, 39 | } 40 | } 41 | 42 | const mapDispatchToProps = (dispatch) => ({ 43 | handleSplit(split) { SetConfigAddress(1, split) }, // addr 0x01 44 | handleChannel(index, channel) { SetConfigAddress(1 + index, channel) }, // addr 0x02 45 | handleTranspose(index, transpose) { SetConfigAddress(3 + index, transpose) }, // addr 0x04 46 | handleCC(index, control) { SetConfigAddress(5 + index, control) }, // addr 0x06 47 | handleCCChannel(index, channel) { SetConfigAddress(7 + index, channel) }, // addr 0x08 48 | handlePitchbend(index, pitchbend) { SetConfigAddress(9 + index, pitchbend) }, // addr 0x0a 49 | handleArpSync(index, sync) { SetConfigAddress(11 + index, sync) }, // addr 0x0c 50 | handleClockSync(index, sync) { SetConfigAddress(14, sync) }, // addr 0x0e 51 | handleOutputDevice(device) { SetOutputDevice(device) }, 52 | handleDeviceID(dummy, id) { SetDeviceID(id) }, 53 | handlePortClock(index, clock) { SetPortClock(index, clock) }, 54 | handlePortMode(index, mode) { SetPortMode(index, mode) }, 55 | handlePortTrigger(index, trigger) { SetPortTrigger(index, trigger) } 56 | }) 57 | 58 | const Channel = connect(mapStateToProps, mapDispatchToProps)((props) => 59 | CV + Gate Output {props.index}}> 60 | 61 | MIDI Channel 62 | 63 | 67 | 68 | 69 | 70 | Transpose 71 | 72 | 76 | 77 | 78 | 79 | Pitchbend nr of notes 80 | 81 | 87 | 88 | 89 | 90 | Arpeggiator Speed clockticks 91 | 92 | 96 | 97 | 98 | 99 | ) 100 | 101 | const Control = connect(mapStateToProps, mapDispatchToProps)((props) => 102 | Control Change Output {props.index}}> 103 | 104 | MIDI Channel 105 | 106 | 110 | 111 | 112 | 113 | Control Change 114 | 115 | 119 | 120 | 121 | 122 | ) 123 | 124 | const Port = connect(mapStateToProps, mapDispatchToProps)((props) => 125 | Port {props.index + 1}}> 126 | 127 | Port Mode 128 | 129 | 133 | 134 | 135 | { props.mode === 1 ? 136 | 137 | Trigger Note 138 | 139 | 143 | 144 | 145 | : '' } 146 | { props.mode === 0 ? 147 | 148 | Clock Divider 149 | 150 | 154 | 155 | 156 | : '' } 157 | 158 | ) 159 | 160 | const Global = connect(mapStateToProps, mapDispatchToProps)((props) => 161 | Global Options}> 162 | 163 | Webconfig Output Device 164 | 165 | 168 | 169 | 170 | 171 | Miarph Device ID 172 | 173 | 179 | 180 | 181 | 182 | Split at Note 183 | 184 | 187 | 188 | 189 | 190 | Clock Divider MIDI Clock Ticks 191 | 192 | 198 | 199 | 200 | 201 | ) 202 | 203 | export default connect(mapStateToProps, mapDispatchToProps)((props) => 204 |
205 | 206 | 207 | 208 | 214 | 220 | 224 | 228 | 229 | 230 | {[...Array(8).keys()].map((index) => 231 | 238 | )} 239 | 240 | 241 |
242 | ) -------------------------------------------------------------------------------- /webconfig/lib/panels/monitor.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Button, ButtonGroup, Col, Panel, Row} from 'react-bootstrap' 3 | import {connect} from 'react-redux' 4 | 5 | import {AddListener, RemoveListener} from 'lib/midi/midi' 6 | import {Status, Timestamp} from 'lib/midi/util' 7 | import Sortable from 'lib/util/sortable' 8 | 9 | const mapStateToProps = (state) => { 10 | return { 11 | inputs: state.midi.inputs 12 | } 13 | } 14 | 15 | @connect(mapStateToProps) 16 | export default class Monitor extends React.Component { 17 | static propTypes = { 18 | inputs: React.PropTypes.array 19 | } 20 | 21 | state = { 22 | visible: false, 23 | msgs: [], 24 | headers: [ 25 | { id: 'timestamp', name: 'Time' }, 26 | { id: 'port', name: 'Port' }, 27 | { id: 'channel', name: 'Channel' }, 28 | { id: 'type', name: 'Type' }, 29 | { id: 'bytes', name: 'Bytes' }, 30 | { id: 'count', name: 'Count' } 31 | ] 32 | } 33 | 34 | componentDidMount () { 35 | AddListener(this.handleMidiMessage) 36 | } 37 | 38 | componentWillUnmount () { 39 | RemoveListener(this.handleMidiMessage) 40 | } 41 | 42 | handleMidiMessage = (msg) => { 43 | if (msg.status === 0xf8 || !this.state.visible) { 44 | return 45 | } 46 | 47 | let bytes = '' 48 | for (let i = 0; i < msg.data.length; i++) { 49 | bytes += '0x' + msg.data[i].toString(16) + ' ' 50 | } 51 | msg.bytes = bytes 52 | msg.port = msg.source.name 53 | msg.timestamp = Timestamp(msg.timestamp) 54 | msg.type = Status(msg) 55 | msg.channel += 1 // for display only 56 | msg.count = 1 57 | 58 | let m = this.state.msgs 59 | let match = false 60 | m.map((k) => { 61 | if (k.port === msg.port && k.type === msg.type && k.channel === msg.channel) { 62 | k.timestamp = msg.timestamp 63 | k.bytes = msg.bytes 64 | k.count++ 65 | match = true 66 | } 67 | }) 68 | if (!match) { 69 | if (m.length > 10) { 70 | m = m.slice(m.length - 10, m.length) 71 | } 72 | m.push(msg) 73 | } 74 | this.setState({msgs: m}) 75 | } 76 | 77 | clear = () => { 78 | this.setState({msgs: []}) 79 | } 80 | 81 | handleRefresh = () => { 82 | console.log('doei') 83 | } 84 | 85 | toggleView = () => { 86 | this.setState({visible: !this.state.visible}) 87 | } 88 | 89 | render () { 90 | let toggleIcon = this.state.visible ? 'fa fa-minus' : 'fa fa-plus' 91 | let textClass = this.state.visible ? 'default' : 'text-muted' 92 | 93 | let title = ( 94 | 95 | 96 | 97 | MIDI Monitor 98 | 99 | 100 |
101 | 102 |
103 | 104 |
) 105 | 106 | if (!this.state.visible) { 107 | return () 108 | } 109 | 110 | return (
111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 |
) 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /webconfig/lib/store/config.js: -------------------------------------------------------------------------------- 1 | const SET_ADDRESS = 'config/SET_ADDRESS' 2 | const SET_DEVICE = 'config/SET_DEVICE' 3 | const SET_DEVICE_ID = 'config/SET_DEVICE_ID' 4 | 5 | const SET_PORT_CLOCK = 'config/SET_PORT_CLOCK' 6 | const SET_PORT_MODE = 'config/SET_PORT_MODE' 7 | const SET_PORT_TRIGGER = 'config/SET_PORT_TRIGGER' 8 | 9 | const initialState = { 10 | device: 0, 11 | deviceid: 0x4f, 12 | split: -1, 13 | channel1: 0, 14 | channel2: 0, 15 | transpose1: 0, 16 | transpose2: 0, 17 | cc1: -1, 18 | cc2: -1, 19 | ccchannel1: 0, 20 | ccchannel2: 0, 21 | pitchbend1: -1, 22 | pitchbend2: -1, 23 | midi1sync: -1, 24 | midi2sync: -1, 25 | clockticks: -1, 26 | portmodes: [ -1, -1, -1, -1, -1, -1, -1, -1 ], 27 | porttriggers: [ -1, -1, -1, -1, -1, -1, -1, -1 ], 28 | portclocks: [ -1, -1, -1, -1, -1, -1, -1, -1 ], 29 | } 30 | 31 | export const setConfigAction = (address, value) => ({ 32 | type: SET_ADDRESS, address, value 33 | }) 34 | 35 | export const setOutputDeviceAction = (device) => ({ 36 | type: SET_DEVICE, device 37 | }) 38 | 39 | export const setDeviceIdAction = (id) => ({ 40 | type: SET_DEVICE_ID, id 41 | }) 42 | 43 | export const setPortModeAction = (index, value) => ({ 44 | type: SET_PORT_MODE, index, value 45 | }) 46 | 47 | export const setPortClockAction = (index, value) => ({ 48 | type: SET_PORT_CLOCK, index, value 49 | }) 50 | 51 | export const setPortTriggerAction = (index, value) => ({ 52 | type: SET_PORT_TRIGGER, index, value 53 | }) 54 | 55 | // 56 | 57 | const reducer = (state = initialState, action = {}) => { 58 | let newState = Object.assign({}, state) 59 | 60 | switch (action.type) { 61 | case SET_DEVICE: 62 | newState.device = action.value 63 | break 64 | case SET_DEVICE_ID: 65 | newState.deviceid = action.id 66 | break 67 | case SET_PORT_CLOCK: 68 | newState.portclocks = state.portclocks.map((item, j) => { 69 | return action.index === j ? action.value : item 70 | }) 71 | break 72 | case SET_PORT_MODE: 73 | newState.portmodes = state.portmodes.map((item, j) => { 74 | return action.index === j ? action.value : item 75 | }) 76 | break 77 | case SET_PORT_TRIGGER: 78 | newState.porttriggers = state.porttriggers.map((item, j) => { 79 | return action.index === j ? action.value : item 80 | }) 81 | break 82 | case SET_ADDRESS: 83 | switch (action.address) { 84 | case 0x01: 85 | newState.split = action.value 86 | break 87 | case 0x02: 88 | newState.channel1 = action.value 89 | break 90 | case 0x03: 91 | newState.channel2 = action.value 92 | break 93 | case 0x04: 94 | newState.transpose1 = action.value 95 | break 96 | case 0x05: 97 | newState.transpose2 = action.value 98 | break 99 | case 0x06: 100 | newState.cc1 = action.value 101 | break 102 | case 0x07: 103 | newState.cc2 = action.value 104 | break 105 | case 0x08: 106 | newState.ccchannel1 = action.value 107 | break 108 | case 0x09: 109 | newState.ccchannel2 = action.value 110 | break 111 | case 0x0a: 112 | newState.pitchbend1 = action.value 113 | break 114 | case 0x0b: 115 | newState.pitchbend2 = action.value 116 | break 117 | case 0x0c: 118 | newState.midi1sync = action.value 119 | break 120 | case 0x0d: 121 | newState.midi2sync = action.value 122 | break 123 | case 0x0e: 124 | newState.clockticks = action.value 125 | break 126 | } 127 | } 128 | return newState 129 | } 130 | 131 | export default reducer 132 | -------------------------------------------------------------------------------- /webconfig/lib/store/midi.js: -------------------------------------------------------------------------------- 1 | import {RefreshMidi} from 'lib/midi/midi' 2 | 3 | const REFRESH = 'midi/REFRESH' 4 | const STATUS = 'midi/STATUS' 5 | const ERROR = 'midi/ERROR' 6 | const SET_MIDI = 'midi/SET_DEVICES' 7 | const SET_PORTS = 'midi/SET_PORTS' 8 | 9 | let initialState = { 10 | status: 0, 11 | error: '', 12 | midi: null, 13 | inbpm: 0, // received/calculated bpm 14 | inputs: [], 15 | outputs: [], 16 | } 17 | 18 | export const refreshMidiAction = () => ({ 19 | type: REFRESH 20 | }) 21 | 22 | export const setStatusAction = (status) => ({ 23 | type: STATUS, status 24 | }) 25 | 26 | export const setErrorAction = (error) => ({ 27 | type: ERROR, error 28 | }) 29 | 30 | export const setMidiAction = (midi) => ({ 31 | type: SET_MIDI, midi 32 | }) 33 | 34 | // export const sysOutAction = (index, sysOut) => ({ 35 | // type: SYSOUT, index, sysOut 36 | // }) 37 | 38 | export const setPortsAction = (inputs, outputs) => ({ 39 | type: SET_PORTS, inputs, outputs 40 | }) 41 | 42 | export default function reducer (state = initialState, action = {}) { 43 | let newState = Object.assign({}, state) 44 | 45 | switch (action.type) { 46 | 47 | case REFRESH: 48 | RefreshMidi() 49 | return state 50 | 51 | case STATUS: 52 | newState.status = action.status 53 | return newState 54 | 55 | case ERROR: 56 | newState.error = action.error 57 | console.error('MIDI Error Received', action.error) 58 | return newState 59 | 60 | case SET_MIDI: 61 | newState.midi = action.midi 62 | return newState 63 | 64 | case SET_PORTS: 65 | newState.inputs = action.inputs 66 | newState.outputs = action.outputs 67 | return newState 68 | 69 | default: 70 | return state 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /webconfig/lib/store/store.js: -------------------------------------------------------------------------------- 1 | import {createStore, applyMiddleware, combineReducers} from 'redux' 2 | import thunk from 'redux-thunk' 3 | 4 | import midiReducer from 'lib/store/midi' 5 | import configReducer from 'lib/store/config' 6 | 7 | function logger ({ getState }) { 8 | return (next) => (action) => { 9 | console.log('will dispatch', action) 10 | 11 | // Call the next dispatch method in the middleware chain. 12 | let returnValue = next(action) 13 | console.log('state after dispatch', getState()) 14 | 15 | // This will likely be the action itself, unless 16 | // a middleware further in chain changed it. 17 | return returnValue 18 | } 19 | } 20 | 21 | var reducers = combineReducers({ 22 | midi: midiReducer, 23 | config: configReducer 24 | }) 25 | 26 | var store = createStore( 27 | reducers, 28 | applyMiddleware(thunk) 29 | ) 30 | 31 | export default store 32 | -------------------------------------------------------------------------------- /webconfig/lib/util/sortable.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import {Pagination, Table} from 'react-bootstrap' 3 | // 4 | // Based on: https://github.com/brettdewoody/react-easy-sortable-table 5 | // But almost completely rewritten after all. 6 | // 7 | // Use like this: 8 | // 9 | // handleSelect = (ids) => { 10 | // console.log('Selected IDs') 11 | // console.log(ids) 12 | // } 13 | // render () { 14 | // let headers = [ 15 | // { id: 'id', name: 'ID' }, 16 | // { id: 'name', name: 'Name' }, 17 | // { id: 'formatted', sortId: 'value', name: 'Total Amount', className: 'text-right' } 18 | // ] 19 | // let rows = [ 20 | // { id: 5, name: 'tommy', value: 1.0, formatted: '$1,00' }, 21 | // { id: 9, name: 'pietje', value: 2.0, formatted: '$2,00' }, 22 | // { id: 19, name: (Boldie), value: 10.0, formatted: '$10,00' } 23 | // ] 24 | // return ( 25 | // 26 | // ) 27 | // } 28 | 29 | export default class Sortable extends React.Component { 30 | static propTypes = { 31 | headers: React.PropTypes.array.isRequired, 32 | rows: React.PropTypes.array.isRequired, 33 | selectHandler: React.PropTypes.func, 34 | defaultSort: React.PropTypes.string, 35 | defaultOrder: React.PropTypes.string, 36 | pageSize: React.PropTypes.number, 37 | noHeader: React.PropTypes.bool, 38 | className: React.PropTypes.string, 39 | noStriped: React.PropTypes.bool 40 | } 41 | 42 | state = { 43 | data: [], 44 | sortDir: {}, 45 | allChecked: false, 46 | sortColumn: '', 47 | currentPage: 1 48 | } 49 | 50 | componentDidMount () { 51 | if (this.props !== undefined && this.props.rows !== undefined) { 52 | this.props.rows.map((x) => { x.isChecked = false }) 53 | } 54 | this.resort(this.props.rows) 55 | } 56 | 57 | componentWillReceiveProps (newprops) { 58 | if (newprops.rows === this.props.rows) { 59 | return 60 | } 61 | if (newprops !== undefined) { 62 | if (this.selectedIDs !== undefined && this.selectedIDs.length > 0) { 63 | newprops.rows.map((x) => { 64 | let checked = false 65 | this.selectedIDs.map((id) => { 66 | if (id === x.id) { checked = true } 67 | }) 68 | x.isChecked = checked 69 | }) 70 | } 71 | this.resort(newprops.rows) 72 | } 73 | } 74 | 75 | sortByColumn (array, column, sortDir) { 76 | if (column === '') { 77 | return array 78 | } 79 | let sortcol = column 80 | this.props.headers.map((row) => { 81 | if (row.id === column && row.sortId !== undefined) { sortcol = row.sortId } 82 | }) 83 | return array.sort(function (a, b) { 84 | let x = a[sortcol] 85 | let y = b[sortcol] 86 | // sort by ID if checked values are the same 87 | let res = (a.id > b.id) ? -1 : ((a.id < b.id) ? 1 : 0) 88 | if (sortDir === 'dsc') { 89 | return ((x > y) ? -1 : ((x < y) ? 1 : res)) 90 | } else { 91 | return ((x < y) ? -1 : ((x > y) ? 1 : res)) 92 | } 93 | }) 94 | } 95 | 96 | resort (data) { 97 | let sortDir = this.state.sortDir 98 | let column = this.state.sortColumn 99 | 100 | if (data.length === 0) { 101 | this.setState({data}) 102 | return 103 | } 104 | 105 | // Use default sorting if not sorted already. 106 | if (column === '' && (this.props.defaultSort !== undefined && this.props.defaultOrder !== undefined)) { 107 | column = this.props.defaultSort 108 | sortDir[column] = this.props.defaultOrder 109 | } 110 | 111 | let sortedData = this.sortByColumn(data, column, sortDir[column]) 112 | this.setState({data: sortedData, sortDir: sortDir, sortColumn: column}) 113 | } 114 | 115 | sort = (column) => { 116 | var sortDir = this.state.sortDir 117 | sortDir[column] = (sortDir[column] === 'asc' ? 'dsc' : 'asc') 118 | var sortedData = this.sortByColumn(this.state.data, column, sortDir[column]) 119 | this.setState({data: sortedData, sortDir: sortDir, sortColumn: column}) 120 | } 121 | 122 | updateSelected () { 123 | if (!this.props.selectHandler) return 124 | // Create new array of only selected ID's. (FIXME "id" is hardcoded) 125 | let activeOIDs = [] 126 | this.state.data.map((row, i) => { if (row.isChecked) activeOIDs.push(row.id) }) 127 | this.selectedIDs = activeOIDs 128 | this.props.selectHandler(activeOIDs) 129 | } 130 | 131 | onKey = (k) => { 132 | this.shiftKey = k.shiftKey 133 | } 134 | 135 | handleSelect = (i) => { 136 | let data = this.state.data 137 | data[i].isChecked = !data[i].isChecked 138 | // Handle shift-click to select multiple. 139 | if (this.shiftKey) { 140 | let start = this.lastCheck > i ? i : this.lastCheck 141 | let end = this.lastCheck > i ? this.lastCheck : i 142 | for (let n = start; n < end; n++) { 143 | data[n].isChecked = data[i].isChecked 144 | } 145 | } 146 | this.lastCheck = i 147 | this.setState({data: data}) 148 | this.updateSelected() 149 | } 150 | 151 | handleSelectAll = () => { 152 | this.state.data.map((row, i) => { if (!row.hide) row.isChecked = !this.state.allChecked }) 153 | this.setState({ allChecked: !this.state.allChecked }) 154 | this.updateSelected() 155 | this.forceUpdate() 156 | } 157 | 158 | handlePageSelect = (e) => { 159 | this.setState({currentPage: e}) 160 | } 161 | 162 | render () { 163 | var data = this.state.data 164 | if (data === undefined) { 165 | return () 166 | } 167 | let selectable = this.props.selectHandler !== undefined 168 | 169 | let pagination 170 | if (this.props.pageSize > 0 && data.length > this.props.pageSize) { 171 | let pages = data.length / this.props.pageSize + 1 172 | pagination = ( 173 | Page: 178 | 179 | ) 180 | let begin = (this.state.currentPage - 1) * this.props.pageSize 181 | data = data.slice(begin, begin + this.props.pageSize) 182 | } 183 | 184 | let hdr 185 | if (!this.props.noHeader) { 186 | hdr = ( 187 | 188 | 190 | 191 | ) 192 | } 193 | 194 | return ( 195 |
196 | {hdr} 197 | 200 |
201 | {pagination} 202 | 203 | ) 204 | } 205 | } 206 | 207 | class TableHeader extends React.Component { 208 | static propTypes = { 209 | sortDir: React.PropTypes.object, 210 | onSort: React.PropTypes.func, 211 | headers: React.PropTypes.array, 212 | selectable: React.PropTypes.bool, 213 | selectHandler: React.PropTypes.func, 214 | sorted: React.PropTypes.string 215 | } 216 | 217 | state = { 218 | sorted: '' 219 | } 220 | 221 | componentDidMount () { 222 | if (this.props.sorted !== '') { 223 | this.setState({sorted: this.props.sorted}) 224 | } 225 | } 226 | 227 | componentWillReceiveProps (newprops) { 228 | if (newprops.sorted !== '') { 229 | this.setState({sorted: newprops.sorted}) 230 | } 231 | } 232 | 233 | sort (column) { 234 | return function (event) { 235 | this.props.onSort(column) 236 | this.setState({sorted: column}) 237 | }.bind(this) 238 | } 239 | 240 | render () { 241 | let cells = this.props.headers.map((row, i) => { 242 | if (row.hide) { 243 | return undefined 244 | } 245 | if (row.nosort) { 246 | return {row.name} 247 | } 248 | let icon 249 | if (this.state.sorted === row.id) { 250 | let dir = this.props.sortDir[row.id] === 'asc' ? 'fa-caret-up' : 'fa-caret-down' 251 | let className = 'fa text-danger ' + dir 252 | icon = () 253 | } 254 | return {row.name} {icon} 255 | }) 256 | 257 | let cb 258 | if (this.props.selectable) { 259 | cb = 260 | } 261 | 262 | return ( 263 | 264 | {cb} 265 | {cells} 266 | 267 | ) 268 | } 269 | } 270 | 271 | class TableBody extends React.Component { 272 | static propTypes = { 273 | headers: React.PropTypes.array.isRequired, 274 | data: React.PropTypes.array.isRequired, 275 | selectable: React.PropTypes.bool, 276 | selectHandler: React.PropTypes.func, 277 | keyHandler: React.PropTypes.func 278 | } 279 | 280 | render () { 281 | let headers = this.props.headers 282 | let data = this.props.data 283 | 284 | return ( 285 | 286 | {data.map((item, idx) => { 287 | if (item.hide) { return undefined } 288 | return 291 | })} 292 | 293 | ) 294 | } 295 | } 296 | 297 | class TableRow extends React.Component { 298 | static propTypes = { 299 | headers: React.PropTypes.array.isRequired, 300 | data: React.PropTypes.object.isRequired, 301 | selectable: React.PropTypes.bool, 302 | selectHandler: React.PropTypes.func, 303 | keyHandler: React.PropTypes.func, 304 | id: React.PropTypes.number 305 | } 306 | 307 | handleSelect = () => { 308 | this.props.selectHandler(this.props.id) 309 | } 310 | 311 | handleKey = (k) => { 312 | this.props.keyHandler(k) 313 | } 314 | 315 | render () { 316 | let data = this.props.data 317 | let cells = this.props.headers.map((row, i) => { 318 | if (row.hide) { 319 | return undefined 320 | } 321 | let cn = row.className 322 | if (data.className !== undefined) { 323 | cn = data.className 324 | } 325 | return {data[row.id]} 326 | }) 327 | let cb 328 | if (this.props.selectable) { 329 | cb = 334 | } 335 | 336 | return ( 337 | {cb}{cells} 338 | ) 339 | } 340 | } 341 | -------------------------------------------------------------------------------- /webconfig/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "jspm": { 3 | "dependencies": { 4 | "bootstrap-less": "github:distros/bootstrap-less@^3.3.9", 5 | "history": "npm:history@^2.1.0", 6 | "jquery": "npm:jquery@^2.2.3", 7 | "less": "npm:systemjs-less-plugin@^1.8.1", 8 | "react": "npm:react@^15.0.1", 9 | "react-bootstrap": "npm:react-bootstrap@^0.29.0", 10 | "react-dom": "npm:react-dom@^15.0.1", 11 | "react-redux": "npm:react-redux@^4.4.5", 12 | "react-router": "npm:react-router@^2.3.0", 13 | "redux": "npm:redux@^3.5.1", 14 | "redux-thunk": "npm:redux-thunk@^2.0.1" 15 | }, 16 | "devDependencies": { 17 | "babel": "npm:babel-core@^5.8.24", 18 | "babel-runtime": "npm:babel-runtime@^5.8.24", 19 | "core-js": "npm:core-js@^1.1.4" 20 | } 21 | }, 22 | "scripts": { 23 | "lint": "eslint ." 24 | }, 25 | "eslintConfig": { 26 | "extends": [ 27 | "xsnews" 28 | ] 29 | }, 30 | "devDependencies": { 31 | "babel-eslint": "^6.0.0", 32 | "eslint": ">=4.18.2", 33 | "eslint-plugin-html": "^1.4.0", 34 | "eslint-plugin-promise": "^1.0.8", 35 | "eslint-plugin-react": "~3.16.1", 36 | "eslint-plugin-standard": "^1.3.2" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /webconfig/webserver.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "net/http" 4 | import "log" 5 | 6 | func main() { 7 | http.Handle("/", http.FileServer(http.Dir("."))) 8 | log.Fatal(http.ListenAndServe(":3333", nil)) 9 | } 10 | --------------------------------------------------------------------------------