What is H8000FW’s Sysex DeviceID?

Home Forums Products Rackmount What is H8000FW’s Sysex DeviceID?

  • This topic is empty.
Viewing 15 reply threads
  • Author
    Posts
    • #113153

      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
    • #142098
      nickrose
      Moderator
      Eventide Staff

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

       

    • #143812

      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 🙂

       

    • #143822

      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.

    • #143826
      nickrose
      Moderator
      Eventide Staff

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

       

    • #143852
      nickrose
      Moderator
      Eventide Staff

      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

       

       

    • #143853

      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)

       

       

       

    • #143868

      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?

    • #143869

      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! :}

       

       

       

    • #143874
      nickrose
      Moderator
      Eventide Staff

      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)

    • #143885

      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

    • #143901
      nickrose
      Moderator
      Eventide Staff

      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

    • #143907

      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 😀 

       

      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?

       

      • #146332
        nickrose
        Moderator
        Eventide Staff
        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.

         

         

    • #146318

      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” ?

       

       

       

      • #146333
        nickrose
        Moderator
        Eventide Staff
        Analog Dessert wrote:

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

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

    • #146324

      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?

       

      • #146334
        nickrose
        Moderator
        Eventide Staff
        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.

         

         

    • #146335

      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

      • #146336
        nickrose
        Moderator
        Eventide Staff
        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.

Viewing 15 reply threads
  • You must be logged in to reply to this topic.