Firmware and SDK for the ER-301

Overview

ER-301 Sound Computer

Table of Contents

Introduction

This project contains the source code for:

  • primary boot loader (MLO)
  • secondary boot loader (SBL)
  • firmware (kernel.bin)
  • emulator (Linux and macOS only)
  • factory mods (core, teletype)
  • SDK for building your own mods

Emulator

The purpose of this emulator is to make writing code for the ER-301 just a little bit easier and fun. Although you could, the emulator is not designed for making music. I can see also see the emulator being useful to someone who just wants to know more about the ER-301 before buying one.

Compiling the emulator

⚠️ The following instructions have been tested on Ubuntu 20.xx.

To compile and run the emulator you will need the following dependencies installed:

# ubuntu
sudo apt update
sudo apt install build-essential libsdl2-dev libsdl2-ttf-dev libfftw3-dev swig zip fonts-freefont-ttf

# macOS
brew install gcc sdl2 sdl2_ttf fftw swig zip

To compile, execute this in the top directory:

make emu

Running the emulator

⚠️ Replace 'linux' with 'darwin' when running on macOS.

Executing the emulator from the root of the project tree without arguments will start it up with default settings:

testing/linux/emu/emu.elf

This will typically be enough to get started. If you want to dive in deeper execute with '-h' or --help' to get help on the commandline configuration options:

> testing/linux/emu/emu.elf --help
ER-301 Emulator (v0.6.02)
Usage: emu.elf [OPTIONS]

Examples:
  emu.elf              # Start emulator with default configuration file.
  emu.elf -c foo.cfg   # Start emulator with 'foo.cfg'.

  -h, --help         Show this help.
  -c, --config FILE  Use the given configuration file.
                     (Default: ~/.od/emu.config)

⚠️ If you do not want to execute the emulator from top of the project tree then you will have to configure the path to the lua scripts file tree (XROOT) before starting the emulator.

Configuring the emulator

If you run the emulator and it cannot find a valid configuration file then the program will create a default one in ~/.od/emu.config that is similar to this:

## ER-301 Emulator Configuration

## Root for the Lua interpreter
XROOT ./xroot

## Use this root for the rear SD card.
REAR_ROOT ~/.od/rear

## Use this root for the front SD card.
FRONT_ROOT ~/.od/front

## Key mapping

BUTTON_MAIN1_KEY Q
BUTTON_MAIN2_KEY W
BUTTON_MAIN3_KEY E
BUTTON_MAIN4_KEY R
BUTTON_MAIN5_KEY T
BUTTON_MAIN6_KEY Y
BUTTON_DIAL1_KEY A
BUTTON_DIAL2_KEY S
BUTTON_DIAL3_KEY D
BUTTON_SUB1_KEY F
BUTTON_SUB2_KEY G
BUTTON_SUB3_KEY H
BUTTON_ENTER_KEY V
BUTTON_UP_KEY B
BUTTON_SHIFT_KEY N
BUTTON_SELECT1_KEY 1
BUTTON_SELECT2_KEY 2
BUTTON_SELECT3_KEY 3
BUTTON_SELECT4_KEY 4
STORAGE_FOCUS_KEY Z
MODE_FOCUS_KEY X
ZOOM_IN_KEY =
ZOOM_OUT_KEY -
QUIT_KEY Q

## Knob mapping

##  Scale factor for mouse wheel. Negate to invert.
MOUSE_WHEEL_FACTOR 0.5

##  Scale factor for LEFT/RIGHT arrow keys. Negate to invert.
LEFT_RIGHT_ARROWS_FACTOR 1

##  Scale factor for UP/DOWN arrow keys. Negate to invert.
UP_DOWN_ARROWS_FACTOR 0.25

Edit this file with your own values to configure various items like key mappings, knob speed, and paths for lua scripts and file trees.

Installing packages

