feat: 发布固件底层开发 Skill 套件
This commit is contained in:
commit
c7ae3b4ce1
72 files changed
+10212
No files matched your search
@@ -0,0 +1,76 @@
|
||||
# PSP 配置边界与检查
|
||||
|
||||
## PSP 可以维护
|
||||
|
||||
- 参考 PSP 已有的 `psp.json` 字段和目录布局;
|
||||
- `configs/`、`param/`、`scripts/` 和项目实际采用的等价目录;
|
||||
- 应用可见的 IO/GPIO 语义、LED/按键/IRCUT/PWM/PTZ 等运行配置;
|
||||
- Sensor、Media 和 AIPlugin 的项目级配置与 profile;
|
||||
- BSP IMG 的绝对路径引用、最终内存/分区摘要和依赖锁定;
|
||||
- 用户提供的 ISP/PQ、标定参数、Logo 等必要的小型平台资源;
|
||||
- 精简结果文档和 sidecar metadata。
|
||||
|
||||
固定打包框架、BSP IMG、大型模型、公共运行库、构建缓存、烧录包及持续变化的日志/验证记录不进入 PSP 仓库。
|
||||
|
||||
## 不取得的所有权
|
||||
|
||||
PSP 不直接修改 BSP 的 `cvi_board_init.c`、DTS/DTSI、驱动、Bootloader、分区表或内存实现。CV181X 的 `memmap.py/ION_SIZE`,以及 CV184X board defconfig 中的 `CONFIG_ION_SIZE`、`CONFIG_RTOS_ION_SIZE` 由 BSP 工作流根据用户明确的媒体内存需求修改。SigmaStar 等未提供规则的平台由用户手工处理,并保留警告。
|
||||
|
||||
PSP 可以保存和核对最终值。Media/AIPlugin 需求要求改变 BSP 时,生成需求清单,经 Etunel Hub 路由 BSP;接收新的 BSP handoff 后再更新 PSP。
|
||||
|
||||
PSP 也不修改 Media/AIPlugin 公共源码、训练/转换模型、ISP/PQ 配置或伪造兼容版本;缺少上游成果时交 Hub 路由。
|
||||
|
||||
## GPIO 一致性
|
||||
|
||||
交叉核对 BSP handoff/Pinmux 结果与 PSP 中实际存在的 GPIO 配置,包括但不限于:
|
||||
|
||||
- `configs/bsp.json`;
|
||||
- `scripts/pinmux.sh`;
|
||||
- `configs/ptz/motorGpio.json`;
|
||||
- 其他包含 GPIO 编号和应用语义的配置。
|
||||
|
||||
发现 GPIO 被 BSP、DTS/DTSI 或其他设备树模块占用时,停止 PSP 验收并提出 BSP 变更请求。没有对应 GPIO 时明确记录“无此 GPIO”,不伪造编号。PSP 只修改自己的运行语义,不越界释放 Kernel IO。
|
||||
|
||||
## CV18 Sensor 配置基线
|
||||
|
||||
CV18 系列以 PSP 内唯一的 `sensor_cfg.ini` 为主要 Sensor 配置。文件可能位于参考 PSP 的 `configs/media/sensor/`、`configs/media/isp/` 或等价目录;保持参考布局,不为统一目录而搬移。存在多个同名候选、没有候选、软链接或无法确认当前生效文件时停止。
|
||||
|
||||
先从原理图或 GPIO list 确认 Sensor 型号、数量、I2C bus/address、MIPI device/lane、P/N swap、MCLK、reset/power GPIO 等实际字段,再用规格书中的 Sensor 类型锁定枚举标识符。不得只凭相近命名、参考板旧值或枚举数字猜选型。每个 `[sensor]`、`[sensor2]` 等实际启用 section 都要分别给出规格书选定的枚举名称和依据。
|
||||
|
||||
Skill 已内置本流程确认的两份枚举基线,运行时不得再到 SDK 目录或附件目录中搜索“最新”或相近文件:
|
||||
|
||||
- [CV181X `sensor_list.h`](sensor-enums/cv181x/sensor_list.h),用于 `_SAMPLE_SNS_TYPE_E`;
|
||||
- [CV184X `sensor_cfg.h`](sensor-enums/cv184x/sensor_cfg.h),用于 `_SNS_TYPE_E`。
|
||||
|
||||
`validate_psp.py` 根据 `--expected-chip` 自动选择对应内置文件并在结果中记录内置路径和 SHA-256。若规格书 Sensor 在内置表中不存在,或项目资料明确证明目标 Media SDK 使用不同枚举版本,停止自动适配并报告基线差异;不得退回目录扫描或猜测近似枚举。此时可在用户提供精确新头文件后用 `--sensor-enum-header` 显式覆盖并记录 `source=override`,随后应按独立 skill 更新流程评审是否替换内置基线。
|
||||
|
||||
配置规则如下:
|
||||
|
||||
- CV181X(CV1810、CV1811C、CV1815JA 等):读取 `sensor_list.h` 中 `typedef enum _SAMPLE_SNS_TYPE_E`,`sensor_cfg.ini` 的 `name` 填枚举名称,例如 `SMS_SC4336P_MIPI_4M_30FPS_10BIT`,不能填枚举序号或自行换算值。
|
||||
- CV184X(CV1841CP、CV1842CP、CV1842HP、CV1843HP 等):读取 `sensor_cfg.h` 中 `typedef enum _SNS_TYPE_E`,先按规格确定枚举名称,再把该枚举的显式整数值写入 `sensor_cfg.ini` 的 `name`;建议保持头文件中的十六进制表达形式。结果同时记录枚举名称和值,不能只记录一个无来源数字。
|
||||
|
||||
调用 `validate_psp.py` 时无需提供头文件路径;只需为每个实际 Sensor section 根据规格选型生成 `--expected-sensor sensor=ENUM_NAME`、`--expected-sensor sensor2=ENUM_NAME`。工具会自动选取内置头文件,记录 `sensor_cfg.ini` 与枚举表 hash,并按芯片系列验证名称或数值表示;枚举不存在、数值不可解析、section 缺少规格期望或配置不一致均阻止 candidate。`--sensor-enum-header` 仅用于上述已确认的版本差异覆盖,不是日常必需输入。
|
||||
|
||||
## ISP/PQ 用户边界
|
||||
|
||||
ISP 和 PQ 文件由用户更新,Skill 不生成、不选择、不修改,也不把参考值自动声明为适配完成。若参考 PSP 已包含这些文件,保留其目录和内容,把状态记录为 `USER_OWNED/PENDING`;用户提供更新后记录精确文件/hash 和 `USER_REPORTED` 确认。ISP/PQ 未更新不阻止完成 PSP 的其他静态检查,但相关设备检查保持未执行或风险项,不能据此声称图像效果已经通过。
|
||||
|
||||
## Media 与 AIPlugin
|
||||
|
||||
至少核对:Media 版本、Sensor 型号/数量/总线、用户负责的 ISP/PQ 状态、AIPlugin 版本、AIPlugin profile 的 SDK、模型平台和运行库目录。版本冲突默认阻塞;只有有实际负责人确认的兼容例外才能继续,并写入最终结果。
|
||||
|
||||
未声明的参考配置可以继承,但必须把关键继承项列给用户确认。Media 或 AIPlugin 未提供差异不等于自动禁用,也不等于其真实兼容。
|
||||
|
||||
## `psp.json` 和绝对路径
|
||||
|
||||
应用打包代码已依赖参考 `psp.json`,因此默认保持文件名、层级和字段。新增 BSP lock、允许覆盖和治理信息使用 `metadata/` sidecar;变更 `psp.json` schema、文件名、目录、启动调用或应用可见 GPIO 语义时,先通过 Etunel 取得技术负责人和应用层确认。
|
||||
|
||||
应用层与底层共用 BSP 环境,所以保留 `psp.json` 的绝对路径。路径检查覆盖 PSP 中所有 JSON,以及 `.ini`、`.cfg`、`.conf`、`.sh`、`.py` 文本,不能只检查 `psp.json`。允许团队公共构建根;`/home/<用户>`、`/tmp`、`/var/tmp` 等个人/临时路径必须警告,正式交付默认失败。只有用户确认的共享根或本轮验证根才能通过重复的 `--allowed-absolute-root <精确绝对路径>` 放行,放行记录必须进入验证结果。外部构建输入不存在时失败,其他配置/脚本路径不存在时至少警告;不得自动寻找名称相近或日期更新的替代物。
|
||||
|
||||
## 同名配置覆盖
|
||||
|
||||
现有打包顺序允许 PSP 后复制并覆盖应用配置,但不能静默覆盖。比较应用 `orgConfigs` 与 PSP `configs`、应用 `orgParam` 与 PSP `param` 等真实映射,输出相对路径、双方 hash 和最终生效方。
|
||||
|
||||
默认保留应用工程中的 `orgConfigs`、`orgParam`,并从 PSP 候选内容中移除重复的同名文件。这样不会让参考 PSP 在组包时意外覆盖应用配置,也不需要用户逐个确认“继续保留应用值”。
|
||||
|
||||
只有硬件适配确实要求 PSP 成为最终生效方时,才向用户展示双方路径、hash、差异和影响,并在确认后把精确路径写入 `metadata/allowed-overrides.json`。不要为绕过门禁添加通配符;schema 见[数据契约](schemas.md)。
|
||||
@@ -0,0 +1,50 @@
|
||||
# PSP Etunel 交接
|
||||
|
||||
仅在当前 Hook、Etunel 角色契约和入站任务确认本会话是嵌入式底层角色时执行正式交接。成员结果只交给 Hub;不直接向应用层 AI 派任务或索取结论。没有有效 WORK_ID、SUBTASK_ID 或工具时只生成 handoff 文件并标记“尚未正式发送”。
|
||||
|
||||
## packaged candidate 交接
|
||||
|
||||
底层自检、固定组包和负责人确认完成后,依次处理:
|
||||
|
||||
1. 展示远端、分支和 candidate commit,取得 Git 上传确认;
|
||||
2. push 后由 `render_psp_handoff.py --verify-remote` 使用只读 `git ls-remote` 验证团队共享地址的 heads/tags 能取得精确完整 commit;验证失败、超时或只有本地路径时不能形成 Etunel 交接;
|
||||
3. 生成并展示 Etunel handoff,取得独立发送确认;
|
||||
4. 向 Hub 提交本角色正式结果,由 Hub 给应用层创建集成任务。
|
||||
|
||||
交接至少包含:
|
||||
|
||||
- WORK_ID、SUBTASK_ID、阶段、波次和嵌入式底层主责;
|
||||
- 项目、芯片、硬件/系统形态;
|
||||
- PSP 共享仓库地址、完整 commit 和 candidate/packaged 状态;
|
||||
- 参考 PSP 及来源版本;
|
||||
- BSP handoff、BSP commit/build ID、Media/AIPlugin 基线;
|
||||
- 烧录包绝对路径/hash;
|
||||
- 静态检查、打包、设备和应用验证的真实状态/证据;
|
||||
- 未执行项、警告、例外、依赖和剩余风险;
|
||||
- 应用集成步骤及必须检查的项目;
|
||||
- `self_check_result`、`internal_approved`、确认负责人/时间/范围/条件。
|
||||
|
||||
Git 地址和 SHA 是交付主体;Etunel 引用 PSP 内的 `psp.json`、`metadata/bsp.lock.json` 和精简适配结果。`--for-etunel` 只接受 `packaged` 或 `accepted`,还必须有与当前 URL/SHA 一致且通过的远端可达性证据。不要重复传输仓库、BSP IMG、大模型和公共库。
|
||||
|
||||
## 应用集成
|
||||
|
||||
Hub 交给应用层的任务至少要求:
|
||||
|
||||
- 在应用 `psp/` submodule 获取完整 PSP SHA;
|
||||
- 生成应用侧 `psp.lock.json` 并检查 gitlink/HEAD/lock 一致;
|
||||
- 完成应用编译和完整固件打包;
|
||||
- 验证 BSP、Media 库、模型按配置找到并复制;
|
||||
- 检查 PSP 覆盖清单;
|
||||
- 返回应用 commit、PSP commit、命令、结果、证据和负责人确认。
|
||||
|
||||
PSP 可以在 packaged 后交付,设备验证与应用集成并行。两条证据必须对应同一 PSP commit,之后 Hub 创建独立 PSP 验收收尾任务。底层负责人确认并取得用户发布确认后,才创建/push accepted tag。
|
||||
|
||||
应用长期未完成时,原底层实现任务可以以 device_verified 或 packaged 的真实状态结束,PSP 不提前 accepted;收到应用结果后另建收尾任务。
|
||||
|
||||
## 问题返工
|
||||
|
||||
应用层经 Hub 返回问题,输入应包含 PSP SHA、应用仓库/commit、芯片/板卡、BSP build、复现步骤、期望/实际、日志、涉及配置、阻塞影响和应用负责人确认状态。
|
||||
|
||||
Hub 创建新的嵌入式底层 SUBTASK_ID。PSP 在职责内修正并产生新 candidate;旧 commit 和证据保留。问题属于 BSP/DTS/驱动/内存、应用业务、硬件、公共 Media/AIPlugin 或测试环境时,只提供事实、证据和归属建议,由 Hub 路由,不越界修复。
|
||||
|
||||
已经 accepted 的缺陷按[项目与 Git 规则](project-and-git.md)创建 revoked 状态、通知已知引用方,并为修复重新走完整流程。Git/Etunel 发送和状态发布分别确认。
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
# PSP 组包与设备验证
|
||||
|
||||
## EMX2.1 固定打包契约
|
||||
|
||||
PSP 的日常开发仓库位于 `~/work/project/EMX2.1/AppTeam/Psp/<项目名>/`。需要验证时,把同一个 candidate commit 作为独立 `psp` 子仓库加入用户指定的 EMX2.1 应用工程;打包身份是 `<应用工程>/psp` 的精确 Git commit,不是一次无版本拷贝。
|
||||
|
||||
应用工程、脚本和输出位置固定为:
|
||||
|
||||
```text
|
||||
<应用工程>/
|
||||
├── psp/ # 当前 candidate 的独立 PSP 子仓库
|
||||
├── scripts/
|
||||
│ ├── product.py
|
||||
│ └── release.py
|
||||
└── output/<版本>/ # 本轮组包生成的版本目录
|
||||
```
|
||||
|
||||
打包机器契约准确记录 `project_root`、`project_root/psp`、`project_root/scripts`、`project_root/output`、适用芯片、成功退出码以及下面三条允许命令。该契约只描述稳定接口,保存在 PSP 仓库外;Skill 不解析、重构或修改工程打包框架。
|
||||
|
||||
```text
|
||||
./product.py
|
||||
./release.py 0
|
||||
./release.py 1
|
||||
```
|
||||
|
||||
用户给出应用工程路径后,使用 `record_packaging_result.py contract --project-root <应用工程> --chip <芯片> --output <仓库外契约文件>` 按上述固定规则生成契约,不再要求用户手写 JSON 或重复说明命令。候选提交前允许工程内 `psp/` 尚未加入,此时只对 staging 做准备检查;正式组包前 `psp/` 必须存在并锁定候选 commit。工程路径不一致或脚本不完整时停止;不得猜测替代命令、标记 `packaged` 或交付烧录包。
|
||||
|
||||
## 参数 `0/1` 的选择
|
||||
|
||||
`./release.py 0` 是自动执行的默认值:PSP 资源或项目配置变化,且未改变应用源码、编译配置、工具链、依赖或会使增量结果失效的输入时使用,优先保留增量构建效率。
|
||||
|
||||
只有下列情况使用 `./release.py 1`:应用/公共源码有较大修改,CMake/编译选项/工具链/依赖发生变化,增量产物疑似陈旧或已失败,用户明确要求 clean rebuild,或本轮无法证明增量结果可靠。它会清理已有编译状态,执行前必须向用户展示精确工程和命令并取得当次确认;不能仅凭“更稳妥”自动选择。
|
||||
|
||||
## 打包前检查
|
||||
|
||||
打包准备检查分两次执行。第一次在 staging 适配完成、候选提交创建前执行,用 `preflight --psp-source <staging>` 提前发现 PSP 自身问题;第二次在候选提交已集成到应用工程后执行,用 `preflight --psp-commit <完整 SHA> --formal` 锁定实际组包输入。
|
||||
|
||||
`preflight` 至少检查:
|
||||
|
||||
- `scripts/product.py`、`scripts/release.py` 和 `psp.json` 是普通文件;
|
||||
- `EmxResToProduct` 每个 `src` 都有明确且存在的来源,`dst` 是安全的工程内相对路径且不重复;
|
||||
- `data` 分区有 `file`,`release.py` 使用 DATA 组包时,`mkAiData.py` 和 `data_ubinize.cfg` 都由 PSP 显式映射,不能依赖应用工作区里的旧文件;
|
||||
- `mkAiData.py` 的容量参数不超过 `data` 分区;
|
||||
- PSP 的 kernel/rootfs 分区名称、文件和容量与 `metadata/bsp.lock.json` 中已经通过的 BSP 分区证据一致,余量仍不少于 512 KiB;
|
||||
- PSP 是预期 commit 且工作区干净。
|
||||
|
||||
工具能证明的是静态关系。还要只读检查 `product.py` 使用的 Media、AIPlugin、运行库和驱动清单;空目录、空列表以及“脚本打印错误但退出码仍为 0”的路径都要在执行前说明。该问题属于应用打包框架时,未经明确授权不得修改应用脚本。
|
||||
|
||||
完成上述检查后自动继续:
|
||||
|
||||
1. 从项目已有规则读取“哪个文件是实际烧录包”的精确相对路径。无法唯一发现时视为异常,先请用户指定;`output/<版本>/` 可能包含多个 `.bin`,不能按扩展名或修改时间自行挑选。
|
||||
2. 在命令前运行 `record_packaging_result.py snapshot --contract <契约> --state <PSP 仓库外证据路径>`,锁定契约 hash、PSP commit、应用工程状态和既有 `output` 版本目录。不得为了方便删除旧版本目录。
|
||||
3. 命令日志写入 PSP 仓库外的受限证据目录。日志可能包含账号、口令或内部地址;不得把原始日志提交到 PSP、复制到文档或 Etunel 消息。证据只保存日志绝对路径、大小、SHA-256,以及失败/警告行号和行 hash。
|
||||
|
||||
## 精确执行顺序
|
||||
|
||||
执行目录必须是 `<应用工程>/scripts`,顺序不能颠倒或合并为无法区分结果的一条命令:
|
||||
|
||||
1. 自动运行 `./product.py`,记录真实退出码和独立日志。该步骤拷贝 PSP 配置/资源到工程使用位置。
|
||||
2. 退出码为契约成功码后,仍要检查日志和复制结果。已知脚本中的报错打印不一定都转成非零退出码,因此只看 `$?` 不足以通过;出现红色错误输出、Traceback、明确复制/校验失败或资源缺失时停止,不运行 `release.py`。
|
||||
3. `product.py` 无错误后自动运行 `./release.py 0`,记录独立退出码和日志。只有需要 clean rebuild 时才停止并请用户确认 `./release.py 1`。
|
||||
4. 用 `record_packaging_result.py record` 同时提交两条命令、两个退出码、两个日志和用户/项目指定的烧录包绝对路径;工具不执行命令,只验证证据。
|
||||
|
||||
若实际流程未按顺序执行、两阶段日志无法区分,或在 `product.py` 已失败后仍运行 `release.py`,本轮不得标记 packaged。需要重试时重新快照并生成新的不可覆盖证据文件。
|
||||
|
||||
## `output` 结果判定
|
||||
|
||||
成功退出码不单独证明 packaged。完成后必须同时满足:
|
||||
|
||||
- 相对打包前快照,`<应用工程>/output/` 恰好新增一个直接子版本目录;
|
||||
- 既有版本目录没有被删除或修改;
|
||||
- 新版本目录内全部普通文件可枚举并记录路径、大小和 SHA-256,且不含软链接;
|
||||
- 用户/项目指定的唯一烧录包是该新版本目录内的非空普通文件;
|
||||
- PSP 在打包前后均为同一个完整 commit 且 worktree 干净;
|
||||
- `product.py` 和 `release.py` 的退出码、日志、命令及执行目录均与契约一致。
|
||||
|
||||
不得选择目录中的“最新”版本。没有新目录、同时新增多个目录、复写旧目录、烧录包不在本轮目录、输出文件无法唯一确认或 hash 无法计算时均失败。最终记录既包含本轮 `output/<版本>/` 绝对路径,也包含精确烧录包路径/hash,供设备验证和后续 PSP→应用交接使用。
|
||||
|
||||
打包失败只收集证据并判断归属:指向 PSP 时在 staging 修正并重新生成候选提交;指向应用工程、框架、BSP 或公共库时交对应所有者处理。不得为绕过失败而放宽契约。
|
||||
|
||||
出现异常后不自动修改、提交或重试。先展示失败证据、归属和建议处理方式,由用户确认下一步。问题修正并重新通过 `preflight` 后,恢复正常自动流程:创建新的候选提交,再执行 `./product.py` 和 `./release.py 0`。Git 上传、Etunel 发送、设备和发布仍单独确认。
|
||||
|
||||
## 当前人工烧录
|
||||
|
||||
PSP skill 不执行烧录。packaged 后向用户展示烧录包绝对路径、SHA-256、`output/<版本>/` 路径、PSP commit、BSP build ID 和项目检查项。用户手工烧录后,记录:
|
||||
|
||||
- 板卡型号和硬件 revision;
|
||||
- 实际烧录包路径/hash 和 PSP commit;
|
||||
- 启动是否成功;
|
||||
- 内存/分区、关键 GPIO、Sensor、媒体、用户更新的 ISP/PQ、AIPlugin 和异常日志;
|
||||
- N/A、未执行项、异常现象、结论和确认时间;
|
||||
- `evidence_source: USER_REPORTED`。
|
||||
|
||||
通用模板不替代项目功能清单。模糊的“正常”不能自动覆盖所有适用项;缺少反馈时保持 packaged,适用检查未执行时为 PARTIAL。
|
||||
|
||||
## 状态和证据失效
|
||||
|
||||
```text
|
||||
candidate -> packaged -> device_verified
|
||||
-> app_integrated
|
||||
同一 commit 两项均通过 -> accepted
|
||||
```
|
||||
|
||||
`accepted` 需要静态检查、固定工程打包、目标设备验证、目标应用集成、底层负责人确认、应用负责人确认和阻塞问题关闭。它不替代独立整机测试、产品验收或发布。
|
||||
|
||||
`psp.json`、GPIO、Sensor、Media、AIPlugin、脚本、小型资源、BSP 路径/build/hash 任一有效变化,使 packaged、device_verified、app_integrated 失效。ISP/PQ 由用户更新;一旦其内容变化,同样必须重打包并重新验证对应图像项。纯文档/注释变化经差异证明和负责人确认可复用技术证据,但新 commit 仍需独立 accepted 状态。
|
||||
|
||||
每轮烧录对应一个不可变 candidate 和烧录包 hash。失败后修正产生新 commit/新镜像;不得覆盖已验证基线。
|
||||
|
||||
## 后续串口能力
|
||||
|
||||
首版不创建串口工具或依赖。后续在取得串口设备、波特率、登录方式、启动特征、参数查询命令和设备授权规则后,单独实现启动日志采集和只读参数分析。默认不自动烧录、重启或发送改变设备状态的命令。
|
||||
@@ -0,0 +1,70 @@
|
||||
# PSP 项目与 Git 规则
|
||||
|
||||
## 仓库模型
|
||||
|
||||
- PSP 固定工作区是当前用户的 `~/work/project/EMX2.1/AppTeam/Psp/`。每个硬件项目是其普通直接子目录,目录名使用团队预先创建的实际项目名,不添加 `psp-` 前缀。
|
||||
- 项目目录和独立 Git 仓库由用户或团队预先创建。skill 不创建项目目录、不运行 `git init`、不更改初始分支,也不自行配置远端;目录缺失、软链接、嵌套在其他 worktree 中或不在固定根目录时停止。
|
||||
- 多个应用只有在硬件、GPIO、内存/分区、BSP 固件组合、Sensor/Media/ISP/PQ 和 AIPlugin 平台配置完全一致时才共用同一 PSP。
|
||||
- 保留预创建仓库的默认分支。经用户确认需要任务分支时,Etunel 任务建议使用 `candidate/<SUBTASK_ID>`,普通任务使用 `candidate/<简短任务名>`;分支名不是版本。
|
||||
- 应用仓库通过 Git submodule 把 PSP 固定在 `psp/`,由 submodule gitlink 锁定精确 commit;应用侧 `psp.lock.json` 只提供可读交接和一致性检查。
|
||||
|
||||
## 受控复制
|
||||
|
||||
1. 展开当前用户的 `~`,先运行 `psp_project_guard.py inspect --target ~/work/project/EMX2.1/AppTeam/Psp/<项目名>`,确认目标 PSP 是固定根目录的普通直接子目录、其 `.git` 是普通目录,并记录分支、HEAD、远端指纹和配置指纹。首次填充要求结果是 `precreated-empty-repository`;结果是 `existing-project` 时停止本节,转入“现有项目更新”。
|
||||
2. 检查参考 PSP 是普通目录、Git worktree 还是 submodule,记录精确来源。参考 worktree 脏时默认使用可追踪 HEAD;复制未提交内容必须让用户确认并标记来源不能由单一 commit 表示。
|
||||
3. 使用 `psp_project_guard.py prepare --target ~/work/project/EMX2.1/AppTeam/Psp/<项目名>` 复制到同一根目录下的唯一 staging,拒绝软链接、疑似凭据、缺失目标、目标根目录逃逸及非空目标。
|
||||
4. 在 staging 中修改;不接触参考 PSP 和目标 PSP。
|
||||
5. 使用 `verify` 按精确路径白名单检查差异和旧标识残留。
|
||||
6. 输出差异、关键继承、警告与验证结果。需求和适配方案已确认且没有阻塞项时,不再询问是否导入或提交。
|
||||
7. 使用 `finalize` 自动把已验证内容导入预创建空仓库。工具必须在导入前复核目标仍为空且 Git 身份未变化,导入时不复制或替换 `.git`;再运行 `audit-final` 证明业务内容与 staging 一致、分支/HEAD/远端/配置保持 prepare 基线。
|
||||
|
||||
目标项目本就必须存在;这里的“空”是除 `.git` 外没有条目。prepare 后目标出现文件或 Git 元数据变化时,保留 staging 并停止,不覆盖、删除或合并。由用户处理冲突后重新 prepare。
|
||||
|
||||
## 现有项目更新
|
||||
|
||||
目标已有业务内容时,不执行参考项目整体复制。确认目标路径和仓库身份,检查 worktree 与当前分支,以明确 commit/worktree 为基线完成最小修改;继续使用差异白名单、旧标识扫描和静态验证。检查通过后自动提交本任务的精确文件;若当前内容与用户声称的项目不一致,或存在重叠改动,停止并报告证据,不自行清空、替换、迁移或重新初始化。
|
||||
|
||||
## 提交和远端
|
||||
|
||||
- 所有 PSP 必须在工作开始前就是独立 Git 仓库;skill 不初始化仓库、不切换默认分支、不添加或修改远端。
|
||||
- 本地 candidate commit 前输出新增、修改、删除、关键值、继承项、风险、测试和建议说明。需求和适配方案已经确认且检查通过后,自动暂存白名单内的本任务文件并创建 candidate commit,不再询问是否提交。
|
||||
- commit message 至少表达项目、适配/修复内容、BSP build ID,以及存在时的 WORK_ID/SUBTASK_ID;不写本机临时日志或烧录包路径。
|
||||
- 自动提交前核对暂存区只包含本任务文件。Git 用户身份缺失、暂存区混入其他文件、提交钩子失败或 commit 结果不明确时停止,不自动修改 Git 配置、不使用 `--no-verify`、不重试,也不改写历史。
|
||||
- 用户提供共享仓库地址或明确授权仓库创建流程。PSP skill 不自行选择 Git 服务、组织或远端。
|
||||
- 本地路径不能作为正式 Etunel 应用交付地址。commit 可从团队地址获取并验证后,才能声称应用可消费。
|
||||
- Git push、Etunel candidate 交接、accepted/revoked tag 创建与 push、设备烧录和产品发布分别确认;一次确认不自动覆盖后续动作。
|
||||
- 不改写已经提供给打包、设备或应用验证的 commit。修正产生新 commit,并记录其替代的旧 candidate。
|
||||
|
||||
## 状态和 tag
|
||||
|
||||
完整 Git commit SHA 是唯一内容身份。PSP 仓库不写自身 commit 或易过期的状态文件。
|
||||
|
||||
- candidate、packaged、device_verified、app_integrated:记录在外部验证证据和 Etunel 任务中;
|
||||
- accepted:`accepted/<12位commit前缀>` annotated tag;
|
||||
- 已 accepted 后发现严重缺陷:保留 accepted tag,并创建 `revoked/<12位commit前缀>` annotated tag;
|
||||
- 未 accepted candidate 被替代:只在 Etunel 中记录 superseded 关系,不创建 revoked tag。
|
||||
|
||||
accepted tag 至少引用完整 PSP commit、WORK_ID、应用集成 SUBTASK_ID、应用 commit、构建/打包证据、底层负责人和确认时间。revoked tag 记录问题、影响范围和 Etunel 返工任务。创建及上传 tag 前重新确认。
|
||||
|
||||
正式交付构建应取得最新远端状态,证明存在 accepted 且不存在 revoked。离线或 refs 过旧时,开发构建可警告,正式交付停止。
|
||||
|
||||
## 应用侧锁定
|
||||
|
||||
应用层创建 `psp.lock.json`;PSP 仓库不创建它。最小字段见[数据契约](schemas.md)。构建时检查:
|
||||
|
||||
- `psp/` 已初始化且是预期仓库;
|
||||
- HEAD 与 lock 的完整 SHA、submodule gitlink 一致;
|
||||
- PSP worktree 干净且 commit 未 revoked;
|
||||
- 开发/集成构建允许 packaged candidate,正式交付要求 accepted;
|
||||
- BSP IMG 路径/hash 和允许覆盖项有效。
|
||||
|
||||
PSP 不修改应用开发 Skill 或应用业务。需要验证 PSP 时,在精确应用工程已由任务确定后,自动把工程中既有且仓库身份一致的 `psp/` 子模块更新到候选 commit,并运行固定增量组包命令;不得顺带修改应用源码、暂存或提交应用仓库的其他变化。
|
||||
|
||||
更新子模块前检查应用父仓库、`.gitmodules`、gitlink 和 `psp/` worktree。正常自动流程如下:
|
||||
|
||||
1. `.gitmodules` 中必须唯一登记 `path=psp`,并且 URL 与目标 PSP 仓库身份一致;尚未初始化时自动运行项目已有的 `git submodule update --init -- psp`。
|
||||
2. 已初始化的 `psp/` 必须干净,应用父仓库的 `.gitmodules` 和 `psp` gitlink 不能已有本任务以外的修改。
|
||||
3. 从固定工作区中的本地 PSP 仓库取得完整候选 commit,再把应用工程的 `psp/` 检出到该 commit。该操作不要求先 push,也不改子模块 URL。
|
||||
4. 核对 `psp/` HEAD 等于候选 commit、worktree 干净,并把父仓库显示的 gitlink 变化记入组包证据;不自动 `git add` 或提交应用父仓库。
|
||||
|
||||
子模块未登记、URL/仓库身份不一致、`.gitmodules` 或 gitlink 已有重叠改动、`psp/` 不干净、候选 commit 无法从本地仓库取得、初始化需要新的凭据、需要改 URL 或需要提交应用仓库时停止并请用户确认。
|
||||
@@ -0,0 +1,161 @@
|
||||
# PSP 数据契约
|
||||
|
||||
所有 SHA 使用 64 位小写 SHA-256;Git commit 使用仓库返回的完整 SHA。状态必须引用实际证据,不允许人工填写 `passed` 掩盖未执行步骤。
|
||||
|
||||
## `metadata/bsp.lock.json`
|
||||
|
||||
PSP 仓库内保存 BSP handoff 的稳定摘要,不保存自身 commit:
|
||||
|
||||
```json
|
||||
{
|
||||
"schema_version": 1,
|
||||
"handoff_path": "/absolute/BSP/doc/bsp_adaptation/handoff/psp_handoff.json",
|
||||
"handoff_sha256": "<sha256>",
|
||||
"bsp_project": "CV1841CP-LY-SM-YT70_dualos",
|
||||
"bsp_commit": "<完整Git SHA或旧交接中的null>",
|
||||
"bsp_source_dirty": false,
|
||||
"chip": "CV1841CP",
|
||||
"build_id": "20260901_1",
|
||||
"imgs_version_path": "/epbuild/EMX2.0/EmxRes/.../imgs/20260901_1",
|
||||
"image_partition_margin": {
|
||||
"partition_table": "/absolute/BSP/configs/.../partition_spinand.xml",
|
||||
"required_margin_bytes": 524288,
|
||||
"checks": [
|
||||
{
|
||||
"image": "kernel.bin",
|
||||
"image_size_bytes": 2621440,
|
||||
"effective_partition_size_bytes": 3670016,
|
||||
"actual_margin_bytes": 1048576,
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"image": "rootfs.bin",
|
||||
"image_size_bytes": 3145728,
|
||||
"effective_partition_size_bytes": 4194304,
|
||||
"actual_margin_bytes": 1048576,
|
||||
"passed": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"artifacts": [
|
||||
{
|
||||
"relative_path": "boot.bin",
|
||||
"absolute_path": "/epbuild/.../boot.bin",
|
||||
"size": 123,
|
||||
"sha256": "<sha256>"
|
||||
}
|
||||
],
|
||||
"mixed_build": null,
|
||||
"warnings": []
|
||||
}
|
||||
```
|
||||
|
||||
混用构建时 `mixed_build` 记录每个文件来源、build ID、commit、hash、原因、风险、确认人和时间;默认值为 `null`。
|
||||
|
||||
## `metadata/allowed-overrides.json`
|
||||
|
||||
为保持 `psp.json` 兼容,应用同名覆盖的精确白名单放在 sidecar:
|
||||
|
||||
```json
|
||||
{
|
||||
"schema_version": 1,
|
||||
"overrides": [
|
||||
{
|
||||
"psp_path": "configs/sdcard.json",
|
||||
"application_path": "orgConfigs/sdcard.json",
|
||||
"winner": "psp",
|
||||
"reason": "板级存储配置由 PSP 提供",
|
||||
"confirmed_by": "<负责人角色或姓名>",
|
||||
"confirmed_at": "<ISO-8601>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
路径必须是仓库内精确相对路径,不允许绝对路径、`..` 或通配符。
|
||||
|
||||
## 应用侧 `psp.lock.json`
|
||||
|
||||
由应用层创建,不放进 PSP 仓库:
|
||||
|
||||
```json
|
||||
{
|
||||
"schema_version": 1,
|
||||
"project_id": "LY-SM-YT70",
|
||||
"psp_path": "psp",
|
||||
"psp_repository": "<团队共享Git地址>",
|
||||
"psp_commit": "<完整Git SHA>",
|
||||
"expected_state": "candidate",
|
||||
"bsp_build_id": "20260901_1",
|
||||
"etunel_work_id": "<WORK_ID>",
|
||||
"etunel_handoff_subtask": "<SUBTASK_ID>"
|
||||
}
|
||||
```
|
||||
|
||||
submodule gitlink 是实际锁定依据;lock 用于人和工具核对。两者不一致时停止构建。
|
||||
|
||||
## CV18 Sensor 静态证据
|
||||
|
||||
`validate_psp.py` 的 `checks.sensor_baseline` 记录 `sensor_cfg.ini` 的绝对路径/hash、枚举头文件绝对路径/hash/enum tag/`source`、芯片系列和每个 Sensor section 的规格枚举名称、期望配置值、实际值及匹配结果。默认 `source=bundled`,由芯片系列自动选择 skill 内置枚举表;只有明确传入替代头文件时为 `source=override`。CV181X 的 `expected_config_value` 是枚举名称;CV184X 是从 `_SNS_TYPE_E` 解析出的规范十六进制值。
|
||||
|
||||
## 本地固定打包契约和 `packaging-result.json`
|
||||
|
||||
用户提供应用工程路径和芯片后,`record_packaging_result.py contract` 按 EMX2.1 固定目录与命令生成打包契约。契约不放进 PSP 仓库,机器 schema 为:
|
||||
|
||||
```json
|
||||
{
|
||||
"schema_version": 2,
|
||||
"contract_type": "emx21-project-packaging",
|
||||
"contract_id": "<稳定且唯一的契约ID>",
|
||||
"chips": ["CV1841CP"],
|
||||
"project_root": "/absolute/application-project",
|
||||
"psp_path": "/absolute/application-project/psp",
|
||||
"working_directory": "/absolute/application-project/scripts",
|
||||
"output_root": "/absolute/application-project/output",
|
||||
"product_command": "./product.py",
|
||||
"release_commands": ["./release.py 0", "./release.py 1"],
|
||||
"success_exit_codes": [0]
|
||||
}
|
||||
```
|
||||
|
||||
四个路径必须严格满足上述父子关系,命令必须逐字匹配;应用工程路径、`psp` 子仓库或脚本无法验证时不得创建占位值或形成 `packaged`。`release.py 1` 还需要本轮用户确认 clean rebuild,不能只依赖契约中的允许列表。
|
||||
|
||||
`record_packaging_result.py preflight` 生成不可覆盖的 `schema_version: 1` 检查结果。候选提交前可以用 `--psp-source <staging>` 检查待导入内容;正式组包前必须使用应用工程内 `psp`、完整 commit 和 `--formal`。结果至少记录 PSP/脚本路径、资源来源映射、分区、BSP 分区比对、错误和警告。
|
||||
|
||||
`record_packaging_result.py snapshot` 生成不可覆盖的 `schema_version: 3` 快照,至少锁定契约路径/hash/id、打包前 PSP Git 状态、应用工程 Git 状态和既有 `output` 直接版本目录及目录树 hash。
|
||||
|
||||
`record_packaging_result.py record` 生成 `schema_version: 2` 的 `packaging-result.json`,至少包含 `passed`、契约路径/hash/id、芯片、PSP 仓库/commit/dirty、BSP build ID、应用工程路径/commit/dirty、执行目录、两阶段精确命令/退出码/日志证据、clean rebuild 确认状态、本轮新增版本目录绝对路径和完整文件清单,以及用户/项目指定烧录包的绝对路径、大小、mtime 和 SHA-256。日志证据只保存外部日志路径/hash/大小以及失败或警告的行号和行 hash,不复制日志正文。
|
||||
|
||||
本轮必须恰好新增一个 `output/<版本>/` 直接子目录,且既有版本目录未被修改或删除。handoff 生成时再次核对契约文件和烧录包 hash。
|
||||
|
||||
## 外部 `device-validation.json`
|
||||
|
||||
```json
|
||||
{
|
||||
"schema_version": 1,
|
||||
"result": "PASS",
|
||||
"evidence_source": "USER_REPORTED",
|
||||
"psp_commit": "<完整Git SHA>",
|
||||
"image_path": "/absolute/path/to/flash-package.img",
|
||||
"image_sha256": "<sha256>",
|
||||
"board": "LY-SM-YT70",
|
||||
"hardware_revision": "<revision>",
|
||||
"checks": [
|
||||
{"name": "boot", "result": "PASS", "evidence": "<用户反馈摘要>"}
|
||||
],
|
||||
"unexecuted": [],
|
||||
"issues": [],
|
||||
"confirmed_by": "<用户或负责人>",
|
||||
"confirmed_at": "<ISO-8601>"
|
||||
}
|
||||
```
|
||||
|
||||
适用检查未执行时总体结果不能为 PASS。
|
||||
|
||||
## 外部 `application-integration.json`
|
||||
|
||||
至少包含 schema、结果、PSP commit、应用仓库/commit、应用构建和打包命令/退出码、产物证据、覆盖检查、未执行项、应用负责人和确认时间。
|
||||
|
||||
## 外部 `psp-handoff.json`
|
||||
|
||||
由 `render_psp_handoff.py` 汇总,不复制 PSP 配置。至少包含项目/芯片、PSP 仓库/完整 commit/Git 状态、参考 PSP、BSP lock、Media/AIPlugin 基线、验证状态、烧录包、应用集成、Etunel 标识、自检、负责人确认、未执行项、警告、例外和风险。没有有效 Etunel 上下文时必须标记 `etunel.sent=false`。供 Etunel 使用时只允许 `packaged` 或 `accepted`,并记录 `git ls-remote` 对当前共享 URL/commit 的可达性结果;生成文件本身仍保持 `sent=false`。
|
||||
+240
@@ -0,0 +1,240 @@
|
||||
/*
|
||||
* Copyright (C) Cvitek Co., Ltd. 2019-2020. All rights reserved.
|
||||
*
|
||||
* File Name: sensor_list.h
|
||||
* Description:
|
||||
*/
|
||||
|
||||
#ifndef __SENSOR_LIST_H__
|
||||
#define __SENSOR_LIST_H__
|
||||
#include "cvi_comm_isp.h"
|
||||
|
||||
|
||||
typedef enum _SAMPLE_SNS_TYPE_E {
|
||||
/* ------ LINEAR BEGIN ------*/
|
||||
BRIGATES_BG0808_MIPI_2M_30FPS_10BIT,
|
||||
BYD_BF2253L_MIPI_1200P_30FPS_10BIT,
|
||||
CHIPUP_XS9922B_MODE_720P_1CH_8BIT,
|
||||
CHIPUP_XS9922B_MODE_720P_2CH_8BIT,
|
||||
CHIPUP_XS9922B_MODE_720P_3CH_8BIT,
|
||||
CVSENS_CV2002_MIPI_2M_1080P_30FPS_10BIT,
|
||||
CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT,
|
||||
CVSENS_CV2003_1L_MIPI_2M_1080P_30FPS_10BIT,
|
||||
CVSENS_CV2003_1L_SLAVE_MIPI_2M_1080P_30FPS_10BIT,
|
||||
CVSENS_CV2003_1L_SLAVE1_MIPI_2M_1080P_30FPS_10BIT,
|
||||
CVSENS_CV4001_MIPI_4M_1440P_25FPS_12BIT,
|
||||
CVSENS_CV4002_MIPI_4M_1440P_25FPS_10BIT,
|
||||
CVSENS_CV4002_MIPI_1M_720P_30FPS_10BIT,
|
||||
GCORE_GC02M1_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC0308_MIPI_480P_30FPS_8BIT,
|
||||
GCORE_GC0312_MIPI_480P_20FPS_8BIT,
|
||||
GCORE_GC0329_MIPI_480P_10FPS_8BIT,
|
||||
GCORE_GC05A2_MIPI_5M_30FPS_10BIT,
|
||||
GCORE_GC1054_MIPI_1M_30FPS_10BIT,
|
||||
GCORE_GC1084_MIPI_1M_30FPS_10BIT,
|
||||
GCORE_GC1084_SLAVE_MIPI_1M_30FPS_10BIT,
|
||||
GCORE_GC1084_SLAVE1_MIPI_1M_30FPS_10BIT,
|
||||
GCORE_GC1084_SLAVE2_MIPI_1M_30FPS_10BIT,
|
||||
GCORE_GC2053_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC2053_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC2053_1L_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC2083_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC2093_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC2093_MIPI_2M_60FPS_10BIT,
|
||||
GCORE_GC2093_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC2145_MIPI_2M_12FPS_8BIT,
|
||||
GCORE_GC2385_1L_MIPI_2M_30FPS_10BIT,
|
||||
GCORE_GC4023_MIPI_4M_30FPS_10BIT,
|
||||
GCORE_GC4653_MIPI_4M_30FPS_10BIT,
|
||||
GCORE_GC4653_SLAVE_MIPI_4M_30FPS_10BIT,
|
||||
IMGDS_MIS2008_MIPI_2M_1080P_30FPS_12BIT,
|
||||
IMGDS_MIS4001_MIPI_4M_1440P_30FPS_10BIT,
|
||||
NEXTCHIP_N5_1M_2CH_25FPS_8BIT,
|
||||
NEXTCHIP_N5_2M_25FPS_8BIT,
|
||||
NEXTCHIP_N6_2M_4CH_25FPS_8BIT,
|
||||
OV_OS02D10_MIPI_2M_30FPS_10BIT,
|
||||
OV_OS02D10_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||
OV_OS02N10_1L_MIPI_2M_15FPS_10BIT,
|
||||
OV_OS02K10_SLAVE_MIPI_2M_30FPS_12BIT,
|
||||
OV_OS04A10_MIPI_4M_1440P_30FPS_12BIT,
|
||||
OV_OS04C10_MIPI_4M_30FPS_12BIT,
|
||||
OV_OS04C10_MIPI_4M_1440P_30FPS_12BIT,
|
||||
OV_OS04C10_SLAVE_MIPI_4M_30FPS_12BIT,
|
||||
OV_OS08A20_MIPI_4M_30FPS_10BIT,
|
||||
OV_OS08A20_SLAVE_MIPI_4M_30FPS_10BIT,
|
||||
OV_OS08A20_MIPI_5M_30FPS_10BIT,
|
||||
OV_OS08A20_SLAVE_MIPI_5M_30FPS_10BIT,
|
||||
OV_OS08A20_MIPI_8M_30FPS_10BIT,
|
||||
OV_OS08A20_SLAVE_MIPI_8M_30FPS_10BIT,
|
||||
OV_OV4689_MIPI_4M_30FPS_10BIT,
|
||||
OV_OV5647_MIPI_2M_30FPS_10BIT,
|
||||
OV_OV6211_MIPI_400P_120FPS_10BIT,
|
||||
OV_OV7251_MIPI_480P_120FPS_10BIT,
|
||||
PICO384_THERMAL_384X288,
|
||||
PICO640_THERMAL_479P,
|
||||
PIXELPLUS_PR2000_2M_30FPS_8BIT,
|
||||
PIXELPLUS_PR2020_1M_25FPS_8BIT,
|
||||
PIXELPLUS_PR2020_1M_30FPS_8BIT,
|
||||
PIXELPLUS_PR2020_2M_25FPS_8BIT,
|
||||
PIXELPLUS_PR2020_2M_30FPS_8BIT,
|
||||
PIXELPLUS_PR2100_2M_25FPS_8BIT,
|
||||
PIXELPLUS_PR2100_2M_2CH_25FPS_8BIT,
|
||||
PIXELPLUS_PR2100_2M_4CH_25FPS_8BIT,
|
||||
SMS_SC035GS_MIPI_480P_120FPS_12BIT,
|
||||
SMS_SC035GS_1L_MIPI_480P_120FPS_10BIT,
|
||||
SMS_SC035HGS_MIPI_480P_120FPS_12BIT,
|
||||
SMS_SC035HGS_1L_MIPI_480P_120FPS_10BIT,
|
||||
SMS_SC132GS_MIPI_1080P_60FPS_10BIT,
|
||||
SMS_SC132GS_SLAVE_MIPI_1080P_60FPS_10BIT,
|
||||
SMS_SC1336_1L_MIPI_1M_30FPS_10BIT,
|
||||
SMS_SC1336_1L_MIPI_1M_60FPS_10BIT,
|
||||
SMS_SC1346_1L_MIPI_1M_30FPS_10BIT,
|
||||
SMS_SC1346_1L_MIPI_1M_60FPS_10BIT,
|
||||
SMS_SC1346_1L_SLAVE_MIPI_1M_30FPS_10BIT,
|
||||
SMS_SC1346_1L_SLAVE_MIPI_1M_60FPS_10BIT,
|
||||
SMS_SC200AI_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC200AI_1L_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC230AI_2L_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC230AI_2L_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC301IOT_MIPI_3M_30FPS_10BIT,
|
||||
SMS_SC401AI_MIPI_3M_30FPS_10BIT,
|
||||
SMS_SC401AI_MIPI_4M_30FPS_10BIT,
|
||||
SMS_SC500AI_MIPI_4M_30FPS_10BIT,
|
||||
SMS_SC500AI_MIPI_5M_30FPS_10BIT,
|
||||
SMS_SC501AI_2L_MIPI_5M_30FPS_10BIT,
|
||||
SMS_SC531AI_2L_MIPI_5M_30FPS_10BIT,
|
||||
SMS_SC850SL_MIPI_8M_30FPS_12BIT,
|
||||
SMS_SC3332_MIPI_3M_30FPS_10BIT,
|
||||
SMS_SC3335_MIPI_3M_30FPS_10BIT,
|
||||
SMS_SC3335_SLAVE_MIPI_3M_30FPS_10BIT,
|
||||
SMS_SC3336_MIPI_3M_30FPS_10BIT,
|
||||
SMS_SC3336_1L_MIPI_3M_20FPS_10BIT,
|
||||
SMS_SC3336P_MIPI_3M_30FPS_10BIT,
|
||||
SMS_SC2331_1L_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC2331_1L_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC2331_1L_SLAVE1_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC2335_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC2336_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC2336_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC2336_SLAVE1_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC2336_1L_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC2336P_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC2336P_1L_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC223A_1L_MIPI_2M_30FPS_10BIT,
|
||||
SMS_SC4210_MIPI_4M_30FPS_12BIT,
|
||||
SMS_SC4336_MIPI_4M_30FPS_10BIT,
|
||||
SMS_SC4336P_MIPI_4M_30FPS_10BIT,
|
||||
SMS_SC4336P_MIPI_4M_25FPS_10BIT,
|
||||
SMS_SC4336P_1L_MIPI_4M_20FPS_10BIT,
|
||||
SMS_SC4336P1_1L_MIPI_4M_20FPS_10BIT,
|
||||
SMS_SC5336_2L_MIPI_5M_30FPS_10BIT,
|
||||
SMS_SC5336P_2L_MIPI_5M_30FPS_10BIT,
|
||||
SMS_SC8238_MIPI_8M_30FPS_10BIT,
|
||||
SOI_F23_MIPI_2M_30FPS_10BIT,
|
||||
SOI_F35_MIPI_2M_30FPS_10BIT,
|
||||
SOI_F35_SLAVE_MIPI_2M_30FPS_10BIT,
|
||||
SOI_F37P_MIPI_2M_30FPS_10BIT,
|
||||
SOI_H65_MIPI_1M_30FPS_10BIT,
|
||||
SOI_K06_MIPI_4M_25FPS_10BIT,
|
||||
SOI_Q03_MIPI_3M_30FPS_10BIT,
|
||||
SOI_Q03P_MIPI_3M_30FPS_10BIT,
|
||||
SOI_F53_MIPI_2M_30FPS_10BIT,
|
||||
SOI_F352_MIPI_2M_30FPS_10BIT,
|
||||
SOI_K306_MIPI_4M_25FPS_10BIT,
|
||||
SONY_IMX290_MIPI_1M_30FPS_12BIT,
|
||||
SONY_IMX290_MIPI_2M_60FPS_12BIT,
|
||||
SONY_IMX307_MIPI_2M_30FPS_12BIT,
|
||||
SONY_IMX307_SLAVE_MIPI_2M_30FPS_12BIT,
|
||||
SONY_IMX307_2L_MIPI_2M_30FPS_12BIT,
|
||||
SONY_IMX307_SUBLVDS_2M_30FPS_12BIT,
|
||||
SONY_IMX307_MIPI_2M_60FPS_12BIT,
|
||||
SONY_IMX307_SUBLVDS_2M_60FPS_12BIT,
|
||||
#ifdef FPGA_PORTING
|
||||
SONY_IMX327_MIPI_1M_30FPS_10BIT,
|
||||
#endif
|
||||
SONY_IMX327_MIPI_2M_30FPS_12BIT,
|
||||
SONY_IMX327_SLAVE_MIPI_2M_30FPS_12BIT,
|
||||
SONY_IMX327_2L_MIPI_2M_30FPS_12BIT,
|
||||
SONY_IMX327_SUBLVDS_2M_30FPS_12BIT,
|
||||
SONY_IMX327_MIPI_2M_60FPS_12BIT,
|
||||
SONY_IMX334_MIPI_8M_30FPS_12BIT,
|
||||
SONY_IMX335_MIPI_4M_30FPS_12BIT,
|
||||
SONY_IMX335_MIPI_4M_1600P_30FPS_12BIT,
|
||||
SONY_IMX335_2L_MIPI_4M_30FPS_10BIT,
|
||||
SONY_IMX335_MIPI_5M_30FPS_12BIT,
|
||||
SONY_IMX335_MIPI_2M_60FPS_10BIT,
|
||||
SONY_IMX335_MIPI_4M_60FPS_10BIT,
|
||||
SONY_IMX335_MIPI_5M_60FPS_10BIT,
|
||||
SONY_IMX347_MIPI_4M_60FPS_12BIT,
|
||||
SONY_IMX385_MIPI_2M_30FPS_12BIT,
|
||||
SONY_IMX675_MIPI_5M_30FPS_12BIT,
|
||||
TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT,
|
||||
TECHPOINT_TP2850_MIPI_4M_30FPS_8BIT,
|
||||
TECHPOINT_TP2825_MIPI_2M_30FPS_8BIT,
|
||||
TECHPOINT_TP2863_MIPI_1M_25FPS_8BIT,
|
||||
TECHPOINT_TP2863_MIPI_2M_25FPS_8BIT,
|
||||
TECHPOINT_TP2863_MIPI_1M_30FPS_8BIT,
|
||||
TECHPOINT_TP2863_MIPI_2M_30FPS_8BIT,
|
||||
VIVO_MCS369_2M_30FPS_12BIT,
|
||||
VIVO_MCS369Q_4M_30FPS_12BIT,
|
||||
VIVO_MM308M2_2M_25FPS_8BIT,
|
||||
LONTIUM_LT6911_2M_60FPS_8BIT,
|
||||
LONTIUM_LT7911_2M_60FPS_8BIT,
|
||||
/* ------ LINEAR END ------*/
|
||||
SAMPLE_SNS_TYPE_LINEAR_BUTT,
|
||||
|
||||
/* ------ WDR 2TO1 BEGIN ------*/
|
||||
BRIGATES_BG0808_MIPI_2M_30FPS_10BIT_WDR2TO1 = SAMPLE_SNS_TYPE_LINEAR_BUTT,
|
||||
CVSENS_CV2002_MIPI_2M_1080P_30FPS_WDR2TO1,
|
||||
CVSENS_CV4001_MIPI_4M_1440P_15FPS_WDR2TO1,
|
||||
GCORE_GC2093_MIPI_2M_30FPS_10BIT_WDR2TO1,
|
||||
GCORE_GC2093_SLAVE_MIPI_2M_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS04A10_MIPI_4M_1440P_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS04C10_MIPI_4M_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS04C10_MIPI_4M_1440P_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS04C10_SLAVE_MIPI_4M_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS08A20_MIPI_4M_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS08A20_SLAVE_MIPI_4M_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS08A20_MIPI_5M_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS08A20_SLAVE_MIPI_5M_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS08A20_MIPI_8M_30FPS_10BIT_WDR2TO1,
|
||||
OV_OS08A20_SLAVE_MIPI_8M_30FPS_10BIT_WDR2TO1,
|
||||
SMS_SC1336_1L_MIPI_1M_30FPS_10BIT_WDR2TO1,
|
||||
SMS_SC1336_1L_MIPI_1M_60FPS_10BIT_WDR2TO1,
|
||||
SMS_SC1346_1L_MIPI_1M_30FPS_10BIT_WDR2TO1,
|
||||
SMS_SC1346_1L_MIPI_1M_60FPS_10BIT_WDR2TO1,
|
||||
SMS_SC200AI_MIPI_2M_30FPS_10BIT_WDR2TO1,
|
||||
SMS_SC500AI_MIPI_4M_30FPS_10BIT_WDR2TO1,
|
||||
SMS_SC500AI_MIPI_5M_30FPS_10BIT_WDR2TO1,
|
||||
SMS_SC850SL_MIPI_8M_30FPS_10BIT_WDR2TO1,
|
||||
SMS_SC4210_MIPI_4M_30FPS_10BIT_WDR2TO1,
|
||||
SMS_SC8238_MIPI_8M_15FPS_10BIT_WDR2TO1,
|
||||
SOI_F35_MIPI_2M_30FPS_10BIT_WDR2TO1,
|
||||
SOI_F35_SLAVE_MIPI_2M_30FPS_10BIT_WDR2TO1,
|
||||
SOI_F352_MIPI_2M_30FPS_10BIT_WDR2TO1,
|
||||
SONY_IMX307_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX307_2L_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX307_SLAVE_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX307_SUBLVDS_2M_30FPS_12BIT_WDR2TO1,
|
||||
#ifdef FPGA_PORTING
|
||||
SONY_IMX327_MIPI_1M_30FPS_10BIT_WDR2TO1,
|
||||
#endif
|
||||
SONY_IMX327_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX327_2L_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX327_SLAVE_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX327_SUBLVDS_2M_30FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX334_MIPI_8M_30FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX335_MIPI_2M_30FPS_10BIT_WDR2TO1,
|
||||
SONY_IMX335_MIPI_4M_30FPS_10BIT_WDR2TO1,
|
||||
SONY_IMX335_MIPI_4M_1600P_30FPS_10BIT_WDR2TO1,
|
||||
SONY_IMX335_MIPI_5M_30FPS_10BIT_WDR2TO1,
|
||||
SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX347_MIPI_4M_30FPS_12BIT_WDR2TO1,
|
||||
SONY_IMX385_MIPI_2M_30FPS_12BIT_WDR2TO1,
|
||||
/* ------ WDR 2TO1 END ------*/
|
||||
SAMPLE_SNS_TYPE_BUTT,
|
||||
} SAMPLE_SNS_TYPE_E;
|
||||
|
||||
extern const char *snsr_type_name[SAMPLE_SNS_TYPE_BUTT];
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,524 @@
|
||||
#ifndef __SENSOR_CFG_H_
|
||||
#define __SENSOR_CFG_H_
|
||||
|
||||
#include "cvi_comm_video.h"
|
||||
#include "cvi_sns_ctrl.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef SWITCH_GPIO_NUM
|
||||
#define SWITCH_GPIO_NUM 2
|
||||
#endif
|
||||
|
||||
#define SNS_DBG_PRT(fmt...) \
|
||||
do { \
|
||||
printf("[%s]-%d: ", __func__, __LINE__); \
|
||||
printf(fmt); \
|
||||
} while (0)
|
||||
|
||||
typedef enum _SNS_INTF_MODE_E {
|
||||
SNS_MODE_BT656 = 0, /* ITU-R BT.656 YUV4:2:2 */
|
||||
SNS_MODE_BT601, /* ITU-R BT.601 YUV4:2:2 */
|
||||
SNS_MODE_DIGITAL_CAMERA, /* digatal camera mode */
|
||||
SNS_MODE_BT1120_STANDARD, /* BT.1120 progressive mode */
|
||||
SNS_MODE_BT1120_INTERLEAVED, /* BT.1120 interstage mode */
|
||||
SNS_MODE_MIPI, /* MIPI RAW mode */
|
||||
SNS_MODE_MIPI_YUV420_NORMAL, /* MIPI YUV420 normal mode */
|
||||
SNS_MODE_MIPI_YUV420_LEGACY, /* MIPI YUV420 legacy mode */
|
||||
SNS_MODE_MIPI_YUV422, /* MIPI YUV422 mode */
|
||||
SNS_MODE_LVDS, /* LVDS mode */
|
||||
SNS_MODE_HISPI, /* HiSPi mode */
|
||||
SNS_MODE_SLVS, /* SLVS mode */
|
||||
SNS_MODE_BUTT
|
||||
} SNS_INTF_MODE_E;
|
||||
|
||||
typedef enum _SNS_DATA_TYPE_E {
|
||||
SNS_DATA_TYPE_YUV = 0,
|
||||
SNS_DATA_TYPE_RGB,
|
||||
SNS_DATA_TYPE_YUV_EARLY,
|
||||
SNS_DATA_TYPE_BUTT
|
||||
} SNS_DATA_TYPE_E;
|
||||
|
||||
typedef enum _SNS_YUV_DATA_SEQ_E {
|
||||
SNS_DATA_SEQ_VUVU = 0,
|
||||
SNS_DATA_SEQ_UVUV,
|
||||
SNS_DATA_SEQ_UYVY, /* The input sequence of YUV is UYVY */
|
||||
SNS_DATA_SEQ_VYUY, /* The input sequence of YUV is VYUY */
|
||||
SNS_DATA_SEQ_YUYV, /* The input sequence of YUV is YUYV */
|
||||
SNS_DATA_SEQ_YVYU, /* The input sequence of YUV is YVYU */
|
||||
SNS_DATA_SEQ_BUTT
|
||||
} SNS_YUV_DATA_SEQ_E;
|
||||
|
||||
typedef enum _SNS_CHN_MODE_E {
|
||||
SNS_CHN_MODE_1Multiplex = 0, /* 1 Multiplex mode */
|
||||
SNS_CHN_MODE_2Multiplex, /* 2 Multiplex mode */
|
||||
SNS_CHN_MODE_3Multiplex, /* 3 Multiplex mode */
|
||||
SNS_CHN_MODE_4Multiplex, /* 4 Multiplex mode */
|
||||
SNS_CHN_MODE_BUTT
|
||||
} SNS_CHN_MODE_E;
|
||||
|
||||
typedef struct _SENSOR_MCLK_ATTR_S {
|
||||
CVI_U8 u8Mclk;
|
||||
CVI_BOOL bMclkEn;
|
||||
} SENSOR_MCLK_ATTR_S;
|
||||
|
||||
extern ISP_SNS_OBJ_S stSnsAR2020_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsBG0808_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsCV2003_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsCV2005_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc02m1_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc0308_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc1054_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc2053_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc2053_Slave_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc2053_1l_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc2083_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc2093_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc2145_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc4023_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc4653_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc4683_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsGc8613_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsMIS40C1_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsN5_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsN6_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsNC021_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOs02g10_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOs04a10_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOs04c10_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOs04e10_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOs05a20_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOs08a20_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOs08b10_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOv2736_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOv4689_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOv48b2q_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOv6211_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOv7251_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsOv9282_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsPR2020_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsPR2100_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC020HGS_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC035GS_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC035GS_1L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC035HGS_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC035HGS_1L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC233HGS_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC235HAI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC1336_1L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC1346_1L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC1346_1L_Slave_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC200AI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC200AI_1L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC301IOT_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC401AI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC431HAI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC438AI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC500AI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC501AI_2L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC531AI_2L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC533HAI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC535HAI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC635AI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC831HAI_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC1330_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC3332_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC3335_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC3336_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC3336_1L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC2335_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC2336_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC2336_Slave_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC2336_Slave1_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC2336_1L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC2336P_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC2336P_1L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC4336_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC4336P_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsSC202L_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsF23_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsF35_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsF37P_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsK06_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsQ03_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsQ03P_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx135_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx290_2l_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx307_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx307_Slave_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx307_2l_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx327_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx327_Slave_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx327_2l_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx327_fpga_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx327_Sublvds_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx334_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx335_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx376_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx412_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx415_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx585_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx662_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx675_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx678_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsImx900_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsTP2860_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsTP2825_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsMCS369_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsMCS369Q_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsMM308M2_Obj;
|
||||
extern ISP_SNS_OBJ_S stSnsLT6911_Obj;
|
||||
|
||||
typedef enum _SNS_TYPE_E {
|
||||
/*BRIGATES*/
|
||||
BRIGATES_BG0808_MIPI_2M_30FPS_10BIT = 0X38003240,
|
||||
BRIGATES_BG0808_MIPI_2M_30FPS_10BIT_WDR2TO1 = 0X380032C0,
|
||||
/*BYD*/
|
||||
/*CHIPUP*/
|
||||
/*CVSENS*/
|
||||
CVSENS_CV2003_1L_MASTER_SWITCH_MIPI_2M_1080P_15FPS_10BIT = 0X44003108,
|
||||
CVSENS_CV2003_1L_SLAVE_SWITCH_MIPI_2M_1080P_15FPS_10BIT = 0X44003110,
|
||||
CVSENS_CV2003_MIPI_2M_1080P_30FPS_10BIT = 0X44003340,
|
||||
CVSENS_CV2003_1L_MIPI_2M_1080P_30FPS_10BIT = 0X44003300,
|
||||
CVSENS_CV2003_1L_SLAVE_HIGH_MIPI_2M_1080P_30FPS_10BIT = 0X44003310,
|
||||
CVSENS_CV2003_1L_SLAVE_LOW_MIPI_2M_1080P_30FPS_10BIT = 0X44003311,
|
||||
CVSENS_CV2005_1L_MIPI_2M_1080P_15FPS_10BIT = 0X44083100,
|
||||
/*GCORE*/
|
||||
GCORE_GC02M1_MIPI_2M_30FPS_10BIT = 0X48183300,
|
||||
GCORE_GC0308_1M_30FPS_8BIT = 0X48570B60,
|
||||
GCORE_GC1054_MIPI_1M_30FPS_10BIT = 0X48342340,
|
||||
GCORE_GC2053_MIPI_2M_30FPS_10BIT = 0X483C3340,
|
||||
GCORE_GC2053_SLAVE_MIPI_2M_30FPS_10BIT = 0X483C3350,
|
||||
GCORE_GC2053_1L_MIPI_2M_30FPS_10BIT = 0X483C3300,
|
||||
GCORE_GC2083_2L_MIPI_2M_30FPS_10BIT = 0X48443320,
|
||||
GCORE_GC2093_MIPI_2M_30FPS_10BIT = 0X48483340,
|
||||
GCORE_GC2093_MIPI_2M_60FPS_10BIT = 0X48483440,
|
||||
GCORE_GC2145_2M_12FPS_8BIT = 0X484F3020,
|
||||
GCORE_GC4023_MIPI_4M_30FPS_10BIT = 0X48083B40,
|
||||
GCORE_GC4653_MIPI_4M_30FPS_10BIT = 0X480C3B40,
|
||||
GCORE_GC4683_MIPI_1M_120FPS_10BIT = 0X48582640,
|
||||
GCORE_GC4683_MIPI_4M_60FPS_10BIT = 0X48583C20,
|
||||
GCORE_GC8613_MIPI_2M_30FPS_10BIT = 0X48143340,
|
||||
GCORE_GC8613_MIPI_8M_30FPS_10BIT = 0X48145B40,
|
||||
GCORE_GC8613_MIPI_8M_25FPS_10BIT = 0X48145A40,
|
||||
GCORE_GC8613_MIPI_8M_60FPS_10BIT = 0X48145C40,
|
||||
GCORE_GC2093_MIPI_2M_30FPS_10BIT_WDR2TO1 = 0X484833C0,
|
||||
GCORE_GC8613_MIPI_8M_30FPS_10BIT_WDR2TO1 = 0X48145BC0,
|
||||
/*IMGDS*/
|
||||
IMGDS_MIS40C1_MIPI_4M_20FPS_1L_10BIT = 0X00003A00,
|
||||
IMGDS_MIS40C1_MIPI_4M_20FPS_2L_10BIT = 0X00003A20,
|
||||
/*NEXTCHIP*/
|
||||
NEXTCHIP_N5_1M_2CH_25FPS_8BIT = 0X04032240,
|
||||
NEXTCHIP_N5_2M_25FPS_8BIT = 0X04033240,
|
||||
NEXTCHIP_N6_2M_4CH_25FPS_8BIT = 0X04073240,
|
||||
/*OV*/
|
||||
OV_OS02G10_MIPI_2M_30FPS_10BIT = 0X10503320,
|
||||
OV_OS04A10_MIPI_4M_1440P_30FPS_12BIT = 0X10083B40,
|
||||
OV_OS04A10_MIPI_4M_1440P_2L_10BIT = 0X10083A20,
|
||||
OV_OS04A10_MASTER_MIPI_4M_1440P_2L_10BIT = 0X10083A28,
|
||||
OV_OS04A10_SLAVE_MIPI_4M_1440P_2L_10BIT = 0X10083A30,
|
||||
OV_OS04C10_MIPI_4M_30FPS_12BIT = 0X100C3B40,
|
||||
OV_OS04C10_MIPI_4M_1440P_30FPS_12BIT = 0X100C3B41,
|
||||
OV_OS05A20_MIPI_1944P_15FPS_2L_12BIT = 0X10605120,
|
||||
OV_OS08A20_MIPI_5M_30FPS_10BIT = 0X101C5340, //2592 * 1944
|
||||
OV_OV4689_MIPI_4M_30FPS_10BIT = 0X102C3B40,
|
||||
OV_OV48B2Q_PDAF_MIPI_8M_30FPS_10BIT = 0X10245B40,
|
||||
OV_OV48B2Q_PDAF_MIPI_12M_30FPS_10BIT = 0X10246340,
|
||||
OV_OV6211_MIPI_400P_120FPS_10BIT = 0X10340E40,
|
||||
OV_OV7251_MIPI_480P_120FPS_10BIT = 0X10380E40,
|
||||
OV_OS04E10_MIPI_4M_30FPS_12BIT = 0X10103B40,
|
||||
OV_OS04E10_MIPI_4M_30FPS_2L_10BIT = 0X10103B20,
|
||||
OV_OS04E10_SALVE_MIPI_4M_30FPS_2L_10BIT = 0X10103B30,
|
||||
OV_OS08B10_MIPI_8M_30FPS_10BIT = 0X10205B40,
|
||||
OV_OV2736_MIPI_2M_30FPS_12BIT = 0X10283340,
|
||||
OV_OS04A10_MIPI_4M_1440P_30FPS_10BIT_WDR2TO1 = 0X10083BC0,
|
||||
OV_OS04A10_MASTER_MIPI_4M_1440P_2L_10BIT_WDR2TO1 = 0X10083AA8,
|
||||
OV_OS04A10_SLAVE_MIPI_4M_1440P_2L_10BIT_WDR2TO1 = 0X10083AB0,
|
||||
OV_OS04C10_MIPI_4M_30FPS_10BIT_WDR2TO1 = 0X100C3BC0,
|
||||
OV_OS04C10_MIPI_4M_1440P_30FPS_10BIT_WDR2TO1 = 0X100C3BC1,
|
||||
OV_OS08A20_MIPI_4M_30FPS_10BIT_WDR2TO1 = 0X101C3BC0,
|
||||
OV_OS08A20_SLAVE_MIPI_4M_30FPS_10BIT_WDR2TO1 = 0X101C3BD0,
|
||||
OV_OS08A20_MIPI_5M_30FPS_10BIT_WDR2TO1 = 0X101C53C0,
|
||||
OV_OS08A20_MIPI_8M_30FPS_10BIT_WDR2TO1 = 0X101C5BC0,
|
||||
OV_OS04E10_MIPI_4M_30FPS_10BIT_WDR2TO1 = 0X10103BC0,
|
||||
OV_OS04E10_MIPI_4M_30FPS_2L_10BIT_WDR2TO1 = 0X10103BA0,
|
||||
OV_OS04E10_SLAVE_MIPI_4M_30FPS_2L_10BIT_WDR2TO1 = 0X10103BB0,
|
||||
OV_OS08B10_MIPI_8M_30FPS_10BIT_WDR2TO1 = 0X10205BC0,
|
||||
OV_OV2736_MIPI_2M_30FPS_12BIT_WDR2TO1 = 0X102833C0,
|
||||
OV_OV9282_MASTER_MIPI_800P_15FPS_2L_10BIT = 0X105C1928,
|
||||
OV_OV9282_SLAVE_MIPI_800P_15FPS_2L_10BIT = 0X105C1930,
|
||||
/*PICO384*/
|
||||
PICO640_THERMAL_479P = 0X64050B40,
|
||||
/*PIXELPLUS*/
|
||||
PIXELPLUS_PR2020_1M_25FPS_8BIT = 0X18012240,
|
||||
PIXELPLUS_PR2020_1M_30FPS_8BIT = 0X18012340,
|
||||
PIXELPLUS_PR2020_2M_25FPS_8BIT = 0X18013240,
|
||||
PIXELPLUS_PR2020_2M_30FPS_8BIT = 0X18013340,
|
||||
PIXELPLUS_PR2100_2M_25FPS_8BIT = 0X18053240,
|
||||
PIXELPLUS_PR2100_2M_2CH_2L_25FPS_8BIT = 0X18053220,
|
||||
PIXELPLUS_PR2100_2M_2CH_25FPS_8BIT = 0X18053241,
|
||||
PIXELPLUS_PR2100_2M_4CH_25FPS_8BIT = 0X18053242,
|
||||
PIXELPLUS_PR2100_2M_4CH_30FPS_8BIT = 0X18053340,
|
||||
/*SMS*/
|
||||
SMS_SC020HGS_MIPI_400P_120FPS_10BIT = 0X20A80E40,
|
||||
SMS_SC035GS_MIPI_480P_120FPS_12BIT = 0X20300E40,
|
||||
SMS_SC035GS_1L_MIPI_480P_120FPS_10BIT = 0X20300E00,
|
||||
SMS_SC035HGS_MIPI_480P_120FPS_12BIT = 0X20340E40,
|
||||
SMS_SC035HGS_1L_MIPI_480P_120FPS_10BIT = 0X20340E00,
|
||||
SMS_SC233HGS_MIPI_2M_60FPS_10BIT = 0X20AC3440,
|
||||
SMS_SC233HGS_MIPI_2M_120FPS_10BIT = 0X20AC3640,
|
||||
SMS_SC235HAI_1L_MIPI_2M_15FPS_10BIT = 0X20B83100,
|
||||
SMS_SC235HAI_1L_SLAVE_MIPI_2M_15FPS_10BIT = 0X20B83110,
|
||||
SMS_SC235HAI_2L_MIPI_2M_15FPS_10BIT = 0X20B83120,
|
||||
SMS_SC235HAI_2L_SLAVE_MIPI_2M_15FPS_10BIT = 0X20B83130,
|
||||
SMS_SC235HAI_2L_MIPI_2M_30FPS_10BIT = 0X20B83320,
|
||||
SMS_SC1336_1L_MIPI_600P_30FPS_10BIT = 0X20701300,
|
||||
SMS_SC1336_1L_MIPI_600P_60FPS_10BIT = 0X20701400,
|
||||
SMS_SC1336_1L_MIPI_1M_30FPS_10BIT = 0X20702300,
|
||||
SMS_SC1336_1L_MIPI_1M_60FPS_10BIT = 0X20702400,
|
||||
SMS_SC1346_1L_MIPI_1M_30FPS_10BIT = 0X20742300,
|
||||
SMS_SC1346_1L_MIPI_1M_60FPS_10BIT = 0X20742400,
|
||||
SMS_SC1346_1L_SLAVE_MIPI_1M_30FPS_10BIT = 0X20742310,
|
||||
SMS_SC1346_1L_SLAVE_MIPI_1M_60FPS_10BIT = 0X20742410,
|
||||
SMS_SC1346_1L_MIPI_600P_30FPS_10BIT = 0X20741300,
|
||||
SMS_SC1346_1L_MIPI_600P_60FPS_10BIT = 0X20741400,
|
||||
SMS_SC200AI_MIPI_2M_30FPS_10BIT = 0X203C3340,
|
||||
SMS_SC200AI_1L_MIPI_2M_30FPS_10BIT = 0X203C3300,
|
||||
SMS_SC301IOT_MIPI_3M_30FPS_10BIT = 0X204C3B40,
|
||||
SMS_SC401AI_MIPI_3M_30FPS_10BIT = 0X20503B40,
|
||||
SMS_SC401AI_MIPI_4M_30FPS_10BIT = 0X20503B41,
|
||||
SMS_SC431HAI_2L_MIPI_4M_30FPS_10BIT = 0X20CC3B20,
|
||||
SMS_SC431HAI_1L_MIPI_4M_20FPS_10BIT = 0X20CC3900,
|
||||
SMS_SC500AI_MIPI_4M_30FPS_10BIT = 0X20583B40,
|
||||
SMS_SC500AI_MIPI_5M_30FPS_10BIT = 0X20585340,
|
||||
SMS_SC501AI_2L_MIPI_5M_30FPS_10BIT = 0X20985320,
|
||||
SMS_SC531AI_2L_MIPI_5M_30FPS_10BIT = 0X20605320,
|
||||
SMS_SC1330_MIPI_1M_30FPS_10BIT = 0X20A42B20,
|
||||
SMS_SC1330_MIPI_1M_30FPS_10BIT_MASTER = 0X20A42B28,
|
||||
SMS_SC1330_MIPI_1M_30FPS_10BIT_SLAVE = 0X20A42B30,
|
||||
SMS_SC1330_1L_MIPI_1M_30FPS_12BIT = 0X20A42B00,
|
||||
SMS_SC1330_1L_MIPI_1M_30FPS_12BIT_MASTER = 0X20A42B08,
|
||||
SMS_SC1330_1L_MIPI_1M_30FPS_12BIT_SLAVE = 0X20A42B10,
|
||||
SMS_SC3332_MIPI_3M_30FPS_10BIT = 0X20003B40,
|
||||
SMS_SC3335_MIPI_3M_30FPS_10BIT = 0X20043B40,
|
||||
SMS_SC3336_MIPI_3M_30FPS_10BIT = 0X20083B40,
|
||||
SMS_SC3336_1L_MIPI_3M_20FPS_10BIT = 0X20083A00,
|
||||
SMS_SC2335_MIPI_2M_30FPS_10BIT = 0X20883340,
|
||||
SMS_SC2336_MIPI_2M_30FPS_10BIT = 0X208C3340,
|
||||
SMS_SC2336_SLAVE_MIPI_2M_30FPS_10BIT = 0X208C3350,
|
||||
SMS_SC2336_SLAVE1_MIPI_2M_30FPS_10BIT = 0X208C3351,
|
||||
SMS_SC2336_1L_MIPI_2M_30FPS_10BIT = 0X208C3300,
|
||||
SMS_SC2336P_MIPI_2M_30FPS_10BIT = 0X20903340,
|
||||
SMS_SC2336P_1L_MIPI_2M_30FPS_10BIT = 0X20903300,
|
||||
SMS_SC4336_MIPI_4M_30FPS_10BIT = 0X20183B40,
|
||||
SMS_SC4336P_MIPI_4M_30FPS_10BIT = 0X201C3B40,
|
||||
SMS_SC4336P_1L_MIPI_4M_20FPS_10BIT = 0X201C3A00,
|
||||
SMS_SC4336P_SLAVE_MIPI_4M_30FPS_10BIT = 0X201C3B50,
|
||||
SMS_SC233HGS_MIPI_2M_60FPS_10BIT_WDR2TO1 = 0X20AC34C0,
|
||||
SMS_SC200AI_MIPI_2M_30FPS_10BIT_WDR2TO1 = 0X203C33C0,
|
||||
SMS_SC438AI_MIPI_4M_30FPS_10BIT = 0X20A03B40,
|
||||
SMS_SC438AI_MIPI_4M_30FPS_10BIT_MASTER = 0X20A03B48,
|
||||
SMS_SC438AI_MIPI_4M_30FPS_10BIT_SLAVE = 0X20A03B50,
|
||||
SMS_SC500AI_MIPI_5M_60FPS_10BIT = 0X20585440,
|
||||
SMS_SC500AI_2L_MIPI_5M_30FPS_10BIT = 0X20585320,
|
||||
SMS_SC533HAI_MIPI_5M_30FPS_10BIT = 0X20C84B40,
|
||||
SMS_SC533HAI_MIPI_5M_30FPS_10BIT_WDR2TO1 = 0X20C84BC0,
|
||||
SMS_SC533HAI_2L_MIPI_5M_30FPS_10BIT = 0X20C84B20,
|
||||
SMS_SC535HAI_MIPI_5M_15FPS_2L_10BIT_MASTER = 0X20BC3928,
|
||||
SMS_SC535HAI_MIPI_5M_15FPS_2L_10BIT_SLAVE = 0X20BC3930,
|
||||
SMS_SC535HAI_MIPI_5M_15FPS_4L_10BIT_MASTER = 0X20BC3948,
|
||||
SMS_SC535HAI_MIPI_5M_15FPS_4L_10BIT_SLAVE = 0X20BC3950,
|
||||
SMS_SC535HAI_MIPI_5M_30FPS_2L_10BIT_MASTER = 0X20BC3B28,
|
||||
SMS_SC535HAI_MIPI_5M_30FPS_2L_10BIT_SLAVE = 0X20BC3B30,
|
||||
SMS_SC535HAI_MIPI_5M_30FPS_4L_10BIT_MASTER = 0X20BC3B48,
|
||||
SMS_SC535HAI_MIPI_5M_30FPS_4L_10BIT_SLAVE = 0X20BC3B50,
|
||||
SMS_SC635AI_MIPI_6M_60FPS_10BIT = 0X20B05C40,
|
||||
SMS_SC500AI_MIPI_4M_30FPS_10BIT_WDR2TO1 = 0X20583BC0,
|
||||
SMS_SC500AI_MIPI_5M_30FPS_10BIT_WDR2TO1 = 0X205853C0,
|
||||
SMS_SC831HAI_MASTER_MIPI_8M_30FPS_10BIT = 0X20B45B48,
|
||||
SMS_SC831HAI_SLAVE_MIPI_8M_30FPS_10BIT = 0X20B45B50,
|
||||
SMS_SC202L_2L_MASTER_MIPI_2M_30FPS_10BIT = 0X20C03328,
|
||||
SMS_SC202L_2L_SLAVE_MIPI_2M_30FPS_10BIT = 0X20C03330,
|
||||
/*SOI*/
|
||||
SOI_F23_MIPI_2M_30FPS_10BIT = 0X24103340,
|
||||
SOI_F35_MIPI_2M_30FPS_10BIT = 0X24143340,
|
||||
SOI_F37P_MIPI_2M_30FPS_10BIT = 0X24183340,
|
||||
SOI_K06_MIPI_4M_25FPS_10BIT = 0X24043A40,
|
||||
SOI_Q03_MIPI_3M_30FPS_10BIT = 0X24283B40,
|
||||
SOI_Q03P_MIPI_3M_30FPS_10BIT = 0X242C3B40,
|
||||
SOI_F23_MIPI_2M_30FPS_10BIT_WDR2TO1 = 0X241033C0,
|
||||
SOI_F35_MIPI_2M_30FPS_10BIT_WDR2TO1 = 0X241433C0,
|
||||
SOI_F35_SLAVE_MIPI_2M_30FPS_10BIT_WDR2TO1 = 0X241433D0,
|
||||
/*SONY*/
|
||||
SONY_IMX135_MIPI_8M_25FPS_10BIT = 0X28405A40,
|
||||
SONY_IMX290_MIPI_1M_30FPS_12BIT = 0X282C2340,
|
||||
SONY_IMX290_MIPI_2M_60FPS_12BIT = 0X282C3440,
|
||||
SONY_IMX307_MIPI_2M_30FPS_12BIT = 0X28303340,
|
||||
SONY_IMX307_SLAVE_MIPI_2M_30FPS_12BIT = 0X28303350,
|
||||
SONY_IMX307_2L_MIPI_2M_30FPS_12BIT = 0X28303320,
|
||||
SONY_IMX307_MIPI_2M_60FPS_12BIT = 0X28303440,
|
||||
SONY_IMX327_MIPI_2M_30FPS_12BIT = 0X28343340,
|
||||
SONY_IMX327_SLAVE_MIPI_2M_30FPS_12BIT = 0X28343350,
|
||||
SONY_IMX327_2L_MIPI_2M_30FPS_12BIT = 0X28343320,
|
||||
SONY_IMX327_SUBLVDS_2M_30FPS_12BIT = 0X28343341,
|
||||
SONY_IMX327_MIPI_2M_60FPS_12BIT = 0X28343440,
|
||||
SONY_IMX327_MIPI_1M_30FPS_10BIT = 0X28342340,
|
||||
SONY_IMX334_MIPI_8M_30FPS_12BIT = 0X28005B40,
|
||||
SONY_IMX334_MIPI_8M_60FPS_12BIT = 0X28005C40,
|
||||
SONY_IMX335_MIPI_4M_30FPS_12BIT = 0X28043B40,
|
||||
SONY_IMX335_MIPI_4M_1600P_30FPS_12BIT = 0X28044B40,
|
||||
SONY_IMX335_2L_MIPI_4M_30FPS_10BIT = 0X28043B20,
|
||||
SONY_IMX335_MIPI_5M_30FPS_12BIT = 0X28045340,
|
||||
SONY_IMX335_MIPI_2M_60FPS_10BIT = 0X28043440,
|
||||
SONY_IMX335_MIPI_4M_60FPS_10BIT = 0X28043C40,
|
||||
SONY_IMX335_MIPI_5M_60FPS_10BIT = 0X28045440,
|
||||
SONY_IMX376_2L_MIPI_5M_30FPS_10BIT = 0X28445320,
|
||||
SONY_IMX662_MIPI_2M_30FPS_10BIT = 0X28203320,
|
||||
SONY_IMX675_MIPI_4M_30FPS_12BIT = 0X28243B40,
|
||||
SONY_IMX675_MIPI_5M_30FPS_12BIT = 0X28245340,
|
||||
SONY_IMX678_MIPI_8M_30FPS_10BIT = 0X283C5B40,
|
||||
SONY_IMX678_MIPI_5M_25FPS_12BIT_WDR2TO1 = 0X283C5240,
|
||||
SONY_IMX412_MIPI_12M_30FPS_12BIT = 0X28106340,
|
||||
SONY_IMX415_MIPI_2M_60FPS_12BIT = 0X28143440,
|
||||
SONY_IMX415_MIPI_4M_25FPS_12BIT = 0X28143A40,
|
||||
SONY_IMX415_MIPI_5M_25FPS_12BIT = 0X28145240,
|
||||
SONY_IMX415_MIPI_8M_25FPS_12BIT = 0X28145A40,
|
||||
SONY_IMX415_MIPI_8M_30FPS_10BIT = 0X28145B40,
|
||||
SONY_IMX415_MIPI_4M_25FPS_12BIT_WDR2TO1 = 0X28143A41,
|
||||
SONY_IMX585_MIPI_8M_30FPS_12BIT = 0X281C5B40,
|
||||
SONY_IMX900_MIPI_3M_70FPS_12BIT_COLOR = 0X28383C40,
|
||||
SONY_IMX900_MIPI_3M_70FPS_12BIT_MONO = 0X28383C41,
|
||||
SONY_IMX307_MIPI_2M_30FPS_12BIT_WDR2TO1 = 0X283033C0,
|
||||
SONY_IMX307_2L_MIPI_2M_30FPS_12BIT_WDR2TO1 = 0X283033A0,
|
||||
SONY_IMX307_SLAVE_MIPI_2M_30FPS_12BIT_WDR2TO1 = 0X283033D0,
|
||||
SONY_IMX327_MIPI_2M_30FPS_12BIT_WDR2TO1 = 0X283433C0,
|
||||
SONY_IMX327_2L_MIPI_2M_30FPS_12BIT_WDR2TO1 = 0X283433A0,
|
||||
SONY_IMX327_SLAVE_MIPI_2M_30FPS_12BIT_WDR2TO1 = 0X283433D0,
|
||||
SONY_IMX327_SUBLVDS_2M_30FPS_12BIT_WDR2TO1 = 0X283433C1,
|
||||
SONY_IMX327_MIPI_1M_30FPS_10BIT_WDR2TO1 = 0X283423C0,
|
||||
SONY_IMX334_MIPI_8M_30FPS_12BIT_WDR2TO1 = 0X28005BC0,
|
||||
SONY_IMX335_MIPI_2M_30FPS_10BIT_WDR2TO1 = 0X280433C0,
|
||||
SONY_IMX335_MIPI_4M_30FPS_10BIT_WDR2TO1 = 0X28043BC0,
|
||||
SONY_IMX335_MIPI_4M_1600P_30FPS_10BIT_WDR2TO1 = 0X28044BC0,
|
||||
SONY_IMX335_MIPI_5M_30FPS_10BIT_WDR2TO1 = 0X280453C0,
|
||||
SONY_IMX662_MIPI_2M_30FPS_10BIT_WDR2TO1 = 0X282033A0,
|
||||
SONY_IMX675_MIPI_5M_25FPS_12BIT_WDR2TO1 = 0X282452C0,
|
||||
SONY_IMX412_MIPI_8M_30FPS_12BIT_WDR2TO1 = 0X28105BC0,
|
||||
SONY_IMX412_MIPI_12M_30FPS_12BIT_WDR2TO1 = 0X281063C0,
|
||||
SONY_IMX585_MIPI_8M_25FPS_12BIT_WDR2TO1 = 0X281C5AC0,
|
||||
/*TECHPOINT*/
|
||||
TECHPOINT_TP2850_MIPI_2M_30FPS_8BIT = 0X2C043340,
|
||||
TECHPOINT_TP2850_MIPI_4M_30FPS_8BIT = 0X2C043B40,
|
||||
TECHPOINT_TP2825_MIPI_1M_30FPS_8BIT = 0X2C102340,
|
||||
TECHPOINT_TP2825_MIPI_2M_30FPS_8BIT = 0X2C103340,
|
||||
TECHPOINT_TP2825_MIPI_2M_50FPS_8BIT = 0X2C103740,
|
||||
TECHPOINT_TP2825_MIPI_2M_60FPS_8BIT = 0X2C103440,
|
||||
TECHPOINT_TP2825_MIPI_4M_25FPS_8BIT = 0X2C103A40,
|
||||
TECHPOINT_TP2825_MIPI_4M_30FPS_8BIT = 0X2C103B40,
|
||||
TECHPOINT_TP2860_MIPI_2M_25FPS_8BIT = 0X2C143240,
|
||||
/*VIVO*/
|
||||
VIVO_MCS369_2M_30FPS_12BIT = 0X340B3340,
|
||||
VIVO_MCS369Q_4M_30FPS_12BIT = 0X34073B40,
|
||||
VIVO_MM308M2_2M_25FPS_8BIT = 0X34033240,
|
||||
/*LONTIUM*/
|
||||
LONTIUM_MIPI_LT6911_1M_60FPS_8BIT = 0X58012440,
|
||||
LONTIUM_MIPI_LT6911_2M_60FPS_8BIT = 0X58013440,
|
||||
LONTIUM_MIPI_LT6911_8M_60FPS_8BIT = 0X58015C40,
|
||||
/*ONSEMI*/
|
||||
ONSEMI_AR2020_20M_25FPS_10BIT = 0X08106A40,
|
||||
/*BOARD*/
|
||||
BOARD_FULL_SIZE_MIPI_30FPS_12BIT = 0X60006B40,
|
||||
BOARD_MAX_SIZE_MIPI_30FPS_12BIT = 0X60046B40,
|
||||
/*NUC*/
|
||||
NUC_NC021_MIPI_2M_50FPS_8BIT = 0X5C003440,
|
||||
NUC_NC021_MIPI_2M_25FPS_8BIT_WDR2TO1 = 0X5C0032C0,
|
||||
/*end*/
|
||||
CVI_SNS_TYPE_BUTT,
|
||||
} CVI_SNS_TYPE_E;
|
||||
|
||||
#pragma pack(1)
|
||||
typedef struct _SNS_INI_CFG_S {
|
||||
CVI_U8 devNum;
|
||||
CVI_S32 enSnsMode;
|
||||
CVI_SNS_TYPE_E enSnsType[VI_MAX_DEV_NUM];
|
||||
CVI_S32 s32BusId[VI_MAX_DEV_NUM];
|
||||
CVI_S32 s32SnsI2cAddr[VI_MAX_DEV_NUM];
|
||||
CVI_S32 MipiDev[VI_MAX_DEV_NUM];
|
||||
CVI_S16 as16LaneId[VI_MAX_DEV_NUM][MIPI_LANE_NUM + 1];
|
||||
CVI_S16 as16FuncId[VI_MAX_DEV_NUM][TTL_PIN_FUNC_NUM];
|
||||
CVI_S8 as8PNSwap[VI_MAX_DEV_NUM][MIPI_LANE_NUM + 1];
|
||||
CVI_U8 u8HwSync[VI_MAX_DEV_NUM];
|
||||
SENSOR_MCLK_ATTR_S stMclkAttr[VI_MAX_DEV_NUM];
|
||||
CVI_U8 u8Hsettle[VI_MAX_DEV_NUM];
|
||||
CVI_BOOL bHsettlen[VI_MAX_DEV_NUM];
|
||||
CVI_U8 u8Orien[VI_MAX_DEV_NUM];
|
||||
CVI_S32 s32RstPort[VI_MAX_DEV_NUM];
|
||||
CVI_S32 s32RstPin[VI_MAX_DEV_NUM];
|
||||
CVI_S32 s32RstPol[VI_MAX_DEV_NUM];
|
||||
CVI_U8 u8AttachDev[VI_MAX_DEV_NUM];
|
||||
CVI_U8 u8MuxDev[VI_MAX_DEV_NUM];
|
||||
CVI_S32 s32SwitchPort[VI_MAX_DEV_NUM][SWITCH_GPIO_NUM];
|
||||
CVI_S32 s32SwitchPin[VI_MAX_DEV_NUM][SWITCH_GPIO_NUM];
|
||||
CVI_S32 s32SwitchPol[VI_MAX_DEV_NUM][SWITCH_GPIO_NUM];
|
||||
} SNS_INI_CFG_S;
|
||||
|
||||
typedef struct _SNS_CFG_S {
|
||||
CVI_U32 u32ImageWigth[VI_MAX_DEV_NUM];
|
||||
CVI_U32 u32ImageHeight[VI_MAX_DEV_NUM];
|
||||
WDR_MODE_E enWDRMode[VI_MAX_DEV_NUM];
|
||||
SNS_INTF_MODE_E enInterFaceMode[VI_MAX_DEV_NUM];
|
||||
SNS_DATA_TYPE_E enFormatMode[VI_MAX_DEV_NUM];
|
||||
SNS_YUV_DATA_SEQ_E enYuvFormat[VI_MAX_DEV_NUM];
|
||||
BAYER_FORMAT_E enBayerFormat[VI_MAX_DEV_NUM];
|
||||
SNS_CHN_MODE_E enChnMode[VI_MAX_DEV_NUM];
|
||||
CVI_BOOL bBypassIsp[VI_MAX_DEV_NUM];
|
||||
CVI_FLOAT f32FrameRate[VI_MAX_DEV_NUM];
|
||||
CVI_U8 u8LaneNumber[VI_MAX_DEV_NUM];
|
||||
CVI_U8 u8EnMasterMode[VI_MAX_DEV_NUM];
|
||||
ISP_SNS_OBJ_S * pstSnsObj[VI_MAX_DEV_NUM];
|
||||
#ifdef __arm__
|
||||
CVI_U32 pstSnsObj_padding[VI_MAX_DEV_NUM]; /* padding for keeping same size of this structure */
|
||||
#endif
|
||||
ISP_SENSOR_EXP_FUNC_S * pstSensorExpFunc[VI_MAX_DEV_NUM];
|
||||
#ifdef __arm__
|
||||
CVI_U32 pstSensorExpFunc_padding[VI_MAX_DEV_NUM]; /* padding for keeping same size of this structure */
|
||||
#endif
|
||||
AE_SENSOR_EXP_FUNC_S * pstExpFuncs[VI_MAX_DEV_NUM];
|
||||
#ifdef __arm__
|
||||
CVI_U32 pstExpFuncs_padding[VI_MAX_DEV_NUM]; /* padding for keeping same size of this structure */
|
||||
#endif
|
||||
SNS_AHD_OBJ_S * pstAhdFuncs[VI_MAX_DEV_NUM];
|
||||
#ifdef __arm__
|
||||
CVI_U32 pstAhdFuncs_padding[VI_MAX_DEV_NUM]; /* padding for keeping same size of this structure */
|
||||
#endif
|
||||
} SNS_CFG_S;
|
||||
|
||||
typedef struct _SENSOR_CFG_S {
|
||||
SNS_INI_CFG_S sns_ini_cfg;
|
||||
SNS_CFG_S sns_cfg;
|
||||
ISP_INIT_ATTR_S pstInitAttr;
|
||||
} SENSOR_CFG_S;
|
||||
|
||||
#pragma pack()
|
||||
/****************************************************************************
|
||||
* external variables and functions *
|
||||
****************************************************************************/
|
||||
CVI_S32 cvi_sns_getsnswdrattr(CVI_U32 dev_num, SENSOR_CFG_S *sensor_cfg);
|
||||
CVI_S32 cvi_sns_getsnsobj(CVI_U32 dev_num, SENSOR_CFG_S *sensor_cfg);
|
||||
CVI_S32 cvi_sns_getispattr(CVI_U32 dev_num, SENSOR_CFG_S *sensor_cfg);
|
||||
CVI_S32 cvi_sns_getyuvbypass(CVI_U32 dev_num, SENSOR_CFG_S *sensor_cfg);
|
||||
CVI_S32 cvi_sns_getdevattr(CVI_U32 dev_num, SENSOR_CFG_S *sensor_cfg);
|
||||
CVI_S32 cvi_sns_getsize(CVI_U32 dev_num, SENSOR_CFG_S *sensor_cfg);
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* End of #ifdef __cplusplus */
|
||||
|
||||
|
||||
#endif /* __SENSOR_CFG_H_ */
|
||||
@@ -0,0 +1,107 @@
|
||||
# PSP 主工作流
|
||||
|
||||
## 1. 输入和事实基线
|
||||
|
||||
开始前从项目和安全只读检查中确认:
|
||||
|
||||
- 目标应用项目路径、新项目名称,以及固定根目录 `~/work/project/EMX2.1/AppTeam/Psp/` 下由用户或团队预创建的同名 PSP 项目目录;
|
||||
- 用户指定的相近板卡 PSP 路径或精确 commit;
|
||||
- 芯片、硬件 revision、单/双系统、存储介质和目标 BSP build type;
|
||||
- BSP `doc/bsp_adaptation/handoff/psp_handoff.json`;
|
||||
- 相对参考 PSP 的已知 GPIO、内存/分区、Media、Sensor 和 AIPlugin 差异,以及由用户更新的 ISP/PQ 状态;
|
||||
- CV18 项目的 Sensor 规格选型和原理图/GPIO list;枚举表由 skill 按芯片系列从内置基线自动选择,不要求用户另行提供头文件;
|
||||
- PSP、应用集成、设备验证和批准负责人;
|
||||
- 禁止修改的目录及可用的 Git/Etunel 上下文。
|
||||
- 用户指定的 EMX2.1 应用工程绝对路径;工程已有固定 `scripts/product.py`、`scripts/release.py` 和 `output/` 约定时,Skill 自行读取,不再向用户追问命令。
|
||||
|
||||
缺失可从仓库发现的事实时先调查,不要求用户重复。参考 PSP、目标差异、负责人决定或跨平台风险属于用户决定,不能推断。同一缺项连续出现时只更新缺项列表,不重复完整问卷,也不在没有新输入时反复生成同一结论。
|
||||
|
||||
把 `~` 展开为运行 skill 的当前用户目录,并记录规范化后的绝对 PSP 根路径。目标项目必须是该根目录的普通直接子目录和独立 Git 仓库;保留已有分支、远端和仓库配置。目标目录不存在时停止并请用户或团队创建,禁止由 skill 建目录、运行 `git init` 或替用户配置远端。预创建目录已有业务内容时视为现有 PSP,只走基于 Git 差异的更新流程,禁止再次从参考 PSP 整体导入。
|
||||
|
||||
## 2. 参考兼容性
|
||||
|
||||
比较参考和目标的芯片系列、板卡形态、单/双系统、存储介质、Sensor 数量/型号、GPIO/Pinmux 结构、媒体能力和 AIPlugin 能力。列出:
|
||||
|
||||
- 可直接继承;
|
||||
- 需要修改;
|
||||
- 无法确认;
|
||||
- 明显不兼容。
|
||||
|
||||
明显不兼容时默认停止。用户明确接受跨平台参考风险后仍须把每个未验证项留在结果中。
|
||||
|
||||
## 3. 受控适配
|
||||
|
||||
对于尚无业务内容的预创建项目仓库,按[项目与 Git 规则](project-and-git.md)在同一固定根目录的唯一 staging 中复制参考 PSP,排除参考仓库身份、构建输出、缓存、日志、临时文件、本机生成物和旧的应用侧 `psp.lock.json`。保持参考 PSP 的有效目录、配置、脚本、小型资源和精简文档。最终仅把已验证业务内容导入目标,目标自身 `.git` 不进入 staging、也不被替换。
|
||||
|
||||
对于已有业务内容的目标项目,先证明它是固定根目录下的预期独立仓库,记录 HEAD、分支、远端和工作区状态;只修改任务明确授权的文件,并以修改前 commit/worktree 为差异基线。不得为了套用参考项目而清空、覆盖或重新初始化目标。
|
||||
|
||||
只修改确认的目标差异。适配后生成两张清单:
|
||||
|
||||
1. 修改项:文件、关键字段、旧值、新值、依据和影响;
|
||||
2. 继承项:GPIO、Sensor、BSP、Media、AIPlugin 等关键配置及确认状态。
|
||||
|
||||
扫描旧项目名、旧芯片/板卡、旧 BSP build ID、旧绝对路径、旧 Sensor、旧 SDK/Media/AIPlugin 版本、脚本硬编码及“临时修改/记得修改”等残留。每个命中必须归类为已替换、确认继承或无法判断;无法判断项阻止 accepted。
|
||||
|
||||
## 4. 先处理 BSP 阻塞
|
||||
|
||||
使用 `validate_bsp_handoff.py` 校验精确 BSP 输入,并把稳定摘要写入 `metadata/bsp.lock.json`;不要修改 BSP handoff。调用 `validate_psp.py` 时必须显式提供目标 PSP 项目名,以及期望的 BSP 项目、芯片、SDK、build type 和单/双系统形态,任一身份缺失或不一致都阻止 candidate。关键 IMG 缺失或 hash 不一致时同样阻止 candidate。
|
||||
|
||||
如果 BSP handoff 缺失、镜像 hash 不符或 kernel/rootfs 的 512 KiB 余量检查失败,只报告这一组 BSP 问题和精确失败值,先交 BSP 处理。不要同时要求用户补 Sensor、ISP/PQ 或应用打包信息。能从现有 BSP 产物重新生成的证据应先做只读检查,再只申请一次明确的 BSP 操作确认。
|
||||
|
||||
按[配置边界与检查](configuration-boundaries.md)核对 GPIO、内存/分区、Sensor、Media、AIPlugin 及应用覆盖关系。CV18 根据规格书确定枚举名称后调用 `validate_psp.py --expected-sensor sensor=ENUM_NAME`,工具根据芯片自动使用内置枚举表:CV181X 验证配置中的枚举名称,CV184X 验证该名称对应的枚举数值。无需搜索或传入 SDK 头文件;只有已确认的枚举版本差异才显式覆盖。ISP/PQ 仅记录用户负责的状态,不由 Skill 修改。`psp.json` 保持参考格式;新增治理数据写入 sidecar metadata,避免未经协调改变应用打包接口。
|
||||
|
||||
## 5. 静态验证和打包准备检查
|
||||
|
||||
最低静态检查包括:
|
||||
|
||||
- 受控复制和差异白名单;
|
||||
- PSP 目录、JSON/INI 和 shell 语法;
|
||||
- 旧项目残留;
|
||||
- BSP handoff、路径、大小和 hash;
|
||||
- GPIO、Media、Sensor 枚举映射、AIPlugin、SDK 和模型引用的一致性,以及 ISP/PQ 的用户负责状态;
|
||||
- 应用与 PSP 的同名配置覆盖清单;
|
||||
- 未决、警告和批准例外。
|
||||
|
||||
在导入目标 PSP 和创建候选提交前,还要读取用户指定应用工程的固定打包入口,并运行:
|
||||
|
||||
1. `record_packaging_result.py contract`,根据 `<应用工程>/psp`、`scripts/`、`output/` 和目标芯片生成仓库外的本地契约;
|
||||
2. `record_packaging_result.py preflight --psp-source <staging>`,提前核对 `EmxResToProduct` 的每个资源来源、重复目标、`data.file`、DATA 组包工具映射、`mkAiData.py` 参数、PSP 分区与 BSP `bsp.lock.json`;
|
||||
3. 只读检查 `product.py` 依赖的 Media、AIPlugin、公共运行库和驱动配置。空数组、缺目录或脚本只打印错误但仍返回 0 的情况必须列为阻塞;PSP Skill 不自行修改应用脚本。
|
||||
|
||||
打包准备检查不执行 `product.py` 或 `release.py`。它失败时先在 staging 修正 PSP;问题属于应用框架、BSP 或公共组件时只给出文件、字段和影响,由对应所有者处理。不要先提交一个已知无法组包的候选版本。
|
||||
|
||||
警告分三组输出:阻止继续、需要用户确认、暂不影响当前步骤。ISP/PQ 的 `USER_OWNED/PENDING`、目标机运行路径在当前主机不可见等已知状态,单独列出,不计入静态错误总数。
|
||||
|
||||
## 6. 自动提交候选版本
|
||||
|
||||
需求和适配方案已经确认后,先输出完整差异、继承清单、静态验证、打包准备检查、风险、commit message,以及下一阶段的精确路径和命令。所有检查通过后直接完成本地导入、`git add` 和候选提交,不再询问是否提交。提交前后核对工作区内容一致,完整 SHA 是唯一 PSP 身份。
|
||||
|
||||
Git 身份未配置、工作区有非本任务改动、暂存区包含白名单外文件、验证结果在提交前发生变化或提交失败时停止。不要替用户配置 Git 身份、丢弃改动或改写历史;说明异常后请用户决定。`./release.py 1`、Git 上传、Etunel 发送、tag、设备和发布不在自动范围内。
|
||||
|
||||
## 7. 组包和设备/应用验证
|
||||
|
||||
候选提交创建后,自动把应用工程中已经登记且仓库身份一致的 `psp` 子模块更新到该完整 commit;不自动新建子模块、不更换 URL,也不提交应用仓库。随后用同一工具以 `--formal` 再做一次打包准备检查,确认 commit 和工作区未变。在 `<应用工程>/scripts` 自动运行 `./product.py`;退出码和日志都没有错误后,自动运行默认增量的 `./release.py 0`。按[组包与设备验证](packaging-and-device-validation.md)证明本轮唯一新增的 `output/<版本>/`,再记录项目规则明确指定的唯一烧录包。
|
||||
|
||||
子模块不存在、URL 或仓库身份不一致、父仓库的 `.gitmodules`/`psp` 已有重叠改动、`product.py` 报错、`release.py 0` 报错或产物检查失败时停止并请用户决定。需要 clean rebuild 时也停止,展示原因和 `./release.py 1` 精确命令,取得确认后才执行。
|
||||
|
||||
达到 packaged 后可以经 Etunel 提供给应用层,人工设备验证与应用集成并行:
|
||||
|
||||
```text
|
||||
candidate -> packaged -> device_verified
|
||||
-> app_integrated
|
||||
同一 commit 两项均通过 -> accepted
|
||||
```
|
||||
|
||||
配置、脚本、小型资源或依赖变化使受影响证据失效;纯文档变化经差异证明和负责人确认后可以复用技术证据。
|
||||
|
||||
## 8. 交接和返工
|
||||
|
||||
按 [Etunel 交接](etunel-handoff.md)把 packaged candidate 提供给 Hub。应用问题必须携带 PSP commit、应用 commit、BSP build、复现步骤、期望/实际、日志和阻塞影响,经 Hub 创建新的底层任务。
|
||||
|
||||
职责内问题形成新 candidate commit;跨 BSP、应用、硬件或公共组件的问题只提交证据和归属建议,由 Hub 路由。不得 force-push 已供打包、设备或应用验证的 commit。
|
||||
|
||||
## 9. 完成状态
|
||||
|
||||
输出真实阶段,并同时给出中文解释:候选版本(`candidate`)、已组包(`packaged`)、设备验证通过(`device_verified`)、应用集成通过(`app_integrated`)、已验收(`accepted`)、部分完成(`partial`)或已阻塞(`blocked`)。完整成果引用 PSP 仓库/commit、BSP lock、静态检查、烧录包绝对路径/hash、人工设备反馈、应用集成、Etunel 交接、未执行项和剩余风险。
|
||||
|
||||
accepted 仅表示 PSP 可作为正式应用集成基线,不代表整机测试、所有硬件行为、媒体/算法效果或产品发布已经通过。
|
||||
Reference in new issue
Block a user