PASHA

PASHA, the MediaMatrix Serial Handling Adapter, is a software application that provides external serial command and read-back of designer selected controls in a MediaMatrix View File.  The hardware required for this is a standard PC serial port (usually RS-232).  Multiple serial ports, or serial command streams, can be accommodated.  RS-232, RS-422, and other cards and serial driver software modules, available from other manufacturers, can add both additional serial port features and increase communications reliability.  The serial command protocol used by PASHA is human-readable ASCII, so it is possible to test and debug PASHA control of a specific MediaMatrix View File using just a Windows-based PC with a spare serial port - MediaMatrix hardware is not required.  With a second serial port and a null-modem cable, a Windows terminal program can simulate the controlling machine.

It is important to note that in MediaMatrix 3.x the need for the PASHA.INI file has been eliminated - Control Grouping is the method used to export controls.  You may find it necessary to import View Files created in earlier versions of MediaMatrix, and these may include a PASHA.INI file for external control via serial ports.  In order to do this, use the "Tools | Import/Export | Import PASHA.INI..." command. Be aware that in earlier versions the Control IDs used were hexadecimal numbers, and were not case sensitive.  In version 3.x the Control Group name used can be any 3 alphanumeric characters, and IS case sensitive.  Therefore it is possible that a PASHA.INI file that was working in an earlier version may not work, or may have some controls that do not work, after being imported into MWare 3.x.

Software Architecture (Severely Abridged)

In MediaMatrix, there are two Windows applications that work together: PAVCON (Peavey Audio Virtual Console), which is the graphical user interface, and PADPU (Peavey Audio Digital Processing Unit), which contains the devices and controls and governs the DSP hardware. Serial control is accomplished with the addition of a third application, PASHA (Peavey Audio Serial Handling Adapter), which, through a Windows serial port, turns external serial commands into MediaMatrix commands. There is a client/server relationship between these applications, with PADPU being the server and PAVCON and PASHA being clients. PASHA translates serial commands into the same kind of commands that PAVCON uses to set and display the control values in PADPU. Only PAVCON has a user interface.

Configuring PASHA

Go to the Tools | Options | Remote Services page, and click on 'Add PASHA Port...' A dialog box will appear. Choose the correct serial port, baud rate, and data bits for your application. Only one PASHA service is allowed per serial port, but multiple serial ports can be opened at once. If the PASHA service fails to start, it is probably a conflict with the serial port. Either another program has already opened that serial port, or the serial port does not exist on the system.

User IDs and Control Groups

PASHA user IDs correspond to 3 character Control Group names in View Files. To specify a user ID for a control in MediaMatrix, open its Control Object Properties page and select the Group tab. Enable Control Grouping and give the control the desired 3 character Group Name. Any alphanumeric character may be used, and the protocol is case sensitive, so "aaa" is different from "AAA". Control Group names of other lengths are possible in MediaMatrix, but only those exactly 3 characters long can be used for serial control via PASHA.

Message Protocol

Messages are ASCII (text) strings. While they contain hexadecimal numbers, the Hex numbers are represented by ASCII (text). Do not send actual hex data, but an ASCII (text) string that represents the value to be sent.

Each message begins with a message-type character and ends (with the exception of the NAK message) with an end-of-message character '.'. Each message to PASHA results in a response message from PASHA. PASHA never sends a message except in response to an external message.

In general, the protocol supports Setting and Getting control values. User IDs are entered into Control Groups which identify a unique control or group of controls. They are specified for use with PASHA with 3 alphanumeric characters. Control values are specified with a 2 digit hexadecimal number, 00 through FF.

