Vision 命令

最重要的 RDM Command。(Example 中仍可能命名为 CPID IQ)

该 parameter 用于读取 Vision Controller 正常工作所需的全部必要信息。

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 Version描述 protocol version1: Version 1
1uint16_tDeviceModelId来自 RDM DeviceInfo 的 DeviceModelId
3uint64_tSerialFixture serial number,使用定义 format。注意 RDM 是 Big Endian。必须是唯一 Serialnumber
11uint8_t[4]Vision Controller Firmware Version描述 Vision Controller Version。可从 SPI register 读取。[Major,Minor,Patch,Release]从 SPI Register 读取。如果不可用,设置为 zero。该 parameter 仅用于通过 DMX interface 读取 information。
15uint8_t[4]Vision Controller Bootloader Version描述 Vision Controller Bootloader Version。可从 SPI register 读取。[Major,Minor,Patch,Release]从 SPI Register 读取。如果不可用,设置为 zero。该 parameter 仅用于通过 DMX interface 读取 information。
19uint8_t[4]Fixture Firmware Version描述 Fixture Version[Major,Minor,Patch,Release](Semantic Versioning)。每个 part 为 8 bit,并额外添加 Release part,用于表示是否为 release version。Release 必须为 255,firmware 才能通过 server 公开可用。否则 server 会拒绝该 software,因为它只被视为 developer version。因此,在正式 release version 255 之前,可以创建最多 244 个 developer versions。
23uint8_t[4]Fixture Bootloader Version描述 Fixture Bootloader Version[Major,Minor,Patch,Release]如果没有 bootloader,设置为 zero。
27uint8_t[8]Vision Controller CPU ID描述 Vision Controller CPU ID。可从 SPI register 读取。如果不可用,设置为 zero。该 parameter 仅用于通过 DMX interface 读取 information。
35uint8_t[12]Fixture Main CPU ID描述 Fixture Main Controller CPU ID如果不可用,设置为 zero。该 parameter 仅用于通过 DMX interface 读取 information。
47uint8_tBatteryBattery state / Level Indicator Info1-100: Battery available(用于 fixture operation 的 chargeable battery),1 到 100 表示 state of charge in %
0: No battery available
255: 仅用于 wakeup 和 fixture configuration 的小 battery
如果 Power Supply State 为 4 或 5:0-100 用作 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(使用小 battery 仅做 configuration 时不适用)
如果没有 battery,但需要 level indicator,例如 haze fluid level,请使用:
4: Level indicator
如果需要表示 preparation,例如 heat up,请使用:
5: Level indicator + Inpreparation
49uint8_treserved
50uint8_tSelected Input Source描述 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。请参考 InputSource 章节)
9 - 252: Reserved
253: Wireless (2.4 GHz)
254: Wireless (Other)
255: Ethernet
51uint8_tSelected Input State描述 selected input source 的 state。如果 selected input source 为 Vision,请使用 Vision 的 Status register information 推导该 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 Quality描述 input source 的 signal quality0: No quality available
1-100: Quality in %
53uint16_tDMX StartAdressFixture 的 DMX Startaddress1 - 512(来自 fixture menu 的 DMX start address)
55uint8_tDMX PersonalityFixture 的 DMX Personality0: DMX Personality not available
1-255: DMX Personalities(来自 fixture menu 的 DMX Personality)
56uint16_tDMX FootprintSelected DMX Mode 的 DMX Channel count来自 fixture menu 中所选 DMX Personality 的 DMX Footprint
58uint8_tError Count / Warning CountFixture 的 Error CountBit 0-3: Error Count
Bit 4-7: Warning Count。Wake Up mode 中,fixture 应显示 last session 的 Error Count。
59uint16_tSupported Input SourcesSupported input sources 的 flagsBit 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
需要其他 source?请联系我们。
请记住 RDM 是 Big Endian。
所以数据顺序如下:
[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: Off
2: 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
{
  RDMVISIONSETTINGSCOMMAND_INPUTSOURCE = 1,
  RDMVISIONSETTINGSCOMMAND_INPUTSTATE = 2,
  RDMVISIONSETTINGSCOMMAND_DISPLAYPOPUP = 3,
  RDMVISIONSETTINGSCOMMAND_EMERGENCYMODE = 4,
  RDMVISIONSETTINGSCOMMAND_BATTERYRUNTIME = 5,
  RDMVISIONSETTINGSCOMMAND_ANTITHEFTMODE = 6,
}rdm_vision_settings_command_t;

typedef enum
{
  RDMVISIONINPUTSOURCE_VISION = 0,
  RDMVISIONINPUTSOURCE_DMX = 1,
  RDMVISIONINPUTSOURCE_CRMXWDMX = 2,
  RDMVISIONINPUTSOURCE_ARTNET = 3,
  RDMVISIONINPUTSOURCE_SACN = 4,
  RDMVISIONINPUTSOURCE_GLPDOP = 5,
  RDMVISIONINPUTSOURCE_IRREMOTE = 6,
  RDMVISIONINPUTSOURCE_WIRELESS2_4GHZ = 253,
  RDMVISIONINPUTSOURCE_WIRELESS2_OTHER = 254,
  RDMVISIONINPUTSOURCE_ETHERNET = 255,
}rdm_vision_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_vision_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_vision_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_vision_power_supply_state_t powerSupplyState;
  uint8_t reserved;
  rdm_vision_inputsource_t inputSource;
  rdm_vision_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_vision_get_response_t;

static void DecodeGetVision(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_vision_get_response_t response;
  memset(&response,0,sizeof(response));
  RdmExtGetVision(&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_vision_set_input_state_t;

typedef enum
{
  RDMVISIONBATTERYRUNTIME_FULLOUTPUT = 0,
  RDMVISIONBATTERYRUNTIME_1HOURS = 1,
  RDMVISIONBATTERYRUNTIME_2HOURS = 2,
  RDMVISIONBATTERYRUNTIME_3HOURS = 3,
  RDMVISIONBATTERYRUNTIME_4HOURS = 4,
  RDMVISIONBATTERYRUNTIME_5HOURS = 5,
  RDMVISIONBATTERYRUNTIME_6HOURS = 6,
  RDMVISIONBATTERYRUNTIME_7HOURS = 7,
  RDMVISIONBATTERYRUNTIME_8HOURS = 8,
  RDMVISIONBATTERYRUNTIME_9HOURS = 9,
  RDMVISIONBATTERYRUNTIME_10HOURS = 10,
  RDMVISIONBATTERYRUNTIME_11HOURS = 11,
  RDMVISIONBATTERYRUNTIME_12HOURS = 12,
  RDMVISIONBATTERYRUNTIME_13HOURS = 13,
  RDMVISIONBATTERYRUNTIME_14HOURS = 14,
  RDMVISIONBATTERYRUNTIME_15HOURS = 15,
  RDMVISIONBATTERYRUNTIME_16HOURS = 16,
  RDMVISIONBATTERYRUNTIME_17HOURS = 17,
  RDMVISIONBATTERYRUNTIME_18HOURS = 18,
  RDMVISIONBATTERYRUNTIME_19HOURS = 19,
  RDMVISIONBATTERYRUNTIME_20HOURS = 20,
  RDMVISIONBATTERYRUNTIME_21HOURS = 21,
  RDMVISIONBATTERYRUNTIME_22HOURS = 22,
  RDMVISIONBATTERYRUNTIME_23HOURS = 23,
  RDMVISIONBATTERYRUNTIME_24HOURS = 24,
}rdm_vision_battery_runtime_t;

typedef enum
{
  RDMVISIONANTITHEFT_ON,
  RDMVISIONANTITHEFT_OFF,
  RDMVISIONANTITHEFT_ALARM
}rdm_vision_antitheft_t;


typedef struct
{
   uint8_t protocollVersion;
   rdm_vision_settings_command_t command;
} rdm_vision_settings_stream_t;

static void DecodeSetVision(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_vision_settings_stream_t) + 1)
  {
    rdm_vision_settings_stream_t* stream = (rdm_vision_settings_stream_t*) msg;
    switch(stream->command)
    {
      case RDMVISIONSETTINGSCOMMAND_INPUTSOURCE:
      RdmExtSetVisionInputSource(&implemented,*((rdm_vision_inputsource_t*) &msg[sizeof(rdm_vision_settings_stream_t)]));
      break;
      case RDMVISIONSETTINGSCOMMAND_INPUTSTATE:
      RdmExtSetVisionInputState(&implemented, *((rdm_vision_input_state_t*) &msg[sizeof(rdm_vision_settings_stream_t)]));
      break;
      case RDMVISIONSETTINGSCOMMAND_DISPLAYPOPUP:
      RdmExtSetVisionPopup(&implemented,*((rdm_vision_popup_t*) &msg[sizeof(rdm_vision_settings_stream_t)]) );
      break;
      case RDMVISIONSETTINGSCOMMAND_EMERGENCYMODE:
      RdmExtSetVisionEmergencyMode(&implemented,msg[sizeof(rdm_vision_settings_stream_t)] > 0);
      break;
      case RDMVISIONSETTINGSCOMMAND_BATTERYRUNTIME:
      RdmExtSetVisionBatteryRuntime(&implemented,*((rdm_vision_battery_runtime_t*)&msg[sizeof(rdm_vision_settings_stream_t)]));
      break;
      case RDMVISIONSETTINGSCOMMAND_ANTITHEFTMODE:
		if(*((uint32_t*)&msg[sizeof(rdm_vision_settings_stream_t)]) == 583619)
		{
			 RdmExtSetVisionAntitheftMode(&implemented,RDMVISIONANTITHEFT_OFF);
		}
		else if(*((uint32_t*)&msg[sizeof(rdm_vision_settings_stream_t)]) == 204688)
		{
			 RdmExtSetVisionAntitheftMode(&implemented,RDMVISIONANTITHEFT_ON);
		}
		else if(*((uint32_t*)&msg[sizeof(rdm_vision_settings_stream_t)]) == 388165)
		{
			 RdmExtSetVisionAntitheftMode(&implemented,RDMVISIONANTITHEFT_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 Version描述 Protocol Version1: Version 1
1uint8_tCommand IdentifierCommand-
2uint8_t[variable]DataData 取决于 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
需要其他 Source?请联系我们。
Set Input Source State0x02uint8_t0: Unlink
1: Link (trigger)
Show Display Popup0x03uint8_t [var]See Command Details
Set Emergency Mode0x04uint8_t在 supported fixtures 上设置 emergency mode0: Off
255: On
Set Battery RunTime Selection0x05uint8_t在 supported fixtures 上设置 battery runtime0: Full Power
1 - 24: Runtime in Hours
Set Anti-Theft-Mode0x06uint32_t在 supported fixtures 上设置 anti-theft-mode583619: Off
204688: On
388165: Alarm
出于 security reasons,该 Command 应仅通过 Vision active,不应通过 DMX RDM active。
Set Shipping Mode0x07-Set Shipping mode255: On
Set Serial number0x08uint8_t[8]
uint64_t
Fixture Security Key
Serialnumber
Fixture Security Key 由 Vision Web Service 生成,可在 Fixture Settings Page 中找到。
Set Device Model ID / Fixture ID0x09uint8_t[8]
uint16_t
Fixture Key
DeviceModel/Fixture ID
Individual fixture key,可在 Fixture 的 RDM Libraries 下添加。
可使用 RDM Device Model ID 或 specific fixture id。

Feature: Emergency mode

Emergency Mode 可以 enabled 和 disabled。该 setting 应保存,因此 fixture 断电后仍能记住状态。

如果 emergency mode enabled,当没有 grid power available 时,fixture 应以 full output 点亮。如果 gridpower(AC)available,则应按 normal operation 行为工作。

Feature: Battery runtime selection

Battery RunTime Selection 可以 enabled 和 disabled。该 setting 应保存,因此 fixture 断电后仍能记住状态。

如果 enabled,fixture 必须确保 battery runtime 符合选择值,从 minimum 1 hour 到 24 hours。该 runtime 基于 100% charging state 定义。

良好的实现方式是限制 fixture 的 maximum power output。根据 battery capacity 和 energy consumption 计算需要的输出,并 dim down light,以保证所需 runtime。

Feature: Anti-theft mode

Anti-Theft-Mode 可以 enabled、disabled 和 triggered。启用 Anti-Theft-Mode 时,不应允许关闭 fixture,也不应允许使用 display 等 user interface。当 Anti-Theft-Mode 被 triggered 时,fixture 应通过 visual effects 和/或 sound effects 发出 alarm。

该 feature 只有在 fixture 为 battery powered 时才能完整实现。如果 feature active,所有 user interfaces 都应 locked(例如 menu locked、button locked 等)。Vision Controller 拥有 fixture 当前 acceleration information。如果 fixture 在 anti-theft-mode 下被移动,会触发 alarm。

  • 使用 red 和 blue 之间的 dynamic color pattern
  • 使用 internal speaker 作为 siren(optional)

Feature: Shipping mode

Shipping Mode 只能 enabled。

如果 shipping mode enabled,fixture 应关闭并 cut off battery power。Fixture 只能通过 gridpower(AC)再次启动,以确保 transport experience 更可靠。

设置 Serial number / Device Model ID

该 function 可用于向 fixture 写入 serial number 或 device model id。该 function 仅对 fixture owners 开放。

Fixture Security Key 由 Vision Web Service 生成,可在 Fixture Settings Page 中找到。

© KKT Künzler Technologies GbR.
Developed by KKT - Künzler Technologies GbR