Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
jmamma committed Dec 18, 2023
2 parents 7852923 + 4e22430 commit 72e68dd
Show file tree
Hide file tree
Showing 124 changed files with 1,881 additions and 3,023 deletions.
95 changes: 89 additions & 6 deletions Changelog
Original file line number Diff line number Diff line change
@@ -1,6 +1,89 @@
MCL 4.51 01/12/2023

Please upgrade to Machinedrum OS X.10 & Monomachine OS X.01 before using MCL 4.51.

- Changes:

[ Classic/Extended] button must now be held down for 1.5 seconds to switch
between Enhanced and Classic/Extended modes when the sequencer is stopped.

- Improvements:

When the sequencer is running the Mixer page can be opened and closed by pressing [ Classic/Extended ].

Hold down [ Classic/Extended ] + [ Trig ] for fast for mute toggles.

Minimum transition load latency reduced from approximately two 16th notes, to exactly half a 16th note per device.

More reliable transitions, and better slot loading responsiveness.

Load Page - Press [ Function ] to select the destination track offset for next load.

Sample transfers between MCL and MD can be cancelled by pressing MCL button < SAVE/NO >

Microtiming is no longer cleared when unsetting a trig with locks in Step Edit.

Added arrow key parameter selection to Arp Page.

Arpeggiator gets a true random mode "RN2"

Mixer Page trig LEDs now flash when MD tracks are triggered.

New General MIDI menu added to configure the Generic MIDI driver. Assign
custom mute CC paramater which can be received/transmitted via the MixerPage's ext device, mute toggle.

TURBO MIDI speeds will now be enabled on MIDI port 2, when Generic Driver is
selected. This activates TURBO MIDI for compatible machines that we haven't implemented a specific driver for.

PianoRoll, added step delete [ Trig ] + [ Clear ]

- Bug Fixes:

New Project creation could fail.

Project rename could fail.

Microtiming window would unexpectedly display when setting PTC

Wav Designer page switching was broken.

Wav Designer oscillator tuning rounding error and cents adjustment fix.

Fix sequencer LED cursor sync in certain circumstances.

MD IMPORT patterns menu, row names were broken and the range was too small.

PerfPage parameter learning was broken if dest the same as LFO dest

LFO offset for MIDI destinations was broken.

At low tempos, MIDI tracks would not always load.

Bulk sample receive was broken.

When AUTO Loading, comparison of MD sounds could be incorrect causing sound retransmission.

Don't cd up in SoundBrowser when pressing [ NO ], instead revert back to Step Edit page.

PerfEncoder scene assignment was not distributed correctly when loading a blank PF slot.

Parameter lock parameters should be reverted correctly on sequencer stop.

Tracks triggered manually would not use the unlocked parameter values.

Sequencer: Don't allow paste before copy.

MixerPage poly-link fader display bug.

Arpeggiator behaviour in poly mode could be unpredictable.

Arpeggiator D2 and RND modes could not be selected.

MIDI active-peering would use the Elektron driver, even when Generic was selected.

MCL 4.50 24/07/2023

Please install Machinedrum OS X.09 & Monomachine OS X.01 before using MCL 4.50.
Please upgrade to Machinedrum OS X.09 & Monomachine OS X.01 before using MCL 4.50.

- Performance Page + Performance Controllers
A new Performance Page has been added featuring 8 Scenes (1->8) that are shared
Expand Down Expand Up @@ -220,7 +303,7 @@ MCL 4.41 10/03/2023

MCL 4.40 25/02/2023

Please install Machinedrum OS X.08 & Monomachine OS X.01 before using MCL 4.40.
Please upgrade to Machinedrum OS X.08 & Monomachine OS X.01 before using MCL 4.40.
Perform the USB DFU firmware procedure to upgrade the USB microcontroller for class compliant USB MIDI.

- Improvements:
Expand All @@ -247,7 +330,7 @@ Perform the USB DFU firmware procedure to upgrade the USB microcontroller for cl

MCL 4.30 12/01/2023

Please install Machinedrum OS X.08 & Monomachine OS X.01 before using MCL 4.30.
Please upgrade to Machinedrum OS X.08 & Monomachine OS X.01 before using MCL 4.30.
Perform the USB DFU firmware procedure to upgrade the USB microcontroller for class compliant USB MIDI.