Controls are set to a position using the cSETVALUE 'S' command. You can determine the current setting of a control using the cGETVALUE 'G' command. The 256 values that a control can take on correspond to 256 equidistant positions of a control in a MediaMatrix view file. It is possible, and normal in some cases, for the value that a control actually takes on (and returns) to not match the value to which it was set. For instance, in the case of a switch-style control, any value sent between 00 and 7F will result in a return value of 00, and any value sent between 80 and FF will result in a return value of FF. This is because a switch can only be either ON or OFF. If it is ON, it will return a value of FF, while if it is OFF, it will return a value of 00. If commanding a Level with Trim device's Trim control, the dB range of the Trim control (set up by Trim Min. and Trim Max.) is simply divided into 256 possible values. Most devices' gain controls, however, are non-linear, and the math is not so simple. For those controls, tables are included below that map linear control values to dBs of gain, one for a gain control with range of -100dB to +12dB, another for a gain control with a range of -100dB to 0dB. Also included are tables that map control values to Router channel selections for various sized Routers.

For example, to set the channel 2 input gain specified in the demo view file PASHA32.PAV to fully counter clockwise, one first look up the UID specified in the Control Group for the control in question. In this case it is 2iG. Fully counter clockwise is 00 Hex. The cSETVALUE command is 'S' and the end-of-message character is '.'. Putting this all together gives a command string:

S2iG00.

Note that it is not required or desirable to put a carriage return after the end-of-message (EOM) character '.'. PASHA will accept the command when it receives the EOM character. Shortly thereafter it will return the value that the control has been set to:

V2iG00.

To check what a control is set to, you can use the cGETVALUE 'G' command. For example to check the setting of the channel 1 parametric EQ center frequency control, you send:

G1Cf.

Note that since you are requesting a control value, you do not send one. If the control was set to the mid point of its rotation you will get a response:

V1Cf80.

Remember it is possible, and normal in some cases, for the value that a control actually takes on (and returns) to not match the value to which it was set. For instance, in the case of a switch-style control, any value sent between 00 and 7F Hex will result in a return value of 00 Hex, and any value sent between 80 and FF Hex will result in a return value of FF Hex. For example you may have sent to the Channel 2 output mute:

S2oM3E.

However since the switch can only be on or off it will be set to off and return:

V2oM00.

If you send a command using a UID that is not in a Control Group in the view file, PASHA will respond with a cUNLISTEDUID 'U' and repeat back the Uid it does not find in the PASHA.INI file. For example if there was no Control Group hat in the view file, and you sent:

Shat48.

the response would be:

Uhat.

If you send a command using a valid UID (a 3 character Control Group name) in the view file, but one or more of the controls that Control Group references is not found in the view file, PASHA will respond with a cUNLISTEDCID 'C' and repeat back the UID you sent. For example if there was a UID ukc in the view file, and one or more of the controls to which it referred are "dead" or "orphaned", and you sent:

Sukc48.

the response would be:

Cukc.

A "dead" control will occur if the algorithm it is part of did not compile. This will happen if the algorithm is not properly wired. An "orphan" control will occur when the algorithm it was copied from has been deleted from the view file.

If you send an illegal message such as specifying a value as part of a get message, or scramble the order of message components, or there are certain other communications errors, PASHA may respond with a Negative Acknowledge mNAK '?' instead of the normal response. For example if you sent:

GHLP57.

PASHA will respond with:

?

Note this is the only message in the PASHA protocol, which does not end in an end of message character cEOM '.'.

No response will be sent if garbled data or illegal commands are received by PASHA. While PASHA will respond with a Negative Acknowledge mNAK '?' for certain communications errors, you can't be assured that it will always do so.

If there is a serial port error or communications timeout, or if there is a communications failure between PASHA and PADPU, you will get the Fail mFail 'X' message from PASHA as follows:

X.

If you send a valid message to PASHA, but PADPU is either not running, or a view file is not compiled and running, then PASHA will respond with a mNotReady message. For example if you sent:

SDeD48.

but the view file was not compiled, then you would receive back:

R.

C-LIKE MESSAGE DEFINITION

This section defines the message protocol using "C-like" declarations of constants and structures. The convention here is that words beginning with 'c', such as cSETVALUE and cGETVALUE, are character constants. Words beginning with 'f'', such as fUid and fVal, are message field structures. Words beginning with 'm', such as mSetValue and mGetValue, are message structures.

