From 386d49865d2eee97e24a2ce2ea31146e9ed2c5ce Mon Sep 17 00:00:00 2001 From: Bit-Dong <105295668+Bit-Dong@users.noreply.github.com> Date: Wed, 6 Aug 2025 16:53:23 +0800 Subject: [PATCH] Add SIYI ESC extension message Added vendor-specific extensions for SIYI ESC products: Dynamic frequency control for data reporting, log reading, throttle source arbitration, self-checking, etc. Path:DSDL/uavcan/equipment/esc/siyi/ --- .../200.SIYI_ESC_DataUploadFreq_Set.uavcan | 22 +++++++++++++++++++ .../siyi/20000.SIYI_ESC_NodeHeartbeat.uavcan | 21 ++++++++++++++++++ .../siyi/20001.SIYI_ESC_DataUploadMSG1.uavcan | 7 ++++++ .../siyi/20002.SIYI_ESC_DataUploadMSG2.uavcan | 20 +++++++++++++++++ .../20050.SIYI_ESC_DataUploadSwitch.uavcan | 4 ++++ .../esc/siyi/201.SIYI_ESC_ID_Set.uavcan | 4 ++++ .../esc/siyi/20100.SIYI_ESC_ID_Get.uavcan | 1 + .../esc/siyi/20101.SIYI_ESC_ID_Get_Res.uavcan | 2 ++ ...20150.SIYI_ESC_CAN_Throttle_Command.uavcan | 6 +++++ .../esc/siyi/202.SIYI_ESC_LED_ID_Set.uavcan | 9 ++++++++ .../siyi/203.SIYI_ESC_ThrottleSrc_Set.uavcan | 6 +++++ .../esc/siyi/215.SIYI_ESC_LED_ID_Get.uavcan | 4 ++++ .../siyi/216.SIYI_ESC_ThrottleSrc_Get.uavcan | 3 +++ .../217.SIYI_ESC_SelfCheckStatus_Get.uavcan | 3 +++ .../siyi/218.SIYI_ESC_FaultRecord_Get.uavcan | 16 ++++++++++++++ .../219.SIYI_ESC_FaultDataStart_Get.uavcan | 18 +++++++++++++++ .../220.SIYI_ESC_FaultDataTransfer_Get.uavcan | 6 +++++ .../siyi/221.SIYI_ESC_FaultDataEnd_Get.uavcan | 8 +++++++ .../230.SIYI_ESC_MajorBoardInfo_Get.uavcan | 7 ++++++ .../siyi/231.SIYI_ESC_SystemTime_Get.uavcan | 4 ++++ .../240.SIYI_ESC_FirmwareUpgrade_Start.uavcan | 8 +++++++ .../241.SIYI_ESC_FirmwareUpgrade_Data.uavcan | 12 ++++++++++ .../242.SIYI_ESC_FirmwareUpgrade_End.uavcan | 7 ++++++ 23 files changed, 198 insertions(+) create mode 100644 uavcan/equipment/esc/siyi/200.SIYI_ESC_DataUploadFreq_Set.uavcan create mode 100644 uavcan/equipment/esc/siyi/20000.SIYI_ESC_NodeHeartbeat.uavcan create mode 100644 uavcan/equipment/esc/siyi/20001.SIYI_ESC_DataUploadMSG1.uavcan create mode 100644 uavcan/equipment/esc/siyi/20002.SIYI_ESC_DataUploadMSG2.uavcan create mode 100644 uavcan/equipment/esc/siyi/20050.SIYI_ESC_DataUploadSwitch.uavcan create mode 100644 uavcan/equipment/esc/siyi/201.SIYI_ESC_ID_Set.uavcan create mode 100644 uavcan/equipment/esc/siyi/20100.SIYI_ESC_ID_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/20101.SIYI_ESC_ID_Get_Res.uavcan create mode 100644 uavcan/equipment/esc/siyi/20150.SIYI_ESC_CAN_Throttle_Command.uavcan create mode 100644 uavcan/equipment/esc/siyi/202.SIYI_ESC_LED_ID_Set.uavcan create mode 100644 uavcan/equipment/esc/siyi/203.SIYI_ESC_ThrottleSrc_Set.uavcan create mode 100644 uavcan/equipment/esc/siyi/215.SIYI_ESC_LED_ID_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/216.SIYI_ESC_ThrottleSrc_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/217.SIYI_ESC_SelfCheckStatus_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/218.SIYI_ESC_FaultRecord_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/219.SIYI_ESC_FaultDataStart_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/220.SIYI_ESC_FaultDataTransfer_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/221.SIYI_ESC_FaultDataEnd_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/230.SIYI_ESC_MajorBoardInfo_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/231.SIYI_ESC_SystemTime_Get.uavcan create mode 100644 uavcan/equipment/esc/siyi/240.SIYI_ESC_FirmwareUpgrade_Start.uavcan create mode 100644 uavcan/equipment/esc/siyi/241.SIYI_ESC_FirmwareUpgrade_Data.uavcan create mode 100644 uavcan/equipment/esc/siyi/242.SIYI_ESC_FirmwareUpgrade_End.uavcan diff --git a/uavcan/equipment/esc/siyi/200.SIYI_ESC_DataUploadFreq_Set.uavcan b/uavcan/equipment/esc/siyi/200.SIYI_ESC_DataUploadFreq_Set.uavcan new file mode 100644 index 0000000..a8414cc --- /dev/null +++ b/uavcan/equipment/esc/siyi/200.SIYI_ESC_DataUploadFreq_Set.uavcan @@ -0,0 +1,22 @@ +uint8 MSG_ID_ALL = 0 # Control all message types +uint8 MSG_ID_1 = 1 # Corresponds to original msg1 +uint8 MSG_ID_2 = 2 # Corresponds to original msg2 +uint8 FREQ_DISABLE = 0 # Disable reporting +uint8 FREQ_1HZ = 1 # 1Hz +uint8 FREQ_10HZ = 2 # 10Hz +uint8 FREQ_20HZ = 3 # 20Hz +uint8 FREQ_50HZ = 4 # 50Hz +uint8 FREQ_100HZ = 5 # 100Hz +uint8 FREQ_200HZ = 6 # 200Hz +uint8 FREQ_250HZ = 7 # 250Hz +uint8 FREQ_500HZ = 8 # 500Hz +uint8 FREQ_MAX = 9 # Upper limit for validation + + +uint8 msg_id # Target message ID (MSG_ID_* enum) +uint8 frequency # Reporting frequency (FREQ_* enum) +--- +uint8 RESPONSE_OK = 0x00 +uint8 RESPONSE_ERROR = 0x01 + +uint8 result # Operation result (RESPONSE_* enum values) \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/20000.SIYI_ESC_NodeHeartbeat.uavcan b/uavcan/equipment/esc/siyi/20000.SIYI_ESC_NodeHeartbeat.uavcan new file mode 100644 index 0000000..8d79b03 --- /dev/null +++ b/uavcan/equipment/esc/siyi/20000.SIYI_ESC_NodeHeartbeat.uavcan @@ -0,0 +1,21 @@ +uint8 HEALTH_OK = 0 +uint8 HEALTH_WARNING = 1 +uint8 HEALTH_ERROR = 2 + +uint8 MODE_INIT = 0 +uint8 MODE_SELFCHECKING = 1 +uint8 MODE_STANDBY = 2 +uint8 MODE_RUNNING = 3 +uint8 MODE_FAULT = 4 + +uint8 SIYI_ESC_D6 = 0 +uint8 SIYI_ESC_E3 = 1 +uint8 SIYI_ESC_E6 = 2 +uint8 SIYI_ESC_E8 = 3 + +uint32 timestamp +uint8 health # Health status (HEALTH_* constants) +uint8 mode # Operation mode (MODE_* constants) +uint8 esc_id +uint8 esc_model # Product model (SIYI_ESC_* constants) +uint8[<=24] vendor_info diff --git a/uavcan/equipment/esc/siyi/20001.SIYI_ESC_DataUploadMSG1.uavcan b/uavcan/equipment/esc/siyi/20001.SIYI_ESC_DataUploadMSG1.uavcan new file mode 100644 index 0000000..1eeefad --- /dev/null +++ b/uavcan/equipment/esc/siyi/20001.SIYI_ESC_DataUploadMSG1.uavcan @@ -0,0 +1,7 @@ +uint16 motor_speed +uint16 pulse_width +uint16 bus_voltage +uint16 bus_current +uint8 esc_temp +uint8 cap_temp + diff --git a/uavcan/equipment/esc/siyi/20002.SIYI_ESC_DataUploadMSG2.uavcan b/uavcan/equipment/esc/siyi/20002.SIYI_ESC_DataUploadMSG2.uavcan new file mode 100644 index 0000000..0783386 --- /dev/null +++ b/uavcan/equipment/esc/siyi/20002.SIYI_ESC_DataUploadMSG2.uavcan @@ -0,0 +1,20 @@ +uint8 THROTTLE_SRC_RC = 0 # RC receiver input +uint8 THROTTLE_SRC_PWM = 1 # Direct PWM input +uint8 THROTTLE_SRC_CAN = 2 # CAN bus command + +uint16 ESC_STATUS_FAULT_VOLTAGE_UNDER = 0x0001 +uint16 ESC_STATUS_FAULT_VOLTAGE_OVER = 0x0002 +uint16 ESC_STATUS_FAULT_OPAMP_ABNORMAL = 0x0004 +uint16 ESC_STATUS_FAULT_MOS_SHORT = 0x0008 +uint16 ESC_STATUS_FAULT_MOTOR_PHASE_LOSS = 0x0010 +uint16 ESC_STATUS_FAULT_THROTTLE_LOSS = 0x0020 +uint16 ESC_STATUS_FAULT_THROTTLE_NOT_ZERO = 0x0040 +uint16 ESC_STATUS_FAULT_LOCK_ROTOR = 0x0080 +uint16 ESC_STATUS_FAULT_OVER_TEMP_ESC = 0x0100 +uint16 ESC_STATUS_FAULT_OVER_TEMP_CAP = 0x0200 +uint16 ESC_STATUS_FAULT_POWER_SATIATE = 0x0400 +uint16 ESC_STATUS_FAULT_OVER_CURRENT = 0x0800 + +uint8 throttle_src # Throttle source (THROTTLE_SRC_* constants) +uint16 esc_status # ESC status (bitmask,ESC_STATUS_* constants) +uint32 motor_running_time \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/20050.SIYI_ESC_DataUploadSwitch.uavcan b/uavcan/equipment/esc/siyi/20050.SIYI_ESC_DataUploadSwitch.uavcan new file mode 100644 index 0000000..0a42fc3 --- /dev/null +++ b/uavcan/equipment/esc/siyi/20050.SIYI_ESC_DataUploadSwitch.uavcan @@ -0,0 +1,4 @@ +uint8 DATA_UPLOAD_OFF = 0 +uint8 DATA_UPLOAD_ON = 1 + +uint8 status \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/201.SIYI_ESC_ID_Set.uavcan b/uavcan/equipment/esc/siyi/201.SIYI_ESC_ID_Set.uavcan new file mode 100644 index 0000000..6ba6e89 --- /dev/null +++ b/uavcan/equipment/esc/siyi/201.SIYI_ESC_ID_Set.uavcan @@ -0,0 +1,4 @@ +uint8 new_can_id +uint8 new_throttle_id +--- +uint8 result \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/20100.SIYI_ESC_ID_Get.uavcan b/uavcan/equipment/esc/siyi/20100.SIYI_ESC_ID_Get.uavcan new file mode 100644 index 0000000..1b0fb4d --- /dev/null +++ b/uavcan/equipment/esc/siyi/20100.SIYI_ESC_ID_Get.uavcan @@ -0,0 +1 @@ +uint8 request \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/20101.SIYI_ESC_ID_Get_Res.uavcan b/uavcan/equipment/esc/siyi/20101.SIYI_ESC_ID_Get_Res.uavcan new file mode 100644 index 0000000..7b1c173 --- /dev/null +++ b/uavcan/equipment/esc/siyi/20101.SIYI_ESC_ID_Get_Res.uavcan @@ -0,0 +1,2 @@ +uint8 node_id +uint8 throttle_id \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/20150.SIYI_ESC_CAN_Throttle_Command.uavcan b/uavcan/equipment/esc/siyi/20150.SIYI_ESC_CAN_Throttle_Command.uavcan new file mode 100644 index 0000000..93550fe --- /dev/null +++ b/uavcan/equipment/esc/siyi/20150.SIYI_ESC_CAN_Throttle_Command.uavcan @@ -0,0 +1,6 @@ +uint8 THROTTLE_RAW = 0 +uint8 THROTTLE_PERCENT = 1 +uint8 THROTTLE_PWM = 2 + +uint8 control_mode # Control mode (THROTTLE_* enum) +uint14[<=24] throttle_data \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/202.SIYI_ESC_LED_ID_Set.uavcan b/uavcan/equipment/esc/siyi/202.SIYI_ESC_LED_ID_Set.uavcan new file mode 100644 index 0000000..bf80625 --- /dev/null +++ b/uavcan/equipment/esc/siyi/202.SIYI_ESC_LED_ID_Set.uavcan @@ -0,0 +1,9 @@ +uint8 LED_COLOR_RED = 0 # Red +uint8 LED_COLOR_GREEN = 1 # Green +uint8 LED_COLOR_BLUE = 2 # Blue +uint8 LED_COLOR_OFF = 3 # LED Off + +uint8 led_color # Target color (must use LED_COLOR_* enum) +uint8 brightness # Brightness level (0-100%, 0=minimum, 100=maximum) +--- +uint8 result \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/203.SIYI_ESC_ThrottleSrc_Set.uavcan b/uavcan/equipment/esc/siyi/203.SIYI_ESC_ThrottleSrc_Set.uavcan new file mode 100644 index 0000000..7249937 --- /dev/null +++ b/uavcan/equipment/esc/siyi/203.SIYI_ESC_ThrottleSrc_Set.uavcan @@ -0,0 +1,6 @@ +uint8 THROTTLE_SRC_PWM = 0 +uint8 THROTTLE_SRC_CAN = 1 + +uint8 throttle_src #source selection (THROTTLE_SRC_* enum) +--- +uint8 result \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/215.SIYI_ESC_LED_ID_Get.uavcan b/uavcan/equipment/esc/siyi/215.SIYI_ESC_LED_ID_Get.uavcan new file mode 100644 index 0000000..a555a6d --- /dev/null +++ b/uavcan/equipment/esc/siyi/215.SIYI_ESC_LED_ID_Get.uavcan @@ -0,0 +1,4 @@ +uint8 request +--- +uint8 current_color +uint8 current_brightness \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/216.SIYI_ESC_ThrottleSrc_Get.uavcan b/uavcan/equipment/esc/siyi/216.SIYI_ESC_ThrottleSrc_Get.uavcan new file mode 100644 index 0000000..148b69b --- /dev/null +++ b/uavcan/equipment/esc/siyi/216.SIYI_ESC_ThrottleSrc_Get.uavcan @@ -0,0 +1,3 @@ +uint8 request +--- +uint8 throttle_src \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/217.SIYI_ESC_SelfCheckStatus_Get.uavcan b/uavcan/equipment/esc/siyi/217.SIYI_ESC_SelfCheckStatus_Get.uavcan new file mode 100644 index 0000000..e23a805 --- /dev/null +++ b/uavcan/equipment/esc/siyi/217.SIYI_ESC_SelfCheckStatus_Get.uavcan @@ -0,0 +1,3 @@ +uint8 request +--- +uint8 status \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/218.SIYI_ESC_FaultRecord_Get.uavcan b/uavcan/equipment/esc/siyi/218.SIYI_ESC_FaultRecord_Get.uavcan new file mode 100644 index 0000000..76ac22c --- /dev/null +++ b/uavcan/equipment/esc/siyi/218.SIYI_ESC_FaultRecord_Get.uavcan @@ -0,0 +1,16 @@ +uint8 request +--- +uint16 ESC_FAULT_VOLTAGE_UNDER = 0 +uint16 ESC_FAULT_VOLTAGE_OVER = 1 +uint16 ESC_FAULT_OPAMP_ABNORMAL = 2 +uint16 ESC_FAULT_MOS_SHORT = 3 +uint16 ESC_FAULT_MOTOR_PHASE_LOSS = 4 +uint16 ESC_FAULT_THROTTLE_LOSS = 5 +uint16 ESC_FAULT_THROTTLE_NOT_ZERO = 6 +uint16 ESC_FAULT_LOCK_ROTOR = 7 +uint16 ESC_FAULT_OVER_TEMP_MOS = 8 +uint16 ESC_FAULT_OVER_TEMP_CAP = 9 +uint16 ESC_FAULT_OVER_CURRENT = 10 + +uint16[<=24] accum_times +uint32[<=24] last_times diff --git a/uavcan/equipment/esc/siyi/219.SIYI_ESC_FaultDataStart_Get.uavcan b/uavcan/equipment/esc/siyi/219.SIYI_ESC_FaultDataStart_Get.uavcan new file mode 100644 index 0000000..9660ffb --- /dev/null +++ b/uavcan/equipment/esc/siyi/219.SIYI_ESC_FaultDataStart_Get.uavcan @@ -0,0 +1,18 @@ +uint8 ESC_FAULT_TYPE_UNDER_VOLTAGE = 0 +uint8 ESC_FAULT_TYPE_OVER_VOLTAGE = 1 +uint8 ESC_FAULT_TYPE_OPAMP_ABNORMAL = 2 +uint8 ESC_FAULT_TYPE_MOS_SHORT = 3 +uint8 ESC_FAULT_TYPE_MOTOR_PHASE_LOSS = 4 +uint8 ESC_FAULT_TYPE_THROTTLE_LOSS = 5 +uint8 ESC_FAULT_TYPE_THROTTLE_NOT_ZERO = 6 +uint8 ESC_FAULT_TYPE_LOCK_ROTOR = 7 +uint8 ESC_FAULT_TYPE_OVER_TEMP_MOS = 8 +uint8 ESC_FAULT_TYPE_OVER_TEMP_CAP = 9 +uint8 ESC_FAULT_TYPE_OVER_CURRENT = 10 + +uint8 fault_type +--- +uint32 file_size +uint32 recent_poweron_times +uint16 block_size + diff --git a/uavcan/equipment/esc/siyi/220.SIYI_ESC_FaultDataTransfer_Get.uavcan b/uavcan/equipment/esc/siyi/220.SIYI_ESC_FaultDataTransfer_Get.uavcan new file mode 100644 index 0000000..526066e --- /dev/null +++ b/uavcan/equipment/esc/siyi/220.SIYI_ESC_FaultDataTransfer_Get.uavcan @@ -0,0 +1,6 @@ +uint16 block_idx +--- +uint8[<=128] fault +uint16 block_idx + + diff --git a/uavcan/equipment/esc/siyi/221.SIYI_ESC_FaultDataEnd_Get.uavcan b/uavcan/equipment/esc/siyi/221.SIYI_ESC_FaultDataEnd_Get.uavcan new file mode 100644 index 0000000..5dd46c8 --- /dev/null +++ b/uavcan/equipment/esc/siyi/221.SIYI_ESC_FaultDataEnd_Get.uavcan @@ -0,0 +1,8 @@ +uint8 ESC_FAULT_DATA_TRANSFER_OK = 0 +uint8 ESC_FAULT_DATA_TRANSFER_ERROR = 1 + +uint32 total_transfer_size +uint8 transfer_status +--- +uint8 respond + diff --git a/uavcan/equipment/esc/siyi/230.SIYI_ESC_MajorBoardInfo_Get.uavcan b/uavcan/equipment/esc/siyi/230.SIYI_ESC_MajorBoardInfo_Get.uavcan new file mode 100644 index 0000000..12ef549 --- /dev/null +++ b/uavcan/equipment/esc/siyi/230.SIYI_ESC_MajorBoardInfo_Get.uavcan @@ -0,0 +1,7 @@ +uint8 request +--- +uint8[<=12] hardware_id +uint8[<=4] firmware_version +uint8[<=4] hw_version +uint8[<=4] protocol_version +uint8[<=24] reserved \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/231.SIYI_ESC_SystemTime_Get.uavcan b/uavcan/equipment/esc/siyi/231.SIYI_ESC_SystemTime_Get.uavcan new file mode 100644 index 0000000..882b138 --- /dev/null +++ b/uavcan/equipment/esc/siyi/231.SIYI_ESC_SystemTime_Get.uavcan @@ -0,0 +1,4 @@ +uint8 request +--- +uint32 total_system_time +uint32 total_motor_time \ No newline at end of file diff --git a/uavcan/equipment/esc/siyi/240.SIYI_ESC_FirmwareUpgrade_Start.uavcan b/uavcan/equipment/esc/siyi/240.SIYI_ESC_FirmwareUpgrade_Start.uavcan new file mode 100644 index 0000000..3b5cd85 --- /dev/null +++ b/uavcan/equipment/esc/siyi/240.SIYI_ESC_FirmwareUpgrade_Start.uavcan @@ -0,0 +1,8 @@ +uint32 file_size +--- +uint8 ESC_FIRMWARE_UPGRADE_START_OK = 0 +uint8 ESC_FIRMWARE_UPGRADE_START_ERROR = 1 +uint8 status +uint16 block_size + + diff --git a/uavcan/equipment/esc/siyi/241.SIYI_ESC_FirmwareUpgrade_Data.uavcan b/uavcan/equipment/esc/siyi/241.SIYI_ESC_FirmwareUpgrade_Data.uavcan new file mode 100644 index 0000000..dc55376 --- /dev/null +++ b/uavcan/equipment/esc/siyi/241.SIYI_ESC_FirmwareUpgrade_Data.uavcan @@ -0,0 +1,12 @@ +uint8 ESC_UPGRADE_DATA_REQUEST_OK = 0 +uint8 ESC_UPGRADE_DATA_REQUEST_FILE_ERROR = 1 +uint8 ESC_UPGRADE_DATA_REQUEST_BLOCK_INDEX_ERROR = 2 +uint8 ESC_UPGRADE_DATA_REQUEST_BLOCK_REPET = 3 +uint8 status +uint16 block_idx +uint32 file_offset +--- +uint8[<=128] firmware +uint16 block_idx + + diff --git a/uavcan/equipment/esc/siyi/242.SIYI_ESC_FirmwareUpgrade_End.uavcan b/uavcan/equipment/esc/siyi/242.SIYI_ESC_FirmwareUpgrade_End.uavcan new file mode 100644 index 0000000..7a96dc0 --- /dev/null +++ b/uavcan/equipment/esc/siyi/242.SIYI_ESC_FirmwareUpgrade_End.uavcan @@ -0,0 +1,7 @@ +uint32 transfer_file_size +uint32 checksum +--- +uint8 ESC_FIRMWARE_UPGRADE_END_OK = 0 +uint8 ESC_FIRMWARE_UPGRADE_END_ERROR = 1 +uint8 status +