1b08c118cSDmitry Torokhov===============================================
2b08c118cSDmitry TorokhovDriver documentation for yealink usb-p1k phones
3b08c118cSDmitry Torokhov===============================================
4b08c118cSDmitry Torokhov
5b08c118cSDmitry TorokhovStatus
6b08c118cSDmitry Torokhov======
7b08c118cSDmitry Torokhov
8b08c118cSDmitry TorokhovThe p1k is a relatively cheap usb 1.1 phone with:
9b08c118cSDmitry Torokhov
10b08c118cSDmitry Torokhov  - keyboard		full support, yealink.ko / input event API
11b08c118cSDmitry Torokhov  - LCD			full support, yealink.ko / sysfs API
12b08c118cSDmitry Torokhov  - LED			full support, yealink.ko / sysfs API
13b08c118cSDmitry Torokhov  - dialtone		full support, yealink.ko / sysfs API
14b08c118cSDmitry Torokhov  - ringtone		full support, yealink.ko / sysfs API
15b08c118cSDmitry Torokhov  - audio playback   	full support, snd_usb_audio.ko / alsa API
16b08c118cSDmitry Torokhov  - audio record     	full support, snd_usb_audio.ko / alsa API
17b08c118cSDmitry Torokhov
18b08c118cSDmitry TorokhovFor vendor documentation see http://www.yealink.com
19b08c118cSDmitry Torokhov
20b08c118cSDmitry Torokhov
21b08c118cSDmitry Torokhovkeyboard features
22b08c118cSDmitry Torokhov=================
23b08c118cSDmitry Torokhov
24b08c118cSDmitry TorokhovThe current mapping in the kernel is provided by the map_p1k_to_key
25b08c118cSDmitry Torokhovfunction::
26b08c118cSDmitry Torokhov
27b08c118cSDmitry Torokhov   Physical USB-P1K button layout	input events
28b08c118cSDmitry Torokhov
29b08c118cSDmitry Torokhov
30b08c118cSDmitry Torokhov              up			     up
31b08c118cSDmitry Torokhov        IN           OUT		left,	right
32b08c118cSDmitry Torokhov             down			    down
33b08c118cSDmitry Torokhov
34b08c118cSDmitry Torokhov      pickup   C    hangup		enter, backspace, escape
35b08c118cSDmitry Torokhov        1      2      3			1, 2, 3
36b08c118cSDmitry Torokhov        4      5      6			4, 5, 6,
37b08c118cSDmitry Torokhov        7      8      9			7, 8, 9,
38b08c118cSDmitry Torokhov        *      0      #			*, 0, #,
39b08c118cSDmitry Torokhov
40b08c118cSDmitry TorokhovThe "up" and "down" keys, are symbolised by arrows on the button.
41b08c118cSDmitry TorokhovThe "pickup" and "hangup" keys are symbolised by a green and red phone
42b08c118cSDmitry Torokhovon the button.
43b08c118cSDmitry Torokhov
44b08c118cSDmitry Torokhov
45b08c118cSDmitry TorokhovLCD features
46b08c118cSDmitry Torokhov============
47b08c118cSDmitry Torokhov
48b08c118cSDmitry TorokhovThe LCD is divided and organised as a 3 line display::
49b08c118cSDmitry Torokhov
50b08c118cSDmitry Torokhov    |[]   [][]   [][]   [][]   in   |[][]
51b08c118cSDmitry Torokhov    |[] M [][] D [][] : [][]   out  |[][]
52b08c118cSDmitry Torokhov                              store
53b08c118cSDmitry Torokhov
54b08c118cSDmitry Torokhov    NEW REP         SU MO TU WE TH FR SA
55b08c118cSDmitry Torokhov
56b08c118cSDmitry Torokhov    [] [] [] [] [] [] [] [] [] [] [] []
57b08c118cSDmitry Torokhov    [] [] [] [] [] [] [] [] [] [] [] []
58b08c118cSDmitry Torokhov
59b08c118cSDmitry Torokhov
60b08c118cSDmitry Torokhov  Line 1  Format (see below)	: 18.e8.M8.88...188
61b08c118cSDmitry Torokhov	  Icon names		:   M  D  :  IN OUT STORE
62b08c118cSDmitry Torokhov  Line 2  Format		: .........
63b08c118cSDmitry Torokhov	  Icon name		: NEW REP SU MO TU WE TH FR SA
64b08c118cSDmitry Torokhov  Line 3  Format		: 888888888888
65b08c118cSDmitry Torokhov
66b08c118cSDmitry Torokhov
67b08c118cSDmitry TorokhovFormat description:
68b08c118cSDmitry Torokhov  From a userspace perspective the world is separated into "digits" and "icons".
69b08c118cSDmitry Torokhov  A digit can have a character set, an icon can only be ON or OFF.
70b08c118cSDmitry Torokhov
71b08c118cSDmitry Torokhov  Format specifier::
72b08c118cSDmitry Torokhov
73b08c118cSDmitry Torokhov    '8' :  Generic 7 segment digit with individual addressable segments
74b08c118cSDmitry Torokhov
75b08c118cSDmitry Torokhov    Reduced capability 7 segment digit, when segments are hard wired together.
76b08c118cSDmitry Torokhov    '1' : 2 segments digit only able to produce a 1.
77b08c118cSDmitry Torokhov    'e' : Most significant day of the month digit,
78b08c118cSDmitry Torokhov          able to produce at least 1 2 3.
79b08c118cSDmitry Torokhov    'M' : Most significant minute digit,
80b08c118cSDmitry Torokhov          able to produce at least 0 1 2 3 4 5.
81b08c118cSDmitry Torokhov
82b08c118cSDmitry Torokhov    Icons or pictograms:
83b08c118cSDmitry Torokhov    '.' : For example like AM, PM, SU, a 'dot' .. or other single segment
84b08c118cSDmitry Torokhov	  elements.
85b08c118cSDmitry Torokhov
86b08c118cSDmitry Torokhov
87b08c118cSDmitry TorokhovDriver usage
88b08c118cSDmitry Torokhov============
89b08c118cSDmitry Torokhov
90b08c118cSDmitry TorokhovFor userland the following interfaces are available using the sysfs interface::
91b08c118cSDmitry Torokhov
92b08c118cSDmitry Torokhov  /sys/.../
93b08c118cSDmitry Torokhov           line1	Read/Write, lcd line1
94b08c118cSDmitry Torokhov           line2	Read/Write, lcd line2
95b08c118cSDmitry Torokhov           line3	Read/Write, lcd line3
96b08c118cSDmitry Torokhov
97b08c118cSDmitry Torokhov	   get_icons    Read, returns a set of available icons.
98b08c118cSDmitry Torokhov	   hide_icon    Write, hide the element by writing the icon name.
99b08c118cSDmitry Torokhov	   show_icon    Write, display the element by writing the icon name.
100b08c118cSDmitry Torokhov
101b08c118cSDmitry Torokhov	   map_seg7	Read/Write, the 7 segments char set, common for all
102b08c118cSDmitry Torokhov			yealink phones. (see map_to_7segment.h)
103b08c118cSDmitry Torokhov
104b08c118cSDmitry Torokhov	   ringtone	Write, upload binary representation of a ringtone,
105b08c118cSDmitry Torokhov			see yealink.c. status EXPERIMENTAL due to potential
106b08c118cSDmitry Torokhov			races between async. and sync usb calls.
107b08c118cSDmitry Torokhov
108b08c118cSDmitry Torokhov
109b08c118cSDmitry TorokhovlineX
110b08c118cSDmitry Torokhov~~~~~
111b08c118cSDmitry Torokhov
112b08c118cSDmitry TorokhovReading /sys/../lineX will return the format string with its current value.
113b08c118cSDmitry Torokhov
114b08c118cSDmitry Torokhov  Example::
115b08c118cSDmitry Torokhov
116b08c118cSDmitry Torokhov    cat ./line3
117b08c118cSDmitry Torokhov    888888888888
118b08c118cSDmitry Torokhov    Linux Rocks!
119b08c118cSDmitry Torokhov
120b08c118cSDmitry TorokhovWriting to /sys/../lineX will set the corresponding LCD line.
121b08c118cSDmitry Torokhov
122b08c118cSDmitry Torokhov - Excess characters are ignored.
123b08c118cSDmitry Torokhov - If less characters are written than allowed, the remaining digits are
124b08c118cSDmitry Torokhov   unchanged.
125b08c118cSDmitry Torokhov - The tab '\t'and '\n' char does not overwrite the original content.
126b08c118cSDmitry Torokhov - Writing a space to an icon will always hide its content.
127b08c118cSDmitry Torokhov
128b08c118cSDmitry Torokhov  Example::
129b08c118cSDmitry Torokhov
130b08c118cSDmitry Torokhov    date +"%m.%e.%k:%M"  | sed 's/^0/ /' > ./line1
131b08c118cSDmitry Torokhov
132b08c118cSDmitry Torokhov  Will update the LCD with the current date & time.
133b08c118cSDmitry Torokhov
134b08c118cSDmitry Torokhov
135b08c118cSDmitry Torokhovget_icons
136b08c118cSDmitry Torokhov~~~~~~~~~
137b08c118cSDmitry Torokhov
138b08c118cSDmitry TorokhovReading will return all available icon names and its current settings::
139b08c118cSDmitry Torokhov
140b08c118cSDmitry Torokhov  cat ./get_icons
141b08c118cSDmitry Torokhov  on M
142b08c118cSDmitry Torokhov  on D
143b08c118cSDmitry Torokhov  on :
144b08c118cSDmitry Torokhov     IN
145b08c118cSDmitry Torokhov     OUT
146b08c118cSDmitry Torokhov     STORE
147b08c118cSDmitry Torokhov     NEW
148b08c118cSDmitry Torokhov     REP
149b08c118cSDmitry Torokhov     SU
150b08c118cSDmitry Torokhov     MO
151b08c118cSDmitry Torokhov     TU
152b08c118cSDmitry Torokhov     WE
153b08c118cSDmitry Torokhov     TH
154b08c118cSDmitry Torokhov     FR
155b08c118cSDmitry Torokhov     SA
156b08c118cSDmitry Torokhov     LED
157b08c118cSDmitry Torokhov     DIALTONE
158b08c118cSDmitry Torokhov     RINGTONE
159b08c118cSDmitry Torokhov
160b08c118cSDmitry Torokhov
161b08c118cSDmitry Torokhovshow/hide icons
162b08c118cSDmitry Torokhov~~~~~~~~~~~~~~~
163b08c118cSDmitry Torokhov
164b08c118cSDmitry TorokhovWriting to these files will update the state of the icon.
165b08c118cSDmitry TorokhovOnly one icon at a time can be updated.
166b08c118cSDmitry Torokhov
167b08c118cSDmitry TorokhovIf an icon is also on a ./lineX the corresponding value is
168b08c118cSDmitry Torokhovupdated with the first letter of the icon.
169b08c118cSDmitry Torokhov
170b08c118cSDmitry Torokhov  Example - light up the store icon::
171b08c118cSDmitry Torokhov
172b08c118cSDmitry Torokhov    echo -n "STORE" > ./show_icon
173b08c118cSDmitry Torokhov
174b08c118cSDmitry Torokhov    cat ./line1
175b08c118cSDmitry Torokhov    18.e8.M8.88...188
176b08c118cSDmitry Torokhov		  S
177b08c118cSDmitry Torokhov
178b08c118cSDmitry Torokhov  Example - sound the ringtone for 10 seconds::
179b08c118cSDmitry Torokhov
180b08c118cSDmitry Torokhov    echo -n RINGTONE > /sys/..../show_icon
181b08c118cSDmitry Torokhov    sleep 10
182b08c118cSDmitry Torokhov    echo -n RINGTONE > /sys/..../hide_icon
183b08c118cSDmitry Torokhov
184b08c118cSDmitry Torokhov
185b08c118cSDmitry TorokhovSound features
186b08c118cSDmitry Torokhov==============
187b08c118cSDmitry Torokhov
188b08c118cSDmitry TorokhovSound is supported by the ALSA driver: snd_usb_audio
189b08c118cSDmitry Torokhov
190b08c118cSDmitry TorokhovOne 16-bit channel with sample and playback rates of 8000 Hz is the practical
191b08c118cSDmitry Torokhovlimit of the device.
192b08c118cSDmitry Torokhov
193b08c118cSDmitry Torokhov  Example - recording test::
194b08c118cSDmitry Torokhov
195b08c118cSDmitry Torokhov    arecord -v -d 10 -r 8000 -f S16_LE -t wav  foobar.wav
196b08c118cSDmitry Torokhov
197b08c118cSDmitry Torokhov  Example - playback test::
198b08c118cSDmitry Torokhov
199b08c118cSDmitry Torokhov    aplay foobar.wav
200b08c118cSDmitry Torokhov
201b08c118cSDmitry Torokhov
202b08c118cSDmitry TorokhovTroubleshooting
203b08c118cSDmitry Torokhov===============
204b08c118cSDmitry Torokhov
205b08c118cSDmitry Torokhov:Q: Module yealink compiled and installed without any problem but phone
206b08c118cSDmitry Torokhov    is not initialized and does not react to any actions.
207b08c118cSDmitry Torokhov:A: If you see something like:
208b08c118cSDmitry Torokhov    hiddev0: USB HID v1.00 Device [Yealink Network Technology Ltd. VOIP USB Phone
209b08c118cSDmitry Torokhov    in dmesg, it means that the hid driver has grabbed the device first. Try to
210b08c118cSDmitry Torokhov    load module yealink before any other usb hid driver. Please see the
211b08c118cSDmitry Torokhov    instructions provided by your distribution on module configuration.
212b08c118cSDmitry Torokhov
213b08c118cSDmitry Torokhov:Q: Phone is working now (displays version and accepts keypad input) but I can't
214b08c118cSDmitry Torokhov    find the sysfs files.
215b08c118cSDmitry Torokhov:A: The sysfs files are located on the particular usb endpoint. On most
216b08c118cSDmitry Torokhov    distributions you can do: "find /sys/ -name get_icons" for a hint.
217b08c118cSDmitry Torokhov
218b08c118cSDmitry Torokhov
219b08c118cSDmitry TorokhovCredits & Acknowledgments
220b08c118cSDmitry Torokhov=========================
221b08c118cSDmitry Torokhov
222b08c118cSDmitry Torokhov  - Olivier Vandorpe, for starting the usbb2k-api project doing much of
223b08c118cSDmitry Torokhov    the reverse engineering.
224b08c118cSDmitry Torokhov  - Martin Diehl, for pointing out how to handle USB memory allocation.
225b08c118cSDmitry Torokhov  - Dmitry Torokhov, for the numerous code reviews and suggestions.
226