- Fixes:
Expand All @@ -265,7 +348,7 @@ Perform the USB DFU firmware procedure to upgrade the USB microcontroller for cl

MCL 4.20 14/07/2022

Please install Machinedrum OS X.07 & Monomachine OS X.01 before using MCL 4.20.
Please upgrade to Machinedrum OS X.07 & Monomachine OS X.01 before using MCL 4.20.
Perform the USB DFU firmware procedure to upgrade the USB microcontroller for class compliant USB MIDI.

- Fixes:
Expand Down Expand Up @@ -343,7 +426,7 @@ Perform the USB DFU firmware procedure to upgrade the USB microcontroller for cl

MCL 4.11 30/03/2022

Please install Machinedrum OS X.06 before using MCL 4.11
Please upgrade to Machinedrum OS X.06 before using MCL 4.11

- Bug Fixes:

Expand Down Expand Up @@ -376,7 +459,7 @@ Please install Machinedrum OS X.06 before using MCL 4.11

MCL 4.10 19/03/2022

Please install Machinedrum OS X.06 before using MCL 4.10
Please upgrade to Machinedrum OS X.06 before using MCL 4.10

- Key Binding Changes:

Expand Down
Binary file added art/sprites/midi_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added art/sprites/turbo_icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions avr/cores/megacommand/A4/A4.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ bool A4Class::probe() {
if (getBlockingSettings(0)) {
connected = true;
DEBUG_DUMP(connected);
turbo_light.set_speed(turbo_light.lookup_speed(mcl_cfg.uart2_turbo), uart);
turbo_light.set_speed(turbo_light.lookup_speed(mcl_cfg.uart2_turbo_speed), uart);
}
return connected;
}
Expand Down Expand Up @@ -230,7 +230,7 @@ bool A4Class::getBlockingSettingsX(uint8_t settings, uint16_t timeout) {
}
void A4Class::muteTrack(uint8_t track, bool mute = true, MidiUartParent *uart_ = nullptr) {
if (uart_ == nullptr) { uart_ = uart; }
uart->sendCC(track, 94, mute ? 1 : 0);
uart->sendCC(track, 94, mute);
}

