You are here

What is H8000FW's Sysex DeviceID?

Login to Post to Forums

You must be logged in to the Eventide website in order to post to our forums. If you do not have an account, you will need to create one. You may also reset your password.

20 posts / 0 new
Last post
Analog Dessert
Joined: Jan 8 2016
Posts: 12

What is H8000FW's Sysex DeviceID?

January 08, 2016 - 06:27 pm

What is the Sysex Device ID for the H8000FW?

https://www.eventideaudio.com/support/downloads/midi-sysex-messages

I'm told that this document was made for the DSP4000 -- but also applies to the H8000FW.

For example, in the doc it says :

 

======

 

0xF0 0x1C <H4000> <id> <message_code> <lots-o-bytes> 0xF7

 

<H4000> is 0x70 (decimal 112).

 

======

 

I am wondering what that equivilant value would be for the H8000FW

nickrose's picture
Eventide Staff
nickrose
Joined: Jan 17 2008
Posts: 4353
January 08, 2016 - 06:30 pm

We kept the 4000 value for the 8000 in the interests of compatability.

 

Analog Dessert
Joined: Jan 8 2016
Posts: 12
July 13, 2016 - 02:34 am

Thanks Nick -- but no workizzle =[  For example, lets say my device ID is 1 -- per the manual, the SysEx to press Soft Button 2 would be

F0 70 01 01 FF FB FF FF F7

I have also tried sending device ID as 00, but nothing I craft seems to have any affect.  Would you beable to provide an example Sysex message that would press Soft Button 2?

Cheers :)

 

Analog Dessert
Joined: Jan 8 2016
Posts: 12
July 13, 2016 - 05:00 pm

oops, in my above message I forgot to specify the "Eventide" Byte --

F0 1C 70 01 01 FF FB FF FF F7

That is the sysex that I intended to post, that is not doing anything.

nickrose's picture
Eventide Staff
nickrose
Joined: Jan 17 2008
Posts: 4353
July 14, 2016 - 09:17 am

hi - I'm out for a few days - I'll get back to you on Monday.

 

nickrose's picture
Eventide Staff
nickrose
Joined: Jan 17 2008
Posts: 4353
July 18, 2016 - 11:16 am

Sorry for the delay in replying. I needed to have an H8K in front of me.

Your problem is not the Sysex ID - this can be either zero, or whatever your unit is set to.

The reason why this is not working for you is that MIDI messages cannot contain anything which is 80 hex or above (the high bit signifies a command). This is why the document you mention says "With many messages, a "byte" is actually two bytes. Since MIDI allows only 7 bits of data, we split an 8 bit byte into two 4 bit nibbles and send the nibbles. The most significant nibble is sent first."

Note that "nibble" is undefined - if you are not a programmer, you may not know that it is a 4 bit value.

So, the actual message data must be sent as two bytes per byte, with the high 4 bits being zero. The message you are trying to send should be:

F0 1C 70 00 01 0F 0F 0F 0B 0F 0F 0F 0F F7

 

 

Analog Dessert
Joined: Jan 8 2016
Posts: 12
July 18, 2016 - 11:30 am

Nick -- Thanks for the example!  It will be valueable for anyone who stumbles upon this thread.  I've seen you answer this question a few times over the years -- so I appologize in advance, but this is exactly what I was missing (and I'm a programmer, so It makes perfect sense to me now, nom nom nom, I mustve skipped that paragraph in the manual, hehe)

 

 

 

Analog Dessert
Joined: Jan 8 2016
Posts: 12
July 19, 2016 - 10:56 pm

Just incase anyone cares -- I've created a VST Controller for the H8000 / DSP40000

With the press of a "Toggle Key", the PC Keyboard Arrow Keys correspond to the Eventide's Arrow Keys, the PC Keyboards Numpad Keys -> Eventides Numpad Keys, etc, etc.

Am I allowed to post a download link from my website?

Analog Dessert
Joined: Jan 8 2016
Posts: 12
July 19, 2016 - 11:46 pm

Last question -- When I was testing every key-press with my VST, I noticed two things:

 

LEFT (Bit 16)

RIGHT (Bit 24)

