yealink - Linux driver for usb-p1k phones

0. Status
~~~~~~~~~

The p1k is a relatively cheap usb 1.1 phone with:
  - keyboard		full support
  - LCD			full support
  - LED			full support
  - dialtone		full support
  - ringtone		full support
  - audio playback   	via generic usb audio diver
  - audio record     	via generic usb audio diver


1. Compilation (stand alone version)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Currently only kernel 2.6.x.y versions are supported.
In order to build the yealink.ko module do:

  make

If you encounter problems please check if in the MAKE_OPTS variable in
the Makefile is pointing to the location where your kernel sources
are located, default /usr/src/linux.



2. keyboard features
~~~~~~~~~~~~~~~~~~~~
The current mapping in the kernel is provided by the map_p1k_to_key
function:

   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, #,

  The "up" and "down" keys, are symbolised by arrows on the button.
  The "pickup" and "hangup" keys are symbolised by a green and red phone
  on the button.


3. LCD features
~~~~~~~~~~~~~~~
The LCD is divided and organised as a 3 line display:

    |[]   [][]   [][]   [][]   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


Format description:
  From a user space perspective the world is seperated in "digits" and "icons".
  A digit can have a character set, an icon can only be ON or OFF.

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

    Reduced capabillity 7 segm 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.


4. Driver usage
~~~~~~~~~~~~~~~
For userland the following interfaces are available using the sysfs interface:
  /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.


4.1 lineX
~~~~~~~~~
Reading /sys/../lineX will return the format string with its current value:

  Example:
  cat ./line3
  888888888888
  Linux Rocks!

Writing to /sys/../lineX will set the coresponding LCD line.
 - Excess characters are ignored.
 - If less characters are written than allowed, the remaining digits are
   unchanged.
 - The tab '\t'and '\n' char does not overwrite the original content.
 - Writing a space to an icon will always hide its content.

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

  Will update the LCD with the current date & time.


4.2 get_icons
~~~~~~~~~~~~~
Reading will return all available icon names and its current settings:

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


4.3 show/hide icons
~~~~~~~~~~~~~~~~~~~
Writing to these files will update the state of the icon.
Only one icon at a time can be updated.

If an icon is also on a ./lineX the corresponding value is
updated with the first letter of the icon.

  Example - light up the store icon:
  echo -n "STORE" > ./show_icon

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

  Example - sound the ringtone for 10 seconds:
  echo -n RINGTONE > /sys/..../show_icon
  sleep 10
  echo -n RINGTONE > /sys/..../hide_icon


5. Credits & Acknowledgments
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  - Olivier Vandorpe, for starting the usbb2k-api project doing much of
	the reverse engineering.
  - Martin Diehl, for pointing out how to handle USB memory allocation.
  - Dmitry Torokhov, for the numerous code reviews and suggestions.

