> ## Documentation Index
> Fetch the complete documentation index at: https://motorbridge.seeedstudio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Vendor capability matrix

# Reference: Vendor Capability Matrix

<mintly-toc>
  This page tracks the production capability status across vendors in motorbridge.
</mintly-toc>

## Vendor Overview

| Vendor     | Add Method               | Typical Transport    | Protocol Family        |
| ---------- | ------------------------ | -------------------- | ---------------------- |
| Damiao     | `add_damiao_motor()`     | SocketCAN, DM Serial | DM-J4310/4340          |
| RobStride  | `add_robstride_motor()`  | SocketCAN            | RobStride Extended CAN |
| MyActuator | `add_myactuator_motor()` | SocketCAN            | MyActuator RMD         |
| HighTorque | `add_hightorque_motor()` | SocketCAN            | HighTorque native      |
| Hexfellow  | `add_hexfellow_motor()`  | CAN-FD               | Hexfellow MIT          |

## Unified Mode Support

| Vendor     | Typical Models      | MIT | POS\_VEL | VEL | FORCE\_POS |
| ---------- | ------------------- | --- | -------- | --- | ---------- |
| Damiao     | 4310, 4340P, 6006   | ✅   | ✅        | ✅   | ✅          |
| RobStride  | rs-00 through rs-06 | ✅   | ✅        | ✅   | ❌          |
| MyActuator | X8                  | ❌   | ✅        | ✅   | ❌          |
| HighTorque | hightorque          | ✅   | ✅        | ✅   | ✅          |
| Hexfellow  | hexfellow           | ✅   | ✅        | ❌   | ❌          |

### RobStride Mapping Notes

* `MIT` maps to native impedance packet (`pos/vel/kp/kd/tau` all effective).
* `POS_VEL` maps to native position flow (`run_mode=1`, `loc_ref`, `limit_spd`, optional `loc_kp`).
* Always pass the physical RobStride model (`rs-00` ... `rs-06`) for limits and logs. High-level control and runtime parameter read/write share the protocol section 4 table (`0x7005..0x702E`).
* Full runtime parameter tables are available in [RobStride Parameter Tables](/reference/robstride-parameter-tables).
* In unified `pos-vel`, CLI args `--vel/--kd/--tau` are ignored by design and shown as warnings.
* Torque/current is currently parameter-level only (`write-param`), not a separate unified mode (`FORCE_POS` remains ❌).

## Unified Mode -> Native Vendor Mapping

| Unified Mode | Damiao            | RobStride                                                 | MyActuator           | HighTorque                   | Hexfellow       |
| ------------ | ----------------- | --------------------------------------------------------- | -------------------- | ---------------------------- | --------------- |
| `MIT`        | Native MIT        | Native MIT                                                | Not supported        | Mapped to native pos+vel+tqe | Native MIT      |
| `POS_VEL`    | Native POS\_VEL   | Native position flow (`run_mode=1 + loc_ref + limit_spd`) | Native position flow | Native POS\_VEL              | Native POS\_VEL |
| `VEL`        | Native VEL        | Native Velocity                                           | Native Velocity      | Native Velocity              | Not supported   |
| `FORCE_POS`  | Native FORCE\_POS | Not supported                                             | Not supported        | Mapped to native pos+vel+tqe | Not supported   |

## Experimental Section: Vendor-Native Protocol Entrypoints (Implemented)

> This section exposes implemented vendor-native capabilities that are outside the unified 4-mode surface, mainly for commissioning/debug workflows.

| Vendor     | Native Entrypoints (examples)                                                                                | Notes                                                                                                                                         |
| ---------- | ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Damiao     | `id-dump`, `id-set`, `damiao-read-param`, `damiao-write-param --store 1` (CLI) + `set_zero_position()` (API) | Register/parameter R/W, ID update, zeroing flow                                                                                               |
| RobStride  | `ping`, `robstride-read-param`, `robstride-write-param --store 1`, `run --mode read-param/write-param/save`  | 29-bit extended-frame parameter path; runtime parameters use the common section 4 table (`0x7005..0x702E`); save uses type 22 with status ACK |
| MyActuator | Vendor-native command path (adapter exposed)                                                                 | Position/velocity-first flow, limited register surface                                                                                        |
| HighTorque | Vendor-native command path (adapter exposed)                                                                 | Internal scaling under unified API                                                                                                            |
| Hexfellow  | CAN-FD native path (`socketcanfd`)                                                                           | Primarily MIT/POS\_VEL, requires CAN-FD                                                                                                       |

### RobStride Native Parameter Command (Cross-Platform)

Linux / macOS:

```bash theme={null}
motorbridge-cli robstride-read-param \
  --channel can0 --model rs-06 --motor-id 127 \
  --param-id 0x7019 --type f32 --timeout-ms 500
```

Windows (PowerShell):

```powershell theme={null}
motorbridge-cli robstride-read-param `
  --channel can0@1000000 --model rs-06 --motor-id 127 `
  --param-id 0x7019 --type f32 --timeout-ms 500
```

Use `--model rs-06` only for a physical RS06 motor. For other RS00-RS05 motors, replace it with the actual model for limits/logging; runtime `read-param` / `write-param` uses the common section 4 table.

