Thursday, October 13, 2005

Headset Buttons

One of the purposes of the Plantronics SDK is to encourage consistent behavior and support for our headsets. To do that, the buttons need to function in the same way across all applications. And, when it comes to the SDK that depends on the choices of all of the implementers and integrators working independently out there. Unfortunately, while the SDK documentation gives some guidance, there are some corner cases that have no obviously correct solution.

The CS50-USB has two physical buttons. The first is the long silver one on the side which is referred to as the talk button. Pressing this button is activates hook switch control. Pressing and holding the button for three seconds will power down the unit's radio link. The radio link part is handled completely in hardware, but the hook switch control depends on software running on the PC and is one of the non-obvious cases I mentioned.

When the phone is ringing and the user pushes the talk button the desired behavior is obvious, the phone should answer the ringing line. If there aren’t any ringing lines, the user should probably receive a dial tone. Similarly, when the user is in an active call and hits the talk button the phone should hang up. However, if the user is in an active call on one line and another line rings what should happen? On the one hand the user may instinctively hit the talk button to pick up the ringing line. On the other hand, the user may push the talk button wishing to hang up the current call while ignoring the ringing call. The solution we have decided to follow is to strictly stick to the concept of hook switch control. Pressing the talk button is strictly analogous to picking up the handset on a phone or putting it back down. Thus, the talk button prefers the second option. If you are on a call and a second line rings, pushing the talk button should hang up on the current call while leaving the new incoming call untouched. Pushing the talk button a second time should, of course, pick up the ringing call.

The second physical button on the CS50-USB headset is the small, black, multi-function, volume control switch on the back. Pushing the volume control up or down (tangent to the headset's body's curve) will adjust the volume. Pushing the button inward (perpendicular to the above mentioned tangent) mutes the headset's mic pickup. There is software notification of these button events, but the work is done automatically by the hardware so nothing needs to happen on the PC end. If the volume button is pushed inwards and held for more than 3 seconds, the headset generates a smart button event. This is a catch all event that can do anything or nothing. In PerSonoCall we allow the user to configure an application to launch when the smart button is pressed so that they can easily launch a softphone application, for example. Finally, holding the volume up or down for greater than three seconds results in a flash event.

A flash event, like a talk button press, is completely dependent on the PC for implementation. The flash event covers the other desired behavior mentioned as part of the talk button above. Pressing the flash button should allow the user to put the current call on hold while answering or taking another call off of hold. If there aren't any other eligible calls it should put the current call on hold and present the user with a dial tone.

Here is a quick listing of the logic of button behaviors we expect out of a CS50-USB headset:

  • Short Talk Press
    • No calls
      • Give the user a dial tone
    • No active call, but one or more ringing or on-hold calls
      • Answer a ringing call or pick up the an on-hold call if no ringing calls.
    • Active call, and zero or more ringing or on-hold calls
      • Hang up the active call, and leave any rining or on-hold calls as they were
  • Long Talk Press
    • All cases
      • Terminate headset's radio link (handled by CS50-USB hardware)
  • Short Volume Up/Down
    • All cases
      • Adjust the headset's speaker volume (handled by CS50-USB hardware)
  • Long Volume Up/Down
    • No calls
      • Give the user a dial tone
    • No active call, but one or more ringing or on-hold calls
      • Pick up a ringing call, or pick up an on-hold call if there are no ringing calls.
    • Active call with no ringing or on-hold calls
      • Put the active call on hold and give the user a dial tone
    • Active call with one or more ringing or on-hold calls
      • Put the active call on hold and pick up a ringing call, or pick up an on-hold call if there are no ringing calls
  • Short Volume In
    • All cases
      • Mute the headset's mic (handled by CS50-USB hardware)
  • Long Volume In
    • All cases
      • Perform some sort of smart button action at the developer's discretion.

0 Comments:

Post a Comment

<< Home