Those work as one would expect -- like Cursor LEFT/RIGHT.

 

UP (Bit 7)

DOWN (Bit 6)

Those are not Cursor UP/DOWN, but rather, increment or decrement the current value, as If one was scrolling the data entry wheel.

 

I was unable to simulate a "CURSOR UP/DOWN" KeyPress -- any insights?

 

Thanks! :}

 

 

 

nickrose's picture
Eventide Staff
nickrose
Joined: Jan 17 2008
Posts: 4353
July 20, 2016 - 10:44 am

Looks like cursor up/down are combinations - I show the following:

#define KEY_KILL      0xFFFFFDFF
#define KEY_PREVIOUS  0xFFFEFFFF

#define KEY_NEXT      0xFEFFFFFF

#define KEY_UP        (KEY_NEXT & KEY_KILL)
#define KEY_DOWN    (KEY_PREVIOUS & KEY_KILL)

Analog Dessert
Joined: Jan 8 2016
Posts: 12
July 20, 2016 - 07:57 pm

It works!  Awesome.

Can you share the values for switching between Processor A/B as well?

It seems like you have more specific information for the H8000 than is currently available in the DSP 4000 Sysex Manual.   What else can you share?  The more the merrier, as eventually I'd like to fully develop this VST to be a complete controller for the H8000FW.

If you don't want to post any complete header files or methods here, you could send anything useful to analog.dessert (A) gmail.com

nickrose's picture
Eventide Staff
nickrose
Joined: Jan 17 2008
Posts: 4353
July 21, 2016 - 02:44 pm

Here are the full list of key codes (I think the A/B key is KEY_MACHINE):

#define KEY_NONE      0xFFFFFFFF  /* ---- ---- ---- ---- ---- ---- ---- ---- */
#define KEY_UNUSED    0xFFFFFFFE  /* ---- ---- ---- ---- ---- ---- ---- ---X */
#define KEY_LEVELS    0xFFFFFFFD  /* ---- ---- ---- ---- ---- ---- ---- --X- */
#define KEY_SOFT4     0xFFFFFFFB  /* ---- ---- ---- ---- ---- ---- ---- -X-- */
#define KEY_PATCH     0xFFFFFFF7  /* ---- ---- ---- ---- ---- ---- ---- X--- */
#define KEY_ENTER     0xFFFFFFEF  /* ---- ---- ---- ---- ---- ---- ---X ---- */

/* CXL */
#define KEY_OOPS      0xFFFFFFDF  /* ---- ---- ---- ---- ---- ---- --X- ---- */
#define KEY_DEC       0xFFFFFFBF  /* ---- ---- ---- ---- ---- ---- -X-- ---- */
#define KEY_INC       0xFFFFFF7F  /* ---- ---- ---- ---- ---- ---- X--- ---- */

/* SELECT */
#ifndef PRATAS
#define KEY_CLICK     0xFFFFFEFF  /* ---- ---- ---- ---- ---- ---X ---- ---- */
#define KEY_CLICK_HOLD 0xFFFFFEFE
#endif

/* TAP */
#define KEY_TAP          0xFFFFFEFF

/* BYPASS/MUTE */
#define KEY_KILL      0xFFFFFDFF  /* ---- ---- ---- ---- ---- --X- ---- ---- */
#define KEY_KILL_HOLD 0xFFFFFDFE  /* ---- ---- ---- ---- ---- --X- ---- ---- */

#define KEY_SOFT3     0xFFFFFBFF  /* ---- ---- ---- ---- ---- -X-- ---- ---- */
#define KEY_SETUP     0xFFFFF7FF  /* ---- ---- ---- ---- ---- X--- ---- ---- */
#define KEY_MINUS     0xFFFFEFFF  /* ---- ---- ---- ---- ---X ---- ---- ---- */
#define KEY_NINE      0xFFFFDFFF  /* ---- ---- ---- ---- --X- ---- ---- ---- */
#define KEY_SIX       0xFFFFBFFF  /* ---- ---- ---- ---- -X-- ---- ---- ---- */
#define KEY_THREE     0xFFFF7FFF  /* ---- ---- ---- ---- X--- ---- ---- ---- */

