Roland_Boss - MIDI over USB Sysex Reverse Engineering

Started by vtgearhead, December 12, 2016, 12:43:41 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

gumtown

Strange thing I found about the Katana BTS saved patch files, they have a header listed as "GT",
so the GT-100FxFloorBoard editor will load in Katana patch files,
and display the parameters common with the Katana.

Just the chain is screwed up, being completely different.

Tone Studio patch files (*.tsl) can be read using a JSON editor, as the files are in json structured text format
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

CodeSmart

Quote from:  snhirsch
Lots and lots of cleanup, correction and reformatting.  Would really appreciate feedback in terms of understandability.

Well, to me it looks you gotten a long way. It's not easy writing a spec in plain text format, and this stuff is not mainstream bed time reading  ;D. I guess the real questions won't show up until someone is using it for some software implementation.
But I got more gear than I need...and I like it!

gumtown

I am used to midi structure done in *.xml format.

What you have there is easy enough for me to read and understand.

@codesmart: good to see you are on in NZ time - reading what is in NZ time being yesterdays news.
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

condor

I recently bought a K50 and after i read this thread I wrote a little Android app to test sysex editing possibilities of the Katana baseed on your great work.
I already have done this for the Yamaha THR 10 series (see http://www.thegearpage.net/board/index.php?threads/yamaha-thr-android-editor.1669012/page-4). I really appreciate your work examinig the Boss/Roland protocol to make the same possible for Katana.

My app uses the kshoji/USB-MIDI-Driver to send sysex via OTG cable. On the first try I managed it to send control messages to Katana but
its not able to receive any sysex if I turn a knob on the amp or change channels or panel. Do i have to send a specific command to tell the amp to answer/send messages back? The THR 10 had a heartbeat message which was telling me that the connection is established. I also used Midi OX along with MIDI Yoke and configured it as "man in the middle" which worked fine. But the same idea seems not working with Katana. The BTS can not establish connection to MIDI Yoke but only to Katana. Here is my setting in MidiOX

IN:   1) In From MIDI Yoke:  1
IN:   9) 3- KATANA
OUT:  3) Out To MIDI Yoke:  2
   In: 1) In From MIDI Yoke:  1
     Details/Chan: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,CM,RT,Sx
   In: 9) 3- KATANA
     Details/Chan: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,CM,RT,Sx
   In: MIDI-OX Events
     Details/Chan: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,CM,RT,Sx
OUT: 10) 3- KATANA
   In: 1) In From MIDI Yoke:  1
     Details/Chan: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,CM,RT,Sx
   In: 9) 3- KATANA
     Details/Chan: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,CM,RT,Sx
   In: MIDI-OX Events
     Details/Chan: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,CM,RT,Sx

I`m just at the beginning to dive into Katana stuff and I think it would be really great to have an Android editor for this awesome amp.
But it seems to be a hard and stony way ...

vtgearhead

I will defer to Gumtown for advice on the Windows MIDI environment and MidiYoke in particular.  I am not smart enough to understand MidiYoke and could not get it to do much of anything, but it looks valuable if properly applied.

I was able to talk with the amplifier from Bome SendSX during a BTS session, however.

sixeight

Quote. Do i have to send a specific command to tell the amp to answer/send messages back?

You probably have to find the sysex command to put the Katana in edit mode. This is how it works on the VG99 and the GP10.  For the GR55 this command is unknown,  or it does not exist as there is no official editor for it...

condor

#56
so it would be like this? (I´m not at my computer so i can`t try it)
F0 41 00 00 00 00 33 12 7F 00 00 01 01 CS F7  -> Editor mode on CS -> checksum
F0 41 00 00 00 00 33 12 00 01 00 00 00 00 7F F7 -> switch to panel
F0 41 00 00 00 00 33 12 7F 00 00 01 00 CS F7  -> Editor mode off

I was able to send panel switch with SendSX while BTS was running so I wonder the above would work without BTS?


gumtown

It is simpler than that.

For example (without looking at the GT-1 sysx document)

If you want to change a parameter
F0 41 00 00 00 00 33 12 00 01 00 00 00 00 7F F7
You break the data down into
F0 41 00 00 00 00 33 = sysx header + manufacturer + device ID
12 = data change
00 01 00 00 = 4 byte address
00 00 =  2 bytes of data to change at the address from your example (byte size of data can be as big as you want)
7F F7 = checksum + sysx message end