//---- Message constants
const char cSETVALUE = 'S'; // an fType value
const char cGETVALUE = 'G'; // an fType value
const char cVALUE = 'V'; // an fType value
const char cNOTREADY = 'R'; // an fType value
const char cUNLISTEDUID = 'U'; // an fType value
const char cUNLISTEDCID = 'C'; // an fType value
const char cFAIL = 'X'; // an fType value
const char cNAK = '?'; // an fType value
const char cEOM = '.'; // an fEom value

//---- Message fields
/* fType: Message Type. 1 character, denotes the message type. */
struct fType {
  char data;
};

/* fUid: User ID. 3 ASCII characters, specifies one of the User IDs entered as a Control Group name in the View File. */
struct fUid {
  char data[3];
};

/* fVal: Control Value. 2 ASCII hexadecimal digits, specifies a control value between 0 and 255. */
struct fVal {
  char data[2];
};

/* fEom: End Of Message. 1 character, appears at the end of every message, excepting mNak. */
struct fEom {
  char data = cEOM;
};

//---- Messages
/* mNak: Negative Acknowledge. Response sent to client upon receipt of unintelligible data. This could be due to a communications error or to data out of order. An mNak is not necessarily sent for every byte of bad data. */
struct mNak {
  fType = cNAK;
};

/* mSetValue: Set Control Value. Request sent by a client to set the value of a Control Group. */
struct mSetValue {
  fType type = cSETVALUE;
  fUid id;
  fVal val;
  fEom eom;
};

/* mGetValue: Get Control Value. Request sent by a client requesting the value of a Control Group. */
struct mGetValue {
  fType type = cGETVALUE;
  fUid id;
  fEom eom;
};

/* mValue: Control Value. Response sent to the client acknowledging an mGetValue or mSetValue. Note that it is possible, and normal in some cases, that the val field will not match the val that was sent in the mSetValue. */
struct mValue {
  fType type = cVALUE;
  fUid id;
  fVal val;
  fEom eom;
};

/* mUnlistedUid: Unlisted User ID error. Response indicating the fUid specified in the mSetValue or mGetValue does not match any Control Group name in the currently running View File. */
struct mUnlistedUid {
  fType type = cUNLISTEDUID;
  fUid id;
  fEom eom;
};

/* mUnlistedCID: Unlisted Control ID error. Response indicating a control withing the Control Group referenced by the fUid specified in the mSetValue or mGetValue was not found in the currently compiled View File. Probably means that the Control is "dead" or discarded. */
struct mUnlistedCID {
  fType type = cUNLISTEDCID;
  fUid id;
  fEom eom;
};

/* mNotReady: Not Ready. This means that there is no View File currently compiled and running in MediaMatrix. */
struct mNotReady {
  fType type = cNOTREADY;
  fEom eom;
};

/* mFail: Something Has Failed. This is sent in response to serial port errors, communication time-outs, and other internal errors not covered directly. */
struct mFail { 
  fType type = cFAIL;
  fEom eom;
};

MESSAGE STRUCTURES QUICK CHART

 

Message name

Message fields

Style

Type

Alphanumeric
UID

Hex Value

End of
Message

Set Value

S

XXX

XX

.

request

Get Value

G

XXX

 

.

request

Value

V

XXX

XX

.

response

Not Ready

R

 

 

.

response

Unlisted UID

U

XXX

 

.

response

Unlisted CID

C

XXX

 

.

response

Fail

X

 

 

.

response

Nak

?

 

 

 

response

Real-time Concerns and Flow Control

In general, the serial control throughput into the MediaMatrix computer is dependent upon the number of Windows applications running, and the activity level of those applications. Any application which is actively animating a display on the screen will take time away from other applications, such as PASHA. MediaMatrix itself, if displaying any controls, requires a certain percentage of the processor power to keep those controls updated.

Serial data overruns at the MediaMatrix end can be prevented by having the external serial device wait for the response to each command it sends. If this is not possible, keep in mind that each PASHA service instance can store about 100 unacknowledged commands before overflowing its receive buffer.

Serial data overruns at the external serial device are usually not an issue since PASHA will never speak unless spoken to - the only way to elicit data from PASHA is to send a command.

