Vision RDM、Vision DMX 与 Vision DFU
处理 RDM
RDM 的接收和发送通过 READ_RDM 和 WRITE_RDM 完成。即使 Vision 不是当前选择的 input source,灯具也必须始终响应 RDM commands。
使用 RX_RDM_IRQ flag 检测新的 RDM frames。

处理 DMX
DMX 的接收和发送通过 READ_DMX 和 WRITE_DMX 完成。只要选择 Vision 作为 input source,就必须读取 DMX frames 并对其作出响应。
使用 RX_DMX_IRQ flag 检测新的 DMX frames。Maximum refresh rate 为 20 ms。
READ_DMX
该 function 必须用于读取 Vision 作为 selected input source 时的输入值。Data stream 定义如下:
| data[0] | data[1] | data[2] | data[3] | ... | data[512] |
|---|---|---|---|---|---|
| Vision Control Behavior | dmx[1] | dmx[2] | dmx[3] | ... | dmx[512] |
第一个 value 称为 Vision Control Behavior。它告诉灯具当前 Vision DMX frame 应按 DMX Control 处理,还是按 App Control 处理。注意:不要因此修改灯具内部保存的 settings,例如 display、RDM 或其他 protocols 使用的 DMX personality。
Vision Control Behavior == 0: DMX Control
当该 value 为 0 时,灯具的行为与普通 DMX stream 控制一致。使用灯具当前已选择的 DMX settings,例如 DMX start address、DMX personality 以及其他用户选择的 fixture settings。
Vision Control Behavior == 255: App Control
使用 DMX 章节中定义的 App Control behavior。此时使用固定 default settings,包括 DMX start address 1 和必需的 App Control DMX personality。例如使用固定的 color-mixing behavior(如 RGB),而不是根据用户 settings 在 RGB、RGBW、RGBL 或类似 modes 之间切换。同一类型的灯具在 App Control 中必须表现一致。不要改变 display 或其他 protocols 中保存的 settings。RDM 仍然必须报告灯具保存的 user settings。这些 defaults 只应用于当前 Vision DMX frame。
该 function 的目的,是让 app 可以在定义明确的状态下控制灯具,而不修改灯具本身保存的 settings。
Vision Control Behavior > 0 && Vision Control Behavior < 255: Legacy DMX Control for Vision DMX Adapter only
Values 1-254 是仅用于 Vision DMX Adapter 的 legacy behavior。它们仍然属于 DMX Control,但只对当前 Vision DMX frame 临时使用相同编号的 DMX Personality。不要修改灯具保存的 DMX personality。普通 app integration 应重点关注 0 = DMX Control 和 255 = App Control。
| Vision Control Behavior | Control behavior |
|---|---|
| 0 | DMX Control,使用灯具保存的 DMX settings |
| 1 | Legacy / Vision DMX Adapter only:仅当前 frame 使用 DMX Personality 1 的 DMX Control |
| 2 | Legacy / Vision DMX Adapter only:仅当前 frame 使用 DMX Personality 2 的 DMX Control |
| ... | ... |
| 255 | App Control,使用固定 App Control settings |

WRITE_DMX
即使 Vision 不是当前选择的 interface,也应使用该 function。将灯具的 DMX input 写入该 register。这可用于诊断 DMX input,或通过 Vision 传输 DMX frame。请根据 use case 和 controller load 选择合理 refresh rate,最大 refresh rate 为 20 ms。
处理 DFU
Device firmware update 仅通过 SPI transmission 定义。因此传输的数据本身没有进一步 specification,它是 raw byte stream。建议在文件或传输内容中实现 error checks。
Software update handling 通过 READ_DFU 和 WRITE_DFU functions 完成。必须使用以下 interrupt lines 推导状态:
- DFU_START_IRQ
- DFU_PACKET_IRQ
- DFU_STOP_IRQ
当触发 software update 时,DFU_START_IRQ 会变为 high。灯具必须准备接收 firmware,并返回以下 response 之一:
- 0x0: DFU_ACCEPT
- 0x1 - 0xFF: DFU_ABORT
灯具通过 WRITE_DFU function 发送 response。Response timeout 为 20 seconds。写入 response 后会 clear DFU_START_IRQ flag。接受 DFU 后,Vision Controller 开始发送 firmware packets。每个 packet 都有唯一 id,并向上计数。长度可变,最大 200 Byte,default length 为 128 Byte。packetNr 使用 Big Endian,不是 Little Endian。
| data[0] | data[1] | data[2] | data[3] | ... | data[202] |
|---|---|---|---|---|---|
| packetNr | packetNr | data[0] | dmx[1] | ... | dmx[200] |
读取 packet 后,下一个 packet 会自动传输,不需要额外 response。如果发生 error,可以通过写入大于 0 的 response(0x1 - 0xFF)提前 abort DFU。如果 30 seconds 内没有读取 packet,DFU 会 abort。收到最后一个 packet 后,DFU_STOP_IRQ flag 会变为 high,用于表示所有 packets 已传输完成,DFU transmission 已结束。此时灯具必须发送最后一个 response,response 应为以下之一:
- 0x0: DFU_SUCCESS
- 0x1: DFU_ERROR_FLASH_ERASE
- 0x2: DFU_ERROR_NOT_IN_PROGRESS
- 0x3: DFU_ERROR_CORRUPTED_HEADER
- 0x4: DFU_ERROR_CORRUPTED_IMAGE
- 0x5: DFU_ERROR_INVALID_IMAGE_VERSION
- 0x6: DFU_ERROR_NO_PREAMBLE
- 0x7: DFU_ERROR_INVALID_FIXTURE_ID
- 0x8: DFU_ERROR_UNKNOWN
- 0x9: DFU_ERROR_SIGNATURE_NECESSARY_NOT_FOUND
- 0x0A: DFU_ERROR_PACKET_TIMEOUT
- 0x0B - 0xFF: Reserved
