Giter Site home page Giter Site logo

dewb / monome-rack Goto Github PK

View Code? Open in Web Editor NEW
221.0 26.0 14.0 7.43 MB

VCV Rack plugin for monome Eurorack modules

License: GNU General Public License v2.0

Makefile 0.47% C++ 19.41% C 80.11% Shell 0.01% CMake 0.01%
eurorack monome synthesizer sequencer music-composition vcvrack vcv-rack-modules

monome-rack's Introduction

monome-rack

Read the manual here:

monome-rack is a plugin for the VCVRack open-source virtual modular synthesizer that emulates (some of) the open-source Eurorack modules and control hardware designed and manufactured by monome. This is an unofficial community-driven port, made with permission, but no support guarantees, warranties, or suitability for purpose are provided by anyone.

monome modules and virtual grid in VCVRack

This plugin currently includes:

  • teletype, a dynamic, musical, scriptable event triggering platform.
  • ansible, a multi-mode sequencing and event-triggering module
  • white whale, a probabilistic step sequencer
  • meadowphysics, an event sequencer for polyrhythms and rule-based evolving patterns
  • earthsea, a live keyboard that can sequence melodies and recall CV with shape memory gestures
  • Support for monome grid and monome arc hardware controllers, both current editions and older models, plus virtual versions of the grid controller within VCV Rack, in 64, 128, and 256-key flavors.

All of the modules can connect to either a virtual grid or a real hardware grid controller. (Serialosc is required to use real hardware, but no drivers are required for the virtual grids.)

Through the virtual grid, all features of each module are accessible, but some features are awkward to use without multiple fingers on a real grid. See the manual for tips on using virtual grids.

How do I use this?

To install the latest library release:

  1. Visit the plugin's page in the VCV Library and click Add.
  2. Start VCV Rack and run Library > Update All to install the new modules.
  3. Restart VCV Rack.
  4. Optional: to use monome grid and arc hardware, make sure to install serialosc.

Connecting modules to grids

  • Start VCVRack. Add a white whale and grid 128 module to your patch.
  • Right-click the white whale module and select your virtual grid from the list of devices. It should light up.
  • If you have a hardware grid connected, right-click the module and select your hardware grid from the list. The virtual grid should go dark and your physical grid should light up.

Deeper learning and getting help

See the online manual, specifically the Getting Help section.

Installing prerelease builds

For instructions on installing prerelease builds, see DEVELOPING.md.

How can I build the source myself?

See DEVELOPING.md.

Who did this? How is it licensed?

See the Credits & License.

What's next?

See the release plan for the current thinking, but no promises.

Why does this exist?

In order of importance, the initial goals of this project were/are:

  • Provide an easier environment for developing, debugging, and testing new and improved firmware features for the monome Eurorack modules
  • Allow users of the hardware modules to practice, experiment, and/or record while away from their systems
  • Expose new users to the monome hardware/software ecosystem
  • Accelerate development of completely new grid applications
  • "Because it was there"

How does this work?

The firmwares for the monome modules are written in C for the AVR32 platform. (More details here.) In this project, these firmware repos are built into separate C shared libraries, together with stub I/O implementations for parts of the AVR32 API. The Rack plugin will load a new copy of this firmware library into memory for each module instance you place, so statics and globals work as expected within each copy of the module.

monome-rack's People

Contributors

cschol avatar dewb avatar dndrks avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

monome-rack's Issues

Emulate the Teletype module (phase 1)

https://monome.org/docs/modular/teletype/