Serial Control Experimentation

To experiment with PASHA control of MediaMatrix on a desktop PC, with no MediaMatrix hardware required. You'll need two free COM ports, a null-modem cable and a Windows terminal program such as Hyperterminal.

1) Open and Compile the demo view file PASHA32.PAV in the samples directory.

2) Start a PASHA remote service on one of the COM ports using Tools | Options | Remote Services, Add PASHA port...

3) Start the Windows terminal program on the other COM port, making sure to match the communication settings of PASHA.

4) Enable local echo in Hyperterminal so you see what you're typing.

5) To mute the input to channel 1, send:

S001FF.

The response should be:

V001FF.

and the mute button will light.

6) To read the channel 2 center frequency control, send:

G00B.

and the response should be:

V00B99.

with the last two characters depending on the control's position in the view file.

If you are experiencing difficulty, test your COM ports and cable by making sure that you can communicate between two copies of the Windows termainal program assigned to the two COM ports.

You can also enable PASHA debug printout in the Terminal Window. At the top level menu in Terminal Window, type "S" (for (S)ervices), then "H" (for (pas(H)a), then "D" (for (D)ebug). You should then get some printout concerning PASHA activity as it happens.

A Note About Reading Meter Values

It is possible to read MediaMatrix audio meter values with PASHA, but there is an important fact to be aware of when doing so - as an optimization to save CPU cycles, meters are only updated when their controls are being displayed in the user interface. This implies that you must either have meter child windows open on the screen, or one control from each of the meters of interest must be copied out to an open child window or the main View Window. It is preferable to copy out a non-changing control, such as the Meter Time Constant, rather than the meter control itself, to save the user interface the burden of continuously updating the display. If having these controls visible to the user is a problem, they may be rendered invisible by manipulating their Control Object Properties (turn off the following check boxes: Text, Block, Bitmap and Style). Once you make a Control Object invisible it may be very difficult to find again unless you also check Fix Size and give it some nominal size, such as 6 by 6.

A numeric display of the peak hold value is not provided in the meter devices even though the algorithm calculates it. To read a meter's peak hold indicator value, start by copying the numeric control object (the yellow box with the dB value in it). Paste the copy down someplace convenient, perhaps in the meter device. While the new copy is selected, press Alt-Enter to bring up the Control Object Properties window, and select the Id tab. Under Control Id | Control, you will notice the digit entered is 2. If you change this to a 5 and click OK, the new numeric display will now read the peak hold indicator's value. It can then have a Control Group assigned in the usual way.

Known Bugs

A bogus serial data character may be emitted whenever a serial port is closed on the PC.

Serial Control Value to Device Control Value Tables

Some selected mappings of serial control values to device control values follow. You can also generate a table for any other control using a command in the MediaMatrix Terminal window in the following manner - after compiling a View File, twiddle the control of interest, switch to the Terminal window and press the 'v' on your keyboard. This will invoke the (V)alueTable command, which will print the table to the screen. You can also capture the table to a text file or printer by invoking the appropriate Terminal window modes.

Control value to dB's of gain table: -100dB to +12.0dB type control

 

 0x00: -100dB

 0x01: -99.3dB

 0x02: -98.6dB

 0x03: -97.8dB

 0x04: -97.1dB

 0x05: -96.4dB

 0x06: -95.7dB

 0x07: -95.0dB

 0x08: -94.2dB

 0x09: -93.5dB

 0x0a: -92.8dB

 0x0b: -92.1dB

 0x0c: -91.3dB

 0x0d: -90.6dB

 0x0e: -89.9dB

 0x0f: -89.2dB

 0x10: -88.5dB

 0x11: -87.7dB

 0x12: -87.0dB

 0x13: -86.3dB

 0x14: -85.6dB

 0x15: -84.8dB

 0x16: -84.1dB

 0x17: -83.4dB

 0x18: -82.7dB

 0x19: -82.0dB

 0x1a: -81.2dB

 0x1b: -80.5dB

 0x1c: -79.8dB

 0x1d: -79.1dB

 0x1e: -78.4dB

 0x1f: -77.6dB

 0x20: -76.9dB

 0x21: -76.2dB

 0x22: -75.5dB

 0x23: -74.7dB

 0x24: -74.0dB

 0x25: -73.3dB

 0x26: -72.6dB

 0x27: -71.9dB

0x28: -71.1dB

 0x29: -70.4dB

 0x2a: -69.7dB

 0x2b: -69.0dB

 0x2c: -68.2dB

 0x2d: -67.5dB

 0x2e: -66.8dB

 0x2f: -66.1dB

 0x30: -65.4dB

 0x31: -64.6dB

 0x32: -63.9dB

 0x33: -63.2dB

 0x34: -62.5dB

 0x35: -61.8dB

 0x36: -61.0dB

 0x37: -60.3dB

 0x38: -59.6dB

 0x39: -58.9dB

 0x3a: -58.1dB

 0x3b: -57.4dB

 0x3c: -56.7dB

 0x3d: -56.0dB

 0x3e: -55.3dB

 0x3f: -54.5dB

 0x40: -53.8dB

 0x41: -53.1dB

 0x42: -52.4dB

 0x43: -51.7dB

 0x44: -50.9dB

 0x45: -50.2dB

 0x46: -49.5dB

 0x47: -48.8dB

 0x48: -48.0dB

 0x49: -47.3dB

 0x4a: -46.6dB

 0x4b: -45.9dB

 0x4c: -45.2dB

 0x4d: -44.4dB

 0x4e: -43.7dB

 0x4f: -43.0dB

 0x50: -42.3dB

 0x51: -41.6dB

 0x52: -40.8dB

 0x53: -40.1dB

 0x54: -39.4dB

 0x55: -38.7dB

 0x56: -37.9dB

 0x57: -37.2dB

 0x58: -36.5dB

 0x59: -35.8dB

 0x5a: -35.1dB

 0x5b: -34.3dB

 0x5c: -33.6dB

 0x5d: -32.9dB

 0x5e: -32.2dB

 0x5f: -31.5dB

 0x60: -30.7dB

 0x61: -30.0dB

 0x62: -29.3dB

 0x63: -28.6dB

 0x64: -27.8dB

 0x65: -27.1dB

 0x66: -26.4dB

 0x67: -25.7dB

 0x68: -25.0dB

 0x69: -24.2dB

 0x6a: -23.5dB

 0x6b: -22.8dB

 0x6c: -22.1dB

 0x6d: -21.3dB

 0x6e: -20.6dB

 0x6f: -19.9dB

 0x70: -19.2dB

 0x71: -18.5dB

 0x72: -17.7dB

 0x73: -17.0dB

 0x74: -16.3dB

 0x75: -15.6dB

 0x76: -14.9dB

 0x77: -14.1dB

 0x78: -13.4dB

 0x79: -12.7dB

 0x7a: -12.0dB

 0x7b: -11.2dB

 0x7c: -10.5dB

 0x7d: -9.80dB

 0x7e: -9.08dB

 0x7f: -8.36dB

 0x80: -7.92dB

 0x81: -7.77dB

 0x82: -7.61dB

 0x83: -7.45dB

 0x84: -7.29dB

 0x85: -7.14dB

 0x86: -6.98dB

 0x87: -6.82dB

 0x88: -6.67dB

 0x89: -6.51dB

 0x8a: -6.35dB

 0x8b: -6.20dB

 0x8c: -6.04dB

 0x8d: -5.88dB

 0x8e: -5.73dB

 0x8f: -5.57dB

 0x90: -5.41dB

 0x91: -5.26dB

 0x92: -5.10dB

 0x93: -4.94dB

 0x94: -4.78dB

 0x95: -4.63dB

 0x96: -4.47dB

 0x97: -4.31dB

 0x98: -4.16dB

 0x99: -4.00dB

 0x9a: -3.84dB

 0x9b: -3.69dB

 0x9c: -3.53dB

 0x9d: -3.37dB

 0x9e: -3.22dB

 0x9f: -3.06dB

 0xa0: -2.90dB

 0xa1: -2.75dB

 0xa2: -2.59dB

 0xa3: -2.43dB

 0xa4: -2.27dB

 0xa5: -2.12dB

 0xa6: -1.96dB

 0xa7: -1.80dB

 0xa8: -1.65dB

 0xa9: -1.49dB

 0xaa: -1.33dB

 0xab: -1.18dB

 0xac: -1.02dB

 0xad: -0.86dB

 0xae: -0.70dB

 0xaf: -0.55dB

 0xb0: -0.39dB

 0xb1: -0.24dB

 0xb2: -0.08dB

 0xb3: +0.08dB

 0xb4: +0.24dB

 0xb5: +0.39dB

 0xb6: +0.55dB

 0xb7: +0.71dB

 0xb8: +0.86dB

 0xb9: +1.02dB

 0xba: +1.18dB

 0xbb: +1.33dB

 0xbc: +1.49dB

 0xbd: +1.65dB

 0xbe: +1.80dB

 0xbf: +1.96dB

 0xc0: +2.12dB

 0xc1: +2.27dB

 0xc2: +2.43dB

 0xc3: +2.59dB

 0xc4: +2.75dB

 0xc5: +2.90dB

 0xc6: +3.06dB

 0xc7: +3.22dB

 0xc8: +3.37dB

 0xc9: +3.53dB

 0xca: +3.69dB

 0xcb: +3.84dB

 0xcc: +4.00dB

 0xcd: +4.16dB

 0xce: +4.31dB

 0xcf: +4.47dB

 0xd0: +4.63dB

 0xd1: +4.78dB

 0xd2: +4.94dB

 0xd3: +5.10dB

 0xd4: +5.26dB

 0xd5: +5.41dB

 0xd6: +5.57dB

 0xd7: +5.73dB

 0xd8: +5.88dB

 0xd9: +6.04dB

 0xda: +6.20dB

 0xdb: +6.35dB

 0xdc: +6.51dB

 0xdd: +6.67dB

 0xde: +6.82dB

 0xdf: +6.98dB

 0xe0: +7.14dB

 0xe1: +7.29dB

 0xe2: +7.45dB

 0xe3: +7.61dB

 0xe4: +7.77dB

 0xe5: +7.92dB

 0xe6: +8.08dB

 0xe7: +8.24dB

 0xe8: +8.39dB

 0xe9: +8.55dB

 0xea: +8.71dB

 0xeb: +8.86dB

 0xec: +9.02dB

 0xed: +9.18dB

 0xee: +9.33dB

 0xef: +9.49dB

 0xf0: +9.65dB

 0xf1: +9.80dB

 0xf2: +9.96dB

 0xf3: +10.1dB

 0xf4: +10.3dB

 0xf5: +10.4dB

 0xf6: +10.6dB

 0xf7: +10.7dB

 0xf8: +10.9dB

 0xf9: +11.1dB

 0xfa: +11.2dB

 0xfb: +11.4dB

 0xfc: +11.5dB

 0xfd: +11.7dB

 0xfe: +11.8dB

 0xff: +12.0dB

Control value to dB's of gain table: -100dB to +0.00dB type control

 

 0x00: -100dB

 0x01: -99.4dB

 0x02: -98.7dB

 0x03: -98.1dB

 0x04: -97.5dB

 0x05: -96.9dB

 0x06: -96.2dB

 0x07: -95.6dB

 0x08: -95.0dB

 0x09: -94.4dB

 0x0a: -93.7dB

 0x0b: -93.1dB

 0x0c: -92.5dB

 0x0d: -91.8dB

 0x0e: -91.2dB

 0x0f: -90.6dB

 0x10: -90.0dB

 0x11: -89.3dB

 0x12: -88.7dB

 0x13: -88.1dB

 0x14: -87.5dB

 0x15: -86.8dB

 0x16: -86.2dB

 0x17: -85.6dB

 0x18: -84.9dB

 0x19: -84.3dB

 0x1a: -83.7dB

 0x1b: -83.1dB

 0x1c: -82.4dB

 0x1d: -81.8dB

 0x1e: -81.2dB

 0x1f: -80.6dB

 0x20: -79.9dB

 0x21: -79.3dB

 0x22: -78.7dB

 0x23: -78.0dB

 0x24: -77.4dB

 0x25: -76.8dB

 0x26: -76.2dB

 0x27: -75.5dB

 0x28: -74.9dB

 0x29: -74.3dB

 0x2a: -73.6dB

 0x2b: -73.0dB

 0x2c: -72.4dB

 0x2d: -71.8dB

 0x2e: -71.1dB

 0x2f: -70.5dB

 0x30: -69.9dB

 0x31: -69.3dB

 0x32: -68.6dB

 0x33: -68.0dB

 0x34: -67.4dB

 0x35: -66.7dB

 0x36: -66.1dB

 0x37: -65.5dB

  0x38: -64.9dB

 0x39: -64.2dB

 0x3a: -63.6dB

 0x3b: -63.0dB

 0x3c: -62.4dB

 0x3d: -61.7dB

 0x3e: -61.1dB

 0x3f: -60.5dB

 0x40: -59.8dB

 0x41: -59.2dB

 0x42: -58.6dB

 0x43: -58.0dB

 0x44: -57.3dB

 0x45: -56.7dB

 0x46: -56.1dB

 0x47: -55.5dB

 0x48: -54.8dB

 0x49: -54.2dB

 0x4a: -53.6dB

 0x4b: -52.9dB

 0x4c: -52.3dB

 0x4d: -51.7dB

 0x4e: -51.1dB

 0x4f: -50.4dB

 0x50: -49.8dB

 0x51: -49.2dB

 0x52: -48.5dB

 0x53: -47.9dB

 0x54: -47.3dB

 0x55: -46.7dB

 0x56: -46.0dB

 0x57: -45.4dB

 0x58: -44.8dB

 0x59: -44.2dB

 0x5a: -43.5dB

 0x5b: -42.9dB

 0x5c: -42.3dB

 0x5d: -41.6dB

 0x5e: -41.0dB

 0x5f: -40.4dB

 0x60: -39.8dB

 0x61: -39.1dB

 0x62: -38.5dB

 0x63: -37.9dB

 0x64: -37.3dB

 0x65: -36.6dB

 0x66: -36.0dB

 0x67: -35.4dB

 0x68: -34.7dB

 0x69: -34.1dB

 0x6a: -33.5dB

 0x6b: -32.9dB

 0x6c: -32.2dB

 0x6d: -31.6dB

 0x6e: -31.0dB

 0x6f: -30.4dB

 0x70: -29.7dB

 0x71: -29.1dB

 0x72: -28.5dB

 0x73: -27.8dB

 0x74: -27.2dB

 0x75: -26.6dB

 0x76: -26.0dB

 0x77: -25.3dB

 0x78: -24.7dB

 0x79: -24.1dB

 0x7a: -23.4dB

 0x7b: -22.8dB

 0x7c: -22.2dB

 0x7d: -21.6dB

 0x7e: -20.9dB

 0x7f: -20.3dB

 0x80: -19.9dB

 0x81: -19.8dB

 0x82: -19.6dB

 0x83: -19.5dB

 0x84: -19.3dB

 0x85: -19.1dB

 0x86: -19.0dB

 0x87: -18.8dB

 0x88: -18.7dB

 0x89: -18.5dB

 0x8a: -18.4dB

 0x8b: -18.2dB

 0x8c:-18.0dB

 0x8d: -17.9dB

 0x8e: -17.7dB

 0x8f: -17.6dB

 0x90: -17.4dB

 0x91: -17.3dB

 0x92: -17.1dB

 0x93: -16.9dB

 0x98: -16.2dB

 0x99: -16.0dB

 0x9a: -15.8dB

 0x9b: -15.7dB

 0x9c: -15.5dB

 0x9d: -15.4dB

 0x9e: -15.2dB

 0x9f: -15.1dB

 0xa0: -14.9dB

 0xa1: -14.7dB

 0xa2: -14.6dB

 0xa3: -14.4dB

 0xa4: -14.3dB

 0xa5: -14.1dB

 0xa6: -14.0dB

 0xa7: -13.8dB

 0xa8: -13.6dB

 0xa9: -13.5dB

 0xaa: -13.3dB

 0xab: -13.2dB

 0xac: -13.0dB

 0xad: -12.9dB

 0xae: -12.7dB

 0xaf: -12.5dB

0xb0: -12.4dB

 0xb1: -12.2dB

 0xb2: -12.1dB

 0xb3: -11.9dB

 0xb4: -11.8dB

 0xb5: -11.6dB

 0xb6: -11.5dB

 0xb7: -11.3dB

 0xb8: -11.1dB

 0xb9: -11.0dB

 0xba: -10.8dB

 0xbb: -10.7dB

 0xbc: -10.5dB

 0xbd: -10.4dB

 0xbe: -10.2dB

 0xbf: -10.0dB

 0xc0: -9.88dB

 0xc1: -9.73dB

 0xc2: -9.57dB

 0xc3: -9.41dB

 0xc4: -9.25dB

 0xc5: -9.10dB

 0xc6: -8.94dB

 0xc7: -8.78dB

 0xc8: -8.63dB

 0xc9: -8.47dB

 0xca: -8.31dB

 0xcb: -8.16dB

 0xcc: -8.00dB

 0xcd: -7.84dB

 0xce: -7.69dB

 0xcf: -7.53dB

 0xd0: -7.37dB

 0xd1: -7.22dB

 0xd2: -7.06dB

 0xd3: -6.90dB

 0xd4: -6.74dB

 0xd5: -6.59dB

 0xd6: -6.43dB

 0xd7: -6.27dB

 0xd8: -6.12dB

 0xd9: -5.96dB

 0xda: -5.80dB

 0xdb: -5.65dB

 0xdc: -5.49dB

 0xdd: -5.33dB

 0xde: -5.18dB

 0xdf: -5.02dB

 0xe0: -4.86dB

 0xe1: -4.71dB

 0xe2: -4.55dB

 0xe3: -4.39dB

 0xe4: -4.23dB

 0xe5: -4.08dB

 0xe6: -3.92dB

 0xe7: -3.76dB

 0xe8: -3.61dB

 0xe9: -3.45dB

 0xea: -3.29dB

 0xeb: -3.14dB

 0xec: -2.98dB

 0xed: -2.82dB

 0xee: -2.67dB

 0xef: -2.51dB

 0xf0: -2.35dB

 0xf1: -2.20dB

 0xf2: -2.04dB

 0xf3: -1.88dB

 0xf4: -1.72dB

 0xf5: -1.57dB

 0xf6: -1.41dB

 0xf7: -1.25dB

 0xf8: -1.10dB

 0xf9: -0.94dB

 0xfa: -0.78dB

 0xfb: -0.63dB

0xfc: -0.47dB

 0xfd: -0.31dB

 0xfe: -0.16dB

0xff: +0.00dB

Control value to Router input selection table: 1x1 Router

 

Input

Value Range

Off

0x00 - 0x7F

1

0x80 - 0xFF

Control value to Router input selection table: 2x1 Router

 

Input

Value Range

Off

0x00 - 0x3F

1

0x40 - 0xBF

2

0xC0 - 0xFF

Control value to Router input selection table: 4x1 Router

 

Input

Value Range

Off

0x00 - 0x1F

1

0x20 - 0x5F

2

0x60 - 0x9F

3

0xA0 - 0xDF

4

0xE0 - 0xFF

Control value to Router input selection table: 8x1 Router

 

Input

Value Range

Off

0x00 - 0x0F

1

0x10 - 0x2F

2

0x30 - 0x4F

3

0x50 - 0x6F

4

0x70 - 0x8F

5

0x90 - 0xAF

6

0xB0 - 0xCF

7

0xD0 - 0xEF

8

0xF0 - 0xFF