If you want to read a parameter
F0 41 00 00 00 00 33 11 00 01 00 00 00 00 00 02 7F F7
You break the data down into
F0 41 00 00 00 00 33 = sysx header + manufacturer + device ID
11 = data request from device
00 01 00 00 = 4 byte address
00 00 00 02 = 4 byte data read size from address start point, data size = 2 bytes returned, request must be 4 bytes long.
7F F7 = checksum + sysx message end (checksum not correct in example)

From that data request, you would expect the returned message to be
F0 41 00 00 00 00 33 12 00 01 00 00 00 00 7F F7

You can request a single parameter (GT-1 parameter sizes range from 1 byte to 3~4 bytes), or you could request a block of data, or an entire patch.

So if you are requesting to read the system area data for parameter update, it is just as easy to read the main system/global data and exclude the midi program tables, as the read time and return message does not take much more time than returning a single parameter.

I the case of an editor, you might want to request enough patch data to refresh the current page of parameters.
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

condor

#58
@gumtown: thanks for clarification.
But does it mean that I have to poll (cyclic monitor) the set of parameters which I`m showing in my editor (e.g. gain, master bass ..) in order to be able to react to user changes?

I still don`t know why Katana reacts well to gain,master etc. changes but not to panel switch cmd
Panel: F0 41 00 00 00 00 33 12 00 01 00 00 00 00 7F F7

sixeight

#59
Quote from: sixeight on December 18, 2016, 06:28:51 AM
You probably have to find the sysex command to put the Katana in edit mode. This is how it works on the VG99 and the GP10.  For the GR55 this command is unknown,  or it does not exist as there is no official editor for it...

Requesting data can be done on Boss/Roland devices without putting the device in editor mode, using the method Gumtown specified.

Editor mode will get the device to send sysex data when you change a parameter on the unit itself, by pressing a button or turning a knob. This is how BTS keeps track of changes you make on the unit whilst BTS is running. I figured this is what you were after by reading your reply.

If you can sniff out what BTS is sending, you may be able to find the command that will put the unit in editor mode. Also the last command BTS sends before it is closed is interesting, because that probably will be the command to end editor mode.

Unfortunately I don't have a Katana, so it may all be implemented different now.

vtgearhead

