# Vela 设备设计指南

# 一、多屏设计注意事项

  1. 明确使用场景与布局

    • 双屏/三屏/四屏配置:根据工作模式选择横向并列(宽幅信息展示)、主副屏组合(视觉中心聚焦)或环绕式布局(沉浸感增强)。
    • 竖屏+横屏混合:适合程序员查看长代码或设计师处理文档,需确保屏幕数量与桌面宽度匹配,避免频繁转头。
    • 总承重要求:支架最大承重需≥所有显示器重量之和的1.2倍(如三台6kg显示器需选择承重≥22kg的支架)。
  2. 硬件兼容性

    • VESA标准:确认显示器背面安装孔距匹配支架接口(常见规格:75×75mm、100×100mm、200×100mm/200mm)。
    • 非标屏幕处理:超大屏或曲面屏可能需定制支架,需提前核实接口类型。
  3. 调节自由度与人体工学

    • 支架类型
      • 夹持式:适用于厚度适中的桌面,安装便捷。
      • 穿孔式:更稳固,适合重型多屏系统。
      • 立柱式:节省桌面空间,适合紧凑环境。
    • 材质要求:冷轧钢(高承重)、铝合金(轻量化),表面需防锈、耐磨。
    • 调节功能:支持高度、旋转、倾斜调节,确保屏幕顶部与眼睛平齐或略低,视距保持50-70厘米。
  4. 线缆管理与整洁性

    • 隐藏式理线槽:统一收纳电源线、HDMI/DP线,避免杂乱。
    • 高端型号功能:支持磁吸理线扣或模块化走线系统,提升美观度与维护便利性。
  5. 系统设置与优化

    • 显卡接口选择:优先使用DisplayPort(支持高刷新率)或USB-C/雷电接口(集成电源、数据、视频传输)。
    • BIOS设置:启用“多显示输出”或“集显与独显同时工作”选项,避免接口冲突。
    • 分辨率与缩放:统一缩放比例或使用软件修正,防止高低分屏幕混用导致鼠标移动卡顿。

# 二、多屏适配与模拟器开发

  1. 自定义模拟器配置

    • 参数设置:可自定义模拟器宽高(100-800像素)、形状(圆形/矩形)、密度(120-640dpi)及设备类型(watch/band/smartspeaker)。
    • 皮肤制作:需提供foreground.png(遮挡模拟器外区域)、background.png(背景图)及layout配置文件,定义皮肤布局与设备参数(如屏幕形状、密度、类型)。
  2. 布局文件规范

    • 竖屏/横屏定义:在layout文件中指定portraitlandscape模式,定义背景图、前景图及模拟器画面的坐标与尺寸。
    • 示例配置
      parts {
        device { display { width 466; height 466; x 0; y 0; } }
        portrait {
          background { image background.png; }
          foreground { mask foreground.png; }
        }
      }
      layouts {
        portrait {
          width 572; height 938;
          part1 { name portrait; x 0; y 0; }
          part2 { name device; x 54; y 236; }
        }
      }
      

# 三、设备驱动开发核心要点

  1. 驱动框架分层架构

    • 上下层分离:上层处理应用逻辑,下层直接操作硬件,降低耦合度。
    • 伪文件系统机制:通过inode结构管理设备节点,使用register_driver函数注册驱动,设置操作函数集(如openreadwrite)及私有数据指针。
  2. 关键数据结构与接口

    • inode结构:包含父级/同级链接、引用计数、标志位及操作函数集联合体。
    • file_operations:定义驱动操作函数,如ioctl(设备控制)、poll(事件通知)。
    • 驱动注册示例
      int register_driver(const char* path, const struct file_operations* fops, mode_t mode, void* priv) {
        struct inode* node;
        inode_semtake();
        if (inode_reserve(path, &node) >= 0) {
          INODE_SET_DRIVER(node);
          node->u.i_ops = fops;
          node->i_private = priv;
        }
        inode_semgive();
        return OK;
      }
      
  3. 硬件交互实现

    • Lower Half开发:配置硬件寄存器、设置中断处理函数(如irq_attach),实现数据读写逻辑。
    • 中断处理示例
      static int mydriver_interrupt(int irq, void* context, void* arg) {
        struct mydriver_priv_s* priv = (struct mydriver_priv_s*)arg;
        uint32_t status = getreg32(priv->base_addr + STATUS_REG);
        // 处理中断状态
        return OK;
      }
      

# 四、高可用架构设计原则

  1. 冗余与故障转移

    • 进程级故障转移:通过进程监控器定期检查关键进程状态,异常时启动备份进程。
    • 服务级主备模式:关键服务采用主备架构,硬件看门狗机制确保极端情况下自动恢复。
  2. 负载均衡策略

    • 多核动态分配:基于反馈的负载调整算法,智能分配任务至最合适处理核心。
    • 迁移决策逻辑:计算核心间负载差异,超过阈值时触发任务迁移。
  3. 数据一致性与通信

    • XPC跨核通信框架:提供基础通信保障,支持热迁移(Live Migration)确保服务连续性。
    • 分布式锁服务:通过原子操作实现多核环境下的数据一致性。

# 五、安全与模块化设计

  1. 安全机制

    • 数据加密:保护传输与存储安全。
    • 访问控制:支持身份认证,防止未授权访问。
  2. 模块化扩展

    • 独立功能模块:根据场景灵活添加或移除模块(如媒体处理、设备驱动)。
    • 低功耗优化:支持深度睡眠、轻度睡眠模式,延长设备续航。