Logo

Linux 内核

6.13.0-rc6

快速搜索

目录

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

本页

  • 显示源代码

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

18.1. 状态¶

p1k 是一款相对廉价的 usb 1.1 电话,具有:

  • 键盘完全支持,yealink.ko / input event 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

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

示例 - 录音测试

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

示例 - 播放测试

aplay foobar.wav

18.6. 故障排除¶

问:

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

答:

如果您在 dmesg 中看到类似 hiddev0:USB HID v1.00 Device [Yealink Network Technology Ltd. VOIP USB Phone] 的内容,则表示 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 提供支持 | 页面源代码