/* < */
#define KEY_PREVIOUS  0xFFFEFFFF  /* ---- ---- ---- ---X ---- ---- ---- ---- */
#define KEY_USER2     0xFFFDFFFF  /* ---- ---- ---- --X- ---- ---- ---- ---- */
#define KEY_SOFT2     0xFFFBFFFF  /* ---- ---- ---- -X-- ---- ---- ---- ---- */
#define KEY_PARAMETER 0xFFF7FFFF  /* ---- ---- ---- X--- ---- ---- ---- ---- */
#define KEY_ZERO      0xFFEFFFFF  /* ---- ---- ---X ---- ---- ---- ---- ---- */
#define KEY_EIGHT     0xFFDFFFFF  /* ---- ---- --X- ---- ---- ---- ---- ---- */
#define KEY_FIVE      0xFFBFFFFF  /* ---- ---- -X-- ---- ---- ---- ---- ---- */
#define KEY_TWO       0xFF7FFFFF  /* ---- ---- X--- ---- ---- ---- ---- ---- */

/* > */
#define KEY_NEXT      0xFEFFFFFF  /* ---- ---X ---- ---- ---- ---- ---- ---- */
#define KEY_USER1     0xFDFFFFFF  /* ---- --X- ---- ---- ---- ---- ---- ---- */
#define KEY_SOFT1     0xFBFFFFFF  /* ---- -X-- ---- ---- ---- ---- ---- ---- */
#define KEY_PROGRAM   0xF7FFFFFF  /* ---- X--- ---- ---- ---- ---- ---- ---- */
#define KEY_DOT       0xEFFFFFFF  /* ---X ---- ---- ---- ---- ---- ---- ---- */
#define KEY_SEVEN     0xDFFFFFFF  /* --X- ---- ---- ---- ---- ---- ---- ---- */
#define KEY_FOUR      0xBFFFFFFF  /* -X-- ---- ---- ---- ---- ---- ---- ---- */
#define KEY_ONE       0x7FFFFFFF  /* X--- ---- ---- ---- ---- ---- ---- ---- */

#define KEY_HELP      0xFFFFF7F7  /* ---- ---- ---- X--- ---- X--- ---- ---- */

#define KEY_UP        (KEY_NEXT & KEY_KILL)
#define KEY_DOWN    (KEY_PREVIOUS & KEY_KILL)
#define KEY_MACHINE    (KEY_USER1 & KEY_KILL)
#define KEY_HOTKEYS    KEY_MACHINE

#define KEY_PROGRAM_HOLD   0xF7FFFFFE
#define KEY_PARAMETER_HOLD 0xFFF7FFFE
#define KEY_SOFT1_HOLD 0xFBFFFFFE
#define KEY_SOFT2_HOLD 0xFFFBFFFE
#define KEY_SOFT3_HOLD 0xFFFFFBFE
#define KEY_SOFT4_HOLD 0xFFFFFFFA
#define KEY_SETUP_HOLD 0xFFFFF7FE

#define KEY_UPDATE  0xFFFFF7FD
#define KEY_UNIT      0xFBFFFFFD

#define    KEY_UNKNOWN        0x80000000

Analog Dessert
Joined: Jan 8 2016
Posts: 12
July 23, 2016 - 05:18 am

Thanks :]  I've added a GUI to my Application EXE & VST,  customizable key-mappings, and the ability to communicate with the H8000 via MIDI or Serial.   It's coming along quicker than I expected :D 

 

Questions :

Do you happen to know what KEY_UPDATE, KEY_UNIT, KEY_KILL, or KEY_KILL_HOLD can be used for?

I'm at the point where Id like to sync the H8000 Screen with a Bitmap on the App/VST, but every time I make the SYSEXC_SCREEN_WANT call, the H8000 displays a "Sent 3000 Bytes, etc." message.   Is there a way to supress that message, or is there a better way / do you have any pointers on how I should go about doing somewhat real time screen syncronization, or do you think this aspect will always be a little bit choppy?

The manual says "At the end is two nibbles the form a 1 byte checksum.  This byte added to all the bytes including the size bytes should equal zero"  This is a little confusing, can you reword / explain a little bit better the bold part?
 