Quote from: condor on December 18, 2016, 12:34:45 PM
I still don`t know why Katana reacts well to gain,master etc. changes but not to panel switch cmd
Panel: F0 41 00 00 00 00 33 12 00 01 00 00 00 00 7F F7

As I noted in my sysex document, the amp responds to channel (preset) store and recall only when in editor mode.  This is also true for the the 7F command used to simulate effects "color" button presses.

Remember that channel change can be done easily with conventional PC commands.  No need for sysex.

vtgearhead

Over the past day I've been exercising the sysex API rather heavily to see what is practical in terms of applying many settings at once from a controller.  You can get about 90% of the way there by simply saving and restoring the amplifier control block.  This is done by querying at address:

00 00 04 00 - for length - 00 00 00 2A

Any time you want to recover the front panel state, you ship back those saved 42 bytes to the same address.  It is absolutely instantaneous with no pops or dropouts.  The one bit of oddness is that the effects LEDs do not always come back exactly right.  The sound will be what you expect, but LED color state doesn't necessarily agree with what it was at the time you saved.  It's probably necessary to save save and restore some settings in the 60 00 xx xx region as well.  I'll get there.

Bulk changes to effects settings and assignments are not always working reliably.  There are probably some ordering issues that I'm not understanding.  I'll get there.

Finally, it does indeed seem necessary to read responses from the amp in order to keep the input buffers drained.  If this isn't done, you will often get garbled or incorrect data (in other words, whatever was piled up in the buffers from a previous incoming message.  Unless I'm screwing myself up (quite possible) the amp appears to chat back on some sysex operations even when not in edit mode.

condor

#62
Thank you all for the detailed explanations. I also quickly went through the GT100/GT001 midi spec.
I managed to send panel and channel switch messages to the amp via Android. I was also able to retrieve the control panel settings from the amp  (value by value). I still have some minor issues with the connection handling using the Android USB Midi driver but it basically works.
@snhirsch
Could you tell me what is ment with A-Range and B-Range toggle in your midi document (which is really great by the way)?
*************************
****** Boost/Mod ********
*************************

===== Boost ======

A-Range Toggle (Off, On)
60 00 00 30 --> 00, 01

@gumtown:
Could you give me an example (GT1 or GT100) how to request block of data, or an entire patch instead of single values?


vtgearhead

Quote from: condor on December 19, 2016, 11:35:13 AM
@snhirsch
Could you tell me what is ment with A-Range and B-Range toggle in your midi document (which is really great by the way)?

Yeah, that does need some further explanation.  It refers to the use of the Boost/Mod and Delay/FX knobs to control two different DSP effects. 

To recap: The first effect is "A" and the second is "B" for each of those knobs.  If you start with the Boost/Mod knob fully counterclockwise, that's A-Range "Off".  As you start turning it clockwise it goes from A-Range "0" through A-Range "50" and affects only "boost".  At 12-oclock you hit B-Range "Off" and proceed through B-Range 0-50 where it affects only "mod". 

For whatever reason, the sysex command to toggle effect on/off is different depending on whether it's in the A or B portion of the range.  But, don't worry too much about it since it's more straightforward to use CC# 16 as an on/off.  With CC, you don't have to know or care what part of the range you are in.  It does the right thing whether you're in boost-land or mod-land.   

The same applies to preset select.  Don't bother with sysex.  Just use a conventional PC command.

gumtown

#64
Quote@gumtown:
Could you give me an example (GT1 or GT100) how to request block of data, or an entire patch instead of single values?

Similar to the example previous,
since I currently have the GT-001 setup on my desk, working on the GT-001FxFloorBoard editor development.

If you want to read a patch or block of data
F0 41 00 00 00 00 06 11 60 00 00 00 00 00 11 00 0F F7
You break the data down into
F0 41 00 00 00 00 06 = sysx header + manufacturer + device ID
11 = data request from device
60 00 00 00 = 4 byte address, in this case this is the address of the temporary patch location (memory scratchpad for the current loaded patch).
00 00 11 00 = 4 byte data read size from address start point, data size requested = 11 00 (everything included from start address to address 60 00 11 00), request must be 4 bytes long.
oF F7 = checksum + sysx message end

The reply data is as below (GT-001 patch), not all address ranges necessarily be sent, but everything the GT has as a patch is sent. The current Boss format is to send 256 byte sized data blocks (including headers/footers), so the first block address starts at 60 00 00 00, the next block starts at address 60 00 01 71.
The data request size is 00 00 11 00, but the GT-001 data finishes at 00 00 10 3B, so even though the request is for more, the GT sends what it has.

F0 41 00 00 00 00 06 12 60 00 00 00 54 45 52 41 20 45 43 48 4F 20 4C 44 20 20 20 20 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 32 32 32 00 00 00 00 00 00 00 00 00 00 01 0C 28 32 32 00 32 3C 00 00 32 32 32 32 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 05 37 0A 32 32 37 0F 32 00 01 00 32 01 01 01 05 64 00 00 32 32 0A 0A 32 32 32 07 0A 0A 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 32 0A 32 32 32 00 32 00 01 00 32 01 01 01 05 64 00 00 32 32 0A 0A 32 32 32 07 0A 0A 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 0E 01 14 17 01 14 14 0E 14 00 00 00 00 00 13 06 32 32 32 00 32 32 00 00 00 01 01 32 1E 32 00 32 00 01 1E 32 32 32 00 32 00 00 64 00 64 64 00 00 00 32 32 32 32 00 00 00 3C 0B 14 19 00 14 34 F7
F0 41 00 00 00 00 06 12 60 00 01 71 14 14 14 14 14 14 14 14 14 14 00 00 14 0E 01 14 17 01 14 14 0E 14 00 00 32 32 32 32 00 00 32 32 32 32 00 28 32 32 00 32 32 46 00 32 64 00 00 00 28 1E 28 32 32 19 00 00 32 32 32 20 28 64 00 00 00 32 32 00 00 01 18 3C 00 00 64 01 18 28 00 00 64 00 64 00 00 0C 00 00 64 15 00 00 64 00 64 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 00 00 32 32 00 01 32 32 10 32 32 32 00 00 46 32 37 00 00 64 00 00 19 32 4B 50 00 00 64 00 00 64 55 32 32 00 01 1E 55 32 32 32 32 00 46 32 64 00 00 32 00 28 64 32 00 00 32 32 32 00 00 50 2D 01 50 32 00 00 32 64 64 00 01 00 02 32 32 64 32 64 00 09 1E 28 10 32 28 32 08 64 64 00 03 10 14 0E 32 64 32 00 01 21 06 32 32 32 00 32 32 00 00 00 01 01 32 1E 32 00 32 00 01 1E 00 F7
F0 41 00 00 00 00 06 12 60 00 03 62 32 32 32 00 32 00 00 64 00 64 64 00 00 00 32 32 32 32 00 00 00 3C 0B 14 19 00 14 14 14 14 14 14 14 14 14 14 14 00 00 14 0E 01 14 17 01 14 14 0E 14 00 00 32 32 32 32 00 00 32 32 32 32 00 28 32 32 00 32 32 46 00 32 64 00 00 00 28 1E 28 32 32 19 00 00 32 32 32 20 28 64 00 00 00 32 32 00 00 01 18 3C 00 00 64 01 18 28 00 00 64 00 64 00 00 0C 00 00 64 15 00 00 64 00 64 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 18 00 00 32 32 00 01 32 32 10 32 32 32 00 00 46 32 37 00 00 64 00 00 19 32 4B 50 00 00 64 00 00 64 55 32 32 00 01 1E 55 32 32 32 32 00 46 32 64 00 00 32 00 28 64 32 00 00 32 32 32 00 00 50 2D 01 50 32 00 00 32 64 64 00 01 00 02 32 32 64 32 64 00 09 1E 28 10 32 28 32 08 64 64 00 03 10 14 16 F7
F0 41 00 00 00 00 06 12 60 00 05 53 0E 32 64 32 00 00 00 00 00 00 00 00 00 00 00 02 68 28 0E 3C 64 32 00 64 14 0E 32 03 10 14 0E 32 28 32 00 00 00 00 00 00 00 00 00 00 00 00 00 28 32 08 00 0E 64 64 00 00 00 00 00 00 00 01 04 26 00 00 0A 08 0A 1E 64 32 00 00 00 00 00 00 18 24 00 64 00 00 64 00 64 64 00 00 00 00 00 02 00 64 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 00 09 00 32 00 09 00 00 00 00 00 00 00 32 00 00 00 00 00 32 32 00 00 00 00 00 00 00 00 00 00 01 1E 1E 00 00 01 1E 1E 00 00 00 00 00 00 04 32 32 32 32 32 32 00 32 32 32 32 64 64 00 32 46 55 32 00 55 08 00 00 00 00 00 00 00 00 06 32 14 10 01 14 14 00 78 00 13 00 00 00 00 00 00 05 00 0B 0F 01 11 02 0D 12 03 0E 13 04 0C 06 07 08 0A 09 10 00 00 00 00 00 00 00 00 00 00 00 00 0E 0F 0A 0B 1C F7
F0 41 00 00 00 00 06 12 60 00 07 44 10 11 00 01 00 00 00 00 00 00 00 00 06 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 13 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 06 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 09 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 05 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 01 05 01 00 7F 08 1E 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 01 05 01 00 7F 08 1E 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 01 05 01 00 7F 08 1E 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 01 05 01 00 7F 08 1E 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 14 F7
F0 41 00 00 00 00 06 12 60 00 09 35 00 01 05 01 00 7F 08 1E 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 01 05 01 00 7F 08 1E 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 01 05 01 00 7F 08 1E 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 01 05 01 00 7F 08 1E 00 14 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 65 6E 74 65 72 20 79 6F 75 72 20 6E 61 6D 65 20 6F 72 20 64 65 74 61 69 6C 73 20 68 65 72 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6E 74 65 72 20 79 6F 75 72 20 70 61 74 63 68 20 63 6F 6D 6D 65 6E 74 20 74 65 78 74 20 68 65 72 65 20 74 6F 20 45 F7
F0 41 00 00 00 00 06 12 60 00 0B 26 64 65 73 63 72 69 62 65 20 74 68 65 20 65 66 66 65 63 74 73 20 61 6E 64 20 73 65 74 74 69 6E 67 73 20 75 73 65 64 20 2D 20 74 65 78 74 20 69 73 20 73 61 76 65 64 20 69 6E 74 6F 20 47 54 2D 31 30 30 20 70 61 74 63 68 20 64 61 74 61 20 61 6E 64 20 66 69 6C 65 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 34 F7
F0 41 00 00 00 00 06 12 60 00 0D 17 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5C F7
F0 41 00 00 00 00 06 12 60 00 0F 08 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32 32 32 00 32 00 00 01 1E 55 32 32 32 32 32 32 32 32 00 32 00 00 01 1E 55 32 32 32 32 32 00 01 1E 28 32 25 64 00 00 32 64 64 64 35 08 F7
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

condor

Quote from: snhirsch on December 19, 2016, 12:04:56 PM
For whatever reason, the sysex command to toggle effect on/off is different depending on whether it's in the A or B portion of the range.  But, don't worry too much about it since it's more straightforward to use CC# 16 as an on/off.  With CC, you don't have to know or care what part of the range you are in.  It does the right thing whether you're in boost-land or mod-land.   

The same applies to preset select.  Don't bother with sysex.  Just use a conventional PC command.

Yes it was something similar in my mind regarding this A B stuff. Now its clear. In my app I have 2 separate knobs for mod and booster with the corresponding range. It seems to work fine. But i will try your suggestion with CC# 16. Do you maybe have a complete CC command c&p ready into SendSX? The android driver also have ready to use PC and CC methods but PC cmd did not work for some reason.I specifid cable, channel and value (0,0,2 -> ch2).

condor

this hex stuff drives me crazy. The THR 10 communication was much simpler...  ;)

sixeight

Quote from: condor on December 19, 2016, 12:24:00 PM
this hex stuff drives me crazy. The THR 10 communication was much simpler...  ;)

When you start counting in hexadecimal it gets scary.  It also gets quite crazy on the Zoom pedals I cracked.

0x44

gumtown

There is usually something wrong when you start having dreams in C++
Free "GR-55 FloorBoard" editor software from https://sourceforge.net/projects/grfloorboard/

vtgearhead

The really scary part is when you wake up in the middle of the night with a great algorithm for the problem you've been wrestling with. 

vtgearhead

Quote from: condor on December 19, 2016, 12:18:05 PM
I specifid cable, channel and value (0,0,2 -> ch2).

The notion of "cable" is specific to transport of MIDI over USB.  I would have expected the Android API to have abstracted that away and doubt you need to even consider it at the API level.  A complete PC command to request program #2 on MIDI channel 0 would be: C0 01 (if you consider logical channels to run 1..16).

CodeSmart

Quote from: gumtown on December 19, 2016, 01:30:20 PM
There is usually something wrong when you start having dreams in C++
They  normally come in three versions:
1. Dream tells you to invent some new great thing.
2. Dream tells you to improve the thing, just to find out you broke existing working thing.
3. Dream tells you how to fix broken thing resulting in more broken things.
But I got more gear than I need...and I like it!

gumbo

4. Dream tells you to go to the toilet next time before going to sleep....
Read slower!!!   ....I'm typing as fast as I can...

condor

#73
Quote from: snhirsch on December 19, 2016, 11:21:28 AM
Over the past day I've been exercising the sysex API rather heavily to see what is practical in terms of applying many settings at once from a controller.  You can get about 90% of the way there by simply saving and restoring the amplifier control block.  This is done by querying at address:

00 00 04 00 - for length - 00 00 00 2A

It worked for me. I got this:
FROM: f0 41 00 00 00 00 33 12 00 00 04 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 01 02 00 01 00 00 00 00 00 00 00 00 00 00 01 27 42 2e 1b 29 3d 12 00 1f 2b f7  Length: 56

I still have some issues with the android driver. I have to restart the app (change orientation -> restarts the activity) until the app is able to receive incoming sysex.
The channel switch command works fine from the first start on. I´m pretty sure that the amp receives the Editor Mode On cmd but it does not respond immediately on my query of the amp control block. Maybe I have to send something else apart from the EditorMode On command first? In my THR 10 project the same driver worked without hicks regarding incoming sysex.

vtgearhead

#74
Quote from: condor on December 20, 2016, 01:19:28 PM
It worked for me. I got this:
FROM: f0 41 00 00 00 00 33 12 00 00 04 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 01 02 00 01 00 00 00 00 00 00 00 00 00 00 01 27 42 2e 1b 29 3d 12 00 1f 2b f7  Length: 56

I still have some issues with the android driver. I have to restart the app (change orientation -> restarts the activity) until the app is able to receive incoming sysex.
The channel switch command works fine from the first start on. I´m pretty sure that the amp receives the Editor Mode On cmd but it does not respond immediately on my query of the amp control block. Maybe I have to send something else apart from the EditorMode On command first? In my THR 10 project the same driver worked without hicks regarding incoming sysex.

That looks fine.  I find it easier to strip the prefix, checksum and terminator bytes and separate out the address when displaying query results.  Here's some amp panel data formatted by a little Python script:

Address = 00 00 04 00

    0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F 
00  00 00 32 32 00 00 00 00 00 00 00 00 00 00 00 00
10  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
20  01 26 40 36 2F 3A 00 00 34 00

The offset values make it simple to find things.  Row + column gives you the offset from starting address.

FYI: The amp does NOT need to be in edit mode for the vast majority of operations.  I would only enable edit just prior to one of the few operations that require it (e.g. sysex controlled patch change, query of current patch, patch store). After the command, clear the input buffer and disable edit mode. 

After some review of my results it looks like the amp is completely quiet after writes (12) when edit mode is disabled.  It will respond to most queries (11) so, again, little reason to have edit mode on.