Persist a RobStride parameter in v0.4.1:

```bash theme={null}
motorbridge-cli robstride-write-param \
  --channel can0 --model rs-06 --motor-id 127 \
  --param-id 0x701E --type f32 --value 30.0 --verify 1 --store 1
```

## Cross-Platform Command Templates

All examples below use the unified Python package CLI: `motorbridge-cli`.

### Linux (Ubuntu / SocketCAN)

```bash theme={null}
# RobStride POS_VEL (supported)
motorbridge-cli run \
  --vendor robstride --transport auto --channel can0 \
  --model rs-06 --motor-id 127 --feedback-id 0xFD \
  --mode pos-vel --pos 1.5 --vlim 1.0 --loc-kp 5.0 --loop 1 --dt-ms 20

# Damiao FORCE_POS
motorbridge-cli run \
  --vendor damiao --transport auto --channel can0 \
  --model 4340P --motor-id 0x01 --feedback-id 0x11 \
  --mode force-pos --pos 0.8 --vlim 1.5 --ratio 0.3 --loop 20 --dt-ms 20
```

### macOS

```bash theme={null}
# CAN path (requires PCBUSB runtime)
motorbridge-cli run \
  --vendor robstride --transport auto --channel can0 \
  --model rs-06 --motor-id 127 --feedback-id 0xFD \
  --mode pos-vel --pos 1.5 --vlim 1.0 --loc-kp 5.0 --loop 1 --dt-ms 20

# Damiao dm-serial path (no CAN runtime needed)
motorbridge-cli run \
  --vendor damiao --transport dm-serial \
  --serial-port /dev/cu.usbmodemXXXX --serial-baud 921600 \
  --model 4340P --motor-id 0x01 --feedback-id 0x11 \
  --mode mit --pos 0.5 --vel 0 --kp 20 --kd 1 --tau 0 --loop 20 --dt-ms 20
```

### Windows (PowerShell / PCAN)

```powershell theme={null}
# RobStride POS_VEL (PCAN channel example)
motorbridge-cli run `
  --vendor robstride --transport auto --channel can0@1000000 `
  --model rs-06 --motor-id 127 --feedback-id 0xFD `
  --mode pos-vel --pos 1.5 --vlim 1.0 --loc-kp 5.0 --loop 1 --dt-ms 20

# Damiao FORCE_POS
motorbridge-cli run `
  --vendor damiao --transport auto --channel can0@1000000 `
  --model 4340P --motor-id 0x01 --feedback-id 0x11 `
  --mode force-pos --pos 0.8 --vlim 1.5 --ratio 0.3 --loop 20 --dt-ms 20
```

Notes:

* Linux/macOS CAN channel is typically `can0`.
* Windows PCAN is typically `can0@1000000`.
* `dm-serial` is Damiao-only.

## Host / Feedback ID Notes

| Vendor     | Recommended feedback/host ID policy                       |
| ---------- | --------------------------------------------------------- |
| Damiao     | Distinct feedback ID per motor path (`motor_id + base`)   |
| RobStride  | Default to `0xFD`; runtime may fallback probe `0xFF/0xFE` |
| MyActuator | `0x240 + motor_id`                                        |
| HighTorque | Fixed by protocol path                                    |
| Hexfellow  | Fixed by protocol path                                    |

## Register / Parameter Access

| Vendor     | Read                | Write               | Persist |
| ---------- | ------------------- | ------------------- | ------- |
| Damiao     | Full register API   | Full register API   | Yes     |
| RobStride  | Typed parameter API | Typed parameter API | Yes     |
| MyActuator | Limited             | Limited             | Yes     |
| HighTorque | Limited             | Limited             | Yes     |
| Hexfellow  | Limited             | Limited             | Yes     |

### RobStride Parameter API

```python theme={null}
motor.robstride_get_param_i8(param_id, timeout_ms)
motor.robstride_get_param_u8(param_id, timeout_ms)
motor.robstride_get_param_u16(param_id, timeout_ms)
motor.robstride_get_param_u32(param_id, timeout_ms)
motor.robstride_get_param_f32(param_id, timeout_ms)

motor.robstride_write_param_i8(param_id, value)
motor.robstride_write_param_u8(param_id, value)
motor.robstride_write_param_u16(param_id, value)
motor.robstride_write_param_u32(param_id, value)
motor.robstride_write_param_f32(param_id, value)
```

## Reference Example (RobStride)

```python theme={null}
from motorbridge import Controller, Mode

with Controller("can0") as ctrl:
    motor = ctrl.add_robstride_motor(6, 0xFD, "rs-06")  # replace with the RS model you use for limits/logging
    ctrl.enable_all()

    motor.ensure_mode(Mode.POS_VEL, 1000)
    motor.send_pos_vel(0.3, 2.0)

    motor.ensure_mode(Mode.MIT, 1000)
    motor.send_mit(0.0, 0.0, 8.0, 0.3, 0.0)
```

## Device-ID and Zeroing Status (RobStride)

* `set-id`: available and aligned with upper-tool style frame semantics.
* `zero`: available via control command path, with firmware-dependent ACK behavior.
* For production commissioning, always verify by reading back `mechPos` / status after zero or ID changes.