Packages encapsulate unit presets (.unit), unit definitions (.lua), and shared libraries (*.so) into one shareable bundle along with any necessary assets (e.g. sound files and so on). The core units are also distributed as a package, so let's use the core package as an example. First, to compile and create the core package, execute:

make core

Next, let's go over the two main methods for installing packages.

Manual Package Install

This method mirrors exactly what an end-user would do to install a package. Copy the resulting package file to front/ER-301/packages. You will need to change the command below to match the correct version.

cp testing/linux/mods/core-<version>.pkg ~/.od/front/ER-301/packages

Finally, run the emulator again using the same command-line as before and install the core mod package from the Package Manager screen. Now you will have access to all of the core units in the emulator.

Auto Package Install

This method is used by the firmware installer and can be useful for development also. You simply copy the *.pkg file to the rear root:

cp testing/linux/mods/core-<version>.pkg ~/.od/rear

Then the next time you boot up the emulator, it will move over packages found in rear to front/ER-301/packages. This makes the package show up in the Package Manager. Finally, depending on the following conditions the package may or may not be automatically installed:

Condition Action
There is no previous version of the package. Install the package.
There is a previous version of the package but it is not installed. Do not install the package.
There is a previous version of the package and it is installed. Uninstall the previous version and install the newer version.

Limitations

The emulator can load and execute any mod that the real ER-301 can load and execute. No porting of source code is necessary (even those written using NEON instrinsics), just recompilation for the target host on which you will run the emulator. However, there are a few differences when it comes to the inputs and outputs.

Outputs are mixed down to stereo

Currently, the 4 output channels are mixed down to stereo for maximal compatibility with different setups.

  • Left channel: OUT1+OUT3
  • Right channel: OUT2+OUT4

No external inputs

There are no external input channels implemented yet. However, when it comes to the main purpose of this emulator, it hasn't been much of an obstacle since you can generate just about any testing signals that you need within the ER-301 emulation. In fact, when it comes to testing, it is usually much easier to deal with canned signals for their repeatibility and ease of setup.

No I2C control

The teletype mod will compile and install. You can even instantiate its units. However, there is no emulation of the I2C bus.

Creating your own mods

Install the TI Processor SDK for AM335x

First, you will need to install the TI-RTOS development tools for the AM335x.

  1. It is important that you use this specific version: 04.01.00.06.
  2. Navigate to this page and download the file called ti-processor-sdk-rtos-am335x-evm-04.01.00.06-Linux-x86-Install.bin.
  3. Executing this file will run an installer program.
  4. When asked, please set the destination folder to ~/ti. This is the path assumed by the project makefiles. If instead you install to a different folder then before executing any cross-compilation commands, you will need to set the TI_INSTALL_DIR shell environment variable to the actual path that you used. If you don't want to change your shell environment then you can also pass the path on the commandline like this:
make core TI_INSTALL_DIR=~/your-path-to-ti-sdk ARCH=am355x

This documentation will assume that you used the default location.

Note: If you get a warning message from the installer about a "Problem running post-install step. Installation may not complete correctly.", you can ignore it.

Other required dependencies

sudo apt install swig python3 zip gcc-multilib

Test your build environment

A good test of your build environment is to see if you can successfully build the factory mods:

make core teletype ARCH=am355x

Work through the tutorials

The tutorial directory contains 3 example projects that progressively increase in complexity and sophistication. These projects also show how you can work completely outside of this source tree.

USB Functions

There is a USB port on the back of the ER-301. As of v0.6.00 of the firmware, the ER-301 can enumerate as a mass storage device (which provides access to the front SD card) or a virtual serial port device (the ER-301 will output console messages here when connected). The settings for USB are located in admin > General Settings. However, I would think of the USB functionality as more developer-targeted for because...

⚠️ There is a gotcha with having the ER-301 plugged into a USB host. It will not boot because it will be waiting for the USB host to give it firmware via BOOTP/TFTP. This is baked into the AM335x ROM unfortunately. The solution is to have a BOOTP server always running on your host that either gives it the firmware or tells the ER-301 to give up and boot from the SD card.

