Milkymist One Firmware

From Qi-Hardware
Jump to: navigation, search


[edit] ChangeLog

[edit] Next

[edit] 2012-07-09

  • More patch goes to RTEMS upstream, now we have one pending request
  • Softusb-input improvement by Werner, Michael and Xiangfu
  • Automatic save all performance config changes to default.per
  • Ctrl + Enter direct goto rendering mode
  • Add new feature: Wireless over Ethernet by using a OpenWrt powered gadget
  • Yaffs update due to RTEMS API changes
  • Build with latest RTEMS commit 2012-07-09

[edit] 2012-04-02

  • Disable mouse click exit rendering mode
  • Ctrl+H : display keyboard shortcut information in rendering mode
Hold F9 / Hold left button: Web update
F1 / F2 / F3: Set video in CVBS green/blue/red
F5 / F6: Increase/decrease brightness
F7 / F8: Increase/decrease contrast
Ctrl+Esc: Exit fun
F1: Show patch name(simple mode)
F9 / RIGHT: Next patch(simple mode)
F11 / LEFT: Previous patch(simple mode)
Ctrl+Alt+Del / Hold F10 / Hold middle button: Reboot
PrtScr: Screenshot
Ctrl+F1: Switch resolution
  • Add MIC boost support and enable by default
  • New USB firmware loading mechanism
  • New usb command. allow load usbsoft-input firmware from file. useful for debug usbsoft-input.bin
  • FPL: new grammar: accept Perl-like var = expr if cond syntax (new-style only)
  • FPL: Remove legacy midiX variables, check wheel.fnp for new midi grammar
  • FPL: if can no longer be used as a variable name
  • Modernize "Geiss & Werner - Tornado (Rain Dance MIDI RMX).fnp"
  • Fixed issue #35 take the currect settings to full screen
  • Build with latest RTEMS 2012-03-30 15:19:18
  • Update the rtems-yaffs2 with latest RTEMS api

[edit] 2012-02-26

  • Support USB-MIDI controller device, like LV3 and ICON, two patches for LV3
  • Support multiple image files
  • Cache the compiled patches. no needs to re-compile next time.
  • New MIDI document, new pacman and wheel pathces
  • Support // and /*...*/ comments under patch language
  • Support --, <, >, !, &&, ||, and the ternary operator under patch language
  • Support semicolons at the end of assignments under patch language
  • New style on pre_frame and pre_vertex
  • Add sound indicator under Audio
  • Show channel number in MIDI monitor, change the channel numbers presented to user one-based
  • Fullscreen preview button under Video Input
  • Enable DMX chain mode by default. act as DMX fixture by default
  • Change the ftpd root to /ssd
  • Save user define ip, gateway, dns. by default using Google Public DNS
  • Support some keyboard+mouse combo devices check VERSIONS files for detail on 'hid' branch
  • Using ISE 13.4 to synthesis all bitstreams
  • New UART core
  • Sync with latest rtems 2012-02-23 18:09:55 (GMT)
  • Sync yaffs2 to '121c055437f23d9d6bc7b57d36ecf128b447013f'
  • update Version to 2012-02-28. move the tested images to --qi option. now it is the advice option for end-users
  • New regression tests tools for patch language for software developer from Werner

[edit] 2011-11-29

  • Support the inclusion of user-supplied pictures in PNG and JPG formats into the patches.
  • Support patch mashup.
  • Support selection of composite on any connector, S-Video and Component sources in the GUI.
  • Keyboard shortcuts to switch between composite video sources: F1/F2/F3 to select green/blue/red inputs (respectively).
  • Screenshot shortcut remapped to Ctrl-Pause
  • In simple performance mode, skip "advanced" patches (MIDI/DMX/OSC) and patches that use video input when no video signal is present.
  • Always run DHCP in the background instead of using the regular RTEMS configuration. Use periodic retries in case of failure.
  • Send a black screen instead of no signal during startup.
  • Prevent going outside of /ssd in file dialogs.
  • MIDI/DMX configuration: holding the mouse on the midiX/idmxX label sets the channel on MIDI/DMX events (Werner)
  • New PFPU scheduler from Werner.
  • Improve patch compiler register allocation, so we can use more variables in the patches.
  • Random delay in simple mode.
  • Simplify shutdown dialog.

