/*
* Copyright (c) 2011 Lubos Slovak
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* - The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/** @addtogroup drvusbhid
* @{
*/
/** @file
* UUSB multimedia key to keycode mapping.
*/
#include <io/keycode.h>
#include <stdint.h>
#include <stdio.h>
#include <usb/debug.h>
#include "keymap.h"
/**
* Mapping between USB HID multimedia usages (from HID Usage Tables) and
* corresponding HelenOS key codes.
*
* Currently only Usages used by Logitech UltraX keyboard are present. All other
* should result in 0.
*/
static int usb_hid_keymap_consumer[0x29c] = {
[0xb5] = 0, /* Scan Next Track */
[0xb6] = 0, /* Scan Previous Track */
[0xb7] = 0, /* Stop */
[0xb8] = 0, /* Eject */
[0xcd] = 0, /* Play/Pause */
[0xe2] = 0, /* Mute */
[0xe9] = 0, /* Volume Increment */
[0xea] = 0, /* Volume Decrement */
[0x183] = 0, /* AL Consumer Control Configuration */
[0x18a] = 0, /* AL Email Reader */
[0x192] = 0, /* AL Calculator */
[0x221] = 0, /* AC Search */
[0x223] = 0, /* AC Home */
[0x224] = 0, /* AC Back */
[0x225] = 0, /* AC Forward */
[0x226] = 0, /* AC Stop */
[0x227] = 0, /* AC Refresh */
[0x22a] = 0 /* AC Bookmarks */
};
/**
* Translates USB HID Usages from the Consumer Page into HelenOS keycodes.
*
* @param usage USB HID Consumer Page Usage number.
*
* @retval HelenOS key code corresponding to the given USB Consumer Page Usage.
*/
unsigned int usb_multimedia_map_usage(int usage)
{
unsigned int key;
int *map = usb_hid_keymap_consumer;
size_t map_length = sizeof(usb_hid_keymap_consumer) / sizeof(int);
if ((usage < 0) || ((size_t)usage >= map_length))
return -1;
/* TODO What if the usage is not in the table? */
key = map[usage];
return key;
}
/**
* @}
*/