BlackMagic ATEM Switcher Protocol

This is an almost complete reverse engineering of the ATEM protocol commands, provided by SKAARHOJ K/S, who pioneered this work back in 2011. We have tried to make it as complete and correct as possible1. This has taken weeks and weeks - and still does - to make and keep it updated. If you like this information (provided under Creative Commons by-sa license), please credit us and link our website.

Apart from providing and maintaining this information for free, SKAARHOJ K/S also maintains an Arduino API. The "Arduino API" column lists which methods from the SKAARHOJ ATEM library series will handle the feature in question. The "BMD API Method" column correlates this feature to the official BlackMagic SDK in many cases. The API and value ranges are usually tested with 720p50 resolution, but should work with any other.

Various versions of the SKAARHOJ Arduino ATEM library exist in order to accomodate different customer needs in terms of flash and dynamic memory usage on these small MCU boards. You can download the library files from GitHub. The ATEM libraries are called something like ATEMbase (shared super class), ATEMmin (minimalistic), ATEMstd (basic needs, legacy wrapper functions), ATEMext (extended), ATEMmax (all features) etc. The library just named "ATEM" on GitHub is the old library and usage of this is discouraged - use ATEMstd instead. Please check out the example sketches distributed with the libraries for examples of usage. Remember, these libraries are all GNU/GPL Open Source and can only be used with compatible code. This basically means you can only use it in part or full, if your code is open source as well. In this way, the stuff stays open and the world becomes a better place :-). Please check out our general guidelines on using our freely provided IP

The information below is based on and tested with ATEM Software Control 6.3 (firmware version 2.16), March 11th 2015.

1) Features for uploading clips and stills are not included since they are unmanageable on an Arduino. Please check out Peter Simonssons QT library for how to use those commands. And btw, thanks to Peter for comments and helpful inspiration from his work as well!

(Arduino API filter: 1, "ATEMmax")


Commands

Cmd: Title:
_ver
(get)
4 bytes
Protocol Version
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
0-1 uint16 Major uint16_t getProtocolVersionMajor()
2-3 uint16 Minor uint16_t getProtocolVersionMinor()

There are two version numbers in ATEM world: One for the ATEM Software Control application (for instance version 6.0) which is what people usually refers to and one for the firmware which is often updated with the PC/Mac application versions (for instance 2.15). The latter version number is what "_ver" gives you and a number you can not find anywhere in the application to our knowledge.

_pin
(get)
44 bytes
Product Id
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcher
0-43 String[44] Name char * getProductIdName() GetProductName

Examples:
"ATEM Television Studio"
"ATEM Production Studio 4K"
"ATEM 1 M/E Production Switcher"
"ATEM 1 M/E Production Studio 4K"
"ATEM 2 M/E Production Switcher"
"ATEM 2 M/E Production Studio 4K"

Warn
(get)
44 bytes
Warning
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax
BMD API Method:
0-43 String[44] Text char * getWarningText()

Examples:
"DVE unavailable"

_top
(get)
12 bytes
Topology
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 MEs Number of uint8_t getTopologyMEs()
1 uint8 Sources Number of uint8_t getTopologySources()
2 uint8 Color Generators(?) Number of uint8_t getTopologyColorGenerators()
3 uint8 AUX busses Number of uint8_t getTopologyAUXbusses()
4 uint8 Downstream Keyes(?) Number of uint8_t getTopologyDownstreamKeyes()
5 uint8 Stingers(?) Number of uint8_t getTopologyStingers()
6 uint8 DVEs(?) Number of uint8_t getTopologyDVEs()
7 uint8 SuperSources(?) Number of uint8_t getTopologySuperSources()
8 uint8 ? ?
9 1 bit Has SD Output Bit 0: Yes/No bool getTopologyHasSDOutput()
10 uint8 ? ?
11 (Unknown)

TVS:..... 01 12 02 00 02 00 00 00 01 00 01 00
Prod 4K:. 01 18 02 01 02 00 00 00 01 00 01 00
1 M/E:... 01 17 02 03 02 01 01 00 01 01 01 00
1 M/E 4K: 01 1f 02 03 02 01 01 00 01 00 01 00
2 M/E:... 02 25 02 06 02 01 01 01 01 01 01 00
2 M/E 4K: 02 2f 02 06 02 01 01 01 01 00 01 00

_MeC
(get)
4 bytes
Mix Effect Config
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyers On ME Number of uint8_t getMixEffectConfigKeyersOnME(uint8_t mE)
2 (Unknown)
_mpl
(get)
4 bytes
Media Players
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 Still Banks Number of uint8_t getMediaPlayersStillBanks()
1 uint8 Clip Banks Number of uint8_t getMediaPlayersClipBanks()
2 (Unknown)
_MvC
(get)
4 bytes
Multi View Config
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 Multi Viewers Number of uint8_t getMultiViewConfigMultiViewers()
1-3 (Unknown)
_SSC
(get)
4 bytes
Super Source Config
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 Boxes Number of uint8_t getSuperSourceConfigBoxes()
1-3 (Unknown)
_TlC
(get)
8 bytes
Tally Channel Config
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax
BMD API Method:
0-3 (Unknown)
4 uint8 Tally Channels Number of uint8_t getTallyChannelConfigTallyChannels()
5-7 (Unknown)
_AMC
(get)
4 bytes
Audio Mixer Config
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 Audio Channels Number of uint8_t getAudioMixerConfigAudioChannels()
1 1 bit Has Monitor Bit 0: Yes/No bool getAudioMixerConfigHasMonitor()
2 (Unknown)
_VMC
(get)
4 bytes
Video Mixer Config
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcher
0 (Unknown)
1-3 18 bits Modes Bit 0: 525i59.94 NTSC=Yes/No
Bit 1: 625i 50 PAL=Yes/No
Bit 2: 525i59.94 NTSC 16:9=Yes/No
Bit 3: 625i 50 PAL 16:9=Yes/No
Bit 4: 720p50=Yes/No
Bit 5: 720p59.94=Yes/No
Bit 6: 1080i50=Yes/No
Bit 7: 1080i59.94=Yes/No
Bit 8: 1080p23.98=Yes/No
Bit 9: 1080p24=Yes/No
Bit 10: 1080p25=Yes/No
Bit 11: 1080p29.97=Yes/No
Bit 12: 1080p50=Yes/No
Bit 13: 1080p59.94=Yes/No
Bit 14: 2160p23.98=Yes/No
Bit 15: 2160p24=Yes/No
Bit 16: 2160p25=Yes/No
Bit 17: 2160p29.97=Yes/No
long getVideoMixerConfigModes() DoesSupportVideoMode
_MAC
(get)
4 bytes
Macro Pool
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMacroPool
0 uint8 Banks Number of uint8_t getMacroPoolBanks() GetMaxCount
1-3 (Unknown)
Powr
(get)
4 bytes
Power
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax
BMD API Method:
IBMDSwitcher
0 2 bits Status Bit 0: Main Power=On/Off
Bit 1: Backup Power=On/Off
uint8_t getPowerStatus() GetPowerStatus
1-3 (Unknown)
DcOt
(get)
4 bytes
Down Converter
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcher
0 uint8 Mode 0: Center Cut
1: Letterbox
2: Anamorphic
uint8_t getDownConverterMode() GetDownConverterMode
1-3 (Unknown)
CDcO
(set)
4 bytes
Down Converter
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcher
0 uint8 Mode 0: Center Cut
1: Letterbox
2: Anamorphic
void setDownConverterMode(uint8_t mode) SetDownConverterMode
1-3 (Unknown)
VidM
(get)
4 bytes
Video Mode
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcher
0 uint8 Format 0: 525i59.94 NTSC
1: 625i 50 PAL
2: 525i59.94 NTSC 16:9
3: 625i 50 PAL 16:9
4: 720p50
5: 720p59.94
6: 1080i50
7: 1080i59.94
8: 1080p23.98
9: 1080p24
10: 1080p25
11: 1080p29.97
12: 1080p50
13: 1080p59.94
14: 2160p23.98
15: 2160p24
16: 2160p25
17: 2160p29.97
uint8_t getVideoModeFormat() GetVideoMode
1-3 (Unknown)
CVdM
(set)
4 bytes
Video Mode
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcher
0 uint8 Format 0: 525i59.94 NTSC
1: 625i 50 PAL
2: 525i59.94 NTSC 16:9
3: 625i 50 PAL 16:9
4: 720p50
5: 720p59.94
6: 1080i50
7: 1080i59.94
8: 1080p23.98
9: 1080p24
10: 1080p25
11: 1080p29.97
12: 1080p50
13: 1080p59.94
14: 2160p23.98
15: 2160p24
16: 2160p25
17: 2160p29.97
void setVideoModeFormat(uint8_t format) SetVideoMode
1-3 (Unknown)
InPr
(get)
36 bytes
Input Properties
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
BMDSwitcherInputPropertyId
0-1 VIDEOSRC Video Source (See video source list) INDEX
2-21 String[20] Long Name char * getInputLongName(uint16_t videoSource)
Only in ATEMmax
22-25 String[4] Short Name char * getInputShortName(uint16_t videoSource)
26 (Unknown)
27 5 bits Available External Port Types Bit 0: SDI=Yes/No
Bit 1: HDMI=Yes/No
Bit 2: Component=Yes/No
Bit 3: Composite=Yes/No
Bit 4: SVideo=Yes/No
uint8_t getInputAvailableExternalPortTypes(uint16_t videoSource)
Only in ATEMmax
28 (Unknown)
29 uint8 External Port Type

Notice that the order of bits in "Available External Port Types" and the values of "External Port Type" seems to be inconsistent for Component, while it is as expected for SDI and HDMI. Values for Composite and SVideo is inferred (legacy?).

0: Internal
1: SDI
2: HDMI
3: Composite
4: Component
5: SVideo
uint8_t getInputExternalPortType(uint16_t videoSource)
Only in ATEMmax
BMDSwitcherExternalPortType
30 uint8 Port Type 0: External
1: Black
2: Color Bars
3: Color Generator
4: Media Player Fill
5: Media Player Key
6: SuperSource
128: ME Output
129: Auxilary
130: Mask
uint8_t getInputPortType(uint16_t videoSource)
Only in ATEMmax
BMDSwitcherPortType
31 (Unknown)
32 5 bits Availability Bit 0: Auxilary=Yes/No
Bit 1: Multiviewer=Yes/No
Bit 2: Super Source Art=Yes/No
Bit 3: Super Source Box=Yes/No
Bit 4: Key Sources (everywhere)=Yes/No
uint8_t getInputAvailability(uint16_t videoSource) BMDSwitcherInputAvailability
33 2 bits ME Availability Bit 0: ME1 + Fill Sources=Yes/No
Bit 1: ME2 + Fill Sources=Yes/No
uint8_t getInputMEAvailability(uint16_t videoSource)
34 8 bits Available 3 Bit 0: ?/Off
35 (Unknown)
CInL
(set)
32 bytes
Input Properties
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
BMDSwitcherInputPropertyId
0 3 bits Set Mask Bit 0: Long Name=On/Off
Bit 1: Short Name=On/Off
Bit 2: External Port Type=On/Off
INDEX
1 (Unknown)
2-3 VIDEOSRC Video Source (See video source list) INDEX
4-23 String[20] Long Name void setInputLongName(uint16_t videoSource, char * longName)
24-27 String[4] Short Name void setInputShortName(uint16_t videoSource, char * shortName)
28-29 uint16 External Port Type void setInputExternalPortType(uint16_t videoSource, uint16_t externalPortType)
30 (Unknown)

You can change the name of many more sources than just the cameras (only camera names are supported by the ATEM Software Panel)! Just be careful not to leave a switcher with a name that cannot be changed back in the ATEM Software Control panel.

MvPr
(get)
4 bytes
Multi Viewer Properties
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax
BMD API Method:
IBMDSwitcherMultiView
0 uint8 Multi Viewer 0: 1
1: 2
INDEX
1 uint8 Layout 0: Top
1: Bottom
2: Left
3: Right
uint8_t getMultiViewerPropertiesLayout(uint8_t multiViewer) GetLayout
2 (Unknown)
CMvP
(set)
4 bytes
Multi Viewer Properties
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMultiView
0 1 bit Set Mask Bit 0: Layout=On/Off INDEX
1 uint8 Multi Viewer 0: 1
1: 2
INDEX
2 uint8 Layout 0: Top
1: Bottom
2: Left
3: Right
void setMultiViewerPropertiesLayout(uint8_t multiViewer, uint8_t layout) SetLayout
3 (Unknown)
MvIn
(get)
4 bytes
Multi Viewer Input
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMultiView
0 uint8 Multi Viewer 0: 1
1: 2
INDEX
1 uint8 Window Index

Window 0 and 1 are the Preview and Program windows - you cannot set the source for these in the ATEM Software Control, but via the API this is possible.

0-9 INDEX
2-3 VIDEOSRC Video Source (See video source list) uint16_t getMultiViewerInputVideoSource(uint8_t multiViewer, uint8_t windowIndex) GetWindowInput
CMvI
(set)
4 bytes
Multi Viewer Input
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMultiView
0 uint8 Multi Viewer 0: 1
1: 2
INDEX
1 uint8 Window Index 0-9 INDEX
2-3 VIDEOSRC Video Source (See video source list) void setMultiViewerInputVideoSource(uint8_t multiViewer, uint8_t windowIndex, uint16_t videoSource) SetWindowInput

By setting video source for Window Index 0 and 1, it is possible to change what is shown as Preview and Program. This is NOT possible with the ATEM Software Control (and maybe not with the official API either) so be careful not to leave an ATEM switcher with an untypical configuration for these windows!