[edit] 2011-11-13

  • Use US keyboard layout by default
  • Simple mode: reset timer on manual patch switch
  • Do not allow empty filenames in file dialogs
  • Fix MIDI synchronization (Werner)
  • Fix MIDI over OSC (Werner)
  • Support for upstream RTEMS 4.11
  • Support for upstream YAFFS

[edit] 2011-07-13

  • Support for French language
  • Automatic update over the internet
  • Online patch pool
  • Keyboard shortcut: Meta key + arrows/enter to move/click the mouse
  • File dialog: search option
  • Simple performance mode options:
    • patch title display at patch switch
    • automatic patch switch after delay
    • L pushbutton for previous patch
  • Keyboard shortcuts to change video input parameters live in rendering mode:
    • F5/F6: brightness +/-
    • F7/F8: contrast +/-
  • Changed F8 "Start rendering" shortcut to F2
  • Changed F8 "Stop rendering" shortcut to ESC
  • MIDI variables
  • OpenSoundControl and IR patch configuration autobuild
  • MIDI and IR: remove capture button, always capture when window is open
  • Update and show system settings dialog box on resolution switch shortcut
  • Disable memory card automount

[edit] 2011-04-23

  • RSS wall
  • Simple performance mode (just use all patches found in flash)
  • Active pushbuttons:
    • LEFT (PB3/F9): update the entire box over Ethernet, download new patches from shared pool. (To be finalized)
    • MIDDLE (PB2/F10): boot, start rendering some patch right away using simple performance mode. Press again (long press) to turn off.
    • RIGHT (PB1/F11): switch to next patch (in simple performance mode)
  • Support for different keyboard maps: US, French, German
  • Automatic build of patch sets for keyboard and MIDI
  • Display line numbers in patch editor
  • Display explicative dialog box in rescue mode
  • Improved network settings: DNS, gateway
  • Do not load system configuration in rescue mode
  • Renamed /flash to /ssd
  • Web update (incomplete/experimental)
  • F1 key to display patch name when rendering
  • Bugfixes:
    • Crash with autostart when resolution is 640x480
    • All known Ethernet instability problems
    • DHCP IP address not taken when DHCP is enabled at boot
    • Subdirectories not always working on flash
    • First patch dialog box not updated on performance file load

[edit] 2011-04-06

  • Support for 640x480, 800x600 and 1024x768 resolutions (GUI only)
  • New color theme
  • Quiet autostart mode
  • GUI usability improvements:
    • Mouse wheel scrolling support
    • Delete key working on selected text in editor
    • Ctrl-A selects all text
    • File dialog box: extension filter, hide /dev, open files with double click
    • Scroll bars in patch editor
  • File manager
  • Optional: PDF reader (online help)
  • Selectable wallpaper
  • Screenshots (Xiangfu)
  • More DMX channels
  • Display MTK version
  • Mount memory card in read only mode
  • Optional: LZMA compression of the flash boot image

[edit] 2010-12-23

  • Video input support
  • Flash upgrade support
  • YAFFS2 flash filesystem
  • Configurable system settings
  • DHCP client support
  • Performance autostart
  • FTP server
  • Telnet server
  • Text messages from OpenSoundControl

[edit] 2010-11-19

  • Patch rendering support (same features as in the demo renderer)
  • Support patch change on:
    • keyboard events
    • IR events
    • OSC events
    • MIDI events
  • DMX variables
  • OSC variables
  • GUI settings for keyboard, IR, MIDI, OSC, DMX
  • DMX table
  • DMX spy
  • Performance load and save
  • Audio mix table
  • Patch editor
  • Variable monitor
  • Wallpaper

[edit] Wireless Over Ethernet

TP-Link TL-WR703N is a very small router. it powered by USB which can direct plug-in to Milkymist One, after reflash OpenWrt image. we can access this router by using Json RPC.

[edit] Milkymist One side

  • On the Milkymist One side we have a GUI configure windows and using curl to access OpenWrt Json RPC, the source code is here
  • The Milkymist One should get when enable DHCP. this ip address is hardcode under OpenWrt DHCP config file.

