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,进行了大量的代码审查并提出了建议。