Analog Dessert
Joined: Jan 8 2016
Posts: 12
May 07, 2017 - 12:45 pm

Nick,  Thanks for all your help so far.  It's really appreiciated!  And  have another question.

Setting the "BYPASS" Bit 9, bypasses the whole unit, or whatever you have selected in the bypass options.  But also in the bypass options, there are buttons to bypass just DSP A / B,

How can I bypass just "DSP A", or just "DSP B" ?

 

 

 

Analog Dessert
Joined: Jan 8 2016
Posts: 12
May 07, 2017 - 09:42 pm

Another addon question to my one above --- to switch between "Processor A, and Processor B" you suggested I use :

#define KEY_MACHINE (KEY_USER1 & KEY_KILL)

Which sucessfully acts as a 'toggle' -- but that is problematic (as I must know the original state of the machine to keep track of weather the screen is displaying the parameters for A or B).  

Is there a sysex or bit I can send to definitively switch the unit to the Processor A or Processor B screen?

 

nickrose's picture
Eventide Staff
nickrose
Joined: Jan 17 2008
Posts: 4353
May 08, 2017 - 10:44 am

Analog Dessert wrote:

Do you happen to know what KEY_UPDATE, KEY_UNIT, KEY_KILL, or KEY_KILL_HOLD can be used for?

KEY_UPDATE - this is the '2' key that is used at startup to go into update mode

KEY_UNIT - this is used by eve/net

KEY_KILL - this is the bypass key

KEY_KILL_HOLD - this is pressing and holding the bypass key (see below).

Analog Dessert wrote:

I'm at the point where Id like to sync the H8000 Screen with a Bitmap on the App/VST, but every time I make the SYSEXC_SCREEN_WANT call, the H8000 displays a "Sent 3000 Bytes, etc." message.   Is there a way to supress that message, or is there a better way / do you have any pointers on how I should go about doing somewhat real time screen syncronization, or do you think this aspect will always be a little bit choppy?

This is what it is, I'm afraid.

Analog Dessert wrote:

The manual says "At the end is two nibbles the form a 1 byte checksum.  This byte added to all the bytes including the size bytes should equal zero"  This is a little confusing, can you reword / explain a little bit better the bold part?

This is for error detection - a sum total is kept of all the bytes sent for a message, then a byte is sent which is zero minus the sum, so that when all the bytes (including this check sum) are added together, the result is zero.

 

 

nickrose's picture
Eventide Staff
nickrose
Joined: Jan 17 2008
Posts: 4353
May 08, 2017 - 10:49 am

Analog Dessert wrote:

How can I bypass just "DSP A", or just "DSP B" ?

See p.91 and p.110 of the latest UM.

nickrose's picture
Eventide Staff
nickrose
Joined: Jan 17 2008
Posts: 4353
May 08, 2017 - 10:55 am

Analog Dessert wrote:

Is there a sysex or bit I can send to definitively switch the unit to the Processor A or Processor B screen?

There is no direct command to do this.

You might be interested in the attached document, which gives some extensive byt complicated remote control examples.

 

 

Analog Dessert
Joined: Jan 8 2016
Posts: 12
May 08, 2017 - 11:22 am

That's awesome.  Thank you so much!

As for the DSP Bypassing -- Per page 110 -- It sounds like the user would need to be involved in some sort of setup.   As I am making an Application / VST, this is not ideal.

 

Is there a specific sysex string I can use to definitively bypass DSP A, and another sysex string I can use to bypass DSP B?  Or am I missing something

 

Cheers

nickrose's picture
Eventide Staff
nickrose
Joined: Jan 17 2008
Posts: 4353
May 08, 2017 - 12:56 pm

Analog Dessert wrote:

Is there a specific sysex string I can use to definitively bypass DSP A, and another sysex string I can use to bypass DSP B?  Or am I missing something

Doesn't really work like that. You choose the CC that you want to use, and tell the unit about it, as described. Some setup is required. Otherwise, you can be sure that the CC we wanted to use would be needed for something else.

For sysex, look at the document I attached - but it is a lot of work.