[edit] OpenWrt side

  • The OpenWrt config file is here, the image file for reflash is here,
  • Some default config files, changed network to 192.168.42.x, forward those port to Milkymist One: 21, 23, 4444
  • Milkymist One will call those two files: m1-wireless.lua , for configure the wireless
  • Once the Wireless connect. 703n will remember this network. but it can only remember one networks.
  • The 703n boot time is longer then Milkymist One. so we needs wait a little bit more time after Milkymist One boot.

[edit] Json Variables

  • For login:
{"jsonrpc":"1.0","method" :"login","params" :["root", ""],"id":0}
  • Get wireless networks:
{"jsonrpc":"1.0","method" :"exec","params" :["/opt/ get"],"id"     :0}
  • Configure wireless:
{"jsonrpc":"1.0","method" :"exec","params" :["/opt/ set ESSID PASSWORD psk2"],"id"     :0}
  • Get wireless status:
{"jsonrpc":"1.0","method" :"exec","params" :["/opt/ status"],"id"     :0}

[edit] Develop

Milkymist Flickernoise main source code is C. the SDK can download at : the SDK include ALL you needs to develop Flickernoise. if you wnat compile those stuff from scratch. you can look info the scripts file: read the 'Makefile' under this project and the README.html. short intro about the compile steps:

  1. compile the toolchian first
  2. compile rtems
  3. compile libfpvm (lib for rendering)
  4. compile mtk the GUI
  5. compile libs: libpng, jbig2dec, freetype2, mupdf, curl, expat, oscparse
  6. compile rtems-yeaffs2. the filesystem we using in NOR flash
  7. compile the host tools that flickernoise needed :
  8. compile Flickernoise.fbi
  9. compile host tools we used to flash. urjtag: git://

[edit] rtems

rtems is link the OS. if someone want write the Milkymist One driver and interested in real-time OS. then this is a good project look into.

[edit] Flickernoise

this is like the application. build with rtems. link the GUI. etc. give us a interface.

[edit] Rendering-libs

those libs is for rendering

[edit] libs

like: libpng, jbig2dec, freetype2, mupdf, curl, expat, oscparse. people can port more libs to Flickernoise.

[edit] Test

  • boot from tftp

when m1 boot to BIOS. press 'ESC'. then type 'netboot' . m1( will try to load '/var/lib/tftpboot/boot.bin' under

  • direct flash the result to m1.

using Werner's tools. 'm1nor' under git://, using script file under git://

  • reboot by urjtag. save below to
cat > ${BATCH_FILE}<<EOF
cable milkymist
instruction CFG_OUT 000100 BYPASS
instruction CFG_IN 000101 BYPASS
pld reconfigure

jtag -n ${BATCH_FILE}
rm -f   ${BATCH_FILE}

[edit] Debug

[edit] Test Plan

  • Webupdate
  • All patches compile and render fine
  • For test filesystem, try to copy from/to Milkymist One by using lftp, filezilla.
  • Input system. keyboard, mice
  • USB-MIDI controller. I have ICON for test
  • react to OSC message. can test by midi2osc.
  • Sound system. MIC, line in and line-out
  • MIDI port by using usb-midi converter.
  • DMX chain mode and DMX controller mode
  • VGA output, 640x480, 800x600, 1024x768
  • Video input. I have one camera for test.
  • IR remode
  • Test switch patches by some saved performance files.
  • Make sure the support reflash MAC address
  • UI. All windows, sub-windows should function correctly (need to list details on what to test).

[edit] Linux

Our Linux development is focused here:

[edit] boot OpenWrt

  1. wget -O initrd.bin
  2. wget -O boot.bin
  3. copy them to your tftp folder like /var/lib/tftpboot, change your IP to
  4. press 'ESC' while m1 booting. type 'netboot'

[edit] Backup

  • Make sure your laptop and Milkymist one are connect.
  1. Connect Milkymist One and your PC to same home router, check the 'Settings' for get the M1 IP address
  2. Direct connect Milkymist one to your PC eithernet port. disable the DHCP. by default Milkymist One IP address is
  • Setup Username and Password under 'Settings'
  • Using lftp
# sudo apt-get install lftp
# mkdir M1_backup && cd M1_backup
# lftp USER@
# mirror # for full backup Milkymist one. you will see all files under M1_backup
  • Using filezilla

Just backup all files and folders under Remote site:/

Personal tools