Build profiles and target architectures

All build outputs are placed in a sub folder composed of the build profile and the target architecture. There are 3 build profiles:

  • testing: All optimizations and logging enabled.
  • debug: No optimizations. Logging enabled.
  • release: All optimizations enabled. Logging disabled.

And here are the 3 supported target architectures:

  • am335x
  • linux
  • darwin (macOS)

So for example, if I execute the following make command:

make core PROFILE=debug ARCH=linux

Then the build outputs will appear in the debug/linux directory of the project root. Generally, the default profile is testing and the default architecture is determined by your OS (uname -s). See the top-level Makefile for more details.

Glossary

Package

A package is an archive of files along with meta data that allows it to be recognized and manipulated (i.e. installed, uninstalled, loaded, unloaded) by the package manager.

Mod

A mod is any collection of code that is to be executed by the base firmware and is not part of of the base firmware. So a package containing scripts (.lua) and/or shared libraries (.so) is a packaged mod. A package containing only presets is not a packaged mod, it is just a package of presets.

Issues
  • Add callbacks for floating menu change/enter events

    Add callbacks for floating menu change/enter events

    Add callbacks for floating menu change and enter events.

    See discussion

    Testing:

    • [x] Verify menu still works as normal
    • [x] Verify changed is called on encoder move Output from the info log:
    [#167 7.5638s lua] INFO edit 2
    [#168 8.8137s lua] INFO pin to <new> 3
    [#169 9.3635s lua] INFO edit 2
    [#170 10.0636s lua] INFO expand 1
    [#171 12.5969s lua] INFO cancel 0
    
    
    • [x] Verify enter is called on menu start
    • [x] Verify menu on header still works

    Example Usage https://forum.orthogonaldevices.com/t/developing-for-the-er-301/5248/333

    opened by tmfset 19
  • Add module dirs to the require path on load

    Add module dirs to the require path on load

    When loading a mod, update the require path to include the base directory for that module, then reset it afterwards.

    In particular this is useful for creating shared directories of lua code. When a module is packaged we copy the shared code into that package, but since we don't know the actual module in question the shared code has no way to reference itself.

    This change makes it so shared code can require itself without needing to know which module it's a part of.

    Testing

    • [x] Tested with an example project locally
    opened by tmfset 16
  • emu: can't zoom out with minus key

    emu: can't zoom out with minus key

    issue : i can zoom in with "equals" key, but i can't zoom out with "minus" key. I'm using a french keyboard layout. I replaced SDLK_MINUS with SDLK_6 to get it to work.

    opened by bapch 6
  • Error: fonts-freefont-ttf when installing dependencies

    Error: fonts-freefont-ttf when installing dependencies

    I have Homebrew installed on my mac, running Catalina 10.15.7 and when trying to install the dependencies I get the following error, I have tried searching for the error, but am unable to locate any troubleshooting tips. Is there an issue with the distribution or is it just me?

    $ brew install gcc sdl2 sdl2_ttf fftw swig python3 zip fonts-freefont-ttf
    Updating Homebrew...
    ==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
      https://github.com/Homebrew/brew#donations
    ==> Auto-updated Homebrew!
    Updated 1 tap (homebrew/core).
    ==> Updated Formulae
    Updated 6 formulae.
    
    ==> Searching for similarly named formulae...
    Error: No similarly named formulae found.
    Error: No available formula or cask with the name "fonts-freefont-ttf".
    ==> Searching for a previously deleted formula (in the last month)...
    Error: No previously deleted formula found.
    ==> Searching taps on GitHub...
    Error: No formulae found in taps.
    M$ make emu
    make: *** No rule to make target `emu'.  Stop.
    

    When trying to compile (after error) I get:

    $ make emu
    make: *** No rule to make target `emu'.  Stop.
    
    opened by noodleboy91 4
  • Load slices from wav cues if no slc file exists

    Load slices from wav cues if no slc file exists

    Thought I'd try my hand at this since it's been talked about on the forum a lot.

    Basically we just load the wav cues if there's no slice file present, easy peasy.

    Test steps:

    1. Create a wav file with some cue markers on it (I used Reaper to do this plus export stems with markers)
    2. Load the sample into the sample pool in admin
    3. Create a varispeed player and look at the slices, see they match the cue markers.
    opened by tmfset 3
  • Update emulator to support Apple M1 arch

    Update emulator to support Apple M1 arch

    The Apple M1 chips use NEON for simd, so we can update the hal to simply use the appropriate header.

    There's a couple other touch ups here and there as well.

    Testing

    • [x] Works on M1 machine.
    • [x] Works on x86 machine.
    opened by tmfset 2
  • Some small optimizations in common DSP (hopefully)

    Some small optimizations in common DSP (hopefully)

    I feel like these could use a bit of simd love, of course would want to test this on device to actually make sure it does anything.

    There's probably a reason you haven't done this already (i.e. it doesn't work) but I thought I'd give it a shot anyways.

    opened by tmfset 2
  • Allow units to define their own scope view

    Allow units to define their own scope view

    Wishful thinking ;)

    This is surprisingly simple but not perfect. When the scope view is toggled back to edit mode the cursor lands on whatever position the scope control is on but in the expanded view. If there are more controls in the scope view than in the expanded view then we get:

    [#163 20.9880s lua] INFO Chain.Root(OUT1,depth=1,6053140b):navigateToXPath:Unit(Sloop,71729443) has no control at index=8
    

    so defensive coding saves the day!

    Personally I think this is an acceptable bug given the flexibility it adds. Also there is already an issue with cursor position when switching between sub-views so this is not strictly new or out of the ordinary.

    Testing:

    • [x] Verify fallback case, existing units still display correctly.
    • [x] Verify new case, custom scope views display correctly.
    opened by tmfset 2
  • Chain sometimes stops producing audio when a unit loads a sample.

    Chain sometimes stops producing audio when a unit loads a sample.

    Bug reported in v0.6.02 on the forum:

    ...any unit that uses a buffer (Manual Grains, Single Cycle, Variable Player), after switching the buffer to a different sample 1-3 times will render the unit silent. Sometimes deleting and inserting a replacement unit will fix it, sometimes I need to clear the whole chain...

    opened by odevices 2
  • Package filenames are hard-coded in the installation script.

    Package filenames are hard-coded in the installation script.

    This is hard to fix while maintaining compatibility with older firmware (that might be running the installation script). The is mainly because ZipArchiveReader class in older firmware does not expose the getFileCount() and getFilename() methods.

    opened by odevices 2
  • Adjust the readout cursor based on orientation

    Adjust the readout cursor based on orientation

    I've been experimenting with some new UI layouts and noticed that Readouts don't currently honor the cursor orientation when setting the cursor position.

    This change updates the cursor position calculation to switch on cursor orientation:

    • If the cursor points right, use the left middle side of the text.
    • If the cursor points left, use the right middle side of the text.
    • If the cursor points down, use the top middle side of the text.
    • If the cursor points up, use the bottom middle side of the text.

    Example of my use case with this code, I want the cursor to point left so it doesn't cover up the readout right next to it:

    Screen Shot 2022-01-09 at 2 35 15 AM

    An alternative approach I considered was to draw a box around the readout (instead of using the cursor), but unfortunately there is no reliable way to extract the text dimensions that it calculates.

    opened by tmfset 1
  • 301 not booting with (powered) 16n connected

    301 not booting with (powered) 16n connected

    Steps to reproduce: Have a usb powered faderbank connected via i2c to the 301 and power up the 301.

    I thought there was some other discussion on the forum about that, I think it was mentioned around v0.5 that this should be fixed? I am on v0.7 and still have the issue of having to disconnect the usb power to the faderbank before booting the 301.

    opened by modularev 0
  • Show slice selection, ideally before trigger

    Show slice selection, ideally before trigger

    Requested here:

    https://forum.orthogonaldevices.com/t/v0-7-x-progress-and-feedback/6139/27?u=odevices

    @tmfset suggested to do the calculation in the UI thread.

    enhancement 
    opened by odevices 1
  • A signal bus for control messages.

    A signal bus for control messages.

    Units will respond to control messages. For example:

    • Clear buffer
    • Start/Stop
    • Disable/Enable Bypass
    • Load preset

    There will also be a mechanism (possibly specialized units?) to trigger control messages.

    enhancement 
    opened by odevices 0
  • Package library class fails to instantiate right after installation.

    Package library class fails to instantiate right after installation.

    [214 13.0401s lua] INFO Attempting to require teletype...
    [215 13.0402s lua] INFO teletype returned: Package.Library(teletype)
    [216 13.0519s lua] INFO Package(teletype-0.7.0-dev.7): Failed to instantiate.
    [217 13.0519s lua] INFO Traceback:/home/clarkson/projects/er-301/xroot/Package/init.lua:183: attempt to call a table value (local 'M')
    stack traceback:
            /home/clarkson/projects/er-301/xroot/Package/init.lua:183: in function </home/clarkson/projects/er-301/xroot/Package/init.lua:178>
            [C]: in function 'xpcall'
            /home/clarkson/projects/er-301/xroot/Package/init.lua:187: in function 'Package.getLibrary'
            /home/clarkson/projects/er-301/xroot/Package/init.lua:158: in function 'Package.libraryCall'
            /home/clarkson/projects/er-301/xroot/Package/Interface.lua:141: in method 'onSelectionChanged'
            /home/clarkson/projects/er-301/xroot/ListWindow.lua:168: in function 'LogViewer.setSelection'
            /home/clarkson/projects/er-301/xroot/Package/Interface.lua:126: in method 'refresh'
            /home/clarkson/projects/er-301/xroot/Package/Interface.lua:179: in local 'handler'
            /home/clarkson/projects/er-301/xroot/Base/Widget.lua:190: in function 'Preamp.Interface.broadcastDownHelper'
            /home/clarkson/projects/er-301/xroot/Base/Widget.lua:181: in function 'Preamp.Interface.broadcastDown'
            ...     (skipping 4 levels)
            /home/clarkson/projects/er-301/xroot/Base/Widget.lua:164: in function 'Preamp.Interface.sendUpHelper'
            /home/clarkson/projects/er-301/xroot/Base/Widget.lua:151: in function 'Preamp.Interface.sendUp'
            /home/clarkson/projects/er-301/xroot/Base/Context.lua:226: in function 'Base.Context.notify'
            /home/clarkson/projects/er-301/xroot/Application.lua:168: in function 'Application.notify'
            /home/clarkson/projects/er-301/xroot/Application.lua:312: in function 'Application.defaultDispatcher'
            /home/clarkson/projects/er-301/xroot/Application.lua:495: in function 'Application.loop'
            /home/clarkson/projects/er-301/xroot/boot/start.lua:54: in function </home/clarkson/projects/er-301/xroot/boot/start.lua:46>
            [C]: in function 'xpcall'
            /home/clarkson/projects/er-301/xroot/boot/start.lua:65: in main chunk
            [C]: in function 'dofile'
            [string "dofile('/home/clarkson/projects/er-301/xroot/..."]:1: in main chunk
    
    bug 
    opened by odevices 1
Releases(v0.7.0-dev1)
  • v0.7.0-dev1(Mar 2, 2022)

    This is the most recent (bleeding edge) release from the develop branch. Use at your own risk.

    This releases is being discussed here.

    CHANGES

    • ENHANCE: Unit Header Menu > Replace grid lines by beveled boxes to improve clarity around which commands are active.
    • FIX: Control subdisplay miniscope showing signal after gain and bias. Issue #53
    • FIX: Pedal Looper > Potential for clicks and artifacts when overdubbing, stopping, or looping. Issue #51
    • ENHANCE: Card Player > Improve error and status messages.
    • FIX: Broken focus with S2 on Pitch controls.
    • SYS: Update emulator to support Apple M1 arch. PR #56
    Source code(tar.gz)
    Source code(zip)
    er-301-v0.7.0-dev1.zip(1.91 MB)
  • v0.6.16(Oct 7, 2021)

  • v0.6.15(Aug 28, 2021)

  • v0.6.14(Jun 28, 2021)

  • v0.6.13(Jun 24, 2021)

    • FIX: Package installation was broken when upgrading from pre-v0.6 firmware.
    • FIX: Crash when modulating GrainStretch jitter to negative values. Issue #36
    • FIX: Teletype units from pre-v0.6 quicksaves/presets were not being loaded. Issue #37
    • FIX: Show post-control signal in the scope view. Thank you to tmfset for the pull request.
    • FIX: Tying parameters to lua expressions was broken. Issue #31
    • FIX: WAV files with CUE markers were being overwritten with ER-301 format slice data (*.slc) when saving. Issue #30.
    • FIX: Local connections to the output of an empty branch were not being restored.
    • FIX: Unload temporary buffers from the Sample Pool once they are no longer in use.
    • FIX: Temporary buffers that are created by presets will be stereo for stereo chains and mono otherwise. This is useful when you load an originally mono preset into a stereo chain and vice versa.
    • NEW: Unit Chooser > Recent unit choices are now saved and restored with quicksaves.
    • NEW: If a WAV file has CUE markers, those will be used to initialize its slices. Thank you to tmfset for the pull request.
    • FIX: File Browser > Make listing order of files/folders more consistent. Folders then files, all in case-insensitive dictionary order.
    • FIX: File Browser > Crash when changing focus to folder during audio preview (issue #23).
    • FIX: The Fixed HPF Unit had some uninitialized variables that might be causing loss of audio in random cases.
    • FIX: Pressing CANCEL in the Select from Pool menu was causing a crash.
    • FIX: The Fixed HPF Unit implementation was broken by some changes to the NEON calculations that were introduced in v0.6.00.
    • SYS: Constructors for static objects were not being called during runtime linking.
    • FIX: Installer fails on pre-v0.v6 firmware. This is fixed now but in order to get the core and teletype packages installed you will need to run the installer one more time after booting into v0.6 firmware.
    • FIX: Corrupted WAV files > Any WAV files created by the ER-301 had a corrupted header.
    • FIX: Package Creator > Silently ignored missing WAV files.
    • SYS: Mod error logs are now created in front:/ER-301/logs/(mod-name).log
    • ENHANCED: Admin > Log History screen added.
    • FIX: A chain would sometimes stop producing audio when attaching a sample from the card to a unit. (issue #12)
    • SYS: Major improvements to firmware's symbol table used for dynamic linking. (issue #13)
    • FIX: Unit Browser > Categories were not being display in a consistent order.
    • SYS: Package toc.lua > Deprecate category entries in the units table. Add a category field to each unit entry instead.
    • SYS: Emulator > Simplify command-line options and make emulator configurable via the ~/.od/emu.config file. See README.md.
    • FIX: All Delay Units > Configuring the max delay time to anything less than 1s resulted in a 0s delay buffer and loss of audio in that chain.
    • FIX: Soft Keyboard > History was not being saved in some cases.
    • FIX: Doppler Delay unit > Maximum delay length can now be configured just like the vanilla Delay unit.
    • FIX: Pressing an unrelated button while a long-press menu is showing would result in a crash.
    • FIX: The suggested save folder for unit presets has been simplified to ER-301/(version)/presets instead of the now unnecessary ER-301/(version)/presets/(unit-type-name).
    • FIX: Teletype CV Unit > Slew limiting is enabled by default with a 2ms rate.
    • FIX: Quicksaving when there are unsaved buffers > If you pressed UP or HOME when in the Sample Pool saving buffers, the quicksave was being canceled. The quicksave should only be canceled if you press CANCEL.
    • FIX: G inputs > ADC driver will now reset the ADC hardware when it detects that it is no longer getting interrupts (i.e. timeout).
    • NEW: Package Manager > sharing of code and presets via packages.
    • NEW: Low Level (C/C++) SDK > It is now possible to dynamically link shared libraries (*.so) to the bare-metal firmware during runtime. This functionality is accessible via lua's require and package.loadlib interfaces. Please refer to the core and teletype mod source code for a comprehensive example.
    • NEW: System Settings > USB > The ER-301 can now enumerate as a mass storage device when connected to a USB host. This provides access to the front SD card only for now.
    • NEW: System Settings > USB > The ER-301 can now enumerate as a virtual serial port when connected to a USB host. The ER-301 will log to this port when connected.
    • NEW: System Settings > Sample rate and frame size are now configurable but require a reboot for changes to take effect.
    • NEW: File Browser > Selecting multiple files can now span multiple folders.
    • NEW: File Browser > When selecting multiple files, pressing ENTER toggles the checked state, and COMMIT (i.e. SHIFT+ENTER) will finish the selection process.
    • NEW: File Browser > After selecting multiple files, the user is presented with an intermediate staging UI that displays all of files selected so far. Here the user can make changes in the order of the files, select/deselect, or add more files before proceeding to the next step.
    • NEW: An emulation of the ER-301 is now available for Linux.
    • SYS: Mod > teletype-0.6.0 > These units have been separated out into their own mod package.
    • SYS: Mod > core-0.6.0 > Most of the factory units (and their objects) have been separated out into their own mod package.
    • SYS: Lua > Updated the embedded lua interpreter from 5.3 to 5.4.
    • SYS: Lua > Changed garbage collection method from incremental to generational.
    • SYS: Unit:createObject(type, name, ...) --> Unit:addObject(name, o)
    • SYS: Unit:createMonoBranch --> Unit:addMonoBranch
    • SYS: Unit:createStereoBranch --> Unit:addStereoBranch
    • SYS: Unit:onLoadMenu --> Unit:onShowMenu
    • SYS: Object:optionSet --> Object:setOptionValue
    Source code(tar.gz)
    Source code(zip)
    er-301-v0.6.13-stable.zip(1.92 MB)
Enabling services on your device 66 Jun 23, 2022
Android and iOS SDK to display maps and geodata of swisstopo. Owner: simonroesch, Deputy: gjn

Open Swiss Maps SDK Android and iOS SDK to display maps and geodata of swisstopo Free map layers and geo data by swisstopo in your app Offer your mobi

geo.admin.ch 21 May 20, 2022
T-Watch 2020 v1 compatible firmware providing WiFi and BLE testing tools (and also, a watch :D)

ESP-IDF template app This is a template application to be used with Espressif IoT Development Framework. Please check ESP-IDF docs for getting started

Damien Cauquil 37 Jun 15, 2022
The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.

Welcome! The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design

Microsoft 6.9k Jun 22, 2022
A modding SDK that allows you to interact with a modified version of Cocos 2DX v2.2.3 utilized by Geometry Dash

What is CappuccinoSDK CappucinoSDK is a modding utility that allows you to interact with a modified version of the game engine Cocos-2DX v2.2.3, which

null 16 Mar 27, 2022
Good Game, Peace Out Rollback Network SDK

(日本語ドキュメントはこちら) What's GGPO? Traditional techniques account for network transmission time by adding delay to a players input, resulting in a sluggish,

Tony Cannon 2.5k Jun 24, 2022
grey sdk

grey是龙游天下公司的产品"汉末霸业"的一个附属产品。开始是为了解决产品的扩展性,自由度,热更新,视频流播放,用户DIY,3d扩展,人工智能等功能而开发。后来把这些功能集成整理后,从而形成了一个完整的应用级解决方案。 grey是一套应用开发解决方案,使用类似c++的语言(cplus)进行开发。 让

grey-platform 51 Jun 18, 2022
MCUXpresso SDK

Overview MCUXpresso SDK is a comprehensive software enablement package designed to simplify and accelerate application development with Arm® Cortex®-M

NXP Micro 174 Jun 10, 2022
A modding SDK for Hitman 3

ZHM Mod SDK A modding SDK and mod loader for HITMAN 3. Description This is a community-made modding SDK and mod loader for HITMAN 3. Its purpose is to

Orfeas Zafeiris 35 Jun 6, 2022
Tuya IoTOS Embeded SDK WiFi & BLE for BK7231T

Tuya IoTOS Embedded Wi-Fi and BLE SDK for BK7231T 中文版 | English Overview Developed independently by Tuya Smart, Tuya IoTOS is the world's only IoT ope

Tuya 31 Jun 19, 2022
C++ Kite Connect API library / SDK

Kite Connect API C++ client Overview Dependencies Getting dependencies Linux Others & uWS v0.14 Building & installation Examples REST API Ticker Docum

Zerodha Technology 23 Jun 2, 2022
Tuya MCU SDK Arduino Library is developed based on the Tuya Wi-Fi general integration solution

Tuya MCU SDK Arduino Library is developed based on the Tuya Wi-Fi general integration solution. The device's MCU is connected to a Wi-Fi module through a serial port to implement a network connection. The development is based on general firmware, which supports the adaptative 9600 and115200 baud rate

Tuya 74 May 16, 2022
Teamspeak FriendSystem Plugin written in C/C++ (Teamspeak SDK)

Teamspeak-FriendSystem Teamspeak FriendSystem Plugin written in C/C++ (Teamspeak SDK) Install it into AppData / Roaming / Ts3Client / plugins Its only

null 2 Sep 24, 2021
Minecraft Windows 10 Bedrock SDK (1.17.30)

MCBE SDK Minecraft Windows 10 Bedrock SDK (1.17.30) Simple usage: cmake_minimum_required(VERSION 3.20) project(DummieProj VERSION 0.1.0) SET(CMAKE_CX

null 20 Jun 8, 2022
A cross-platform SDK enabling developers to integrate real-time chat technology into their projects

4Players ODIN SDK ODIN is a cross-platform software development kit (SDK) that enables developers to integrate real-time chat technology into multipla

4Players 4 Feb 20, 2022
macOS 12.0 Monterey SDK for Mach engine

macOS 12.0 Monterey SDK for Mach Engine This repository contains native system binary files required to build Mach Engine for macOS, from any host OS.

Hexops 5 Jun 23, 2022
This repository provides a C++ client SDK for Unleash that meets the Unleash Client Specifications.

Unleash Client SDK for C++ This repository provides a C++ client SDK for Unleash that meets the Unleash Client Specifications. Features The below tabl

Antonio Ruiz 4 Jan 30, 2022
Alternative firmware for IKEA ORSALA lamp

orsala_hack Alternative firmware for IKEA ORSALA lamp (https://www.ikea.com/de/de/p/orsala-arbeitsleuchte-led-dimmbar-weiss-00482904/) but why? The OR

null 51 Jun 5, 2022
GCFFlasher is the tool to program the firmware of dresden elektronik's Zigbee products.

GCFFlasher 4 GCFFlasher is the tool to program the firmware of dresden elektronik's Zigbee products. Supported Hardware ConBee I ConBee II RaspBee I R

dresden elektronik ingenieurtechnik gmbh 20 Jun 12, 2022