PrgI
(get)
4 bytes
Program Input
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 (Unknown)
2-3 VIDEOSRC Video Source (See video source list) uint16_t getProgramInputVideoSource(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdProgramInput
CPgI
(set)
4 bytes
Program Input
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 (Unknown)
2-3 VIDEOSRC Video Source (See video source list) void setProgramInputVideoSource(uint8_t mE, uint16_t videoSource) bmdSwitcherMixEffectBlockPropertyIdProgramInput
PrvI
(get)
8 bytes
Preview Input
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 (Unknown)
2-3 VIDEOSRC Video Source (See video source list) uint16_t getPreviewInputVideoSource(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdPreviewInput
4-7 (Unknown)
CPvI
(set)
4 bytes
Preview Input
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 (Unknown)
2-3 VIDEOSRC Video Source (See video source list) void setPreviewInputVideoSource(uint8_t mE, uint16_t videoSource) bmdSwitcherMixEffectBlockPropertyIdPreviewInput
DCut
(set)
4 bytes
Cut
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
IBMDSwitcherMixEffectBlock
0 uint8 M/E 0: ME1
1: ME2
void performCutME(uint8_t mE) PerformCut
1-3 (Unknown)
DAut
(set)
4 bytes
Auto
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
IBMDSwitcherMixEffectBlock
0 uint8 M/E 0: ME1
1: ME2
void performAutoME(uint8_t mE) PerformAutoTransition
1-3 (Unknown)
TrSS
(get)
8 bytes
Transition
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherTransitionParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Style 0: Mix
1: Dip
2: Wipe
3: DVE
4: Sting
uint8_t getTransitionStyle(uint8_t mE) GetTransitionStyle
2 5 bits Next Transition Bit 0: Background=On/Off
Bit 1: Key 1=On/Off
Bit 2: Key 2=On/Off
Bit 3: Key 3=On/Off
Bit 4: Key 4=On/Off
uint8_t getTransitionNextTransition(uint8_t mE) GetTransitionSelection
3 uint8 Style Next

Style for next transition. "Style" is for ongoing transition.

0: Mix
1: Dip
2: Wipe
3: DVE
4: Sting
uint8_t getTransitionStyleNext(uint8_t mE)
Only in ATEMmax
4 5 bits Next Transition Next

Key bitmask for next transition. "Next Transition" is key bitmask for the ongoing transition.

Bit 0: Background=On/Off
Bit 1: Key 1=On/Off
Bit 2: Key 2=On/Off
Bit 3: Key 3=On/Off
Bit 4: Key 4=On/Off
uint8_t getTransitionNextTransitionNext(uint8_t mE)
Only in ATEMmax
5-7 (Unknown)
CTTp
(set)
4 bytes
Transition
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherTransitionParameters
0 2 bits Set Mask Bit 0: Transition Style=On/Off
Bit 1: Next Transition=On/Off
INDEX
1 uint8 M/E 0: ME1
1: ME2
INDEX
2 uint8 Style 0: Mix
1: Dip
2: Wipe
3: DVE
4: Sting
void setTransitionStyle(uint8_t mE, uint8_t style) SetNextTransitionStyle
3 5 bits Next Transition Bit 0: Background=On/Off
Bit 1: Key 1=On/Off
Bit 2: Key 2=On/Off
Bit 3: Key 3=On/Off
Bit 4: Key 4=On/Off
void setTransitionNextTransition(uint8_t mE, uint8_t nextTransition) SetNextTransitionSelection
TrPr
(get)
4 bytes
Transition Preview
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 1 bit Enabled Bit 0: On/Off bool getTransitionPreviewEnabled(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdPreviewTransition
2 (Unknown)
CTPr
(set)
4 bytes
Transition Preview
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 1 bit Enabled Bit 0: On/Off void setTransitionPreviewEnabled(uint8_t mE, bool enabled) bmdSwitcherMixEffectBlockPropertyIdPreviewTransition
2 (Unknown)
TrPs
(get)
8 bytes
Transition Position
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 1 bit In Transition Bit 0: Yes/No bool getTransitionInTransition(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdInTransition
2 uint8 Frames Remaining Frames uint8_t getTransitionFramesRemaining(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdTransitionFramesRemaining
3 (Unknown)
4-5 uint16 Position 0-9999 uint16_t getTransitionPosition(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdTransitionPosition
6 (Unknown)
CTPs
(set)
4 bytes
Transition Position
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 (Unknown)
2-3 uint16 Position 0-9999 void setTransitionPosition(uint8_t mE, uint16_t position) bmdSwitcherMixEffectBlockPropertyIdTransitionPosition

To end a transition, you must send position=0.

TMxP
(get)
4 bytes
Transition Mix
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherTransitionMixParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Rate 1-250: Frames uint8_t getTransitionMixRate(uint8_t mE) GetRate
2 (Unknown)
CTMx
(set)
4 bytes
Transition Mix
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherTransitionMixParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Rate 1-250: Frames void setTransitionMixRate(uint8_t mE, uint8_t rate) SetRate
2 (Unknown)
TDpP
(get)
4 bytes
Transition Dip
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherTransitionDipParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Rate 1-250: Frames uint8_t getTransitionDipRate(uint8_t mE) GetRate
2-3 VIDEOSRC Input (See video source list) uint16_t getTransitionDipInput(uint8_t mE) GetInputDip
CTDp
(set)
8 bytes
Transition Dip
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherTransitionDipParameters
0 2 bits Set Mask Bit 0: Rate=On/Off
Bit 1: Input=On/Off
INDEX
1 uint8 M/E 0: ME1
1: ME2
INDEX
2 uint8 Rate 1-250: Frames void setTransitionDipRate(uint8_t mE, uint8_t rate) SetRate
3 (Unknown)
4-5 VIDEOSRC Input (See video source list) void setTransitionDipInput(uint8_t mE, uint16_t input) SetInputDip
6 (Unknown)
TWpP
(get)
20 bytes
Transition Wipe
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherTransitionWipeParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Rate 1-250: Frames uint8_t getTransitionWipeRate(uint8_t mE) GetRate
2 uint8 Pattern 0-17: Pattern Styles uint8_t getTransitionWipePattern(uint8_t mE) GetPattern
3 (Unknown)
4-5 uint16 Width 0-10000: 0-100% uint16_t getTransitionWipeWidth(uint8_t mE) GetBorderSize
6-7 VIDEOSRC Fill Source (See video source list) uint16_t getTransitionWipeFillSource(uint8_t mE) GetInputBorder
8-9 uint16 Symmetry 0-10000: 0-100% uint16_t getTransitionWipeSymmetry(uint8_t mE) GetSymmetry
10-11 uint16 Softness 0-10000: 0-100% uint16_t getTransitionWipeSoftness(uint8_t mE) GetSoftness
12-13 uint16 Position X 0-10000: 0.0-1.0 uint16_t getTransitionWipePositionX(uint8_t mE) GetHorizontalOffset
14-15 uint16 Position Y 0-10000: 0.0-1.0 uint16_t getTransitionWipePositionY(uint8_t mE) GetVerticalOffset
16 1 bit Reverse Bit 0: On/Off bool getTransitionWipeReverse(uint8_t mE) GetReverse
17 1 bit FlipFlop Bit 0: On/Off bool getTransitionWipeFlipFlop(uint8_t mE) GetFlipFlop
18 (Unknown)
CTWp
(set)
20 bytes
Transition Wipe
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherTransitionWipeParameters
0-1 10 bits Set Mask Bit 0: Rate=On/Off
Bit 1: Pattern=On/Off
Bit 2: Width=On/Off
Bit 3: Fill Source=On/Off
Bit 4: Symmetry=On/Off
Bit 5: Softness=On/Off
Bit 6: Position X=On/Off
Bit 7: Position Y=On/Off
Bit 8: Reverse=On/Off
Bit 9: FlipFlop=On/Off
INDEX
2 uint8 M/E 0: ME1
1: ME2
INDEX
3 uint8 Rate 1-250: Frames void setTransitionWipeRate(uint8_t mE, uint8_t rate) SetRate
4 uint8 Pattern 0-17: Pattern Styles void setTransitionWipePattern(uint8_t mE, uint8_t pattern) SetPattern
5 (Unknown)
6-7 uint16 Width 0-10000: 0-100% void setTransitionWipeWidth(uint8_t mE, uint16_t width) SetBorderSize
8-9 VIDEOSRC Fill Source (See video source list) void setTransitionWipeFillSource(uint8_t mE, uint16_t fillSource) SetInputBorder
10-11 uint16 Symmetry 0-10000: 0-100% void setTransitionWipeSymmetry(uint8_t mE, uint16_t symmetry) SetSymmetry
12-13 uint16 Softness 0-10000: 0-100% void setTransitionWipeSoftness(uint8_t mE, uint16_t softness) SetSoftness
14-15 uint16 Position X 0-10000: 0.0-1.0 void setTransitionWipePositionX(uint8_t mE, uint16_t positionX) SetHorizontalOffset
16-17 uint16 Position Y 0-10000: 0.0-1.0 void setTransitionWipePositionY(uint8_t mE, uint16_t positionY) SetVerticalOffset
18 1 bit Reverse Bit 0: On/Off void setTransitionWipeReverse(uint8_t mE, bool reverse) SetReverse
19 1 bit FlipFlop Bit 0: On/Off void setTransitionWipeFlipFlop(uint8_t mE, bool flipFlop) SetFlipFlop
TDvP
(get)
20 bytes
Transition DVE
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherTransitionDVEParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Rate 1-250: Frames uint8_t getTransitionDVERate(uint8_t mE) GetRate
2 (Unknown)
3 uint8 Style 0-34 uint8_t getTransitionDVEStyle(uint8_t mE) GetStyle
4-5 VIDEOSRC Fill Source (See video source list) uint16_t getTransitionDVEFillSource(uint8_t mE) GetInputFill
6-7 VIDEOSRC Key Source (See video source list) uint16_t getTransitionDVEKeySource(uint8_t mE) GetInputCut
8 1 bit Enable Key Bit 0: On/Off bool getTransitionDVEEnableKey(uint8_t mE) GetEnableKey
9 1 bit Pre Multiplied Bit 0: On/Off bool getTransitionDVEPreMultiplied(uint8_t mE) GetPreMultiplied
10-11 uint16 Clip 0-1000: 0-100% uint16_t getTransitionDVEClip(uint8_t mE) GetClip
12-13 uint16 Gain 0-1000: 0-100% uint16_t getTransitionDVEGain(uint8_t mE) GetGain
14 1 bit Invert Key Bit 0: On/Off bool getTransitionDVEInvertKey(uint8_t mE) GetInverse
15 1 bit Reverse Bit 0: On/Off bool getTransitionDVEReverse(uint8_t mE) GetReverse
16 1 bit FlipFlop Bit 0: On/Off bool getTransitionDVEFlipFlop(uint8_t mE) GetFlipFlop
17-19 (Unknown)

Style 32,33,34 enables effects

CTDv
(set)
20 bytes
Transition DVE
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherTransitionDVEParameters
0-1 12 bits Set Mask Bit 0: Rate=On/Off
Bit 1: ?=On/Off
Bit 2: Style=On/Off
Bit 3: Fill Source=On/Off
Bit 4: Key Source=On/Off
Bit 5: Enable Key=On/Off
Bit 6: Pre Multiplied=On/Off
Bit 7: Clip=On/Off
Bit 8: Gain=On/Off
Bit 9: Invert Key=On/Off
Bit 10: Reverse=On/Off
Bit 11: FlipFlop=On/Off
INDEX
2 uint8 M/E 0: ME1
1: ME2
INDEX
3 uint8 Rate 1-250: Frames void setTransitionDVERate(uint8_t mE, uint8_t rate) SetRate
4 (Unknown)
5 uint8 Style 0-34 void setTransitionDVEStyle(uint8_t mE, uint8_t style) SetStyle
6-7 VIDEOSRC Fill Source (See video source list) void setTransitionDVEFillSource(uint8_t mE, uint16_t fillSource) SetInputFill
8-9 VIDEOSRC Key Source (See video source list) void setTransitionDVEKeySource(uint8_t mE, uint16_t keySource) SetInputCut
10 1 bit Enable Key Bit 0: On/Off void setTransitionDVEEnableKey(uint8_t mE, bool enableKey) SetEnableKey
11 1 bit Pre Multiplied Bit 0: On/Off void setTransitionDVEPreMultiplied(uint8_t mE, bool preMultiplied) SetPreMultiplied
12-13 uint16 Clip 0-1000: 0-100% void setTransitionDVEClip(uint8_t mE, uint16_t clip) SetClip
14-15 uint16 Gain 0-1000: 0-100% void setTransitionDVEGain(uint8_t mE, uint16_t gain) SetGain
16 1 bit Invert Key Bit 0: On/Off void setTransitionDVEInvertKey(uint8_t mE, bool invertKey) SetInverse
17 1 bit Reverse Bit 0: On/Off void setTransitionDVEReverse(uint8_t mE, bool reverse) SetReverse
18 1 bit FlipFlop Bit 0: On/Off void setTransitionDVEFlipFlop(uint8_t mE, bool flipFlop) SetFlipFlop
19 (Unknown)

Style 32,33,34 enables effects

TStP
(get)
20 bytes
Transition Stinger
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherTransitionStingerParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Source 1: Media Player 1
2: Media Player 2
uint8_t getTransitionStingerSource(uint8_t mE) GetSource
2 1 bit Pre Multiplied Bit 0: On/Off bool getTransitionStingerPreMultiplied(uint8_t mE) GetPreMultiplied
3 (Unknown)
4-5 uint16 Clip 0-1000: 0-100% uint16_t getTransitionStingerClip(uint8_t mE) GetClip
6-7 uint16 Gain 0-1000: 0-100% uint16_t getTransitionStingerGain(uint8_t mE) GetGain
8 1 bit Invert Key Bit 0: On/Off bool getTransitionStingerInvertKey(uint8_t mE) GetInverse
9 (Unknown)
10-11 uint16 Pre Roll Frames uint16_t getTransitionStingerPreRoll(uint8_t mE) GetPreroll
12-13 uint16 Clip Duration Frames uint16_t getTransitionStingerClipDuration(uint8_t mE) GetClipDuration
14-15 uint16 Trigger Point Frames uint16_t getTransitionStingerTriggerPoint(uint8_t mE) GetTriggerPoint
16-17 uint16 Mix Rate Frames uint16_t getTransitionStingerMixRate(uint8_t mE) GetMixRate
18 (Unknown)
CTSt
(set)
20 bytes
Transition Stinger
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherTransitionStingerParameters
0-1 9 bits Set Mask Bit 0: Source=On/Off
Bit 1: Pre Multiplied=On/Off
Bit 2: Clip=On/Off
Bit 3: Gain=On/Off
Bit 4: Invert Key=On/Off
Bit 5: Pre Roll=On/Off
Bit 6: Clip Duration=On/Off
Bit 7: Trigger Point=On/Off
Bit 8: Mix Rate=On/Off
INDEX
2 uint8 M/E 0: ME1
1: ME2
INDEX
3 uint8 Source 1: Media Player 1
2: Media Player 2
void setTransitionStingerSource(uint8_t mE, uint8_t source) SetSource
4 1 bit Pre Multiplied Bit 0: On/Off void setTransitionStingerPreMultiplied(uint8_t mE, bool preMultiplied) SetPreMultiplied
5 (Unknown)
6-7 uint16 Clip 0-1000: 0-100% void setTransitionStingerClip(uint8_t mE, uint16_t clip) SetClip
8-9 uint16 Gain 0-1000: 0-100% void setTransitionStingerGain(uint8_t mE, uint16_t gain) SetGain
10 1 bit Invert Key Bit 0: On/Off void setTransitionStingerInvertKey(uint8_t mE, bool invertKey) SetInverse
11 (Unknown)
12-13 uint16 Pre Roll Frames void setTransitionStingerPreRoll(uint8_t mE, uint16_t preRoll) SetPreroll
14-15 uint16 Clip Duration Frames void setTransitionStingerClipDuration(uint8_t mE, uint16_t clipDuration) SetClipDuration
16-17 uint16 Trigger Point Frames void setTransitionStingerTriggerPoint(uint8_t mE, uint16_t triggerPoint) SetTriggerPoint
18-19 uint16 Mix Rate Frames void setTransitionStingerMixRate(uint8_t mE, uint16_t mixRate) SetMixRate
KeOn
(get)
4 bytes
Keyer On Air
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
IBMDSwitcherKey
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 1 bit Enabled Bit 0: On/Off bool getKeyerOnAirEnabled(uint8_t mE, uint8_t keyer) GetOnAir
3 (Unknown)
CKOn
(set)
4 bytes
Keyer On Air
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
IBMDSwitcherKey
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 1 bit Enabled Bit 0: On/Off void setKeyerOnAirEnabled(uint8_t mE, uint8_t keyer, bool enabled) SetOnAir
3 (Unknown)
KeBP
(get)
20 bytes
Keyer Base
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKey
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 uint8 Type 0: Luma
1: Chroma
2: Pattern
3: DVE
uint8_t getKeyerType(uint8_t mE, uint8_t keyer) GetType
3 1 bit Key Enabled? Bit 0: ?/Off
4 1 bit Key Enabled (again?) Bit 0: ?/Off
5 1 bit Fly Enabled Bit 0: On/Off bool getKeyerFlyEnabled(uint8_t mE, uint8_t keyer) GetFly
6-7 VIDEOSRC Fill Source (See video source list) uint16_t getKeyerFillSource(uint8_t mE, uint8_t keyer) GetInputFill
8-9 VIDEOSRC Key Source (See video source list) uint16_t getKeyerKeySource(uint8_t mE, uint8_t keyer) GetInputCut
10 1 bit Masked Bit 0: On/Off bool getKeyerMasked(uint8_t mE, uint8_t keyer) GetMasked
11 (Unknown)
12-13 int16 Top -9000-9000: -9.00-9.00 int getKeyerTop(uint8_t mE, uint8_t keyer) GetMaskTop
14-15 int16 Bottom -9000-9000: -9.00-9.00 int getKeyerBottom(uint8_t mE, uint8_t keyer) GetMaskBottom
16-17 int16 Left -16000-16000: -9.00-9.00 int getKeyerLeft(uint8_t mE, uint8_t keyer) GetMaskLeft
18-19 int16 Right -16000-16000: -9.00-9.00 int getKeyerRight(uint8_t mE, uint8_t keyer) GetMaskRight
CKTp
(set)
8 bytes
Key Type
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKey
0 2 bits Set Mask Bit 0: Type=On/Off
Bit 1: Enabled=On/Off
INDEX
1 uint8 M/E 0: ME1
1: ME2
INDEX
2 uint8 Keyer 0-3: Keyer 1-4 INDEX
3 uint8 Type 0: Luma
1: Chroma
2: Pattern
3: DVE
void setKeyerType(uint8_t mE, uint8_t keyer, uint8_t type) SetType
4 1 bit Fly Enabled Bit 0: On/Off void setKeyerFlyEnabled(uint8_t mE, uint8_t keyer, bool flyEnabled)
5-7 (Unknown)
CKMs
(set)
12 bytes
Key Mask
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherKey
0 5 bits Set Mask Bit 0: Masked=On/Off
Bit 1: Top=On/Off
Bit 2: Bottom=On/Off
Bit 3: Left=On/Off
Bit 4: Right=On/Off
INDEX
1 uint8 M/E 0: ME1
1: ME2
INDEX
2 uint8 Keyer 0-3: Keyer 1-4 INDEX
3 1 bit Masked Bit 0: On/Off void setKeyerMasked(uint8_t mE, uint8_t keyer, bool masked) SetMasked
4-5 int16 Top -9000-9000: -9.00-9.00 void setKeyerTop(uint8_t mE, uint8_t keyer, int top) SetMaskTop
6-7 int16 Bottom -9000-9000: -9.00-9.00 void setKeyerBottom(uint8_t mE, uint8_t keyer, int bottom) SetMaskBottom
8-9 int16 Left -16000-16000: -9.00-9.00 void setKeyerLeft(uint8_t mE, uint8_t keyer, int left) SetMaskLeft
10-11 int16 Right -16000-16000: -9.00-9.00 void setKeyerRight(uint8_t mE, uint8_t keyer, int right) SetMaskRight
CKeF
(set)
4 bytes
Key Fill
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherKey
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2-3 VIDEOSRC Fill Source (See video source list) void setKeyerFillSource(uint8_t mE, uint8_t keyer, uint16_t fillSource) SetInputFill
CKeC
(set)
4 bytes
Key Cut
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKey
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2-3 VIDEOSRC Key Source (See video source list) void setKeyerKeySource(uint8_t mE, uint8_t keyer, uint16_t keySource) SetInputCut
KeLm
(get)
12 bytes
Key Luma
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKeyLumaParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 1 bit Pre Multiplied Bit 0: On/Off bool getKeyLumaPreMultiplied(uint8_t mE, uint8_t keyer) GetPreMultiplied
3 (Unknown)
4-5 uint16 Clip 0-1000: 0-100% uint16_t getKeyLumaClip(uint8_t mE, uint8_t keyer) GetClip
6-7 uint16 Gain 0-1000: 0-100% uint16_t getKeyLumaGain(uint8_t mE, uint8_t keyer) GetGain
8 1 bit Invert Key Bit 0: On/Off bool getKeyLumaInvertKey(uint8_t mE, uint8_t keyer) GetInverse
9-11 (Unknown)
CKLm
(set)
12 bytes
Key Luma
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherKeyLumaParameters
0 4 bits Set Mask Bit 0: Pre Multiplied=On/Off
Bit 1: Clip=On/Off
Bit 2: Gain=On/Off
Bit 3: Invert Key=On/Off
INDEX
1 uint8 M/E 0: ME1
1: ME2
INDEX
2 uint8 Keyer 0-3: Keyer 1-4 INDEX
3 1 bit Pre Multiplied Bit 0: On/Off void setKeyLumaPreMultiplied(uint8_t mE, uint8_t keyer, bool preMultiplied) SetPreMultiplied
4-5 uint16 Clip 0-1000: 0-100% void setKeyLumaClip(uint8_t mE, uint8_t keyer, uint16_t clip) SetClip
6-7 uint16 Gain 0-1000: 0-100% void setKeyLumaGain(uint8_t mE, uint8_t keyer, uint16_t gain) SetGain
8 1 bit Invert Key Bit 0: On/Off void setKeyLumaInvertKey(uint8_t mE, uint8_t keyer, bool invertKey) SetInverse
9-11 (Unknown)

Note that clip, gain and inverse controls are not used when pre-multiplied flag is set to true.

KeCk
(get)
12 bytes
Key Chroma
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKeyChromaParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2-3 uint16 Hue 0-3599: 0-359.9 Degrees uint16_t getKeyChromaHue(uint8_t mE, uint8_t keyer) GetHue
4-5 uint16 Gain 0-1000: 0-100% uint16_t getKeyChromaGain(uint8_t mE, uint8_t keyer) GetGain
6-7 uint16 Y Suppress 0-1000: 0-100% uint16_t getKeyChromaYSuppress(uint8_t mE, uint8_t keyer) GetYSuppress
8-9 uint16 Lift 0-1000: 0-100% uint16_t getKeyChromaLift(uint8_t mE, uint8_t keyer) GetLift
10 1 bit Narrow Bit 0: On/Off bool getKeyChromaNarrow(uint8_t mE, uint8_t keyer) GetNarrow
11 (Unknown)
CKCk
(set)
16 bytes
Key Chroma
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKeyChromaParameters
0 5 bits Set Mask Bit 0: Hue=On/Off
Bit 1: Gain=On/Off
Bit 2: Y Suppress=On/Off
Bit 3: Lift=On/Off
Bit 4: Narrow=On/Off
INDEX
1 uint8 M/E 0: ME1
1: ME2
INDEX
2 uint8 Keyer 0-3: Keyer 1-4 INDEX
3 (Unknown)
4-5 uint16 Hue 0-3599: 0-359.9 Degrees void setKeyChromaHue(uint8_t mE, uint8_t keyer, uint16_t hue) SetHue
6-7 uint16 Gain 0-1000: 0-100% void setKeyChromaGain(uint8_t mE, uint8_t keyer, uint16_t gain) SetGain
8-9 uint16 Y Suppress 0-1000: 0-100% void setKeyChromaYSuppress(uint8_t mE, uint8_t keyer, uint16_t ySuppress) SetYSuppress
10-11 uint16 Lift 0-1000: 0-100% void setKeyChromaLift(uint8_t mE, uint8_t keyer, uint16_t lift) SetLift
12 1 bit Narrow Bit 0: On/Off void setKeyChromaNarrow(uint8_t mE, uint8_t keyer, bool narrow) SetNarrow
13-15 (Unknown)
KePt
(get)
16 bytes
Key Pattern
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKeyPatternParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 uint8 Pattern 0-17: Pattern Styles uint8_t getKeyPatternPattern(uint8_t mE, uint8_t keyer) GetPattern
3 (Unknown)
4-5 uint16 Size 0-10000: 0-100% uint16_t getKeyPatternSize(uint8_t mE, uint8_t keyer) GetSize
6-7 uint16 Symmetry 0-10000: 0-100% uint16_t getKeyPatternSymmetry(uint8_t mE, uint8_t keyer) GetSymmetry
8-9 uint16 Softness 0-10000: 0-100% uint16_t getKeyPatternSoftness(uint8_t mE, uint8_t keyer) GetSoftness
10-11 uint16 Position X 0-10000: 0.0-1.0 uint16_t getKeyPatternPositionX(uint8_t mE, uint8_t keyer) GetHorizontalOffset
12-13 uint16 Position Y 0-10000: 0.0-1.0 uint16_t getKeyPatternPositionY(uint8_t mE, uint8_t keyer) GetVerticalOffset
14 1 bit Invert Pattern Bit 0: On/Off bool getKeyPatternInvertPattern(uint8_t mE, uint8_t keyer) GetInverse
15 (Unknown)
CKPt
(set)
16 bytes
Key Pattern
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKeyPatternParameters
0 7 bits Set Mask Bit 0: Pattern=On/Off
Bit 1: Size=On/Off
Bit 2: Symmetry=On/Off
Bit 3: Softness=On/Off
Bit 4: Position X=On/Off
Bit 5: Position Y=On/Off
Bit 6: Invert Pattern=On/Off
INDEX
1 uint8 M/E 0: ME1
1: ME2
INDEX
2 uint8 Keyer 0-3: Keyer 1-4 INDEX
3 uint8 Pattern 0-17: Pattern Styles void setKeyPatternPattern(uint8_t mE, uint8_t keyer, uint8_t pattern) SetPattern
4-5 uint16 Size 0-10000: 0-100% void setKeyPatternSize(uint8_t mE, uint8_t keyer, uint16_t size) SetSize
6-7 uint16 Symmetry 0-10000: 0-100% void setKeyPatternSymmetry(uint8_t mE, uint8_t keyer, uint16_t symmetry) SetSymmetry
8-9 uint16 Softness 0-10000: 0-100% void setKeyPatternSoftness(uint8_t mE, uint8_t keyer, uint16_t softness) SetSoftness
10-11 uint16 Position X 0-10000: 0.0-1.0 void setKeyPatternPositionX(uint8_t mE, uint8_t keyer, uint16_t positionX) SetHorizontalOffset
12-13 uint16 Position Y 0-10000: 0.0-1.0 void setKeyPatternPositionY(uint8_t mE, uint8_t keyer, uint16_t positionY) SetVerticalOffset
14 1 bit Invert Pattern Bit 0: On/Off void setKeyPatternInvertPattern(uint8_t mE, uint8_t keyer, bool invertPattern) SetInverse
15 (Unknown)
KeDV
(get)
60 bytes
Key DVE
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKeyDVEParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 (Unknown)
4-7 int32 Size X Example: 1000: 1.000 long getKeyDVESizeX(uint8_t mE, uint8_t keyer)
8-11 int32 Size Y Example: 2000: 2.000 long getKeyDVESizeY(uint8_t mE, uint8_t keyer)
12-15 int32 Position X Example: 1000: 1.000 long getKeyDVEPositionX(uint8_t mE, uint8_t keyer)
16-19 int32 Position Y Example: -1000: -1.000 long getKeyDVEPositionY(uint8_t mE, uint8_t keyer)
20-23 int32 Rotation Example: 3670: 1 rotation+7 degress long getKeyDVERotation(uint8_t mE, uint8_t keyer)
24 1 bit Border Enabled Bit 0: On/Off bool getKeyDVEBorderEnabled(uint8_t mE, uint8_t keyer) GetBorderEnabled
25 1 bit Shadow Bit 0: On/Off bool getKeyDVEShadow(uint8_t mE, uint8_t keyer) GetShadow
26 uint8 Border Bevel 0: No
1: In/Out
2: In
3: Out
uint8_t getKeyDVEBorderBevel(uint8_t mE, uint8_t keyer) GetBorderBevel
27 (Unknown)
28-29 uint16 Border Outer Width 0-1600: 0-16.00 uint16_t getKeyDVEBorderOuterWidth(uint8_t mE, uint8_t keyer) GetBorderWidthOut
30-31 uint16 Border Inner Width 0-1600: 0-16.00 uint16_t getKeyDVEBorderInnerWidth(uint8_t mE, uint8_t keyer) GetBorderWidthIn
32 uint8 Border Outer Softness 0-100: 0-100% uint8_t getKeyDVEBorderOuterSoftness(uint8_t mE, uint8_t keyer) GetBorderSoftnessOut
33 uint8 Border Inner Softness 0-100: 0-100% uint8_t getKeyDVEBorderInnerSoftness(uint8_t mE, uint8_t keyer) GetBorderSoftnessIn
34 uint8 Border Bevel Softness 0-100: 0.0-1.0 uint8_t getKeyDVEBorderBevelSoftness(uint8_t mE, uint8_t keyer) GetBorderBevelSoftness
35 uint8 Border Bevel Position 0-100: 0.0-1.0 uint8_t getKeyDVEBorderBevelPosition(uint8_t mE, uint8_t keyer) GetBorderBevelPosition
36 uint8 Border Opacity 0-100: 0-100% uint8_t getKeyDVEBorderOpacity(uint8_t mE, uint8_t keyer) GetBorderOpacity
37 (Unknown)
38-39 uint16 Border Hue 0-3599: 0-359.9 Degrees uint16_t getKeyDVEBorderHue(uint8_t mE, uint8_t keyer) GetBorderHue
40-41 uint16 Border Saturation 0-1000: 0-100% uint16_t getKeyDVEBorderSaturation(uint8_t mE, uint8_t keyer) GetBorderSaturation
42-43 uint16 Border Luma 0-1000: 0-100% uint16_t getKeyDVEBorderLuma(uint8_t mE, uint8_t keyer) GetBorderLuma
44-45 uint16 Light Source Direction 0-3590: 0-359 Degrees uint16_t getKeyDVELightSourceDirection(uint8_t mE, uint8_t keyer) GetLightSourceDirection
46 uint8 Light Source Altitude 10-100: 10-100 uint8_t getKeyDVELightSourceAltitude(uint8_t mE, uint8_t keyer) GetLightSourceAltitude
47 1 bit Masked Bit 0: On/Off bool getKeyDVEMasked(uint8_t mE, uint8_t keyer) GetMasked
48-49 int16 Top -9000-9000: -9.00-9.00 int getKeyDVETop(uint8_t mE, uint8_t keyer) GetMaskTop
50-51 int16 Bottom -9000-9000: -9.00-9.00 int getKeyDVEBottom(uint8_t mE, uint8_t keyer) GetMaskBottom
52-53 int16 Left -16000-16000: -9.00-9.00 int getKeyDVELeft(uint8_t mE, uint8_t keyer) GetMaskLeft
54-55 int16 Right -16000-16000: -9.00-9.00 int getKeyDVERight(uint8_t mE, uint8_t keyer) GetMaskRight
56 uint8 Rate 1-250: Frames uint8_t getKeyDVERate(uint8_t mE, uint8_t keyer)
57-59 (Unknown)
CKDV
(set)
64 bytes
Key DVE
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherKeyDVEParameters
0-3 32 bits Set Mask Bit 0: Size X=On/Off
Bit 1: Size Y=On/Off
Bit 2: Position X=On/Off
Bit 3: Position Y=On/Off
Bit 4: Rotation=On/Off
Bit 5: Border Enabled=On/Off
Bit 6: Shadow=On/Off
Bit 7: Border Bevel=On/Off
Bit 8: Outer Width=On/Off
Bit 9: Inner Width=On/Off
Bit 10: Outer Softness=On/Off
Bit 11: Inner Softness=On/Off
Bit 12: Bevel Softness=On/Off
Bit 13: Bevel Position=On/Off
Bit 14: Border Opacity=On/Off
Bit 15: Border Hue=On/Off
Bit 16: Border Saturation=On/Off
Bit 17: Border Luma=On/Off
Bit 18: Direction=On/Off
Bit 19: Altitude=On/Off
Bit 20: Masked=On/Off
Bit 21: Top=On/Off
Bit 22: Bottom=On/Off
Bit 23: Left=On/Off
Bit 24: Right=On/Off
Bit 25: Rate=On/Off
INDEX
4 uint8 M/E 0: ME1
1: ME2
INDEX
5 uint8 Keyer 0-3: Keyer 1-4 INDEX
6 (Unknown)
8-11 int32 Size X Example: 1000: 1.000 void setKeyDVESizeX(uint8_t mE, uint8_t keyer, long sizeX)
12-15 int32 Size Y Example: 2000: 2.000 void setKeyDVESizeY(uint8_t mE, uint8_t keyer, long sizeY)
16-19 int32 Position X Example: 1000: 1.000 void setKeyDVEPositionX(uint8_t mE, uint8_t keyer, long positionX)
20-23 int32 Position Y Example: -1000: -1.000 void setKeyDVEPositionY(uint8_t mE, uint8_t keyer, long positionY)
24-27 int32 Rotation Example: 3670: 1 rotation+7 degress void setKeyDVERotation(uint8_t mE, uint8_t keyer, long rotation)
28 1 bit Border Enabled Bit 0: On/Off void setKeyDVEBorderEnabled(uint8_t mE, uint8_t keyer, bool borderEnabled) SetBorderEnabled
29 1 bit Shadow Bit 0: On/Off void setKeyDVEShadow(uint8_t mE, uint8_t keyer, bool shadow) SetShadow
30 uint8 Border Bevel 0: No
1: In/Out
2: In
3: Out
void setKeyDVEBorderBevel(uint8_t mE, uint8_t keyer, uint8_t borderBevel) SetBorderBevel
31 (Unknown)
32-33 uint16 Border Outer Width 0-1600: 0-16.00 void setKeyDVEBorderOuterWidth(uint8_t mE, uint8_t keyer, uint16_t borderOuterWidth) SetBorderWidthOut
34-35 uint16 Border Inner Width 0-1600: 0-16.00 void setKeyDVEBorderInnerWidth(uint8_t mE, uint8_t keyer, uint16_t borderInnerWidth) SetBorderWidthIn
36 uint8 Border Outer Softness 0-100: 0-100% void setKeyDVEBorderOuterSoftness(uint8_t mE, uint8_t keyer, uint8_t borderOuterSoftness) SetBorderSoftnessOut
37 uint8 Border Inner Softness 0-100: 0-100% void setKeyDVEBorderInnerSoftness(uint8_t mE, uint8_t keyer, uint8_t borderInnerSoftness) SetBorderSoftnessIn
38 uint8 Border Bevel Softness 0-100: 0.0-1.0 void setKeyDVEBorderBevelSoftness(uint8_t mE, uint8_t keyer, uint8_t borderBevelSoftness) SetBorderBevelSoftness
39 uint8 Border Bevel Position 0-100: 0.0-1.0 void setKeyDVEBorderBevelPosition(uint8_t mE, uint8_t keyer, uint8_t borderBevelPosition) SetBorderBevelPosition
40 uint8 Border Opacity 0-100: 0-100% void setKeyDVEBorderOpacity(uint8_t mE, uint8_t keyer, uint8_t borderOpacity) SetBorderOpacity
41 (Unknown)
42-43 uint16 Border Hue 0-3599: 0-359.9 Degrees void setKeyDVEBorderHue(uint8_t mE, uint8_t keyer, uint16_t borderHue) SetBorderHue
44-45 uint16 Border Saturation 0-1000: 0-100% void setKeyDVEBorderSaturation(uint8_t mE, uint8_t keyer, uint16_t borderSaturation) SetBorderSaturation
46-47 uint16 Border Luma 0-1000: 0-100% void setKeyDVEBorderLuma(uint8_t mE, uint8_t keyer, uint16_t borderLuma) SetBorderLuma
48-49 uint16 Light Source Direction 0-3590: 0-359 Degrees void setKeyDVELightSourceDirection(uint8_t mE, uint8_t keyer, uint16_t lightSourceDirection) SetLightSourceDirection
50 uint8 Light Source Altitude 10-100: 10-100 void setKeyDVELightSourceAltitude(uint8_t mE, uint8_t keyer, uint8_t lightSourceAltitude) SetLightSourceAltitude
51 1 bit Masked Bit 0: On/Off void setKeyDVEMasked(uint8_t mE, uint8_t keyer, bool masked) SetMasked
52-53 int16 Top -9000-9000: -9.00-9.00 void setKeyDVETop(uint8_t mE, uint8_t keyer, int top) SetMaskTop
54-55 int16 Bottom -9000-9000: -9.00-9.00 void setKeyDVEBottom(uint8_t mE, uint8_t keyer, int bottom) SetMaskBottom
56-57 int16 Left -16000-16000: -9.00-9.00 void setKeyDVELeft(uint8_t mE, uint8_t keyer, int left) SetMaskLeft
58-59 int16 Right -16000-16000: -9.00-9.00 void setKeyDVERight(uint8_t mE, uint8_t keyer, int right) SetMaskRight
60 uint8 Rate 1-250: Frames void setKeyDVERate(uint8_t mE, uint8_t keyer, uint8_t rate)
61-63 (Unknown)
KeFS
(get)
8 bytes
Keyer Fly
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax
BMD API Method:
IBMDSwitcherKeyFlyParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 1 bit IsASet Bit 0: Yes/No bool getKeyerFlyIsASet(uint8_t mE, uint8_t keyer) IsKeyFrameStored
3 1 bit IsBSet Bit 0: Yes/No bool getKeyerFlyIsBSet(uint8_t mE, uint8_t keyer) IsKeyFrameStored
4 (Unknown)
6 4 bits Is At Key Frame Bit 0: A=Yes/No
Bit 1: B=Yes/No
Bit 2: Full=Yes/No
Bit 3: Run-to-infinite=Yes/No
uint8_t getKeyerFlyIsAtKeyFrame(uint8_t mE, uint8_t keyer) IsAtKeyFrames
7 uint8 Run-to-Infinite-index uint8_t getKeyerFlyRuntoInfiniteindex(uint8_t mE, uint8_t keyer)

From BMD SDK Manual: The IBMDSwitcherKeyFlyParameters object interface is used for manipulating fly settings of a key. A luminance, chroma or pattern key can be made a “fly” key, filtering its current state through the DVE hardware. Turning off the fly setting will remove the filter and return the key to its original state. Note that most properties in this interface also take effect when the key type is set to DVE.

SFKF
(set)
4 bytes
Keyer Fly
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherKeyFlyParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 uint8 Key Frame 1: A
2: B
void setKeyerFlyKeyFrame(uint8_t mE, uint8_t keyer, uint8_t keyFrame)
3 (Unknown)
RFlK
(set)
8 bytes
Run Flying Key
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherKeyFlyParameters
0 2 bits Set Mask Bit 0: On/Off
Bit 1: Run-To-Infinite=On/Off
INDEX
1 uint8 M/E 0: ME1
1: ME2
INDEX
2 uint8 Keyer 0-3: Keyer 1-4 INDEX
3 (Unknown)
4 uint8 Key Frame 1: A
2: B
3: Full
4: Run-To-Infinite
void setRunFlyingKeyKeyFrame(uint8_t mE, uint8_t keyer, uint8_t keyFrame) RunToKeyFrame
5 uint8 Run-to-Infinite-index void setRunFlyingKeyRuntoInfiniteindex(uint8_t mE, uint8_t keyer, uint8_t runtoInfiniteindex)
6 (Unknown)

Oddly, the set mask only needs to be set when running to infinite. In other words, it should be zero when running A, B or Full.

KKFP
(get)
52 bytes
Keyer Fly Key Frame
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax
BMD API Method:
IBMDSwitcherKeyFlyKeyFrameParameters
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 uint8 Key Frame 1: A
2: B
INDEX
3 (Unknown)
4-7 int32 Size X Example: 1000: 1.000 long getKeyerFlyKeyFrameSizeX(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetSizeX
8-11 int32 Size Y Example: 2000: 2.000 long getKeyerFlyKeyFrameSizeY(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetSizeY
12-15 int32 Position X Example: 1000: 1.000 long getKeyerFlyKeyFramePositionX(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetPositionX
16-19 int32 Position Y Example: -1000: -1.000 long getKeyerFlyKeyFramePositionY(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetPositionY
20-23 int32 Rotation Example: 3670: 1 rotation+7 degress long getKeyerFlyKeyFrameRotation(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetRotation
24-25 uint16 Border Outer Width 0-1600: 0-16.00 uint16_t getKeyerFlyKeyFrameBorderOuterWidth(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderWidthOut
26-27 uint16 Border Inner Width 0-1600: 0-16.00 uint16_t getKeyerFlyKeyFrameBorderInnerWidth(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderWidthIn
28 uint8 Border Outer Softness 0-100: 0-100% uint8_t getKeyerFlyKeyFrameBorderOuterSoftness(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderSoftnessOut
29 uint8 Border Inner Softness 0-100: 0-100% uint8_t getKeyerFlyKeyFrameBorderInnerSoftness(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderSoftnessIn
30 uint8 Border Bevel Softness 0-100: 0.0-1.0 uint8_t getKeyerFlyKeyFrameBorderBevelSoftness(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderBevelSoftness
31 uint8 Border Bevel Position 0-100: 0.0-1.0 uint8_t getKeyerFlyKeyFrameBorderBevelPosition(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderBevelPosition
32 uint8 Border Opacity 0-100: 0-100% uint8_t getKeyerFlyKeyFrameBorderOpacity(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderOpacity
33 (Unknown)
34-35 uint16 Border Hue 0-3599: 0-359.9 Degrees uint16_t getKeyerFlyKeyFrameBorderHue(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderHue
36-37 uint16 Border Saturation 0-1000: 0-100% uint16_t getKeyerFlyKeyFrameBorderSaturation(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderSaturation
38-39 uint16 Border Luma 0-1000: 0-100% uint16_t getKeyerFlyKeyFrameBorderLuma(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetBorderLuma
40-41 uint16 Light Source Direction 0-3590: 0-359 Degrees uint16_t getKeyerFlyKeyFrameLightSourceDirection(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetLightSourceDirection
42 uint8 Light Source Altitude 10-100: 10-100 uint8_t getKeyerFlyKeyFrameLightSourceAltitude(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetLightSourceAltitude
43 (Unknown)
44-45 int16 Top -9000-9000: -9.00-9.00 int getKeyerFlyKeyFrameTop(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetMaskTop
46-47 int16 Bottom -9000-9000: -9.00-9.00 int getKeyerFlyKeyFrameBottom(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetMaskBottom
48-49 int16 Left -16000-16000: -9.00-9.00 int getKeyerFlyKeyFrameLeft(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetMaskLeft
50-51 int16 Right -16000-16000: -9.00-9.00 int getKeyerFlyKeyFrameRight(uint8_t mE, uint8_t keyer, uint8_t keyFrame) GetMaskRight
DskB
(get)
8 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherDownstreamKey
0 uint8 Keyer 0: DSK1
1: DSK2
INDEX
1 (Unknown)
2-3 VIDEOSRC Fill Source (See video source list) uint16_t getDownstreamKeyerFillSource(uint8_t keyer) GetInputFill
4-5 VIDEOSRC Key Source (See video source list) uint16_t getDownstreamKeyerKeySource(uint8_t keyer) GetInputCut
6 (Unknown)
CDsF
(set)
4 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherDownstreamKey
0 uint8 Keyer 0-3: Keyer 1-4 INDEX
1 (Unknown)
2-3 VIDEOSRC Fill Source (See video source list) void setDownstreamKeyerFillSource(uint8_t keyer, uint16_t fillSource) SetInputFill
CDsC
(set)
4 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherDownstreamKey
0 uint8 Keyer 0-3: Keyer 1-4 INDEX
1 (Unknown)
2-3 VIDEOSRC Key Source (See video source list) void setDownstreamKeyerKeySource(uint8_t keyer, uint16_t keySource) SetInputCut
DskP
(get)
20 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherDownstreamKey
0 uint8 Keyer 0: DSK1
1: DSK2
INDEX
1 1 bit Tie Bit 0: On/Off bool getDownstreamKeyerTie(uint8_t keyer) GetTie
2 uint8 Rate 1-250: Frames uint8_t getDownstreamKeyerRate(uint8_t keyer) GetRate
3 1 bit Pre Multiplied Bit 0: On/Off bool getDownstreamKeyerPreMultiplied(uint8_t keyer) GetPreMultiplied
4-5 uint16 Clip 0-1000: 0-100% uint16_t getDownstreamKeyerClip(uint8_t keyer) GetClip
6-7 uint16 Gain 0-1000: 0-100% uint16_t getDownstreamKeyerGain(uint8_t keyer) GetGain
8 1 bit Invert Key Bit 0: On/Off bool getDownstreamKeyerInvertKey(uint8_t keyer) GetInverse
9 1 bit Masked Bit 0: On/Off bool getDownstreamKeyerMasked(uint8_t keyer) GetMasked
10-11 int16 Top -9000-9000: -9.00-9.00 int getDownstreamKeyerTop(uint8_t keyer) GetMaskTop
12-13 int16 Bottom -9000-9000: -9.00-9.00 int getDownstreamKeyerBottom(uint8_t keyer) GetMaskBottom
14-15 int16 Left -16000-16000: -9.00-9.00 int getDownstreamKeyerLeft(uint8_t keyer) GetMaskLeft
16-17 int16 Right -16000-16000: -9.00-9.00 int getDownstreamKeyerRight(uint8_t keyer) GetMaskRight
18 (Unknown)
CDsT
(set)
4 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherDownstreamKey
0 uint8 Keyer 0: DSK1
1: DSK2
INDEX
1 1 bit Tie Bit 0: On/Off void setDownstreamKeyerTie(uint8_t keyer, bool tie) SetTie
2 (Unknown)
CDsR
(set)
4 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherDownstreamKey
0 uint8 Keyer 0: DSK1
1: DSK2
INDEX
1 uint8 Rate 1-250: Frames void setDownstreamKeyerRate(uint8_t keyer, uint8_t rate) SetRate
2 (Unknown)
CDsG
(set)
12 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherDownstreamKey
0 3 bits Set Mask Bit 0: Pre Multiplied=On/Off
Bit 1: Clip=On/Off
Bit 2: Gain=On/Off
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 1 bit Pre Multiplied Bit 0: On/Off void setDownstreamKeyerPreMultiplied(uint8_t keyer, bool preMultiplied) SetPreMultiplied
3 (Unknown)
4-5 uint16 Clip 0-1000: 0-100% void setDownstreamKeyerClip(uint8_t keyer, uint16_t clip) SetClip
6-7 uint16 Gain 0-1000: 0-100% void setDownstreamKeyerGain(uint8_t keyer, uint16_t gain) SetGain
8 1 bit Invert Key(??) Bit 0: On/Off void setDownstreamKeyerInvertKey(uint8_t keyer, bool invertKey) SetInverse??
9-11 (Unknown)
CDsM
(set)
12 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherDownstreamKey
0 5 bits Set Mask Bit 0: Masked=On/Off
Bit 1: Top=On/Off
Bit 2: Bottom=On/Off
Bit 3: Left=On/Off
Bit 4: Right=On/Off
INDEX
1 uint8 Keyer 0-3: Keyer 1-4 INDEX
2 1 bit Masked Bit 0: On/Off void setDownstreamKeyerMasked(uint8_t keyer, bool masked) SetMasked
3 (Unknown)
4-5 int16 Top -9000-9000: -9.00-9.00 void setDownstreamKeyerTop(uint8_t keyer, int top) SetMaskTop
6-7 int16 Bottom -9000-9000: -9.00-9.00 void setDownstreamKeyerBottom(uint8_t keyer, int bottom) SetMaskBottom
8-9 int16 Left -16000-16000: -9.00-9.00 void setDownstreamKeyerLeft(uint8_t keyer, int left) SetMaskLeft
10-11 int16 Right -16000-16000: -9.00-9.00 void setDownstreamKeyerRight(uint8_t keyer, int right) SetMaskRight
DDsA
(set)
4 bytes
Downstream Keyer Auto
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherDownstreamKey
0 uint8 Keyer 0: DSK1
1: DSK2
void performDownstreamKeyerAutoKeyer(uint8_t keyer) PerformAutoTransition
1-3 (Unknown)
DskS
(get)
8 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
IBMDSwitcherDownstreamKey
0 uint8 Keyer 0: DSK1
1: DSK2
INDEX
1 1 bit On Air Bit 0: On/Off bool getDownstreamKeyerOnAir(uint8_t keyer) GetOnAir
2 1 bit In Transition Bit 0: On/Off bool getDownstreamKeyerInTransition(uint8_t keyer) IsTransitioning
3 1 bit Is Auto Transitioning Bit 0: On/Off bool getDownstreamKeyerIsAutoTransitioning(uint8_t keyer) IsAutoTransitioning
4 uint8 Frames Remaining Frames uint8_t getDownstreamKeyerFramesRemaining(uint8_t keyer) GetFramesRemaining
5-7 (Unknown)
CDsL
(set)
4 bytes
Downstream Keyer
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
IBMDSwitcherDownstreamKey
0 uint8 Keyer 0: DSK1
1: DSK2
INDEX
1 1 bit On Air Bit 0: On/Off void setDownstreamKeyerOnAir(uint8_t keyer, bool onAir) SetOnAir
2 (Unknown)
FtbP
(get)
4 bytes
Fade-To-Black
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 uint8 Rate 1-250: Frames uint8_t getFadeToBlackRate(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdFadeToBlackRate
2 (Unknown)
FtbC
(set)
4 bytes
Fade-To-Black
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 1 bit Set Mask Bit 0: Rate=On/Off INDEX
1 uint8 M/E 0: ME1
1: ME2
INDEX
2 uint8 Rate 1-250: Frames void setFadeToBlackRate(uint8_t mE, uint8_t rate) bmdSwitcherMixEffectBlockPropertyIdFadeToBlackRate
3 (Unknown)
FtbS
(get)
4 bytes
Fade-To-Black State
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
BMDSwitcherMixEffectBlockPropertyId
0 uint8 M/E 0: ME1
1: ME2
INDEX
1 1 bit Fully Black Bit 0: On/Off bool getFadeToBlackStateFullyBlack(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdFadeToBlackFullyBlack
2 1 bit In Transition Bit 0: On/Off bool getFadeToBlackStateInTransition(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdFadeToBlackInTransition
3 uint8 Frames Remaining Frames uint8_t getFadeToBlackStateFramesRemaining(uint8_t mE) bmdSwitcherMixEffectBlockPropertyIdFadeToBlackFramesRemaining
FtbA
(set)
4 bytes
Fade-To-Black
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
IBMDSwitcherMixEffectBlock
0 uint8 M/E 0: ME1
1: ME2
void performFadeToBlackME(uint8_t mE) PerformFadeToBlack
1 (Unknown)
2 (Unknown)

Byte 1 actually has to be 0x02 for this command to work both ways! Strange.

ColV
(get)
8 bytes
Color Generator
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherInputColor
0 uint8 Color Generator 0: Color Generator 1
1: Color Generator 2
INDEX
1 (Unknown)
2-3 uint16 Hue 0-3599: 0-359.9 Degrees uint16_t getColorGeneratorHue(uint8_t colorGenerator) GetHue
4-5 uint16 Saturation 0-1000: 0-100.0% uint16_t getColorGeneratorSaturation(uint8_t colorGenerator) GetSaturation
6-7 uint16 Luma 0-1000: 0-100.0% uint16_t getColorGeneratorLuma(uint8_t colorGenerator) GetLuma
CClV
(set)
8 bytes
Color Generator
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherInputColor
0 3 bits Set Mask Bit 0: Hue=On/Off
Bit 1: Saturation=On/Off
Bit 2: Luma=On/Off
INDEX
1 uint8 Color Generator 0: Color Generator 1
1: Color Generator 2
INDEX
2-3 uint16 Hue 0-3599: 0-359.9 Degrees void setColorGeneratorHue(uint8_t colorGenerator, uint16_t hue) SetHue
4-5 uint16 Saturation 0-1000: 0-100.0% void setColorGeneratorSaturation(uint8_t colorGenerator, uint16_t saturation) SetSaturation
6-7 uint16 Luma 0-1000: 0-100.0% void setColorGeneratorLuma(uint8_t colorGenerator, uint16_t luma) SetLuma
AuxS
(get)
4 bytes
Aux Source
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
IBMDSwitcherInputAux
0 uint8 AUX Channel 0-5: Aux 1-6 INDEX
1 (Unknown)
2-3 VIDEOSRC Input (See video source list) uint16_t getAuxSourceInput(uint8_t aUXChannel) GetInputSource
CAuS
(set)
4 bytes
Aux Source
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
IBMDSwitcherInputAux
0 1 bit Set Mask Bit 0: Source=On/Off INDEX
1 uint8 AUX Channel 0-5: Aux 1-6 INDEX
2-3 VIDEOSRC Input (See video source list) void setAuxSourceInput(uint8_t aUXChannel, uint16_t input) SetInputSource
CCdo
(get)
8 bytes
Camera Control Options(?)
Byte# DataType: Description: Value Range Arduino API:
In
BMD API Method:
N/A
0 1 bit Set Mask Bit 0: Source=On/Off INDEX
1 uint8 Input INDEX
2 uint8 Adjustment Domain 0: Lens
1: Camera
8: Chip
INDEX
3 uint8

if Adjustment Domain = 0

Lens feature
0: Focus
1: Auto Focused
3: Iris
INDEX
3 uint8

if Adjustment Domain = 1

Camera feature
1: Gain
5: Shutter
INDEX
3 uint8

if Adjustment Domain = 8

Chip feature
0: Lift
1: Gamma
2: Gain
3: Aperture
4: Contrast
5: Lum
6: Hue-Saturation
INDEX
4 1 bit Available Bit 0: On/Off
5-7 (Unknown)
CCdP
(get)
24 bytes
Camera Control
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
N/A
0 uint8 Input 1-8: Camera INDEX
1 uint8 Adjustment Domain 0: Lens
1: Camera
8: Chip
INDEX
2 uint8

if Adjustment Domain = 0

Lens feature
0: Focus
1: Auto Focused
3: Iris
9: Zoom
INDEX
2 uint8

if Adjustment Domain = 1

Camera feature
1: Gain
2: White Balance
5: Shutter
INDEX
2 uint8

if Adjustment Domain = 8

Chip feature
0: Lift
1: Gamma
2: Gain
3: Aperture
4: Contrast
5: Lum
6: Hue-Saturation
INDEX
3-15 (Unknown)
16-17 int16

if Adjustment Domain = 0 and Adjust Feature = 3

Iris
0-2048 int getCameraControlIris(uint8_t input)
16-17 int16

if Adjustment Domain = 0 and Adjust Feature = 0

Focus

Camera Focus get values are absolute.

0-65535 int getCameraControlFocus(uint8_t input)
16-17 int16

if Adjustment Domain = 1 and Adjust Feature = 1

Gain
512: 0db
1024: 6db
2048: 12db
4096: 18db
int getCameraControlGain(uint8_t input)
16-17 int16

if Adjustment Domain = 1 and Adjust Feature = 2

White Balance
3200: 3200K
4500: 4500K
5000: 5000K
5600: 5600K
6500: 6500K
7500: 7500K
int getCameraControlWhiteBalance(uint8_t input)
16-17 int16

if Adjustment Domain = 0 and Adjust Feature = 9

Zoom Speed
-2048-2048: Zoom speed int getCameraControlZoomSpeed(uint8_t input)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 0

Lift R
-4096-4096: -1.00-1.00 int getCameraControlLiftR(uint8_t input)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 1

Gamma R
-8192-8192: -1.00-1.00 int getCameraControlGammaR(uint8_t input)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 2

Gain R
0-32767: 0-16.00 int getCameraControlGainR(uint8_t input)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 5

Lum Mix
0-2048: 0-100% int getCameraControlLumMix(uint8_t input)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 6

Hue
-2048-2048: 0-360 degrees int getCameraControlHue(uint8_t input)
18-19 int16

if Adjustment Domain = 1 and Adjust Feature = 5

Shutter
20000: 1/50
16667: 1/60
13333: 1/75
11111: 1/90
10000: 1/100
8333: 1/120
6667: 1/150
5556: 1/180
4000: 1/250
2778: 1/360
2000: 1/500
1379: 1/725
1000: 1/1000
690: 1/1450
500: 1/2000
int getCameraControlShutter(uint8_t input)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 0

Lift G
-4096-4096: -1.00-1.00 int getCameraControlLiftG(uint8_t input)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 1

Gamma G
-8192-8192: -1.00-1.00 int getCameraControlGammaG(uint8_t input)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 2

Gain G
0-32767: 0-16.00 int getCameraControlGainG(uint8_t input)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 4

Contrast
0-4096: 0-100% int getCameraControlContrast(uint8_t input)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 6

Saturation
0-4096: 0-100% int getCameraControlSaturation(uint8_t input)
20-21 int16

if Adjustment Domain = 8 and Adjust Feature = 0

Lift B
-4096-4096: -1.00-1.00 int getCameraControlLiftB(uint8_t input)
20-21 int16

if Adjustment Domain = 8 and Adjust Feature = 1

Gamma B
-8192-8192: -1.00-1.00 int getCameraControlGammaB(uint8_t input)
20-21 int16

if Adjustment Domain = 8 and Adjust Feature = 2

Gain B
0-32767: 0-16.00 int getCameraControlGainB(uint8_t input)
22-23 int16

if Adjustment Domain = 8 and Adjust Feature = 0

Lift Y
-4096-4096: -1.00-1.00 int getCameraControlLiftY(uint8_t input)
22-23 int16

if Adjustment Domain = 8 and Adjust Feature = 1

Gamma Y
-8192-8192: -1.00-1.00 int getCameraControlGammaY(uint8_t input)
22-23 int16

if Adjustment Domain = 8 and Adjust Feature = 2

Gain Y
0-32767: 0-16.00 int getCameraControlGainY(uint8_t input)

Actually the camera values go from 1-20, but we work only with up to 8 cameras here to save memory.

CCmd
(set)
24 bytes
Camera Control
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 Input 1-8: Camera INDEX
1 uint8 Adjustment Domain 0: Lens
1: Camera
8: Chip
INDEX
2 uint8

if Adjustment Domain = 0

Lens feature
0: Focus
1: Auto Focused
3: Iris
9: Zoom
INDEX
2 uint8

if Adjustment Domain = 1

Camera feature
1: Gain
2: White Balance
5: Shutter
INDEX
2 uint8

if Adjustment Domain = 8

Chip feature
0: Lift
1: Gamma
2: Gain
3: Aperture
4: Contrast
5: Lum
6: Hue-Saturation
INDEX
3 1 bit Relative

Tells if the change is relative or not. 1 = relative.

Bit 0: ?/Off
4-15 (Unknown)
16-17 int16

if Adjustment Domain = 0 and Adjust Feature = 3

Iris
0-2048 void setCameraControlIris(uint8_t input, int iris)
16-17 int16

if Adjustment Domain = 0 and Adjust Feature = 0

Focus

Camera Focus get values are absolute.

0-65535 void setCameraControlFocus(uint8_t input, int focus)
16-17 int16

if Adjustment Domain = 1 and Adjust Feature = 1

Gain
512: 0db
1024: 6db
2048: 12db
4096: 18db
void setCameraControlGain(uint8_t input, int gain)
16-17 int16

if Adjustment Domain = 1 and Adjust Feature = 2

White Balance
3200: 3200K
4500: 4500K
5000: 5000K
5600: 5600K
6500: 6500K
7500: 7500K
void setCameraControlWhiteBalance(uint8_t input, int whiteBalance)
16-17 int16

if Adjustment Domain = 0 and Adjust Feature = 9

Zoom Speed
-2048-2048: Zoom Speed void setCameraControlZoomSpeed(uint8_t input, int zoomSpeed)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 0

Lift R
-4096-4096: -1.00-1.00 void setCameraControlLiftR(uint8_t input, int liftR)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 1

Gamma R
-8192-8192: -1.00-1.00 void setCameraControlGammaR(uint8_t input, int gammaR)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 2

Gain R
0-32767: 0-16.00 void setCameraControlGainR(uint8_t input, int gainR)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 5

Lum Mix
0-2048: 0-100% void setCameraControlLumMix(uint8_t input, int lumMix)
16-17 int16

if Adjustment Domain = 8 and Adjust Feature = 6

Hue
-2048-2048: 0-360 degrees void setCameraControlHue(uint8_t input, int hue)
18-19 int16

if Adjustment Domain = 1 and Adjust Feature = 5

Shutter
20000: 1/50
16667: 1/60
13333: 1/75
11111: 1/90
10000: 1/100
8333: 1/120
6667: 1/150
5556: 1/180
4000: 1/250
2778: 1/360
2000: 1/500
1379: 1/725
1000: 1/1000
690: 1/1450
500: 1/2000
void setCameraControlShutter(uint8_t input, int shutter)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 0

Lift G
-4096-4096: -1.00-1.00 void setCameraControlLiftG(uint8_t input, int liftG)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 1

Gamma G
-8192-8192: -1.00-1.00 void setCameraControlGammaG(uint8_t input, int gammaG)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 2

Gain G
0-32767: 0-16.00 void setCameraControlGainG(uint8_t input, int gainG)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 4

Contrast
0-4096: 0-100% void setCameraControlContrast(uint8_t input, int contrast)
18-19 int16

if Adjustment Domain = 8 and Adjust Feature = 6

Saturation
0-4096: 0-100% void setCameraControlSaturation(uint8_t input, int saturation)
20-21 int16

if Adjustment Domain = 8 and Adjust Feature = 0

Lift B
-4096-4096: -1.00-1.00 void setCameraControlLiftB(uint8_t input, int liftB)
20-21 int16

if Adjustment Domain = 8 and Adjust Feature = 1

Gamma B
-8192-8192: -1.00-1.00 void setCameraControlGammaB(uint8_t input, int gammaB)
20-21 int16

if Adjustment Domain = 8 and Adjust Feature = 2

Gain B
0-32767: 0-16.00 void setCameraControlGainB(uint8_t input, int gainB)
22-23 int16

if Adjustment Domain = 8 and Adjust Feature = 0

Lift Y
-4096-4096: -1.00-1.00 void setCameraControlLiftY(uint8_t input, int liftY)
22-23 int16

if Adjustment Domain = 8 and Adjust Feature = 1

Gamma Y
-8192-8192: -1.00-1.00 void setCameraControlGammaY(uint8_t input, int gammaY)
22-23 int16

if Adjustment Domain = 8 and Adjust Feature = 2

Gain Y
0-32767: 0-16.00 void setCameraControlGainY(uint8_t input, int gainY)

The formatting of the data for camera control is highly unusual compared to the other structures found in the protocol. It feels much less strict and it is more difficult to describe systematically. The 13 unknown bytes 4-16 is actually used and when sending commands, they need to contain certain values. It seems byte 10 often indicates how many data words are in the packet. To see in detail how this command must be used, please check out the actual implementation in the C-code. PS: For Camera Gain, just use the MSB and ignore anything in LSB. Notice also, to save memory only camera 1-8 are enabled by default, but actually the value goes all the way to the max number of physical inputs on the switcher.

RCPS
(get)
8 bytes
Clip Player
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMediaPlayer
0 uint8 Media Player 0: Media Player 1
1: Media Player 2
INDEX
1 1 bit Playing Bit 0: On/Off bool getClipPlayerPlaying(uint8_t mediaPlayer) GetPlaying
2 1 bit Loop Bit 0: On/Off bool getClipPlayerLoop(uint8_t mediaPlayer) GetLoop
3 1 bit At Beginning Bit 0: On/Off bool getClipPlayerAtBeginning(uint8_t mediaPlayer) GetAtBeginning
4-5 uint16 Clip Frame uint16_t getClipPlayerClipFrame(uint8_t mediaPlayer) GetClipFrame
6 (Unknown)
SCPS
(set)
8 bytes
Clip Player
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherMediaPlayer
0 4 bits Set Mask Bit 0: Playing=On/Off
Bit 1: Loop=On/Off
Bit 2: Beginning=On/Off
Bit 3: Frame=On/Off
INDEX
1 uint8 Media Player 0: Media Player 1
1: Media Player 2
INDEX
2 1 bit Playing Bit 0: On/Off void setClipPlayerPlaying(uint8_t mediaPlayer, bool playing) SetPlaying
3 1 bit Loop Bit 0: On/Off void setClipPlayerLoop(uint8_t mediaPlayer, bool loop) SetLoop
4 1 bit At Beginning Bit 0: On/Off void setClipPlayerAtBeginning(uint8_t mediaPlayer, bool atBeginning) SetAtBeginning
5 (Unknown)
6-7 uint16 Clip Frame void setClipPlayerClipFrame(uint8_t mediaPlayer, uint16_t clipFrame) SetClipFrame
MPCE
(get)
4 bytes
Media Player Source
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherMediaPlayer
0 uint8 Media Player 0: Media Player 1
1: Media Player 2
INDEX GetSource...
1 uint8 Type 1: Still
2: Clip
uint8_t getMediaPlayerSourceType(uint8_t mediaPlayer)
2 uint8 Still Index 0-x: Still 1-x uint8_t getMediaPlayerSourceStillIndex(uint8_t mediaPlayer)
3 uint8 Clip Index 0-x: Clip 1-x uint8_t getMediaPlayerSourceClipIndex(uint8_t mediaPlayer)
MPSS
(set)
8 bytes
Media Player Source
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherMediaPlayer
0 3 bits Set Mask Bit 0: Type=On/Off
Bit 1: Still=On/Off
Bit 2: Clip=On/Off
INDEX
1 uint8 Media Player 0: Media Player 1
1: Media Player 2
INDEX SetSource...
2 uint8 Type 1: Still
2: Clip
void setMediaPlayerSourceType(uint8_t mediaPlayer, uint8_t type)
3 uint8 Still Index 0-x: Still 1-x void setMediaPlayerSourceStillIndex(uint8_t mediaPlayer, uint8_t stillIndex)
4 uint8 Clip Index 0-x: Clip 1-x void setMediaPlayerSourceClipIndex(uint8_t mediaPlayer, uint8_t clipIndex)
5-7 (Unknown)

Usually you would set either clip or still, but always which type. So the set mask would be 3 for stills and 5 for clips.

MPSp
(get)
4 bytes
Media Pool Storage
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMediaPool
0-1 uint16 Clip 1 Max Length Frames uint16_t getMediaPoolStorageClip1MaxLength() GetClipMaxFrameCounts
2-3 uint16 Clip 2 Max Length Frames uint16_t getMediaPoolStorageClip2MaxLength() GetClipMaxFrameCounts
CMPS
(set)
4 bytes
Media Pool Storage
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMediaPool
0-1 uint16 Clip 1 Max Length Frames void setMediaPoolStorageClip1MaxLength(uint16_t clip1MaxLength) SetClipMaxFrameCounts
2 (Unknown)
MPCS
(get)
68 bytes
Media Player Clip Source
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 Clip Bank 0-1: Clip Bank INDEX
1 1 bit Is Used Bit 0: On/Off bool getMediaPlayerClipSourceIsUsed(uint8_t clipBank)
2-17 String[16] File Name char * getMediaPlayerClipSourceFileName(uint8_t clipBank)
18-65 (Unknown)
66-67 uint16 Frames Frames uint16_t getMediaPlayerClipSourceFrames(uint8_t clipBank)
MPAS
(get)
84 bytes
Media Player Audio Source
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 Clip Bank 1-2: Clip Bank INDEX
1 1 bit Is Used Bit 0: On/Off bool getMediaPlayerAudioSourceIsUsed(uint8_t clipBank)
2-17 (Unknown)
18-33 String[16] File Name char * getMediaPlayerAudioSourceFileName(uint8_t clipBank)
34-83 (Unknown)
MPfe
(get)
-1 bytes
Media Player Still Files
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax
BMD API Method:
IBMDSwitcherStills
0 uint8 Type (see note) ?
1 (Unknown)
3 uint8 Still Bank 0-31: Still Bank INDEX
4 1 bit Is Used Bit 0: On/Off bool getMediaPlayerStillFilesIsUsed(uint8_t stillBank)
5-20 String[16] (Hash of still) ?
21 (Unknown)
23 uint8 (File Name String Length) ?
24-39 String[16] File Name

Can be longer than 16 bytes, but is limited in the Arduino library for memory dynamic reasons.

char * getMediaPlayerStillFilesFileName(uint8_t stillBank)

If the first byte is different from zero (Stills), the package is being used for something different than stills (clips or audio). This is currently unsupported in the arduino libraries.

MRPr
(get)
4 bytes
Macro Run Status
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherMacroControl
0 2 bits State Bit 0: Running=On/Off
Bit 1: Waiting=On/Off
uint8_t getMacroRunStatusState() GetRunStatus
1 1 bit Is Looping Bit 0: On/Off bool getMacroRunStatusIsLooping() GetLoop
2-3 uint16 Index 0-99: Macro Index Number. 0xFFFF: stopped uint16_t getMacroRunStatusIndex()
MAct
(set)
4 bytes
Macro Action
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherMacroControl
0-1 uint16 Index

This starts running a macro, or stops macro execution if the index value is 0xFFFF. This is also used to stop the recording of a macro!

0-99: Macro Index Number. 0xFFFF: stop INDEX
2 uint8 Action 0: Run Macro
1: Stop (w/Index 0xFFFF)
2: Stop Recording (w/Index 0xFFFF)
3: Insert Wait for User (w/Index 0xFFFF)
4: Continue (w/Index 0xFFFF)
5: Delete Macro
void setMacroAction(uint16_t index, uint8_t action)
3 (Unknown)
MRCP
(set)
4 bytes
Macro Run Change Properties
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMacroPool
0 8 bits Set Mask Bit 0: Looping=On/Off INDEX
1 1 bit Looping Bit 0: On/Off void setMacroRunChangePropertiesLooping(bool looping) SetLoop
2 (Unknown)
MPrp
(get)
-1 bytes
Macro Properties
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherMacroPool
0 (Unknown)
1 uint8 Macro Index

Possibly this is a 16 bit number and the actual range is defined by the value of _MAC and in the range of 100 or more. For the Arduino it is limited to ten for memory reasons.

0-9: Macro Index Number INDEX
2 1 bit Is Used Bit 0: On/Off bool getMacroPropertiesIsUsed(uint8_t macroIndex) IsValid
3 (Unknown)
4-5 uint16 (Name String Length) ?
6-7 uint16 (Description String Length) ?
8-17 String[10] Name

Can be longer than 10 bytes, but is limited in the Arduino library for memory dynamic reasons. Length in data packet is defined by Name String Length.

char * getMacroPropertiesName(uint8_t macroIndex)
Only in ATEMmax
GetName
18-18 String[1] Description

(Length in data packet is defined by Description String Length)

? GetDescription
CMPr
(set)
-1 bytes
Change Macro Properties
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMacroPool
0 8 bits Set Mask Bit 0: Name=On/Off
Bit 1: Description=On/Off
INDEX
1 (Unknown)
2-3 uint16 Index

Possibly this is a 16 bit number. The actual range is defined by the value of _MAC and in the range of 100 or more.

0-99: Macro Index Number INDEX
4-5 uint16 (Name String Length) ?
6-7 uint16 (Description String Length) ?
8-8 String[1] Name

The name of the macro, takes up the number of bytes specified by Name String.

? SetName
9-9 String[1] Description

The description of the macro, takes up the number of bytes specified by Description String, right after Name String with no terminating character. The total package length is always a multiplum of 4.

? SetDescription
MSRc
(set)
8 bytes
Macro Start Recording
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherMacroPool
0 (Unknown)
1 uint8 Index

Possibly this is a 16 bit number. The actual range is defined by the value of _MAC and in the range of 100 or more.

0-99: Macro Index Number void setMacroStartRecordingIndex(uint8_t index)
2-3 uint16 (Name String Length) ?
4-5 uint16 (Description String Length) ?
6-6 String[1] Name

The name of the macro, takes up the number of bytes specified by Name String.

? SetName
7-7 String[1] Description

The description of the macro, takes up the number of bytes specified by Description String, right after Name String with no terminating character. The total package length is always a multiplum of 4.

? SetDescription

You stop recording a macro by sending a MacroActionIndex(0xFFFF).

MSlp
(set)
4 bytes
Macro Add Pause
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherMacroControl
0 (Unknown)
2-3 uint16 Frames Number of void setMacroAddPauseFrames(uint16_t frames) RecordPause
MRcS
(get)
4 bytes
Macro Recording Status
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherMacroControl
0 1 bit Is Recording Bit 0: On/Off bool getMacroRecordingStatusIsRecording() GetRecordStatus
1 (Unknown)
2-3 uint16 Index 0-99: Macro Index Number. uint16_t getMacroRecordingStatusIndex()
SSrc
(get)
32 bytes
Super Source
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherInputSuperSource
0-1 VIDEOSRC Fill Source (See video source list) uint16_t getSuperSourceFillSource() GetInputFill
2-3 VIDEOSRC Key Source (See video source list) uint16_t getSuperSourceKeySource() GetInputCut
4 1 bit Foreground Bit 0: On/Off bool getSuperSourceForeground() GetArtOption
5 1 bit Pre Multiplied Bit 0: On/Off bool getSuperSourcePreMultiplied() GetPreMultiplied
6-7 uint16 Clip 0-1000: 0-100% uint16_t getSuperSourceClip() GetClip
8-9 uint16 Gain 0-1000: 0-100% uint16_t getSuperSourceGain() GetGain
10 1 bit Invert Key Bit 0: On/Off bool getSuperSourceInvertKey() GetInverse
11 1 bit Border Enabled Bit 0: On/Off bool getSuperSourceBorderEnabled() GetBorderEnabled
12 uint8 Border Bevel 0: No
1: In/Out
2: In
3: Out
uint8_t getSuperSourceBorderBevel() GetBorderBevel
13 (Unknown)
14-15 uint16 Border Outer Width 0-1600: 0-16.00 uint16_t getSuperSourceBorderOuterWidth() GetBorderWidthOut
16-17 uint16 Border Inner Width 0-1600: 0-16.00 uint16_t getSuperSourceBorderInnerWidth() GetBorderWidthIn
18 uint8 Border Outer Softness 0-100: 0-100% uint8_t getSuperSourceBorderOuterSoftness() GetBorderSoftnessOut
19 uint8 Border Inner Softness 0-100: 0-100% uint8_t getSuperSourceBorderInnerSoftness() GetBorderSoftnessIn
20 uint8 Border Bevel Softness 0-100: 0.0-1.0 uint8_t getSuperSourceBorderBevelSoftness() GetBorderBevelSoftness
21 uint8 Border Bevel Position 0-100: 0.0-1.0 uint8_t getSuperSourceBorderBevelPosition() GetBorderBevelPosition
22-23 uint16 Border Hue 0-3599: 0-359.9 Degrees uint16_t getSuperSourceBorderHue() GetBorderHue
24-25 uint16 Border Saturation 0-1000: 0-100% uint16_t getSuperSourceBorderSaturation() GetBorderSaturation
26-27 uint16 Border Luma 0-1000: 0-100% uint16_t getSuperSourceBorderLuma() GetBorderLuma
28-29 uint16 Light Source Direction 0-3590: 0-359 Degrees uint16_t getSuperSourceLightSourceDirection() GetLightSourceDirection
30 uint8 Light Source Altitude 10-100: 10-100 uint8_t getSuperSourceLightSourceAltitude() GetLightSourceAltitude
31 (Unknown)
CSSc
(set)
36 bytes
Super Source
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherInputSuperSource
0-3 32 bits Set Mask Bit 0: Fill Source=On/Off
Bit 1: Key Source=On/Off
Bit 2: Foreground=On/Off
Bit 3: Pre Multiplied=On/Off
Bit 4: Clip=On/Off
Bit 5: Gain=On/Off
Bit 6: Invert=On/Off
Bit 7: Enabled=On/Off
Bit 8: Bevel=On/Off
Bit 9: Outer Width=On/Off
Bit 10: Inner Width=On/Off
Bit 11: Outer Softness=On/Off
Bit 12: Inner Softness=On/Off
Bit 13: Bevel Softness=On/Off
Bit 14: Bevel Pos=On/Off
Bit 15: Hue=On/Off
Bit 16: Saturation=On/Off
Bit 17: Luma=On/Off
Bit 18: Direction=On/Off
Bit 19: Altitude=On/Off
INDEX
4-5 VIDEOSRC Fill Source (See video source list) void setSuperSourceFillSource(uint16_t fillSource) SetInputFill
6-7 VIDEOSRC Key Source (See video source list) void setSuperSourceKeySource(uint16_t keySource) SetInputCut
8 1 bit Foreground Bit 0: On/Off void setSuperSourceForeground(bool foreground) SetArtOption
9 1 bit Pre Multiplied Bit 0: On/Off void setSuperSourcePreMultiplied(bool preMultiplied) SetPreMultiplied
10-11 uint16 Clip 0-1000: 0-100% void setSuperSourceClip(uint16_t clip) SetClip
12-13 uint16 Gain 0-1000: 0-100% void setSuperSourceGain(uint16_t gain) SetGain
14 1 bit Invert Key Bit 0: On/Off void setSuperSourceInvertKey(bool invertKey) SetInverse
15 1 bit Border Enabled Bit 0: On/Off void setSuperSourceBorderEnabled(bool borderEnabled) SetBorderEnabled
16 uint8 Border Bevel 0: No
1: In/Out
2: In
3: Out
void setSuperSourceBorderBevel(uint8_t borderBevel) SetBorderBevel
17 (Unknown)
18-19 uint16 Border Outer Width 0-1600: 0-16.00 void setSuperSourceBorderOuterWidth(uint16_t borderOuterWidth) SetBorderWidthOut
20-21 uint16 Border Inner Width 0-1600: 0-16.00 void setSuperSourceBorderInnerWidth(uint16_t borderInnerWidth) SetBorderWidthIn
22 uint8 Border Outer Softness 0-100: 0-100% void setSuperSourceBorderOuterSoftness(uint8_t borderOuterSoftness) SetBorderSoftnessOut
23 uint8 Border Inner Softness 0-100: 0-100% void setSuperSourceBorderInnerSoftness(uint8_t borderInnerSoftness) SetBorderSoftnessIn
24 uint8 Border Bevel Softness 0-100: 0.0-1.0 void setSuperSourceBorderBevelSoftness(uint8_t borderBevelSoftness) SetBorderBevelSoftness
25 uint8 Border Bevel Position 0-100: 0.0-1.0 void setSuperSourceBorderBevelPosition(uint8_t borderBevelPosition) SetBorderBevelPosition
26-27 uint16 Border Hue 0-3599: 0-359.9 Degrees void setSuperSourceBorderHue(uint16_t borderHue) SetBorderHue
28-29 uint16 Border Saturation 0-1000: 0-100% void setSuperSourceBorderSaturation(uint16_t borderSaturation) SetBorderSaturation
30-31 uint16 Border Luma 0-1000: 0-100% void setSuperSourceBorderLuma(uint16_t borderLuma) SetBorderLuma
32-33 uint16 Light Source Direction 0-3590: 0-359 Degrees void setSuperSourceLightSourceDirection(uint16_t lightSourceDirection) SetLightSourceDirection
34 uint8 Light Source Altitude 10-100: 10-100 void setSuperSourceLightSourceAltitude(uint8_t lightSourceAltitude) SetLightSourceAltitude
35 (Unknown)
SSBP
(get)
20 bytes
Super Source Box Parameters
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherSuperSourceBox
0 uint8 Box 0-3: Box 1-4 INDEX
1 1 bit Enabled Bit 0: On/Off bool getSuperSourceBoxParametersEnabled(uint8_t box) GetEnabled
2-3 VIDEOSRC Input Source (See video source list) uint16_t getSuperSourceBoxParametersInputSource(uint8_t box) GetInputSource
4-5 int16 Position X -4800-4800: -48.00-48.00 int getSuperSourceBoxParametersPositionX(uint8_t box) GetPositionX
6-7 int16 Position Y -2700-2700: -27.00-27.00 int getSuperSourceBoxParametersPositionY(uint8_t box) GetPositionY
8-9 uint16 Size 70-1000: 0.07-1.00 uint16_t getSuperSourceBoxParametersSize(uint8_t box) GetSize
10 1 bit Cropped Bit 0: On/Off bool getSuperSourceBoxParametersCropped(uint8_t box) GetCropped
11 (Unknown)
12-13 uint16 Crop Top 0-18000: 0.0-18.0 uint16_t getSuperSourceBoxParametersCropTop(uint8_t box) GetCropTop
14-15 uint16 Crop Bottom 0-18000: 0.0-18.0 uint16_t getSuperSourceBoxParametersCropBottom(uint8_t box) GetCropBottom
16-17 uint16 Crop Left 0-32000: 0.0-32.0 uint16_t getSuperSourceBoxParametersCropLeft(uint8_t box) GetCropLeft
18-19 uint16 Crop Right 0-32000: 0.0-32.0 uint16_t getSuperSourceBoxParametersCropRight(uint8_t box) GetCropRight
CSBP
(set)
24 bytes
Super Source Box Parameters
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherSuperSourceBox
0-1 10 bits Set Mask Bit 0: Enabled=On/Off
Bit 1: Input Source=On/Off
Bit 2: Position X=On/Off
Bit 3: Position Y=On/Off
Bit 4: Size=On/Off
Bit 5: Cropped=On/Off
Bit 6: Crop Top=On/Off
Bit 7: Crop Bottom=On/Off
Bit 8: Crop Left=On/Off
Bit 9: Crop Right=On/Off
INDEX
2 uint8 Box 0-3: Box 1-4 INDEX
3 1 bit Enabled Bit 0: On/Off void setSuperSourceBoxParametersEnabled(uint8_t box, bool enabled) SetEnabled
4-5 VIDEOSRC Input Source (See video source list) void setSuperSourceBoxParametersInputSource(uint8_t box, uint16_t inputSource) SetInputSource
6-7 int16 Position X -4800-4800: -48.00-48.00 void setSuperSourceBoxParametersPositionX(uint8_t box, int positionX) SetPositionX
8-9 int16 Position Y -2700-2700: -27.00-27.00 void setSuperSourceBoxParametersPositionY(uint8_t box, int positionY) SetPositionY
10-11 uint16 Size 70-1000: 0.07-1.00 void setSuperSourceBoxParametersSize(uint8_t box, uint16_t size) SetSize
12 1 bit Cropped Bit 0: On/Off void setSuperSourceBoxParametersCropped(uint8_t box, bool cropped) SetCropped
13 (Unknown)
14-15 uint16 Crop Top 0-18000: 0.0-18.0 void setSuperSourceBoxParametersCropTop(uint8_t box, uint16_t cropTop) SetCropTop
16-17 uint16 Crop Bottom 0-18000: 0.0-18.0 void setSuperSourceBoxParametersCropBottom(uint8_t box, uint16_t cropBottom) SetCropBottom
18-19 uint16 Crop Left 0-32000: 0.0-32.0 void setSuperSourceBoxParametersCropLeft(uint8_t box, uint16_t cropLeft) SetCropLeft
20-21 uint16 Crop Right 0-32000: 0.0-32.0 void setSuperSourceBoxParametersCropRight(uint8_t box, uint16_t cropRight) SetCropRight
22 (Unknown)
AMIP
(get)
16 bytes
Audio Mixer Input
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherAudioInput
0-1 AUDIOSRC Audio Source (See audio source list) INDEX
2 uint8 Type 0: External Video
1: Media Player
2: External Audio
uint8_t getAudioMixerInputType(uint16_t audioSource)
Only in ATEMmax, ATEMext
GetType
3-5 (Unknown)
6 1 bit From Media Player Bit 0: Yes/No bool getAudioMixerInputFromMediaPlayer(uint16_t audioSource)
Only in ATEMmax, ATEMext
7 uint8 Plug type 0: Internal
1: SDI
2: HDMI
3: Component
4: Composite
5: SVideo
32: XLR
64: AES/EBU
128: RCA
uint8_t getAudioMixerInputPlugtype(uint16_t audioSource)
Only in ATEMmax, ATEMext
8 uint8 Mix Option 0: Off
1: On
2: AFV
uint8_t getAudioMixerInputMixOption(uint16_t audioSource) GetMixOption
9 (Unknown)
10-11 uint16 Volume 0-65381: (DB) uint16_t getAudioMixerInputVolume(uint16_t audioSource) GetGain
12-13 int16 Balance -10000-10000: Left/Right Extremes int getAudioMixerInputBalance(uint16_t audioSource) GetBalance
14 (Unknown)
CAMI
(set)
12 bytes
Audio Mixer Input
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherAudioInput
0 4 bits Set Mask Bit 0: Mix Option=On/Off
Bit 1: Volume=On/Off
Bit 2: Balance=On/Off
INDEX
1 (Unknown)
2-3 AUDIOSRC Audio Source (See audio source list) INDEX
4 uint8 Mix Option 0: Off
1: On
2: AFV
void setAudioMixerInputMixOption(uint16_t audioSource, uint8_t mixOption) SetMixOption
5 (Unknown)
6-7 uint16 Volume 0-65381: (DB) void setAudioMixerInputVolume(uint16_t audioSource, uint16_t volume) SetGain
8-9 int16 Balance -10000-10000: Left/Right Extremes void setAudioMixerInputBalance(uint16_t audioSource, int balance) SetBalance
10 (Unknown)
AMMO
(get)
8 bytes
Audio Mixer Master
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherAudioMixer
0-1 uint16 Volume 0-65381: (DB) uint16_t getAudioMixerMasterVolume() GetProgramOutGain
2-7 (Unknown)
CAMM
(set)
8 bytes
Audio Mixer Master
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
IBMDSwitcherAudioMixer
0 1 bit Set Mask Bit 0: Volume=On/Off INDEX
1 (Unknown)
2-3 uint16 Volume 0-65381: (DB) void setAudioMixerMasterVolume(uint16_t volume) SetProgramOutGain
4-7 (Unknown)
AMmO
(get)
12 bytes
Audio Mixer Monitor
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherAudioMonitorOutput
0 1 bit Monitor Audio Bit 0: On/Off bool getAudioMixerMonitorMonitorAudio() GetMonitorEnable
1 (Unknown)
2-3 uint16 Volume 0-65381: (DB) uint16_t getAudioMixerMonitorVolume() GetGain
4 1 bit Mute Bit 0: On/Off bool getAudioMixerMonitorMute() GetMute
5 1 bit Solo Bit 0: On/Off bool getAudioMixerMonitorSolo() GetSolo
6-7 AUDIOSRC Solo Input (See audio source list) uint16_t getAudioMixerMonitorSoloInput() GetSoloInput
8 1 bit Dim Bit 0: On/Off bool getAudioMixerMonitorDim() GetDim
9-11 (Unknown)

CAMm
(set)
12 bytes
Audio Mixer Monitor
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherAudioMonitorOutput
0 6 bits Set Mask Bit 0: Monitor Audio=On/Off
Bit 1: Volume=On/Off
Bit 2: Mute=On/Off
Bit 3: Solo=On/Off
Bit 4: Solo Input=On/Off
Bit 5: Dim=On/Off
INDEX
1 1 bit Monitor Audio Bit 0: On/Off void setAudioMixerMonitorMonitorAudio(bool monitorAudio) SetMonitorEnable
2-3 uint16 Volume 0-65381: (DB) void setAudioMixerMonitorVolume(uint16_t volume) SetGain
4 1 bit Mute Bit 0: On/Off void setAudioMixerMonitorMute(bool mute) SetMute
5 1 bit Solo Bit 0: On/Off void setAudioMixerMonitorSolo(bool solo) SetSolo
6-7 AUDIOSRC Solo Input (See audio source list) void setAudioMixerMonitorSoloInput(uint16_t soloInput) SetSoloInput
8 1 bit Dim Bit 0: On/Off void setAudioMixerMonitorDim(bool dim) SetDim
9-11 (Unknown)

SALN
(set)
4 bytes
Audio Levels
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
0 1 bit Enable Bit 0: On/Off void setAudioLevelsEnable(bool enable) ??
1-3 (Unknown)

Sending this command will enable audio levels being sent some 10 times a second back to the client. Obviously this is a lot of traffic. Therefore this is also a subscription service from the ATEM and not the default. The ATEM Software Control enables/disables this function as you enter/leave the audio tab.

AMLv
(get)
-1 bytes
Audio Mixer Levels
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0-1 uint16 Sources 0-24: Number of uint16_t getAudioMixerLevelsSources()
2-3 uint16 Sources (again?) ?
4-7 int32 Master Left long getAudioMixerLevelsMasterLeft()
8-11 int32 Master Right long getAudioMixerLevelsMasterRight()
12-15 int32 Master Peak Left long getAudioMixerLevelsMasterPeakLeft()
16-19 int32 Master Peak Right long getAudioMixerLevelsMasterPeakRight()
20-23 int32 Monitor long getAudioMixerLevelsMonitor()
24-35 (Unknown)

Dark gray lines below are repeated a number of times given by the value of "Sources".

(2 bytes) uint16 Source Order uint16_t getAudioMixerLevelsSourceOrder(uint16_t sources)
(1 byte) (Unknown)

Dark gray lines below are repeated a number of times given by the value of "Sources".

(4 bytes) int32 Source Left long getAudioMixerLevelsSourceLeft(uint16_t sources)
(4 bytes) int32 Source Right long getAudioMixerLevelsSourceRight(uint16_t sources)
(4 bytes) int32 Source Peak Left long getAudioMixerLevelsSourcePeakLeft(uint16_t sources)
(4 bytes) int32 Source Peak Right long getAudioMixerLevelsSourcePeakRight(uint16_t sources)
RAMP
(set)
8 bytes
Reset Audio Mixer Peaks
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 3 bits Set Mask Bit 0: ?=On/Off
Bit 1: Inputs=On/Off
Bit 2: Master=On/Off
INDEX
1 (Unknown)
2-3 AUDIOSRC Input Source (See audio source list) void setResetAudioMixerPeaksInputSource(uint16_t inputSource)
4 1 bit Master Bit 0: Yes/No void setResetAudioMixerPeaksMaster(bool master)
5-7 (Unknown)
AMTl
(get)
-1 bytes
Audio Mixer Tally
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
IBMDSwitcherAudioInput
0-1 uint16 Sources 0-24: Number of uint16_t getAudioMixerTallySources()

Dark gray lines below are repeated a number of times given by the value of "Sources".

(2 bytes) AUDIOSRC Audio Source (See audio source list) uint16_t getAudioMixerTallyAudioSource(uint16_t sources)
(1 byte) 1 bit IsMixedIn Bit 0: On/Off bool getAudioMixerTallyIsMixedIn(uint16_t sources) IsMixedIn
TlIn
(get)
-1 bytes
Tally By Index
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd, ATEMmin
BMD API Method:
BMDSwitcherInputPropertyId
0-1 uint16 Sources 0-20: Number of uint16_t getTallyByIndexSources()

Dark gray lines below are repeated a number of times given by the value of "Sources".

(1 byte) 2 bits Tally Flags Bit 0: Program=On/Off
Bit 1: Preview=On/Off
uint8_t getTallyByIndexTallyFlags(uint16_t sources)
TlSr
(get)
-1 bytes
Tally By Source
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax
BMD API Method:
BMDSwitcherInputPropertyId
0-1 uint16 Sources 0-41: Number of uint16_t getTallyBySourceSources()

Dark gray lines below are repeated a number of times given by the value of "Sources".

(2 bytes) VIDEOSRC Video Source (See video source list) uint16_t getTallyBySourceVideoSource(uint16_t sources)
(1 byte) 2 bits Tally Flags Bit 0: Program=On/Off
Bit 1: Preview=On/Off
uint8_t getTallyBySourceTallyFlags(uint16_t sources)
Time
(get)
8 bytes
Last State Change Time Code
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext
BMD API Method:
0 uint8 Hour uint8_t getLastStateChangeTimeCodeHour()
1 uint8 Minute uint8_t getLastStateChangeTimeCodeMinute()
2 uint8 Second uint8_t getLastStateChangeTimeCodeSecond()
3 uint8 Frame uint8_t getLastStateChangeTimeCodeFrame()
4-7 (Unknown)
SRsv
(set)
4 bytes
Save Startup State
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
0-3 (Unknown)
SRcl
(set)
4 bytes
Clear Startup State
Byte# DataType: Description: Value Range Arduino API:
In ATEMmax, ATEMext, ATEMstd
BMD API Method:
0-3 (Unknown)

VIDEOSRC

Array
(
    [0] => Black
    [1] => Input 1
    [2] => Input 2
    [3] => Input 3
    [4] => Input 4
    [5] => Input 5
    [6] => Input 6
    [7] => Input 7
    [8] => Input 8
    [9] => Input 9
    [10] => Input 10
    [11] => Input 11
    [12] => Input 12
    [13] => Input 13
    [14] => Input 14
    [15] => Input 15
    [16] => Input 16
    [17] => Input 17
    [18] => Input 18
    [19] => Input 19
    [20] => Input 20
    [1000] => Color Bars
    [2001] => Color 1
    [2002] => Color 2
    [3010] => Media Player 1
    [3011] => Media Player 1 Key
    [3020] => Media Player 2
    [3021] => Media Player 2 Key
    [4010] => Key 1 Mask
    [4020] => Key 2 Mask
    [4030] => Key 3 Mask
    [4040] => Key 4 Mask
    [5010] => DSK 1 Mask
    [5020] => DSK 2 Mask
    [6000] => Super Source
    [7001] => Clean Feed 1
    [7002] => Clean Feed 2
    [8001] => Auxilary 1
    [8002] => Auxilary 2
    [8003] => Auxilary 3
    [8004] => Auxilary 4
    [8005] => Auxilary 5
    [8006] => Auxilary 6
    [10010] => ME 1 Prog
    [10011] => ME 1 Prev
    [10020] => ME 2 Prog
    [10021] => ME 2 Prev
)

AUDIOSRC

Array
(
    [1] => Input 1
    [2] => Input 2
    [3] => Input 3
    [4] => Input 4
    [5] => Input 5
    [6] => Input 6
    [7] => Input 7
    [8] => Input 8
    [9] => Input 9
    [10] => Input 10
    [11] => Input 11
    [12] => Input 12
    [13] => Input 13
    [14] => Input 14
    [15] => Input 15
    [16] => Input 16
    [17] => Input 17
    [18] => Input 18
    [19] => Input 19
    [20] => Input 20
    [1001] => XLR
    [1101] => AES/EBU
    [1201] => RCA
    [2001] => MP1
    [2002] => MP2
)