About Fireworks
Fireworks is a board module for Firewire audio devices. This board was developed by ECHO Audio. As of 2013, it's end of life.
Fireworks is applied to the devices below:
- Mackie Onyx F series
- 400F
- 1200F
- ECHO AudioFire series
- AudioFire8 (until 2009 July)
- AudioFire12
- AudioFire2
- AudioFire4
- AudioFire8 (since 2009 July)
- AudioFirePre8
- Gibson
- Robot Interface Pack (options for DuckTiger, DarkFire, Les paul Studio Limited)
Unconfirmed as a product:
- ECHO
- Fireworks8
- Fireworks HDMI
- Gibson
- AudioPack
- GoldTop
Components
Fireworks consists of three chips.
- communication chipset for IEEE1394 PHY/Link and IEC 61883-1/6 (TI TSB43CB43 IceLynx-Micro)
- DSP or FPGA for signal processing. (TI TMS320C6713B or Xilinx Spartan XC35250E)
- DSP: 400F/1200F/AudioFire8(until 2009 July)/AudioFire12
- FPGA: 1200F/AudioFire2/AudioFire4/AudioFire8(since 2009 July)/AudioFirePre8/Robot Interface Pack
- Flash Memory for storage of firmwares (Intel JS28F160C3BD70 or Micron M28W160CB)
Firmwares
The firmware consists of much lines 0f 12 bytes. The line is encoded by ASCII character encoding scheme. For example:
hexiadecimal expression => decode by ASCII => each interpretation 307836393634373534310d0a => 0x69647541\r\n => (char *) iduA 307837323639343636660d0a => 0x7269466f\r\n => (char *) riFo 307830303332333136350d0a => 0x00323165\r\n => (char *) .21e 307830303032656530300d0a => 0x0002ee00\r\n => (uint32_t)192000
The firmware has magic bytes in its first line.
hexiadecimal expression => decode by ACII 3136353120312030203020300d0a => 1651 1 0 0 0\r\n
The firmware has header structure below:
typedef uint8_t line[12]; struct efw_firmware_header { line type; /* firmware type, enum efw_firmware_type */ line flash_offset_address; /* offset address in flash memory */ line included_quads; /* the number of quadlets included in this firmware */ line CRC32; line checksum; line version; /* firmware version */ line crc_is_appended; /* the CRC32 is appended or not */ line footprint_quads; }; enum efw_firmware_type_{ EFW_DspCode = 0, /* for DSP */ EFW_IceLynxCode = 1, /* for !IceLynx-Micro */ EFW_Data = 2, EFW_FPGACode = 3, /* for FPGA */ EFW_DeviceName = 4, EFW_Invalid = 0xFF, };
Firmware position
Mackie Onyx F series:
- 0x00000000 bootstrap.dat
- 0x00080000 onyxfpga.dat(1200F only)
- 0x000c0000 onyx400f.dat/Onyx1200F_DSP.dat
- 0x00100000 FireworksARM.dat/Onyx1200F_ARM.dat
- 0x00140000 onyx400f_E.dat/onyx1200f_E.dat
Echo AudioFire8(until 2009 July)/AudioFire12:
- 0x00000000 bootstrap.dat
- 0x00008000 (until 3.0.2) killsession
- 0x0000e000 (until 1.0.6) killsession
- 0x000c0000 audiofire8.dat/audiofire12.dat
- 0x00100000 FireworksARM.dat
- 0x00140000 audiofire8_E.dat/audiofire12_E.dat
- 0x00180000 (until 3.0.2) FireworksARM_E.dat
Echo AudioFire2/AudioFire4/AudioFire8(since 2009 July)/AudioFirePre8:
- 0x00000000 bootstrap.dat(until 5.2.1)/fireworks_fpga.dat(until 5.5.0)/fireworksfpga_302.dat/fireworks_fpga_421.dat
- 0x00100000 Fireworks3.dat
Gibson RIP:
- 0x00000000 ripfpga.dat/goldtopfpga.dat
- 0x00100000 riparm.dat(until 5.2.1)/Fireworks3.dat
Command and Response
Fireworks has its own system for command and response.
Capability
Fireworks can return its capability by specific command/response. Sometimes the data is different between firmware version even if it's the same device.
Its data format is:
#define HWINFO_MAX_NAME_BYTES 32 #define HWINFO_MAX_PHYS_GRP 8 enum phys_grp_type { PHYS_GRP_TYPE_ANALOG = 0, PHYS_GRP_TYPE_SPDIF = 1, PHYS_GRP_TYPE_ADAT = 2, PHYS_GRP_TYPE_SPDIF_OR_ADAT = 3, PHYS_GRP_TYPE_ANALOG_MIRROR = 4, PHYS_GRP_TYPE_HEADPHONES = 5, PHYS_GRP_TYPE_I2S = 6, PHYS_GRP_TYPE_GUITAR = 7, PHYS_GRP_TYPE_PIEZO_GUITAR = 8, PHYS_GRP_TYPE_GUITAR_STRING = 9 }; struct phys_grp { uint8_t type; /* enum phys_grp_type */ uint8_t count; }; struct efw_hwinfo_caps { uint32_t flags; uint32_t node_id_high; uint32_t node_id_low; uint32_t hw_type; uint32_t hw_version; uint8_t vendor_name[HWINFO_MAX_NAME_BYTES]; uint8_t model_name[HWINFO_MAX_NAME_BYTES]; uint32_t supported clocks uint32_t num_1394_receive_channels_x1; /* up to 48.0kHz */ uint32_t num_1394_transmit_channels_x1; /* up to 48.0kHz */ uint32_t num_phys_audio_out; uint32_t num_phys_audio_in; uint32_t num_phys_out_groups; struct phys_grp phys_out_groups[HWINFO_MAX_PHYS_GRP]; uint32_t num_phys_in_groups; struct phys_grp phys_in_groups[HWINFO_MAX_PHYS_GRP]; uint32_t num_midi_out_ports; uint32_t num_midi_in_ports; uint32_t max_sampling_rate; uint32_t min_sampling_rate; uint32_t dsp_version; uint32_t arm_version; uint32_t num_mixer_playback_channels; uint32_t num_mixer_capture_channels; /* firmware version 2.0 or later */ uint32_t fpga_version; uint32_t num_1394_receive_channels_x2; /* up to 88.2kHz */ uint32_t num_1394_transmit_channels_x2; /* up to 88.2kHz */ uint32_t num_1394_receive_channels_x4; /* up to 192.0kHz */ uint32_t num_1394_transmit_channels_x4; /* up to 192.0kHz */ };
The information below is from firmware dump. Some parameters are able to be overload by actual device.
Mackie Onyx 400F (onyx400.dat):
0x00000012 flags 0x000ff200 guid hi 0x00000000 guid low 0x0000400f type 0x00000000 version 0x6b63614d kcaM 0x00006569 ..ei 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x78796e4f xynO 0x40303420 004. 0x00000046 ...F 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x0000000d supported clocks 0x0000000a num 1394 receive channels x1 0x0000000a num 1394 transmit channels x1 0x0000000c num phys audio out 0x0000000a num phys audio in 0x00000003 num phys out groups 0x02010800 phys out groups 0x00000204 0x00000000 0x00000000 0x00000002 num phys in groups 0x02010800 phys in groups 0x00000000 0x00000000 0x00000000 0x00000001 num midi out ports 0x00000001 num midi in ports 0x0002ee00 max rate 0x0000ac44 min rate 0x03020800 dsp version (different between firmware) 0x00000000 arm version 0x0000000a mixer playback channels 0x0000000a mixer capture channels 0x00000000 fpga version 0x0000000a 1394 receive channels x2 0x0000000a 1394 transmit channels x2 0x0000000a 1394 receive channels x4 0x0000000a 1394 transmit channels x4
Mackie Onyx 1200F (onyx1200F.dat):
0x0000003c flags 0x000ff200 guid hi 0x00000000 guid low 0x0001200f type 0x00000000 version 0x6b63614d kcaM 0x00006569 ..ei 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x78796e4f xynO 0x40323120 021. 0x00004630 ..F0 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x0000003d supported clock 0x00000022 num 1394 receive channels x1 0x0000001e num 1394 transmit channels x1 0x00000024 num phys audio out 0x0000001e num phys audio in 0x00000006 num phys out groups 0x08020800 phys out groups 0x08050802 0x02040201 0x00000000 0x00000004 num phys in groups 0x08020c00 phys in groups 0x02010802 0x00000000 0x00000000 0x00000002 num midi out ports 0x00000002 num midi in ports 0x0002ee00 max rate 0x0000ac44 min rate 0x03020800 dsp version (different between firmware) 0x00000000 arm version 0x00000022 num mixer playback channels 0x0000001e num mixer capture channels 0x00000000 fpga version 0x00000010 num 1394 receive channels x2 0x00000010 num 1394 transmit channels x2 0x00000008 num 1394 receive channels x4 0x00000008 num 1394 transmit channels x4
Echo AudioFire8 (audiofire8.dat):
0x00000000 flags ->0x10(4.0.0) 0x00148600 guid hi 0x01234567 guid low 0x00000af8 type 0x00000000 version 0x6f686345 ohcE 0x67694420 giD. 0x6c617469 lati 0x64754120 duA. 0x00006f69 ..oi 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x69647541 iduA 0x7269466f riFo 0x00003865 ..8e 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x0000000f supported clocks->0xd(2.0.2) 0x0000000a num 1394 receive channels x1 0x0000000a num 1394 transmit channels x1 0x0000000a num phys audio out 0x0000000a num phys audio in 0x00000002 num phys out groups 0x02010800 phys out groups 0x00000000 0x00000000 0x00000000 0x00000002 num phys in groups 0x02010800 phys in groups 0x00000000 0x00000000 0x00000000 0x00000001 num midi out ports 0x00000001 num midi in ports 0x00017700 max rate 0x0000ac44 min rate ->0x7d00(2.0.6) 0x01040000 dsp version (different between firmware) 0x00000000 arm version 0x0000000a num mixer playback channels 0x0000000a num mixer capture channels (2.0.6 or pater) 0x00000000 fpga version 0x0000000a num 1394 receive channels x2 0x0000000a num 1394 transmit channels x2 0x0000000a num 1394 receive channels x4 0x0000000a num 1394 transmit channels x4
Echo AudioFire12 (audiofire12.dat):
0x00000000 flag ->0x10(4.0.0)->0x110(5.5.0) 0x00148600 guid hi 0x01234567 guid low 0x0000af12 type 0x00000000 version 0x6f686345 ohcE 0x67694420 giD. 0x6c617469 lati 0x64754120 duA. 0x00006f69 ..oi 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x69647541 iduA 0x7269466f riFo 0x00323165 .21e 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x00000007 supported clocks->0x5(2.0.6) 0x0000000c num 1394 receive channels x1 0x0000000c num 1394 transmit channels x1 0x0000000c num phys audio out 0x0000000c num phys audio in 0x00000001 num phys out groups 0x00000c00 phys out groups 0x00000000 0x00000000 0x00000000 0x00000001 num phys in groups 0x00000c00 phys in groups 0x00000000 0x00000000 0x00000000 0x00000001 num midi out ports 0x00000001 num midi in ports 0x0002ee00 max rate ->0x17700(5.5.0) 0x0000ac44 min rate ->0x7d00(2.0.6) 0x01040000 dsp version (different between firmware) 0x00000000 arm version 0x0000000c num mixer playback channels 0x0000000c num mixer capture channels (2.0.6 or later) 0x00000000 fpga version 0x0000000c num 1394 receive channels x2 0x0000000c num 1394 transmit channels x2 0x0000000c num 1394 receive channels x4 0x0000000c num 1394 transmit channels x4
Echo AudioFire2 (Fireworks3.dat, 5.0.0 or later):
0x000000a0 flags 0x00148600 guid high 0x00000000 guid low 0x00000af2 type 0x00000000 version 0x4563686f Echo 0x20446967 .Dig 0x6974616c ital 0x20417564 .Aud 0x696f0000 io.. 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x41756469 Audi 0x6f466972 oFir 0x653200c0 e2.. 0x00000070 .... 0x00024634 .... 0x00000009 supported clocks 0x00000006 num 1394 receive channels x1 0x00000004 num 1394 transmit channels x1 0x00000006 num phys audio out 0x00000004 num phys audio in 0x00000003 num phys out groups 0x00020502 phys out groups 0x01020000 0x00000000 0x00000000 0x00000002 num phys in groups 0x00020102 phys in groups 0x00000000 0x00000000 0x00000000 0x00000001 num midi out ports 0x00000001 num midi in ports 0x00017700 max rate 0x00007d00 min rate 0x00000000 dsp version 0x00000000 arm version 0x00000006 num mixer playback channels 0x00000004 num mixer capture channels 0x00000000 fpga version 0x00000006 num 1394 receive channels x2 0x00000004 num 1394 transmit channels x2 0x00000006 num 1394 receive channels x4 0x00000004 num 1394 transmit channels x4 0x0000003f 0x000246e4
Echo AudioFire4 (Fireworks3.dat, 5.0.0 or later):
0x000000e0 flags 0x00148600 guid high 0x00000000 guid low 0x00000af4 type 0x00000000 version 0x4563686f Echo 0x20446967 .Dig 0x6974616c ital 0x20417564 .Aud 0x696f0000 io.. 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x41756469 Audi 0x6f466972 oFir 0x653400c0 e4.. 0x00000070 ...p 0x00024738 ..G8 0x00000009 supported clocks 0x00000006 num 1394 receive channels x1 0x00000006 num 1394 transmit channels x1 0x00000006 num phys audio out 0x00000006 num phys audio in 0x00000002 num phys out groups 0x00040102 phys out groups 0x00000000 0x00000000 0x00000000 0x00000002 num phys in groups 0x00040102 phys in groups 0x00000000 0x00000000 0x00000000 0x00000001 num midi out ports 0x00000001 num midi in ports 0x00017700 max rate 0x00007d00 min rate 0x00000000 dsp version 0x00000000 arm version 0x00000006 num mixer playback channels 0x00000006 num mixer capture channels 0x00000000 fpga version 0x00000006 num 1394 receive channels x2 0x00000006 num 1394 transmit channels x2 0x00000006 num 1394 receive channels x4 0x00000006 num 1394 transmit channels x4 0x00000040 0x000247e8
Echo AudioFire9 (Fireworks3.dat, 5.0.0 or later):
0x00000624 flags 0x00148600 guid high 0x00000000 guid low 0x00000af9 type 0x00000000 version 0x4563686f Echo 0x20446967 .Dig 0x6974616c ital 0x20417564 .Aud 0x696f0000 io.. 0x00000000 .... 0x00000000 .... 0x00000000 .... 0x41756469 Audi 0x6f466972 oFir 0x65386100 e8a. 0x00000070 ...p 0x0002483c ..H< 0x0000001d supported clocks 0x00000010 num 1394 receive channels x1 0x00000010 num 1394 transmit channels x1 0x00000010 num phys audio out 0x00000010 num phys audio in 0x00000002 num phys out groups 0x00080308 phys out groups 0x00000000 0x00000000 0x00000000 0x00000002 num phys in groups 0x00080308 phys in groups 0x00000000 0x00000000 0x00000000 0x00000001 num midi out ports 0x00000001 num midi in ports 0x00017700 max rate 0x00007d00 min rate 0x00000000 dsp version 0x00000000 arm version 0x00000010 num mixer playback channels 0x00000010 num mixer capture channels 0x00000000 fpga version 0x0000000c num 1394 receive channels x2 0x0000000c num 1394 transmit channels x2 0x0000000a num 1394 receive channels x4 0x0000000a num 1394 transmit channels x4 0x0000001b 0x000248ec
Gibson RIP (Fireworks3.dat, 5.0.0 or later):
0x00004020 flags 0x00075b00 guid high 0x00000000 guid low 0x0000afb2 type 0x00000000 version 0x47696273 Gibs 0x6f6e00c0 on.. 0x00000004 .... 0x00024920 ..1. 0x52495000 RIP. 0x00000070 ...p 0x00024940 ..1( 0x00000041 supported clock 0x00000002 num 1394 receive channels x1 0x00000008 num 1394 transmit channels x1 0x00000002 num phys audio out 0x00000008 num phys audio in 0x00000001 num phys out groups 0x00020000 phys out groups 0x00000000 0x00000000 0x00000000 0x00000003 num phys in groups 0x07010801 phys in groups 0x09060000 0x00000000 0x00000000 0x00000000 num midi out ports 0x00000000 num midi in ports 0x00017700 max rate 0x0000ac44 min rate 0x00000000 dsp version 0x00000000 arm version 0x00000002 num mixer playback channels 0x00000008 num mixer capture channels 0x00000000 fpga version 0x00000002 num 1394 receive channels x2 0x00000008 num 1394 transmit channels x2 0x00000002 num 1394 receive channels x4 0x00000008 num 1394 transmit channels x4 0x0000001b 0x000249f0
Gibson Goldtop (Fireworks3.dat, 5.0.0 or later):
0x00006020 flags 0x00075b00 guid high 0x00000000 guid low 0x0000afb9 type 0x00000000 version 0x47696273 Gibs 0x6f6e00c0 on.. 0x00000008 .... 0x00024a24 ..J$ 0x476f6c64 Gold 0x746f7000 top. 0x00000070 .... 0x00024a44 ..JD 0x00000045 supported clock 0x00000008 num 1394 receive channels x1 0x00000010 num 1394 transmit channels x1 0x00000008 num phys audio out 0x00000010 num phys audio in 0x00000001 num phys out groups 0x00080000 phys out groups 0x00000000 0x00000000 0x00000000 0x00000004 num phys in groups 0x00080701 phys in groups 0x08010906 0x00000000 0x00000000 0x00000001 num midi out ports 0x00000001 num midi in ports 0x00017700 max rate 0x0000ac44 min rate 0x00000000 dsp version 0x00000000 arm version 0x00000008 num mixer playback channels 0x00000010 num mixer capture channels 0x00000000 fpga version 0x00000008 num 1394 receive channels x2 0x00000010 num 1394 transmit channels x2 0x00000008 num 1394 receive channels x4 0x00000010 num 1394 transmit channels x4
Streaming
Fireworks has two types of streaming. One is for Windows, another is compliant to IEC 61883-6.
Fireworks with firmware version 5.5 or former is a type of device which transmits packets with a bit disorder. For example, Index Payload CIP header 1CIP header 2 023 210 3F1100F8 900478E9 024 002 3F1100F8 90FFFFFF 025 210 3F110000 900490E9 026 210 3F110008 9004A4E9 027 210 3F110010 9004B8E9 028 002 3F110010 90FFFFFF 029 210 3F110020 9004E4E8 <- 030 210 3F110018 9004D0E8 <- 031 210 3F110028 9004F8E8 032 002 3F110028 90FFFFFF 033 210 3F110030 900410E8 034 210 3F110038 900424E8 035 210 3F110040 900438E8 036 002 3F110040 90FFFFFF 037 210 3F110050 900464E8 <- 038 210 3F110048 900450E8 <- 039 210 3F110058 900478E8 040 002 3F110058 90FFFFFF 041 210 3F110068 9004A4E8 <- 042 210 3F110060 900490E8 <- 043 210 3F110070 9004B8E8 044 002 3F110070 90FFFFFF 045 210 3F110080 9004E4E7 <- 046 210 3F110078 9004D0E8 <-
Controling
Fireworks has matrix mixer. Its processing is done in DSP or FPGA.