Zum Inhalt springen
Progress Bar
54%

This parameter is used to retrieve all necessary information for Vision Controller to work properly.

Data TypeDS_UNSIGNED_BYTEPDL SizeVariable (See Protocolversion)
Cmd ClassCC_GETUnitUNITS_NONE
PrefixPREFIX_NONEDefault0x00
Min0x00Max0xFF
Description„VISION“

GET Command 0xA000

Controller Incoming Command:

(Port ID)(Msg. Count)(Sub-Device)
0x01-0xFF0x000x0000 (Root) or 0x0001-0x0200
(CC)(PID)(PDL)
GET_COMMANDVISION (0xA000)0x00
(PD)

Controller Response:

(Response Type)(Msg. Count)(Sub-Device)
ACK0x00-0xFFCopy of Controller SD
(CC)(PID)(PDL)
GET_COMMAND_RESPONSEVISION (0xA000)Variable (See Protocolversion)
(PD)
Info Stream

Info Streams:

Info Stream Protocol Version 1
IndexDataTypeNameDescriptionValue Definitions
0uint8_tProtocol VersionDescribes Protocol Version1: Version 1
1uint16_tDeviceModelIdDeviceModelId from RDM DeviceInfo
3uint64_tSerialSerial Number from the fixture in defined Format. Be aware that RDM is Big Endian.Must be a unique Serialnumber
11uint8_t[4]Vision Controller Firmware VersionDescribes 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.
15uint8_t[4]Vision Controller Bootloader VersionDescribes 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.
19uint8_t[4]Fixture Firmware VersionDescribes 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.
23uint8_t[4]Fixture Bootloader VersionDescribes Fixture Bootloader Version  [Major,Minor,Patch,Release]If no bootloader is available set to zero.
27uint8_t[8]Vision Controller CPU IDDescribes 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.
35uint8_t[12]Fixture Main CPU IDDescribes CPU Id from Fixture Main ControllerIf not available set to zero. This parameter is used only in order to read information over dmx interface.
47uint8_tBatteryBattery state / Level Indicator Info1-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
48uint8_tPower Supply StatePower Supply State / Level Indicator State0: 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
49uint8_treserved
50uint8_tSelected Input SourceDescribes selected input source0: 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
51uint8_tSelected Input StateDescribes 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)
52uint8_tSelected Input QualityDescribes signal quality of input source0: No quality available 1-100: Quality in %
53uint16_tDMX StartAdressDMX Startadress of the fixture 1 – 512 (DMX Startaddress from fixture menu)
55uint8_tDMX PersonalityDMX Personality of the fixture0: DMX Personality not available 1-255: DMX Personalities(DMX Personality from fixture menu)
56uint16_tDMX FootprintDMX Channel count of the selected DMX Mode (DMX Footprint from DMX Personality selected in fixture menu)
58uint8_tError Count / Warning CountError 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.
59uint16_tSupported Input SourcesFlags for supported input sourcesBit 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]
61uint8_tFeature: Sleep Mode0: NOT SUPPORTED 1: Supported
62uint8_tFeature: Battery Shipping Mode0: NOT SUPPORTED 1: Supported
63uint8_tFeature: Emergency Mode0: NOT SUPPORTED 1: Off2: On
64uint8_tFeature: Battery RunTime Selection0: NOT SUPPORTED 1: Full Power 2 – 25: Runtime in (Hours +1)
65uint8_tFeature: Anti-Theft-Mode0: 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-0xFF0x000x0000 (Root) or 0x0001-0x0200
(CC)(PID)(PDL)
SET_COMMANDVision (0xA000)Variable(0-100)
(PD)
Settings Stream

Controller Response:

(Response Type)(Msg. Count)(Sub-Device)
ACK0x00-0xFFCopy of Controller SD
(CC)(PID)(PDL)
SET_COMMAND_RESPONSEVision (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
IndexDataTypeNameDescriptionValue Definitions
0uint8_tProtocol VersionDescribes Protocol Version1: Version 1
1uint8_tCommand IdentifierCommand
2uint8_t[variable]DataData depents on command
CommandIdentifierDataTypeDescriptionValue Definitions
Set Input Source0x01uint8_t0: 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 State0x02uint8_t0: Unlink1: Link (trigger)
Show Display Popup0x03uint8_t [var]See Command Details
Set Emergency Mode0x04uint8_tSet emergency mode on supported fixtures0: Off 255: On
Set Battery RunTime Selection0x05uint8_tSet battery runtime on supported fixtures0: Full Power 1 – 24: Runtime in Hours
Set Anti-Theft-Mode0x06uint32_tSet anti-theft-mode on supported fixtures583619: Off
204688: On
388165: Alarm
This Command should only be active via VISION and not via DMX RDM for security reasons
Set Shipping Mode0x07Set Shipping mode255: 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.