TODO:

  • Create module and widget definitions
  • Emulate OLED screen
  • Handle keyboard input when the screen is clicked in rack
  • Pass GLFW keyboard events to firmware as HID frames directly to process_keypress
    • Alphanumerics, function keys, arrow keys, tab, function keys, minus/equals/period, backspace
    • Shift/Ctrl/Alt/Meta modifiers
    • Semicolon/colon
    • Escape
    • NUM LOCK
    • Hunt for and fix any remaining special keys
    • Support non-US keyboards (needs fixes in Rack, coming in 2.0) (future)
    • Combos that still aren't working
      • shift for multiline select in script editor
      • ctrl-left/right for jumping between words
  • TR outs
  • CV outs
  • Trigger ins
  • IN CV input
  • PARAM knob
  • M Metro
  • Script execution and editing
  • Pattern editing
  • Enter Scene Mode via ESC
  • Enter Scene Mode via front panel button
  • Basic saving/loading
    • Naive load/save NVRAM to VCV Rack patch
    • Naive load/save VRAM to VCV Rack patch
  • Advanced saving/loading (moved to phase 2 #62 )
    • Right-click export/import all scenes to/from file
    • Right-click export/import single scene to/from file?
    • Save NVRAM (and VRAM scene state?) as JSON rather than memory buffer, for more version-independence
    • VCV Rack 2.0: take advantage of new patch format to avoid hitting patch JSON size limits
  • Desirable VCV-specific features
    • 'Initialize' command should reset scene (and NVRAM?)
    • Support locking the keyboard (or a second keyboard?) to TT input. Does VCV even allow this? (future)
  • Run through all Teletype Studies
    • Part 1: Navigating and Making Edges
    • Part 2: Curves and Repetition
    • Part 3: Playing with Numbers
    • Part 4: Collect and Transform
    • Part 5: Pattern Tracking
      • param knob live input fail: no way to hold ctrl and turn param knob (clicking steals focus from edit window) workaround: map a midi control knob
    • Part 6: Maybe Later Remembering
    • Part 7: Incantations
      • (except for i2c )
  • Test all 2.1.0 ops
  • i2c
    • Make sure i2c ops fail gracefully / don't crash
    • Investigate passing i2c messages to other modules via VCV Rack module-expander API (investigation and prototype complete, full implementation to come post-Rack-2.0)
  • Update Teletype firmware to 3.x
  • Grid
    • Test grid ops and interaction with onscreen grid
    • Test attachment to virtual grids
    • Test attachment to real grids via serialosc
      • Noticing some occasional lag
  • Test other new 3.x ops
  • Update Teletype firmware to 4.0 (once it's out of beta)
  • Test new 4.x ops
  • Finalize panel graphics (future)
  • Merge back into main branch
  • Address unknown unknowns (always more on the horizon of course)

teletype-rack-1

build fail on Linux with latest source

Linux Fedora 23
Rack 0.5 (source build)

Latest code fails here:

g++ -o plugin.so build/lib/base64/base64.cpp.o build/lib/oscpack/ip/IpEndpointName.cpp.o build/lib/oscpack/osc/OscOutboundPacketStream.cpp.o build/lib/oscpack/osc/OscPrintReceivedElements.cpp.o build/lib/oscpack/osc/OscTypes.cpp.o build/lib/oscpack/osc/OscReceivedElements.cpp.o build/lib/serialosc/SerialOsc.cpp.o build/src/plugin.cpp.o build/src/common/MonomeWidgets.cpp.o build/src/common/FirmwareManager.cpp.o build/src/common/monomemodulebase.cpp.o build/src/common/MonomeModuleBase.cpp.o build/src/common/monomewidgets.cpp.o build/src/common/firmwaremanager.cpp.o build/src/common/MonomeModuleBaseWidget.cpp.o build/src/whitewhale/WhiteWhaleWidget.cpp.o build/src/whitewhale/WhiteWhaleModule.cpp.o build/src/virtualgrid/VirtualGridModule.cpp.o build/src/virtualgrid/VirtualGridWidget.cpp.o build/src/earthsea/EarthseaModule.cpp.o build/src/earthsea/EarthseaWidget.cpp.o build/src/meadowphysics/MeadowphysicsModule.cpp.o build/src/meadowphysics/MeadowphysicsWidget.cpp.o build/src/common/GridConnection/SerialOscGridConnection.cpp.o build/src/common/GridConnection/VirtualGridConnection.cpp.o build/src/common/GridConnection/GridConnection.cpp.o build/lib/oscpack/ip/posix/NetworkingUtils.cpp.o build/lib/oscpack/ip/posix/UdpSocket.cpp.o -shared

build/src/common/MonomeModuleBase.cpp.o: In function rack::Module::fromJson(json_t*)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:83: multiple definition of MonomeModuleBase::buttonPressMessageReceived(MonomeDevice*, int, int, bool)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:83: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function rack::Module::~Module()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.hpp:31: multiple definition of non-virtual thunk to MonomeModuleBase::buttonPressMessageReceived(MonomeDevice*, int, int, bool)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.hpp:31: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function rack::Module::~Module()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:92: multiple definition of MonomeModuleBase::readSerialMessages()'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:92: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::deviceRemoved(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:75: multiple definition of MonomeModuleBase::deviceRemoved(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:75: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function non-virtual thunk to MonomeModuleBase::deviceRemoved(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.hpp:30: multiple definition of non-virtual thunk to MonomeModuleBase::deviceRemoved(std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.hpp:30: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::~MonomeModuleBase()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:19: multiple definition of MonomeModuleBase::~MonomeModuleBase()'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:19: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::~MonomeModuleBase()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:19: multiple definition of MonomeModuleBase::~MonomeModuleBase()'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:19: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::~MonomeModuleBase()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:19: multiple definition of MonomeModuleBase::~MonomeModuleBase()'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:19: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::toJson()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:183: multiple definition of MonomeModuleBase::toJson()'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:183: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::fromJson(json_t*)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:212: multiple definition of MonomeModuleBase::fromJson(json_t*)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:212: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::setGridConnection(GridConnection*)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:25: multiple definition of MonomeModuleBase::setGridConnection(GridConnection*)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:25: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::deviceFound(MonomeDevice const*)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:67: multiple definition of MonomeModuleBase::deviceFound(MonomeDevice const*)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:67: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function non-virtual thunk to MonomeModuleBase::deviceFound(MonomeDevice const*)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.hpp:29: multiple definition of non-virtual thunk to MonomeModuleBase::deviceFound(MonomeDevice const*)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.hpp:29: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::step()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:145: multiple definition of MonomeModuleBase::step()'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:145: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::MonomeModuleBase(int, int, int, int)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:10: multiple definition of MonomeModuleBase::MonomeModuleBase(int, int, int, int)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:10: first defined here
build/src/common/MonomeModuleBase.cpp.o: In function MonomeModuleBase::MonomeModuleBase(int, int, int, int)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeModuleBase.cpp:10: multiple definition of MonomeModuleBase::MonomeModuleBase(int, int, int, int)'
build/src/common/monomemodulebase.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomemodulebase.cpp:10: first defined here
build/src/common/monomewidgets.cpp.o: In function rack::TransparentWidget::onScroll(rack::EventScroll&)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomewidgets.cpp:11: multiple definition of USBAJack::draw(NVGcontext*)'
build/src/common/MonomeWidgets.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeWidgets.cpp:11: first defined here
build/src/common/monomewidgets.cpp.o: In function MonomeKnob::~MonomeKnob()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeWidgets.hpp:12: multiple definition of virtual thunk to USBAJack::draw(NVGcontext*)'
build/src/common/MonomeWidgets.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeWidgets.hpp:12: first defined here
build/src/common/monomewidgets.cpp.o: In function MonomeKnob::~MonomeKnob()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomewidgets.cpp:5: multiple definition of WhiteLight::WhiteLight()'
build/src/common/MonomeWidgets.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeWidgets.cpp:5: first defined here
build/src/common/monomewidgets.cpp.o: In function WhiteLight::WhiteLight()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomewidgets.cpp:5: multiple definition of WhiteLight::WhiteLight()'
build/src/common/MonomeWidgets.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeWidgets.cpp:5: first defined here
build/src/common/monomewidgets.cpp.o: In function MonomeKnob::MonomeKnob()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomewidgets.cpp:23: multiple definition of MonomeKnob::MonomeKnob()'
build/src/common/MonomeWidgets.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeWidgets.cpp:23: first defined here
build/src/common/monomewidgets.cpp.o: In function MonomeKnob::MonomeKnob()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/monomewidgets.cpp:23: multiple definition of MonomeKnob::MonomeKnob()'
build/src/common/MonomeWidgets.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/MonomeWidgets.cpp:23: first defined here
build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::FirmwareManager()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/firmwaremanager.cpp:110: multiple definition of FirmwareManager::FirmwareManager()'
build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:228: first defined here
build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::FirmwareManager()': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/firmwaremanager.cpp:110: multiple definition of FirmwareManager::FirmwareManager()'
build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:228: first defined here
build/src/common/firmwaremanager.cpp.o: In function std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_data(char*)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/firmwaremanager.cpp:110: multiple definition of FirmwareManager::~FirmwareManager()'
build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:232: first defined here
build/src/common/firmwaremanager.cpp.o: In function std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_data(char*)': /home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/firmwaremanager.cpp:110: multiple definition of FirmwareManager::~FirmwareManager()'
build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:232: first defined here
build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::init()': /usr/include/c++/5.3.1/bits/basic_string.h:131: multiple definition of FirmwareManager::init()'
build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:250: first defined here
build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::step()': /usr/include/c++/5.3.1/bits/basic_string.h:270: multiple definition of FirmwareManager::step()'
build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:258: first defined here
build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::getGPIO(unsigned int) const': build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:266: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::setGPIO(unsigned int, bool)':
/usr/include/c++/5.3.1/bits/basic_string.h:1029: multiple definition of FirmwareManager::setGPIO(unsigned int, bool)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:277: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::getDAC(int)':
/usr/include/c++/5.3.1/bits/basic_string.h:589: multiple definition of FirmwareManager::getDAC(int)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:286: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::setADC(int, unsigned short)':
/usr/include/c++/5.3.1/bits/basic_string.h:179: multiple definition of FirmwareManager::setADC(int, unsigned short)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:297: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::serialConnectionChange(serial_bus_t, unsigned char, char const*, char const*, char const*)':
/usr/include/c++/5.3.1/bits/basic_string.h:109: multiple definition of FirmwareManager::serialConnectionChange(serial_bus_t, unsigned char, char const*, char const*, char const*)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:305: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::readSerial(serial_bus_t, unsigned char**, unsigned int*)':
/usr/include/c++/5.3.1/bits/basic_string.tcc:221: multiple definition of FirmwareManager::readSerial(serial_bus_t, unsigned char**, unsigned int*)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:313: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::writeSerial(serial_bus_t, unsigned char*, unsigned int)':
/usr/include/c++/5.3.1/bits/char_traits.h:243: multiple definition of FirmwareManager::writeSerial(serial_bus_t, unsigned char*, unsigned int)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:326: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::triggerInterrupt(int)':
/usr/include/c++/5.3.1/bits/functional_hash.h:131: multiple definition of FirmwareManager::triggerInterrupt(int)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:335: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::setClockPeriod(float)':
/usr/include/c++/5.3.1/bits/hashtable_policy.h:446: multiple definition of FirmwareManager::setClockPeriod(float)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:343: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::advanceClock(float)':
/usr/include/c++/5.3.1/bits/hashtable.h:1427: multiple definition of FirmwareManager::advanceClock(float)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:351: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::readNVRAM(void**, unsigned int*)':
/usr/include/c++/5.3.1/bits/hashtable_policy.h:1322: multiple definition of FirmwareManager::readNVRAM(void**, unsigned int*)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:363: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::writeNVRAM(void const*, unsigned int)':
/usr/include/c++/5.3.1/bits/hashtable.h:1436: multiple definition of FirmwareManager::writeNVRAM(void const*, unsigned int)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:371: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::readVRAM(void**, unsigned int*)':
/usr/include/c++/5.3.1/bits/hashtable_policy.h:715: multiple definition of FirmwareManager::readVRAM(void**, unsigned int*)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:379: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::writeVRAM(void const*, unsigned int)':
/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/firmwaremanager.cpp:182: multiple definition of FirmwareManager::writeVRAM(void const*, unsigned int)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:387: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::FirmwareManager()':
/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/firmwaremanager.cpp:110: multiple definition of FirmwareManagerImpl::alreadyLoadedPaths[abi:cxx11]' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:228: first defined here build/src/common/firmwaremanager.cpp.o: In function FirmwareManager::load(std::__cxx11::basic_string<char, std::char_traits, std::allocator >)':
/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/firmwaremanager.cpp:198: multiple definition of FirmwareManager::load(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)' build/src/common/FirmwareManager.cpp.o:/home/dlphilp/src/Rack-050/plugins/monome-rack/src/common/FirmwareManager.cpp:238: first defined here build/src/common/FirmwareManager.cpp.o: In function std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::allocator<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >, std::__detail::_Identity, std::equal_to<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >, std::hash<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, true, true> >::_M_insert_unique_node(unsigned long, unsigned long, std::__detail::_Hash_node<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, true>*)':
/usr/include/c++/5.3.1/bits/hashtable.h:1594: warning: the use of tmpnam' is dangerous, better use mkstemp'
collect2: error: ld returned 1 exit status
../../compile.mk:43: recipe for target 'plugin.so' failed
make: *** [plugin.so] Error 1

Line endings

Bit of a silly one, but are the Windows line endings for the files in firmware/mock_hardware/stubs/avr32/ and lib/oscpack deliberate?

Build error "tt2020" branch [Win 10]

output from make

cd firmware && make -f whitewhale.mk
make[1]: Entering directory '/c/Projects/VCVRack/v1/Rack/plugins/monome-rack/firmware'
cc -DNULL=0 -o0 -D__AVR32_UC3B0256
_ -fPIC -g -Werror=implicit-function-declaration -Imock_hardware -Imock_hardware/stubs -Iwhitewhale/libavr32/src -Iwhitewhale/libavr32/asf/common/services/usb -Iwhitewhale/libavr32/asf/common/services/usb/uhc -Iwhitewhale/libavr32/conf -Iwhitewhale/libavr32/conf/trilogy -std=c99 -c -o ../build/firmware/whitewhale/src/main.c.o whitewhale/src/main.c
whitewhale/src/main.c: In function 'handler_PollADC':
whitewhale/src/main.c:655:14: warning: passing argument 1 of 'adc_convert' from incompatible pointer type [-Wincompatible-pointer-types]
655 | adc_convert(&adc);
| ^~~~
| |
| u16 ()[4] {aka short unsigned int ()[4]}
In file included from whitewhale/src/main.c:29:
mock_hardware/stubs/adc.h:4:23: note: expected 'u16 ' {aka 'short unsigned int '} but argument is of type 'u16 ()[4]' {aka 'short unsigned int ()[4]'}
4 | void adc_convert(u16* dst);
| ~~~~~^~~
In file included from whitewhale/src/main.c:14:
whitewhale/src/main.c: At top level:
mock_hardware/stubs/print_funcs.h:13:46: warning: 'fprintf' is static but used in inline function 'print_dbg_hex' which is not static
13 | inline void print_dbg_hex(unsigned long n) { fprintf(stderr, "%lx", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:12:53: warning: 'fprintf' is static but used in inline function 'print_dbg_short_hex' which is not static
12 | inline void print_dbg_short_hex(unsigned short n) { fprintf(stderr, "%d", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:11:51: warning: 'fprintf' is static but used in inline function 'print_dbg_char_hex' which is not static
11 | inline void print_dbg_char_hex(unsigned char n) { fprintf(stderr, "%x", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:10:48: warning: 'fprintf' is static but used in inline function 'print_dbg_ulong' which is not static
10 | inline void print_dbg_ulong(unsigned long n) { fprintf(stderr, "%ld", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:9:37: warning: 'fprintf' is static but used in inline function 'print_dbg_char' which is not static
9 | inline void print_dbg_char(int c) { fprintf(stderr, "%d", c); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:8:42: warning: 'fprintf' is static but used in inline function 'print_dbg' which is not static
8 | inline void print_dbg(const char* str) { fprintf(stderr, "%s", str); }
| ^~~~~~~
cc -DNULL=0 -o0 -D__AVR32_UC3B0256__ -fPIC -g -Werror=implicit-function-declaration -Imock_hardware -Imock_hardware/stubs -Iwhitewhale/libavr32/src -Iwhitewhale/libavr32/asf/common/services/usb -Iwhitewhale/libavr32/asf/common/services/usb/uhc -Iwhitewhale/libavr32/conf -Iwhitewhale/libavr32/conf/trilogy -std=c99 -c -o ../build/firmware/whitewhale/libavr32/src/events.c.o whitewhale/libavr32/src/events.c
In file included from whitewhale/libavr32/src/events.c:10:
mock_hardware/stubs/print_funcs.h:13:46: warning: 'fprintf' is static but used in inline function 'print_dbg_hex' which is not static
13 | inline void print_dbg_hex(unsigned long n) { fprintf(stderr, "%lx", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:12:53: warning: 'fprintf' is static but used in inline function 'print_dbg_short_hex' which is not static
12 | inline void print_dbg_short_hex(unsigned short n) { fprintf(stderr, "%d", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:11:51: warning: 'fprintf' is static but used in inline function 'print_dbg_char_hex' which is not static
11 | inline void print_dbg_char_hex(unsigned char n) { fprintf(stderr, "%x", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:10:48: warning: 'fprintf' is static but used in inline function 'print_dbg_ulong' which is not static
10 | inline void print_dbg_ulong(unsigned long n) { fprintf(stderr, "%ld", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:9:37: warning: 'fprintf' is static but used in inline function 'print_dbg_char' which is not static
9 | inline void print_dbg_char(int c) { fprintf(stderr, "%d", c); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:8:42: warning: 'fprintf' is static but used in inline function 'print_dbg' which is not static
8 | inline void print_dbg(const char* str) { fprintf(stderr, "%s", str); }
| ^~~~~~~
cc -DNULL=0 -o0 -D__AVR32_UC3B0256__ -fPIC -g -Werror=implicit-function-declaration -Imock_hardware -Imock_hardware/stubs -Iwhitewhale/libavr32/src -Iwhitewhale/libavr32/asf/common/services/usb -Iwhitewhale/libavr32/asf/common/services/usb/uhc -Iwhitewhale/libavr32/conf -Iwhitewhale/libavr32/conf/trilogy -std=c99 -c -o ../build/firmware/whitewhale/libavr32/src/timers.c.o whitewhale/libavr32/src/timers.c
In file included from whitewhale/libavr32/src/timers.c:1:
mock_hardware/stubs/print_funcs.h:13:46: warning: 'fprintf' is static but used in inline function 'print_dbg_hex' which is not static
13 | inline void print_dbg_hex(unsigned long n) { fprintf(stderr, "%lx", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:12:53: warning: 'fprintf' is static but used in inline function 'print_dbg_short_hex' which is not static
12 | inline void print_dbg_short_hex(unsigned short n) { fprintf(stderr, "%d", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:11:51: warning: 'fprintf' is static but used in inline function 'print_dbg_char_hex' which is not static
11 | inline void print_dbg_char_hex(unsigned char n) { fprintf(stderr, "%x", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:10:48: warning: 'fprintf' is static but used in inline function 'print_dbg_ulong' which is not static
10 | inline void print_dbg_ulong(unsigned long n) { fprintf(stderr, "%ld", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:9:37: warning: 'fprintf' is static but used in inline function 'print_dbg_char' which is not static
9 | inline void print_dbg_char(int c) { fprintf(stderr, "%d", c); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:8:42: warning: 'fprintf' is static but used in inline function 'print_dbg' which is not static
8 | inline void print_dbg(const char* str) { fprintf(stderr, "%s", str); }
| ^~~~~~~
cc -DNULL=0 -o0 -D__AVR32_UC3B0256__ -fPIC -g -Werror=implicit-function-declaration -Imock_hardware -Imock_hardware/stubs -Iwhitewhale/libavr32/src -Iwhitewhale/libavr32/asf/common/services/usb -Iwhitewhale/libavr32/asf/common/services/usb/uhc -Iwhitewhale/libavr32/conf -Iwhitewhale/libavr32/conf/trilogy -std=c99 -c -o ../build/firmware/whitewhale/libavr32/src/util.c.o whitewhale/libavr32/src/util.c
cc -DNULL=0 -o0 -D__AVR32_UC3B0256__ -fPIC -g -Werror=implicit-function-declaration -Imock_hardware -Imock_hardware/stubs -Iwhitewhale/libavr32/src -Iwhitewhale/libavr32/asf/common/services/usb -Iwhitewhale/libavr32/asf/common/services/usb/uhc -Iwhitewhale/libavr32/conf -Iwhitewhale/libavr32/conf/trilogy -std=c99 -c -o ../build/firmware/mock_hardware/adapter.c.o mock_hardware/adapter.c
mock_hardware/adapter.c: In function 'ftdi_read':
mock_hardware/adapter.c:238:67: warning: passing argument 3 of 'hardware_readSerial_internal' from incompatible pointer type [-Wincompatible-pointer-types]
238 | hardware_readSerial_internal(FTDI_BUS, &current_ftdi_message, &current_ftdi_message_length);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| u8 * {aka unsigned char }
In file included from mock_hardware/adapter.c:2:
mock_hardware/mock_hardware.h:33:79: note: expected 'uint32_t ' {aka 'unsigned int '} but argument is of type 'u8 ' {aka 'unsigned char '}
33 | void hardware_readSerial_internal(serial_bus_t bus, uint8_t
pbuf, uint32_t
pcount);
| ~~~~~~~~~~^~~~~~
mock_hardware/adapter.c: In function 'screen_clear':
mock_hardware/adapter.c:352:39: warning: passing argument 2 of 'hardware_getScreenBuffer' makes pointer from integer without a cast [-Wint-conversion]
352 | hardware_getScreenBuffer(&screen, width, height);
| ^~~~~
| |
| uint16_t {aka short unsigned int}
In file included from mock_hardware/adapter.c:2:
mock_hardware/mock_hardware.h:38:56: note: expected 'uint16_t ' {aka 'short unsigned int '} but argument is of type 'uint16_t' {aka 'short unsigned int'}
38 | void hardware_getScreenBuffer(uint8_t
ptr, uint16_t
width, uint16_t
height);
| ~~~~~~~~~~^~~~~
mock_hardware/adapter.c:352:46: warning: passing argument 3 of 'hardware_getScreenBuffer' makes pointer from integer without a cast [-Wint-conversion]
352 | hardware_getScreenBuffer(&screen, width, height);
| ^~~~~~
| |
| uint16_t {aka short unsigned int}
In file included from mock_hardware/adapter.c:2:
mock_hardware/mock_hardware.h:38:73: note: expected 'uint16_t ' {aka 'short unsigned int '} but argument is of type 'uint16_t' {aka 'short unsigned int'}
38 | void hardware_getScreenBuffer(uint8_t
ptr, uint16_t* width, uint16_t* height);
| ~~~~~~~~~~^~~~~~
cc -DNULL=0 -o0 -D__AVR32_UC3B0256__ -fPIC -g -Werror=implicit-function-declaration -Imock_hardware -Imock_hardware/stubs -Iwhitewhale/libavr32/src -Iwhitewhale/libavr32/asf/common/services/usb -Iwhitewhale/libavr32/asf/common/services/usb/uhc -Iwhitewhale/libavr32/conf -Iwhitewhale/libavr32/conf/trilogy -std=c99 -c -o ../build/firmware/mock_hardware/mock_hardware.c.o mock_hardware/mock_hardware.c
mock_hardware/mock_hardware.c: In function 'hardware_declareNVRAM':
mock_hardware/mock_hardware.c:330:15: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
330 | nvram_ptr = ptr;
| ^
mock_hardware/mock_hardware.c: In function 'hardware_declareVRAM':
mock_hardware/mock_hardware.c:347:14: warning: assignment discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
347 | vram_ptr = ptr;
| ^
cc -DNULL=0 -o0 -D__AVR32_UC3B0256__ -fPIC -g -Werror=implicit-function-declaration -Imock_hardware -Imock_hardware/stubs -Iwhitewhale/libavr32/src -Iwhitewhale/libavr32/asf/common/services/usb -Iwhitewhale/libavr32/asf/common/services/usb/uhc -Iwhitewhale/libavr32/conf -Iwhitewhale/libavr32/conf/trilogy -std=c99 -c -o ../build/firmware/mock_hardware/monome.c.o mock_hardware/monome.c
In file included from mock_hardware/monome.c:2:
mock_hardware/stubs/print_funcs.h:13:46: warning: 'fprintf' is static but used in inline function 'print_dbg_hex' which is not static
13 | inline void print_dbg_hex(unsigned long n) { fprintf(stderr, "%lx", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:12:53: warning: 'fprintf' is static but used in inline function 'print_dbg_short_hex' which is not static
12 | inline void print_dbg_short_hex(unsigned short n) { fprintf(stderr, "%d", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:11:51: warning: 'fprintf' is static but used in inline function 'print_dbg_char_hex' which is not static
11 | inline void print_dbg_char_hex(unsigned char n) { fprintf(stderr, "%x", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:10:48: warning: 'fprintf' is static but used in inline function 'print_dbg_ulong' which is not static
10 | inline void print_dbg_ulong(unsigned long n) { fprintf(stderr, "%ld", n); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:9:37: warning: 'fprintf' is static but used in inline function 'print_dbg_char' which is not static
9 | inline void print_dbg_char(int c) { fprintf(stderr, "%d", c); }
| ^~~~~~~
mock_hardware/stubs/print_funcs.h:8:42: warning: 'fprintf' is static but used in inline function 'print_dbg' which is not static
8 | inline void print_dbg(const char* str) { fprintf(stderr, "%s", str); }
| ^~~~~~~
g++ -o ../res/firmware/whitewhale.dll ../build/firmware/whitewhale/src/main.c.o ../build/firmware/whitewhale/libavr32/src/events.c.o ../build/firmware/whitewhale/libavr32/src/timers.c.o ../build/firmware/whitewhale/libavr32/src/util.c.o ../build/firmware/mock_hardware/adapter.c.o ../build/firmware/mock_hardware/mock_hardware.c.o ../build/firmware/mock_hardware/monome.c.o -shared
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../build/firmware/mock_hardware/adapter.c.o:C:_Projects\VCVRack\v1\Rack\plugins\monome-rack\firmware/mock_hardware/adapter.c:28: multiple definition of tcTicks'; ../build/firmware/whitewhale/src/main.c.o:C:\_Projects\VCVRack\v1\Rack\plugins\monome-rack\firmware/whitewhale/libavr32/src/init_trilogy.h:7: first defined here C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../build/firmware/mock_hardware/adapter.c.o:C:\_Projects\VCVRack\v1\Rack\plugins\monome-rack\firmware/mock_hardware/adapter.c:29: multiple definition of tcOverflow'; ../build/firmware/whitewhale/src/main.c.o:C:_Projects\VCVRack\v1\Rack\plugins\monome-rack\firmware/whitewhale/libavr32/src/init_trilogy.h:8: first defined here
collect2.exe: error: ld returned 1 exit status
make[1]: *** [whitewhale.mk:56: ../res/firmware/whitewhale.dll] Error 1
make[1]: Leaving directory '/c/_Projects/VCVRack/v1/Rack/plugins/monome-rack/firmware'
make: *** [Makefile:41: firmwares] Error 2

an

What operating system and version are you running?

What version of Rack are you running?

What's the behavior you observed?

What should have happened instead?

If you're having trouble building, please paste the output of these commands:

git status
git submodule status
make clean
make

If you're experiencing a problem while running Rack, please paste the complete terminal log from your Rack session:

If you have a patch file that reproduces the issue, please drag-and-drop it here:

Support more grids

Currently, only modern varibright grid 128 models are supported, for both virtual and real grids. (A real varibright 256 will work, but will only use the top half.)

Rough order of priorities:

  • Virtual 64
  • Identify real 64/128 correctly
  • Identify real non-varibright/older protocol models correctly
  • Virtual non-varibright/older protocol models (for testing)

Rack-specific documentation site

Create a VCV-rack specific documentation pages page on gh-pages and redirect Plugin > Manual to it. Right now it links to monome.org/docs which is not as immediately helpful.

problem with instantiation in Rack

The plugin loads okay and the panels display properly (minus labels, of course), but looking at the command-line output I see this:

Binding to port 13000.
[warning] Creating new temporary firmware instance at module-firmware7kd6yQ
[warning] Failed to load library module-firmware7kd6yQ: module-firmware7kd6yQ: cannot open shared object file: No such file or directory

What's up with that ?

Cool project, btw. It has me thinking about purchasing a used monome.

Add RACK_DIR to all firmware makefiles

macOS 10.14.5

Rack V1 built from source.

I cloned monome-rack to plugins directory.
make fails building firmware files, as ${RACK_DIR}/arch.mk cannot be found.

I had to add
RACK_DIR ?= ../../..
to all firmware/*.mk files to fix this.

Use GitHub Actions to produce plugin builds on push

GitHub Actions have been set up to produce Linux builds and post on the releases page after every commit to master.

  • Need to verify correctness of Linux build
  • Need to complete cross-compilation container for mingw32/Windows
  • Need to complete cross-compilation container for clang/OSX

support 256 grid and add virtual 256 grid

Potential features:

  • Support 256 hardware: white whale scanner_darkly 256 mod, earthsea 256 mod, kria 256 branch of ansible ported back to WW hardware?
  • Virtual 256?
  • An extension of explicit serialosc module: a serialosc splitter. Use a 128 as two 64s, a 256 as two 128s or four 64s...?
  • Virtual 512??? (probably not... but what if there was a plane port?)

Cant get the virtual grid to start, I am using a build for Windows made by rackedge.

What operating system and version are you running? Win 7

What version of Rack are you running? V.0.5.1

What's the behavior you observed? I tried the White Wale module and virtual grid 64

right clicked on White Wale and connected it to virtual grid 64.
And a clock in on White Wale.
But when i click on the virtual grid, nothing happens.
What are I am doing wrong.
Do you have a vcv rack patch I could download to see the connections

What should have happened instead?

If you're having trouble building, please paste the output of these commands:

git status
git submodule status
make clean
make

If you're experiencing a problem while running Rack, please paste the complete terminal log from your Rack session:

If you have a patch file that reproduces the issue, please drag-and-drop it here:

Use separate processes to run firmware

Goals:

  • Replace the temp-folder copying solution for loading multiple copies of a .dll/.dylib/.so
  • Enable implementation of the II bus
  • Improve performance?

segfault when disconnecting real grid

What operating system and version are you running?

Linux

What version of Rack are you running?

0.5.1

What's the behavior you observed?

VCV Rack segfaults when a real grid is connected to White Whale (haven't tested the others) and you disconnect it.

What should have happened instead?

VCV Rack shouldn't segfault ;)

If you want I can get a backtrace

14 errors when making on MAC

I get 14 errors when I make the plugs on Mac


c++ -o0 -Werror=implicit-function-declaration -Isrc -Isrc/common -Isrc/grid -Isrc/whitewhale -Ilib/base64 -Ilib/oscpack -Ilib/serialosc -fPIC -I../../include -I../../dep/include -DVERSION=dev -O3 -march=nocona -ffast-math -g -Wall -DARCH_MAC -mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++ -c -o build/src/plugin.cpp.o src/plugin.cpp
In file included from src/plugin.cpp:1:
src/grid/grid.hpp:21:18: error: only virtual member functions can be
      marked 'override'
    void reset() override;
                 ^~~~~~~~
src/grid/grid.hpp:35:22: error: only virtual member functions can be
      marked 'override'
    json_t* toJson() override;
                     ^~~~~~~~
src/grid/grid.hpp:36:34: error: only virtual member functions can be
      marked 'override'
    void fromJson(json_t* rootJ) override;
                                 ^~~~~~~~
src/grid/grid.hpp:38:22: error: unknown type name 'EventDragEnter'
    void onDragEnter(EventDragEnter& e) override;
                     ^
src/grid/grid.hpp:39:22: error: unknown type name 'EventMouseDown'
    void onMouseDown(EventMouseDown& e) override;
                     ^
In file included from src/plugin.cpp:3:
src/whitewhale/whitewhale.hpp:9:22: error: only virtual member functions
      can be marked 'override'
    void randomize() override;
                     ^~~~~~~~
src/plugin.cpp:12:8: error: no member named 'version' in 'rack::Plugin'
    p->version = TOSTRING(VERSION);
    ~  ^
src/plugin.cpp:14:8: error: no member named 'website' in 'rack::Plugin'
    p->website = "https://github.com/monome/whitewhale";
    ~  ^
src/plugin.cpp:16:8: error: no member named 'addModel' in 'rack::Plugin'
    p->addModel(createModel<WhiteWhaleWidget>("monome", "whitewh...
    ~  ^
src/plugin.cpp:16:86: error: use of undeclared identifier
      'SEQUENCER_TAG'
  ..."whitewhale", "white whale", SEQUENCER_TAG, CLOCK_TAG, EXTERNAL_...
                                  ^
src/plugin.cpp:16:101: error: use of undeclared identifier 'CLOCK_TAG'
  ..."whitewhale", "white whale", SEQUENCER_TAG, CLOCK_TAG, EXTERNAL_...
                                                 ^
src/plugin.cpp:16:112: error: use of undeclared identifier
      'EXTERNAL_TAG'
  ..."whitewhale", "white whale", SEQUENCER_TAG, CLOCK_TAG, EXTERNAL_...
                                                            ^
src/plugin.cpp:19:8: error: no member named 'addModel' in 'rack::Plugin'
    p->addModel(createModel<MonomeGridWidgetTemplate<16, 8>>("mo...
    ~  ^
src/plugin.cpp:19:103: error: use of undeclared identifier
      'CONTROLLER_TAG'
  ...8>>("monome", "grid128", "virtual grid 128", CONTROLLER_TAG));
                                                  ^
14 errors generated.
make: *** [build/src/plugin.cpp.o] Error 1
iMacdiAGrazioli:monome-rack antonio_grazioli$ 

Performance analysis

No performance analysis has been done. Changes were made with intent to be efficient, and initial testing sounds good, but no deep study of the timing or the CPU utilitization has been performed yet. There is likely room for improvement.

Support TouchOSC virtual grids

I would like to be able to use OpenStageControl and/or TouchOSC to send/receive OSC messages to/from the monome-rack plugins via UDP/IP.

https://www.youtube.com/watch?v=Y1QRYYoeQQs&ab_channel=PrimordialWaves
https://github.com/okyeron/oscgrid

Various Opensource modules allready support OSC connections, but it would not be easy to make a virtual "grid" using those:
https://library.vcvrack.com/trowaSoft/cvOSCcv
https://library.vcvrack.com/OSCelot

Thank you, your effort is much appreciated!

selecting CV A crashes Rack

Fedora 23 Linux
VCV Rack 0.6.2c from source

The subject line says it. Whenever I select any of the four buttons for CV A it reliably crashes Rack. CV B shows no such problem. No errors are reported at the terminal prompt, but I'll try to generate a debug report with gdb.

Btw, I've been playing with the White Whale and Meadowphysics modules, having great fun learning and using them. I'll post a YouTube video asap. Thank you for the cool plugin !

Restore support for older-protocol grids (real and virtual)

The 0.6 branch supported both modern grids (mext protocol varibright) and older non-varibright models, but support for older protocols was somewhat tenuous since I don't have easy access to physical devices. The new connection system for 1.0 necessitated changing the way grid detection works, so this support has been removed until it can be reverified.

Separately, for the virtual grids, the new Rack library preview makes having separate varibright and series models in the library less desirable. The new plan is to have a single module per size, but add a right-click menu option to pick the protocol to emulate (and also the LED color?)

Emulate the Ansible module

  • Integrate firmware
  • Create Rack module and map I/O
  • Save NVRAM in patch
  • Save VRAM in patch
  • Fix race condition in process_timers()
  • Fix clock timing / finally implement get_ticks()
  • Fix odd behavior in mode button
  • Fix odd behaviors in key 1/2
  • Fix stuck grid keys in earthsea
  • Change virtual grid varibrightness steps to be exponential (make kria more legible)
  • Fix button double-triggering issue
  • Enable ctrl-click hold on panel keys
    import/export .json presets

Update for VCV Rack 2.0

VCV Rack 2.0 API changes to react to:

  • Module's process() methods will run in the audio thread. This could end up being somewhat disruptive.
  • Some method names changing
  • LED widget changes

VCV Rack 2.0 features to take advantage of:

  • Context menu changes (easier nested menus/radio selections)
  • Multiple SVG layers on knobs
  • International keyboard support more info
  • Make sure custom widgets work with dark lighting mode
  • Update for new layer-based lighting (fix halos being clipped at module edge)

Linux build

Linux Fedora 23
Rack 0.5.0

monome-rack builds cleanly on Linux and instantiates in Rack without trouble. Rack crashed when I deleted the virtual monome but I think it's an unrelated issue (Rack crashes occasionally with deleted modules). Since the current graphics are incomplete I have no clue what to do, I'll look up the specs for the White Whale sequencer and see if I can figure it out. Anyway, very cool project, thank you for the neat new modules. :)

Earthsea: crashing in different ways...

win7
rack 0.5

had a little time and tried to learn/play a bit with the earthsea module, but i'm having a hard time getting it to work with the virtual grids as well as grid64.

first of all:
it doesn't like the regular virtual grids! whenever i try to connect one my term gets spammed with 'e' letters.
with the monos it's a little bit better, but i had it crashing many times with certain key combinations.
still have to figure out the step-by-step clicks, but the last button i pressed was always the top left one.

trying some more and reporting back later.

Earthsea nonfunctional on Windows

What operating system and version are you running?

Windows 10

What version of Rack are you running?

v0.5

What's the behavior you observed?

Earthsea works fine on mac OS. On Windows, it doesn't do anything when you add it to a patch, and if you connect it to a grid, Rack hangs.

LED flickering on Arduinome / 40h grid

I built Rack 0.6 and monome-rack on macOS 10.14.1 (Mojave) without problems.

Connecting one of the rack modules to the virtual grids made no problems.
As I built a Arduinome (Arduino based Monome clone) a long time ago, I gave it a try. The connection itself worked seamlessly, but some of the LEDs show heavy flickering, especially those who appear in the virtual grids either dimmed or moving.
It looks like the LEDs get switch on and immediately of again. I would expect the half bright LEDs to have full brightness.

The old grid models do not have the varibright feature. As other LEDs show up in full brightness, maybe the varibright settings are not correctly supported for the old grids.

Teletype (1.0.0-pre) registers rise and fall of pulse on trigger inputs

What operating system and version are you running?

Windows 10 x64

What version of Rack are you running?

Rack 1.1.6

What's the behavior you observed?

I begin by initializing some things, like O maximum and pattern length on live mode:
PN.END 0 7
O.MAX 7

So, I type in a script on teletype that addresses pattern 0 and returns a pulse on 1, for instance:
PN.I 0 O
CV 1 N PN.HERE 0
TR.PULSE 1

The thing that happens is that when this script is called, it's called twice per pulse cycle. With a square wave you can see it advancing at double the tempo when you go to the pattern table screen. When varying the incoming pulse width you can also see that it offsets every other script call off the initial cycle tempo.

I am out of the loop when it comes to whether the real Teletype did this, but it sure doesn't sound like it does.

Cannot compile!?

MSYS2 - Windows 10 Pro

$ make
cd firmware && make -f whitewhale.mk
make[1] : on entre dans le répertoire « /home/caeco/rack/plugins/monome-rack/firmware »
whitewhale.mk:30: /arch.mk: No such file or directory
make[1]: *** Aucune règle pour fabriquer la cible « /arch.mk ». Arrêt.
make[1] : on quitte le répertoire « /home/caeco/rack/plugins/monome-rack/firmware »

Improve grid-module assignment system

The right-click menu system to assign grids to modules needs work.

  • Unplugging a real monome’s USB cable while it’s connected to a virtual module can cause a crash.
  • In some situations, deleting a virtual grid from a patch can cause a crash.
  • Assigning two modules to the same virtual grid produces unexpected results.

Emulate the Kria alt firmware for White Whale

https://github.com/monome/kria
https://llllllll.co/t/kria-0-3-initial-release/2409/29

Tasks:

  • Link in Kria as submodule, get it to build in mock_hardware system.
  • Enable reuse of the WW widget and core classes, but swapping firmware and SVG graphics.
  • Decide whether alt firmwares are a completely new module or a right-click swap like the alt firmwares for Audible modules? Probably a completely new one, saving module memory to the rack patch would interact weirdly with runtime firmware swaps.
  • Create SVG panel graphics for Kria.

build fail with latest pull

Ubuntu 18.04 Linux
1.x dev

Hi Michael !

The problem:

make[1]: Entering directory '/home/dlphilp/src/Rack/plugins-extra/monome-rack/firmware'
cc -DNULL=0 -o0 -D__AVR32_UC3B0256__ -fPIC -g -Werror=implicit-function-declaration -Imock_hardware -Imock_hardware/stubs -Iwhitewhale/libavr32/src -Iwhitewhale/libavr32/src/usb/midi -Iwhitewhale/libavr32/src/usb/hid -Iwhitewhale/libavr32/src/usb/cdc -Iwhitewhale/libavr32/asf/common/services/usb -Iwhitewhale/libavr32/asf/common/services/usb/uhc -Iwhitewhale/libavr32/conf -Iwhitewhale/libavr32/conf/trilogy  -std=c99 -c -o ../build/firmware/whitewhale/mock_hardware/mock_hardware.c.o mock_hardware/mock_hardware.c
mock_hardware/mock_hardware.c: In function ‘hardware_iiPushMessage’:
mock_hardware/mock_hardware.c:510:9: error: implicit declaration of function ‘memcpy_s’; did you mean ‘memcpy’? [-Werror=implicit-function-declaration]
         memcpy_s(iiMessageBuffer[iiMessageBufferIndex].data, II_MAX_DATA, data, length);
         ^~~~~~~~
         memcpy
cc1: some warnings being treated as errors
whitewhale.mk:60: recipe for target '../build/firmware/whitewhale/mock_hardware/mock_hardware.c.o' failed
make[1]: *** [../build/firmware/whitewhale/mock_hardware/mock_hardware.c.o] Error 1
make[1]: Leaving directory '/home/dlphilp/src/Rack/plugins-extra/monome-rack/firmware'
Makefile:42: recipe for target 'firmwares' failed
make: *** [firmwares] Error 2

Any suggestions ?

Support arc controllers

  • Support connection of serialosc arc devices to modules that support arcs
  • Virtual arc2?
  • Virtual arc4 - linear or 2x2? Rack form factor is not clear.

Leaning towards just supporting hardware arcs and not trying to make virtual ones.

build fail and corrections

Linux Fedora 23
Rack 0.5.0

latest git pull of monome-rack sources

added cstdarg and cstring includes to firmwaremanager.cpp for GCC 5.3.1 to avoid errors with va_* and strncpy calls

added -fPIC to whitewhale.mk FLAGS to avoid this error:

g++ -o ../build/firmware/whitewhale.so ../build/firmware/whitewhale/src/main.c.o ../build/firmware/whitewhale/libavr32/src/events.c.o ../build/firmware/whitewhale/libavr32/src/timers.c.o ../build/firmware/whitewhale/libavr32/src/monome.c.o ../build/firmware/whitewhale/libavr32/src/util.c.o ../build/firmware/mock_hardware/adapter.c.o ../build/firmware/mock_hardware/mock_hardware.c.o -shared
/usr/bin/ld: ../build/firmware/whitewhale/src/main.c.o: relocation R_X86_64_32 against `flashy' can not be used when making a shared object; recompile with -fPIC
../build/firmware/whitewhale/src/main.c.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
whitewhale.mk:49: recipe for target '../build/firmware/whitewhale.so' failed
make[1]: *** [../build/firmware/whitewhale.so] Error 1
make[1]: Leaving directory '/home/dlphilp/src/Rack-050/plugins/monome-rack/firmware'
Makefile:37: recipe for target 'firmwares' failed
make: *** [firmwares] Error 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.