void A4Class::setLevel(uint8_t track, uint8_t value) {
Expand Down
2 changes: 1 addition & 1 deletion avr/cores/megacommand/Arduino.h
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ void analogWrite(uint8_t, int);

unsigned long millis(void);
unsigned long micros(void);
void delay(unsigned long);
void delay(uint16_t ms);
void delayMicroseconds(unsigned int us);
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
unsigned long pulseInLong(uint8_t pin, uint8_t state, unsigned long timeout);
Expand Down
2 changes: 1 addition & 1 deletion avr/cores/megacommand/Elektron/Elektron.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ void ElektronDevice::set_trigleds(uint16_t bitmask, TrigLEDMode mode,
// trigleds[7..13]
data[3] = (bitmask >> 7) & 0x7F;
// trigleds[14..15]
data[4] = (bitmask >> 14) | (mode << 2) | (blink << 4);
data[4] = (bitmask >> 14) | (mode << 2) | (blink << 5);
sendRequest(data, sizeof(data));
// waitBlocking();
}
Expand Down
7 changes: 3 additions & 4 deletions avr/cores/megacommand/Elektron/Elektron.h
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,8 @@ enum TrigLEDMode {
TRIGLED_OVERLAY = 0,
TRIGLED_STEPEDIT = 1,
TRIGLED_EXCLUSIVE = 2,
TRIGLED_EXCLUSIVENDYNAMIC = 3
TRIGLED_EXCLUSIVENDYNAMIC = 3,
TRIGLED_MUTE = 4
};

/// sysex constants for constructing data frames
Expand Down Expand Up @@ -543,8 +544,6 @@ class ElektronDevice : public MidiDevice {
};

extern const char* getMachineNameShort(uint8_t machine, uint8_t type, const short_machine_name_t* table, size_t size);
#define copyMachineNameShort(src, dst) \
(dst)[0] = (src)[0]; \
(dst)[1] = (src)[1];
#define copyMachineNameShort(src, dst) memcpy(dst,src,2);

#endif /* ELEKTRON_H__ */
16 changes: 1 addition & 15 deletions avr/cores/megacommand/Elektron/ElektronDataEncoder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,21 +52,7 @@ void ElektronDataToSysexEncoder::startChecksum() {
}

void ElektronDataToSysexEncoder::uart_send(uint8_t c) {
if (throttle) {
/* bool do_throttle = false;
uint8_t v = 0;
if (MidiClock.mod6_counter == 0) {
do_throttle = true;
}
if (MidiClock.mod12_counter == throttle_mod12) {
do_throttle = true;
}
if (do_throttle) { */
delayMicroseconds(THROTTLE_US);
uart->m_putc_immediate(c);
} else {
uart->m_putc(c);
}
uart->m_putc(c);
}
void ElektronDataToSysexEncoder::finishChecksum() {
uint16_t len = retLen - 5;
Expand Down
6 changes: 0 additions & 6 deletions avr/cores/megacommand/Elektron/ElektronDataEncoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,13 @@ class ElektronDataToSysexEncoder : public DataEncoder {
uint16_t checksum;
bool inChecksum;
public:
bool throttle;
uint8_t throttle_mod12;

ElektronDataToSysexEncoder(uint8_t *_sysex = nullptr) {
init(_sysex);
throttle = false;
throttle_mod12 = 255;
}

ElektronDataToSysexEncoder(MidiUartParent *_uart) {
init(0, _uart);
throttle = false;
throttle_mod12 = 255;
}

void uart_send(uint8_t c);
Expand Down
2 changes: 1 addition & 1 deletion avr/cores/megacommand/GUI/Events.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ volatile CRingBuffer<gui_event_t, MAX_EVENTS> EventRB;
volatile uint8_t event_ignore_next_mask;

void pollEventGUI() {
for (int i = 0; i < MAX_BUTTONS; i++) {
for (uint8_t i = 0; i < MAX_BUTTONS; i++) {
gui_event_t event;
event.source = i;
if (BUTTON_PRESSED(i)) {
Expand Down
21 changes: 11 additions & 10 deletions avr/cores/megacommand/GUI/GUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,23 +62,24 @@ void GuiClass::loop() {
oled_display.screen_saver = false;
gui_event_t event;
EventRB.getp(&event);
for (int i = 0; i < eventHandlers.size; i++) {
bool ret = false;
if (sketch != NULL) {
ret = sketch->handleTopEvent(&event);
if (ret)
continue;
}

for (uint8_t i = 0; i < eventHandlers.size; i++) {
if (eventHandlers.arr[i] != NULL) {
bool ret = eventHandlers.arr[i](&event);
if (ret) {
ret = eventHandlers.arr[i](&event);
if (ret)
continue;
}
}
}

if (sketch != NULL) {
bool ret = sketch->handleTopEvent(&event);
if (ret)
continue;
}
}

for (int i = 0; i < tasks.size; i++) {
for (uint8_t i = 0; i < tasks.size; i++) {
if (tasks.arr[i] != NULL) {
tasks.arr[i]->checkTask();
}
Expand Down
1 change: 1 addition & 0 deletions avr/cores/megacommand/GUI/Pages.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ void PageContainer::pushPage(LightPage* page) {
pageStack.push(page);
page->init();
page->show();
page->init_encoders_used_clock();
#ifdef ENABLE_DIAG_LOGGING
// deactivate diagnostic page on pushPage
diag_page.deactivate();
Expand Down
2 changes: 1 addition & 1 deletion avr/cores/megacommand/GUI_private.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ ButtonsClass::ButtonsClass() {
}

void ButtonsClass::clear() {
for (int i = 0; i < GUI_NUM_BUTTONS; i++) {
for (uint8_t i = 0; i < GUI_NUM_BUTTONS; i++) {
CLEAR_B_DOUBLE_CLICK(i);
CLEAR_B_CLICK(i);
CLEAR_B_LONG_CLICK(i);
Expand Down
Loading

0 comments on commit 72e68dd

Please sign in to comment.