# LinkerHand-CPP-SDK 项目框架速查

## 1. 顶层结构

| 路径 | 作用 |
|---|---|
| `include/` | 对外头文件、类型声明、各型号接口 |
| `examples/` | 示例程序，最适合确认典型调用方式 |
| `docs/` | 使用文档、FAQ、故障排查、API 参考 |
| `tests/` | 工具类与框架级测试 |
| `lib/x86_64/` | x86_64 预编译动态库 |
| `lib/aarch64/` | aarch64 预编译动态库 |
| `src/main.cpp` | 最小示例入口 |
| `CMakeLists.txt` | 构建、示例、安装、测试入口 |

## 2. 代码分层

```text
LinkerHandApi
  -> HandFactory
      -> IHand
          -> L6Hand / L7Hand / L10Hand / L20Hand / L25Hand / ModbusL10Hand
```

## 3. 关键文件优先级

### 第一批必读

- `README.md`
- `CMakeLists.txt`
- `include/Common.h`
- `include/LinkerHandApi.h`
- `include/HandFactory.h`

### 第二批按任务读

- 型号问题：读对应 `include/LinkerHandL*.h`
- 能力边界问题：读 `include/IHand.h`
- 使用问题：读 `examples/toolset_example.cpp`
- 构建/排错问题：读 `docs/TROUBLESHOOTING.md`

## 4. L6 相关速记

- 型号头文件：`include/LinkerHandL6.h`
- 6 个关节位置值
- 支持速度、扭矩、加速度、故障、温度、触觉矩阵、版本信息
- `L6Hand` 还声明了 `reHome`、版本读取、参数保存等专有能力
- `LinkerHandApi` 是更高层的统一封装，不会暴露所有型号专有方法

## 5. 仓库约束

- 很多核心实现不在源码中，而在 `lib/*/liblinkerhand_cpp_sdk.so*`
- 因此“接口存在”与“内部实现细节可见”是两件事
- 对行为判断，优先级建议：
  1. 头文件声明
  2. 示例代码
  3. 文档说明
  4. 推断

## 6. 常用定位命令

```bash
rg --files
rg -n "LinkerHandApi|HandFactory|IHand|L6Hand"
rg -n "fingerMove|getState|getForce|setAcceleration|reHome"
sed -n '1,220p' include/LinkerHandL6.h
```

## 7. 构建与测试

构建：

```bash
mkdir build
cd build
cmake ..
make
```

测试：

```bash
cmake .. -DBUILD_TESTING=ON
ctest --output-on-failure
```

注意：测试依赖 `googletest`，由 `tests/CMakeLists.txt` 通过 `FetchContent` 拉取。
