This parameter is used to retrieve all necessary information for Vision Controller to work properly.
| Data Type | DS_UNSIGNED_BYTE | PDL Size | Variable (See Protocolversion) |
| Cmd Class | CC_GET | Unit | UNITS_NONE |
| Prefix | PREFIX_NONE | Default | 0x00 |
| Min | 0x00 | Max | 0xFF |
| Description | „VISION“ | ||
GET Command 0xA000
Controller Incoming Command:
| (Port ID) | (Msg. Count) | (Sub-Device) | |
| 0x01-0xFF | 0x00 | 0x0000 (Root) or 0x0001-0x0200 | |
| (CC) | (PID) | (PDL) | |
| GET_COMMAND | VISION (0xA000) | 0x00 | |
| (PD) | |||
Controller Response:
| (Response Type) | (Msg. Count) | (Sub-Device) | |
| ACK | 0x00-0xFF | Copy of Controller SD | |
| (CC) | (PID) | (PDL) | |
| GET_COMMAND_RESPONSE | VISION (0xA000) | Variable (See Protocolversion) | |
| (PD) | |||
| Info Stream | |||
Info Streams:
| Info Stream Protocol Version 1 | ||||
|---|---|---|---|---|
| Index | DataType | Name | Description | Value Definitions |
| 0 | uint8_t | Protocol Version | Describes Protocol Version | 1: Version 1 |
| 1 | uint16_t | DeviceModelId | DeviceModelId from RDM DeviceInfo | |
| 3 | uint64_t | Serial | Serial Number from the fixture in defined Format. Be aware that RDM is Big Endian. | Must be a unique Serialnumber |
| 11 | uint8_t[4] | Vision Controller Firmware Version | Describes Vision Controller Version (iQ.Mesh). Therefore you can read the SPI register. | [Major,Minor,Patch,Release]Read them from SPI Register. If not available set to zero. This parameter is used only in order to read information over dmx interface. |
| 15 | uint8_t[4] | Vision Controller Bootloader Version | Describes Vision Controller Bootloader Version (iQ.Mesh)Therefore you can read the SPI register. | [Major,Minor,Patch,Release]Read them from SPI Register. If not available set to zero. This parameter is used only in order to read information over dmx interface. |
| 19 | uint8_t[4] | Fixture Firmware Version | Describes Fixture Version | [Major,Minor,Patch,Release] (Semantic Versioning) Every part is 8 bit and we have added a Release part to indicate if it is an relese Version or not. Release have to be 255 in order to be public available via the server. Otherwise the server will reject your software because it is only an developer Version. So you create up to 244 developer versions before doing the release Version with 255. |
| 23 | uint8_t[4] | Fixture Bootloader Version | Describes Fixture Bootloader Version | [Major,Minor,Patch,Release]If no bootloader is available set to zero. |
| 27 | uint8_t[8] | Vision Controller CPU ID | Describes CPU Id from Vision Controller (Vision)Therefore you can read the SPI register. | If not available set to zero. This parameter is used only in order to read information over dmx interface. |
| 35 | uint8_t[12] | Fixture Main CPU ID | Describes CPU Id from Fixture Main Controller | If not available set to zero. This parameter is used only in order to read information over dmx interface. |
| 47 | uint8_t | Battery | Battery state / Level Indicator Info | 1-100: Battery available (chargeable battery for fixture operation): 1 to 100 → State of charge in %0: No battery available 255: just a small battery for wakeup and configuration of the fixture if Power Supply State is 4 or 5: 0-100 is used as Level Indicator |
| 48 | uint8_t | Power Supply State | Power Supply State / Level Indicator State | 0: No Power (Battery wakeup) 1: Battery Powered 2: Grid Power Supply / AC Power Supply 3: Charging Battery (Not when small battery for configuration is used) If no battery but level indicator needed. For Example haze fluid level, set to one of the following: 4: Level indicator If indication for preperation needed. Like heat up, set it to: 5: Level indicator + Inpreperation |
| 49 | uint8_t | reserved | ||
| 50 | uint8_t | Selected Input Source | Describes selected input source | 0: Vision 1: DMX 2: CRMX / WDMX 3: Artnet 4: SACN 5: GLP DOP 6: IR Remote (Fixture) 7: Manual Mode 8: Auto Mode (Automatic Source Selection with Priority. Take a closer look chapter InputSource) 9 – 252: Reserved 253: Wireless (2.4 GHz) 254: Wireless (Other) 255: Ethernet |
| 51 | uint8_t | Selected Input State | Describes state of selected input source. If selected input source is “Vision”, then use Status register information from Vision to derive this value. | 0: Idle (DMX not available,..) 1: Unlinked (CRMX/Vision unlinked,..) 2: Linked (CRMX/Vision linked,..) 3: Active (DMX available, CRMX,..) 4: Active Vision(Vision Active or Master) |
| 52 | uint8_t | Selected Input Quality | Describes signal quality of input source | 0: No quality available 1-100: Quality in % |
| 53 | uint16_t | DMX StartAdress | DMX Startadress of the fixture | 1 – 512 (DMX Startaddress from fixture menu) |
| 55 | uint8_t | DMX Personality | DMX Personality of the fixture | 0: DMX Personality not available 1-255: DMX Personalities(DMX Personality from fixture menu) |
| 56 | uint16_t | DMX Footprint | DMX Channel count of the selected DMX Mode | (DMX Footprint from DMX Personality selected in fixture menu) |
| 58 | uint8_t | Error Count / Warning Count | Error Count of the fixture. | Bit 0-3: Error Count Bit 4-7: Warning Count In Wake Up mode the fixture should show the Error Count from the last session. |
| 59 | uint16_t | Supported Input Sources | Flags for supported input sources | Bit 0: Vision Bit 1: DMX Bit 2: CRMX / WDMX Bit 3: Artnet Bit 4: SACN Bit 5: GLP DOP Bit 6: IR Remote (Fixture) Bit 7: Manual Mode Bit 8: Auto Mode Bit 9 – 15: Reserved Another Source required? Contact us Take in mind that RDM is Big Endian! So it looks like this: [Bit 8-15],[Bit 0-7] |
| 61 | uint8_t | Feature: Sleep Mode | 0: NOT SUPPORTED 1: Supported | |
| 62 | uint8_t | Feature: Battery Shipping Mode | 0: NOT SUPPORTED 1: Supported | |
| 63 | uint8_t | Feature: Emergency Mode | 0: NOT SUPPORTED 1: Off2: On | |
| 64 | uint8_t | Feature: Battery RunTime Selection | 0: NOT SUPPORTED 1: Full Power 2 – 25: Runtime in (Hours +1) | |
| 65 | uint8_t | Feature: Anti-Theft-Mode | 0: NOT SUPPORTED 1: Inactive 2: Ready 3: Active (Alarm triggered) | |
Code Example
typedef enum
{
RDMIQSETTINGSCOMMAND_INPUTSOURCE = 1,
RDMIQSETTINGSCOMMAND_INPUTSTATE = 2,
RDMIQSETTINGSCOMMAND_DISPLAYPOPUP = 3,
RDMIQSETTINGSCOMMAND_EMERGENCYMODE = 4,
RDMIQSETTINGSCOMMAND_BATTERYRUNTIME = 5,
RDMIQSETTINGSCOMMAND_ANTITHEFTMODE = 6,
}rdm_iq_settings_command_t;
typedef enum
{
RDMIQINPUTSOURCE_IQMESH = 0,
RDMIQINPUTSOURCE_DMX = 1,
RDMIQINPUTSOURCE_CRMXWDMX = 2,
RDMIQINPUTSOURCE_ARTNET = 3,
RDMIQINPUTSOURCE_SACN = 4,
RDMIQINPUTSOURCE_GLPDOP = 5,
RDMIQINPUTSOURCE_IRREMOTE = 6,
RDMIQINPUTSOURCE_WIRELESS2_4GHZ = 253,
RDMIQINPUTSOURCE_WIRELESS2_OTHER = 254,
RDMIQINPUTSOURCE_ETHERNET = 255,
}rdm_iq_inputsource_t;
typedef enum
{
IQ_POWERSUPPLY_STATE_NOPOWER = 0, // No Power (Battery wakeup)
IQ_POWERSUPPLY_STATE_BATTERY_POWERED = 1,
IQ_POWERSUPPLY_STATE_GRID_POWERED = 2,
IQ_POWERSUPPLY_STATE_CHARGING = 3,
}rdm_iq_power_supply_state_t;
typedef enum
{
IQ_INPUTSTATE_IDLE = 0, // No Power (Battery wakeup)
IQ_INPUTSTATE_UNLINKED = 1,
IQ_INPUTSTATE_LINKED = 2,
IQ_INPUTSTATE_ACTIVE = 3,
}rdm_iq_input_state_t;
typedef struct __attribute__((__packed__))
{
uint8_t protocollVersion;
uint16_t deviceModelId;
uint64_t serial;
uint8_t iqControllerFirmware[4];
uint8_t iqControllerBootloaderFirmware[4];
uint8_t fixtureFirmware[4];
uint8_t fixtureBootloaderFirmware[4];
uint8_t iqControllerCpuId[8];
uint8_t fixtureMainCpuId[12];
uint8_t battery;
rdm_iq_power_supply_state_t powerSupplyState;
uint8_t reserved;
rdm_iq_inputsource_t inputSource;
rdm_iq_input_state_t inputState;
uint8_t inputQuality;
uint16_t dmxStartaddress;
uint8_t dmxPersonality;
uint16_t dmxFootprint;
uint8_t errorCount;
uint16_t supportedInputSource;
uint8_t reserved2;
uint8_t featureShippingMode;
uint8_t featureEmergency;
uint8_t featureRuntimeSelection;
uint8_t featureAntitheftMode;
}rdm_iq_get_response_t;
static void DecodeGetIq(rdm_message_header_t header, uint8_t * msg, uint16_t length)
{
rdm_answer_t implemented;
implemented.response = RDM_ACK;
implemented.reason = NR_UNKNOWN_PID;
rdm_iq_get_response_t response;
memset(&response,0,sizeof(response));
RdmExtGetIq(&implemented,&response);
if(implemented.response == RDM_ACK)
{
response.deviceModelId= __builtin_bswap16(response.deviceModelId);
response.serial = __builtin_bswap64(response.serial);
response.dmxStartaddress= __builtin_bswap16(response.dmxStartaddress);
response.dmxFootprint= __builtin_bswap16(response.dmxFootprint);
response.supportedInputSource= __builtin_bswap16(response.supportedInputSource);
SendResponse(header,(uint8_t*)&response,sizeof(response));
}
else
{
SendNackResponse(header, implemented.reason);
}
}
typedef enum
{
IQ_INPUTSTATE_UNLINK = 0,
IQ_INPUTSTATE_LINK = 1,
}rdm_iq_set_input_state_t;
typedef enum
{
RDMIQBATTERYRUNTIME_FULLOUTPUT = 0,
RDMIQBATTERYRUNTIME_1HOURS = 1,
RDMIQBATTERYRUNTIME_2HOURS = 2,
RDMIQBATTERYRUNTIME_3HOURS = 3,
RDMIQBATTERYRUNTIME_4HOURS = 4,
RDMIQBATTERYRUNTIME_5HOURS = 5,
RDMIQBATTERYRUNTIME_6HOURS = 6,
RDMIQBATTERYRUNTIME_7HOURS = 7,
RDMIQBATTERYRUNTIME_8HOURS = 8,
RDMIQBATTERYRUNTIME_9HOURS = 9,
RDMIQBATTERYRUNTIME_10HOURS = 10,
RDMIQBATTERYRUNTIME_11HOURS = 11,
RDMIQBATTERYRUNTIME_12HOURS = 12,
RDMIQBATTERYRUNTIME_13HOURS = 13,
RDMIQBATTERYRUNTIME_14HOURS = 14,
RDMIQBATTERYRUNTIME_15HOURS = 15,
RDMIQBATTERYRUNTIME_16HOURS = 16,
RDMIQBATTERYRUNTIME_17HOURS = 17,
RDMIQBATTERYRUNTIME_18HOURS = 18,
RDMIQBATTERYRUNTIME_19HOURS = 19,
RDMIQBATTERYRUNTIME_20HOURS = 20,
RDMIQBATTERYRUNTIME_21HOURS = 21,
RDMIQBATTERYRUNTIME_22HOURS = 22,
RDMIQBATTERYRUNTIME_23HOURS = 23,
RDMIQBATTERYRUNTIME_24HOURS = 24,
}rdm_iq_battery_runtime_t;
typedef enum
{
RDMIQANTITHEFT_ON,
RDMIQANTITHEFT_OFF,
RDMIQANTITHEFT_ALARM
}rdm_iq_antitheft_t;
typedef struct
{
uint8_t protocollVersion;
rdm_iq_settings_command_t command;
} rdm_iq_settings_stream_t;
static void DecodeSetIq(rdm_message_header_t header, uint8_t * msg, uint16_t length)
{
rdm_answer_t implemented;
implemented.response = RDM_ACK;
implemented.reason = NR_UNKNOWN_PID;
if(length >= sizeof(rdm_iq_settings_stream_t) + 1)
{
rdm_iq_settings_stream_t* stream = (rdm_iq_settings_stream_t*) msg;
switch(stream->command)
{
case RDMIQSETTINGSCOMMAND_INPUTSOURCE:
RdmExtSetIqInputSource(&implemented,*((rdm_iq_inputsource_t*) &msg[sizeof(rdm_iq_settings_stream_t)]));
break;
case RDMIQSETTINGSCOMMAND_INPUTSTATE:
RdmExtSetIqInputState(&implemented, *((rdm_iq_input_state_t*) &msg[sizeof(rdm_iq_settings_stream_t)]));
break;
case RDMIQSETTINGSCOMMAND_DISPLAYPOPUP:
RdmExtSetIqPopup(&implemented,*((rdm_iq_popup_t*) &msg[sizeof(rdm_iq_settings_stream_t)]) );
break;
case RDMIQSETTINGSCOMMAND_EMERGENCYMODE:
RdmExtSetIqEmergencyMode(&implemented,msg[sizeof(rdm_iq_settings_stream_t)] > 0);
break;
case RDMIQSETTINGSCOMMAND_BATTERYRUNTIME:
RdmExtSetIqBatteryRuntime(&implemented,*((rdm_iq_battery_runtime_t*)&msg[sizeof(rdm_iq_settings_stream_t)]));
break;
case RDMIQSETTINGSCOMMAND_ANTITHEFTMODE:
if(*((uint32_t*)&msg[sizeof(rdm_iq_settings_stream_t)]) == 583619)
{
RdmExtSetIqAntitheftMode(&implemented,RDMIQANTITHEFT_OFF);
}
else if(*((uint32_t*)&msg[sizeof(rdm_iq_settings_stream_t)]) == 204688)
{
RdmExtSetIqAntitheftMode(&implemented,RDMIQANTITHEFT_ON);
}
else if(*((uint32_t*)&msg[sizeof(rdm_iq_settings_stream_t)]) == 388165)
{
RdmExtSetIqAntitheftMode(&implemented,RDMIQANTITHEFT_ALARM);
}
else
{
implemented.response = RDM_NACK_REASON;
}
break;
default:
implemented.response = RDM_NACK_REASON;
break;
}
if(implemented.response == RDM_ACK)
{
uint8_t response = 0;
SendResponse(header,&response,1);
}
else
{
uint8_t response = 3; // 0 -Ok , 1 - Unknown Command , 2 Err Execution Command, 3 Unsupported command
SendResponse(header,&response,1);
}
}
else
{
SendNackResponse(header, NR_FORMAT_ERROR);
}
}
SET Command 0xA000
Controller Incoming Command:
| (Port ID) | (Msg. Count) | (Sub-Device) | |
| 0x01-0xFF | 0x00 | 0x0000 (Root) or 0x0001-0x0200 | |
| (CC) | (PID) | (PDL) | |
| SET_COMMAND | Vision (0xA000) | Variable(0-100) | |
| (PD) | |||
| Settings Stream | |||
Controller Response:
| (Response Type) | (Msg. Count) | (Sub-Device) | |
| ACK | 0x00-0xFF | Copy of Controller SD | |
| (CC) | (PID) | (PDL) | |
| SET_COMMAND_RESPONSE | Vision (0xA000) | 1 | |
| (PD) | |||
| uint8_t Status | 0 = OK, 1= Unknown Command, 2 = Error executing Command, 3 = Unsupported Command | |||
Settings Streams:
| Settings Stream Protocol Version 1 | ||||
|---|---|---|---|---|
| Index | DataType | Name | Description | Value Definitions |
| 0 | uint8_t | Protocol Version | Describes Protocol Version | 1: Version 1 |
| 1 | uint8_t | Command Identifier | Command | – |
| 2 | uint8_t[variable] | Data | Data depents on command | – |
| Command | Identifier | DataType | Description | Value Definitions |
|---|---|---|---|---|
| Set Input Source | 0x01 | uint8_t | 0: Vision, 1: DMX, 2: CRMX / WDMX, 3: Artnet, 4: SACN, 5: GLP DOP, 6: IR Remote (Fixture), 7: Manual Mode, 8: Auto Mode, 9 – 252: Reserved 253: Wireless (2.4 GHz) 254: Wireless (Other) 255: Ethernet Another Source required? Contact us | |
| Set Input Source State | 0x02 | uint8_t | 0: Unlink1: Link (trigger) | |
| Show Display Popup | 0x03 | uint8_t [var] | See Command Details | |
| Set Emergency Mode | 0x04 | uint8_t | Set emergency mode on supported fixtures | 0: Off 255: On |
| Set Battery RunTime Selection | 0x05 | uint8_t | Set battery runtime on supported fixtures | 0: Full Power 1 – 24: Runtime in Hours |
| Set Anti-Theft-Mode | 0x06 | uint32_t | Set anti-theft-mode on supported fixtures | 583619: Off 204688: On 388165: Alarm This Command should only be active via VISION and not via DMX RDM for security reasons |
| Set Shipping Mode | 0x07 | — | Set Shipping mode | 255: On |
Feature Emergency Mode
Emergency Mode can be enabled and disabled. This setting should be saved, so if the fixture looses power it remembers its state.
If the emergency mode is enabled, the fixture should light up with full output when there is no grid power available. If gridpower (AC) is available then it should behave as in normal operation.
Feature Battery Runtime Selection
Battery RunTime Selection can be enabled and disabled. This setting should be saved, so if the fixture looses power it remembers its state.
If enabled the fixture has to make sure that the battery runtime matches the selection. From minimum 1 hour up to 24 hours. This runtime is defined by a 100% charging state.
A well done implementation is to cut the maximum power output of the fixture. Just calculate the battery capacity, the energy consumption and dim down the light in order to keep the necessary runtime.
Feature Anti-Theft-Mode
Anti-Theft-Mode can be enabled, disabled and triggered. While Anti-Theft-Mode is enabled it should not be possible to turn off the fixture or using a user interface like a display. When Anti-Theft-Mode is triggered the fixture should signal an alarm using visual effects and or sound effects.
This feature can be fully implemented only if the fixture is battery powered. If this feature is active, all user interfaces should be locked. ( Menu locked, Button locked,..) The iQ.Controller has information about the current acceleration of the fixture. If that fixture is moved while in anti-theft-mode an alarm will be triggered.
- Use a dynamic colorpattern between red and blue
- Use your internal speaker as siren (optional)
Feature Shipping Mode
Shipping Mode can only be enabled.
If the shipping mode is enabled, the fixture should turn off and cuts off battery power. The fixture can only started again trough gridpower (AC), to ensure a seamless transport experince.