Logo

Linux 内核

6.16.0-rc4

快速搜索

目录

  • 开发流程
  • 提交补丁
  • 行为准则
  • 维护者手册
  • 所有开发流程文档
  • 核心 API
  • 驱动程序 API
  • 子系统
    • 核心子系统
    • 人机界面
      • 输入文档
      • 人机接口设备 (HID)
      • 声音子系统文档
      • GPU 驱动程序开发者指南
      • 帧缓冲
      • LED
    • 网络接口
    • 存储接口
    • 其他子系统
  • 锁定
  • 许可规则
  • 编写文档
  • 开发工具
  • 测试指南
  • 黑客指南
  • 追踪
  • 故障注入
  • 实时补丁
  • Rust
  • 管理
  • 构建系统
  • 报告问题
  • 用户空间工具
  • 用户空间 API
  • 固件
  • 固件和设备树
  • CPU 架构
  • 未分类文档
  • 翻译

本页

  • 显示源代码

18. Yealink USB-P1K 电话的驱动程序文档¶

18.1. 状态¶

P1K 是一款相对便宜的 USB 1.1 电话,具有以下特点:

  • 键盘完全支持,yealink.ko / 输入事件 API

  • LCD 完全支持,yealink.ko / sysfs API

  • LED 完全支持,yealink.ko / sysfs API

  • 拨号音完全支持,yealink.ko / sysfs API

  • 铃声完全支持,yealink.ko / sysfs API

  • 音频播放完全支持,snd_usb_audio.ko / alsa API

  • 音频录制完全支持,snd_usb_audio.ko / alsa API

有关供应商文档,请参阅 http://www.yealink.com

18.2. 键盘功能¶

内核中的当前映射由 map_p1k_to_key 函数提供

Physical USB-P1K button layout       input events


           up                             up
     IN           OUT                left,   right
          down                           down

   pickup   C    hangup              enter, backspace, escape
     1      2      3                 1, 2, 3
     4      5      6                 4, 5, 6,
     7      8      9                 7, 8, 9,
     *      0      #                 *, 0, #,

“向上”和“向下”键在按钮上用箭头表示。“拿起”和“挂断”键在按钮上用绿色和红色电话表示。

18.3. LCD 功能¶

LCD 被划分为 3 行显示

  |[]   [][]   [][]   [][]   in   |[][]
  |[] M [][] D [][] : [][]   out  |[][]
                            store

  NEW REP         SU MO TU WE TH FR SA

  [] [] [] [] [] [] [] [] [] [] [] []
  [] [] [] [] [] [] [] [] [] [] [] []


Line 1  Format (see below)    : 18.e8.M8.88...188
        Icon names            :   M  D  :  IN OUT STORE
Line 2  Format                : .........
        Icon name             : NEW REP SU MO TU WE TH FR SA
Line 3  Format                : 888888888888
格式描述

从用户空间的角度来看,世界被分为“数字”和“图标”。一个数字可以有一个字符集,一个图标只能是 ON 或 OFF。

格式说明符

'8' :  Generic 7 segment digit with individual addressable segments

Reduced capability 7 segment digit, when segments are hard wired together.
'1' : 2 segments digit only able to produce a 1.
'e' : Most significant day of the month digit,
      able to produce at least 1 2 3.
'M' : Most significant minute digit,
      able to produce at least 0 1 2 3 4 5.

Icons or pictograms:
'.' : For example like AM, PM, SU, a 'dot' .. or other single segment
      elements.

18.4. 驱动程序用法¶

对于用户层,可以使用 sysfs 接口使用以下接口

/sys/.../
         line1        Read/Write, lcd line1
         line2        Read/Write, lcd line2
         line3        Read/Write, lcd line3

         get_icons    Read, returns a set of available icons.
         hide_icon    Write, hide the element by writing the icon name.
         show_icon    Write, display the element by writing the icon name.

         map_seg7     Read/Write, the 7 segments char set, common for all
                      yealink phones. (see map_to_7segment.h)

         ringtone     Write, upload binary representation of a ringtone,
                      see yealink.c. status EXPERIMENTAL due to potential
                      races between async. and sync usb calls.

18.4.1. lineX¶

读取 /sys/../lineX 将返回带有其当前值的格式字符串。

示例

cat ./line3
888888888888
Linux Rocks!

写入 /sys/../lineX 将设置相应的 LCD 行。

  • 多余的字符将被忽略。

  • 如果写入的字符少于允许的字符,则剩余的数字不会更改。

  • 制表符 't' 和 'n' 字符不会覆盖原始内容。

  • 将空格写入图标将始终隐藏其内容。

示例

date +"%m.%e.%k:%M"  | sed 's/^0/ /' > ./line1

将使用当前日期和时间更新 LCD。

18.4.2. get_icons¶

读取将返回所有可用图标名称及其当前设置

cat ./get_icons
on M
on D
on :
   IN
   OUT
   STORE
   NEW
   REP
   SU
   MO
   TU
   WE
   TH
   FR
   SA
   LED
   DIALTONE
   RINGTONE

18.4.3. 显示/隐藏图标¶

写入这些文件将更新图标的状态。一次只能更新一个图标。

如果一个图标也在 ./lineX 上,则相应的值将更新为图标的第一个字母。

示例 - 点亮存储图标

echo -n "STORE" > ./show_icon

cat ./line1
18.e8.M8.88...188
              S

示例 - 响铃 10 秒

echo -n RINGTONE > /sys/..../show_icon
sleep 10
echo -n RINGTONE > /sys/..../hide_icon

18.5. 声音功能¶

声音由 ALSA 驱动程序支持:snd_usb_audio

一个 16 位通道,采样和播放速率为 8000 Hz 是该设备的实际限制。

示例 - 录音测试

arecord -v -d 10 -r 8000 -f S16_LE -t wav  foobar.wav

示例 - 播放测试

aplay foobar.wav

18.6. 故障排除¶

问:

模块 yealink 编译并安装没有任何问题,但电话未初始化并且对任何操作都没有反应。

答:

如果您看到类似以下内容:hiddev0: USB HID v1.00 Device [Yealink Network Technology Ltd. VOIP USB Phone 在 dmesg 中,这意味着 hid 驱动程序首先获取了该设备。尝试在任何其他 usb hid 驱动程序之前加载模块 yealink。请参阅您的发行版提供的模块配置说明。

问:

电话现在可以工作(显示版本并接受键盘输入),但我找不到 sysfs 文件。

答:

sysfs 文件位于特定的 usb 端点上。在大多数发行版上,您可以执行:“find /sys/ -name get_icons” 以获得提示。

18.7. 致谢¶

  • Olivier Vandorpe,用于启动 usbb2k-api 项目,进行大量的逆向工程。

  • Martin Diehl,用于指出如何处理 USB 内存分配。

  • Dmitry Torokhov,用于无数的代码审查和建议。

©内核开发社区。 | 由 Sphinx 5.3.0 & Alabaster 0.7.16 提供支持 | 页面源代码