// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "remoting/client/jni/android_keymap.h"

#include "base/logging.h"

namespace {

// These must be defined in the same order as the Android keycodes in
// <android/keycodes.h> and
// "ui/base/keycodes/keyboard_code_conversion_android.cc" . Some of these
// mappings assume a US keyboard layout for now.
const uint32 usb_keycodes[] = {
  0,         // UNKNOWN
  0,         // SOFT_LEFT
  0,         // SOFT_RIGHT
  0,         // HOME
  0,         // BACK
  0,         // CALL
  0,         // ENDCALL

  0x070027,  // 0
  0x07001e,  // 1
  0x07001f,  // 2
  0x070020,  // 3
  0x070021,  // 4
  0x070022,  // 5
  0x070023,  // 6
  0x070024,  // 7
  0x070025,  // 8
  0x070026,  // 9

  0,         // STAR
  0,         // POUND
  0x070052,  // DPAD_UP
  0x070051,  // DPAD_DOWN
  0x070050,  // DPAD_LEFT
  0x07004f,  // DPAD_RIGHT
  0,         // DPAD_CENTER
  0,         // VOLUME_UP
  0,         // VOLUME_DOWN
  0,         // POWER
  0,         // CAMERA
  0,         // CLEAR

  0x070004,  // A
  0x070005,  // B
  0x070006,  // C
  0x070007,  // D
  0x070008,  // E
  0x070009,  // F
  0x07000a,  // G
  0x07000b,  // H
  0x07000c,  // I
  0x07000d,  // J
  0x07000e,  // K
  0x07000f,  // L
  0x070010,  // M
  0x070011,  // N
  0x070012,  // O
  0x070013,  // P
  0x070014,  // Q
  0x070015,  // R
  0x070016,  // S
  0x070017,  // T
  0x070018,  // U
  0x070019,  // V
  0x07001a,  // W
  0x07001b,  // X
  0x07001c,  // Y
  0x07001d,  // Z

  0x070036,  // COMMA
  0x070037,  // PERIOD

  0x0700e2,  // ALT_LEFT
  0x0700e6,  // ALT_RIGHT
  0x0700e1,  // SHIFT_LEFT
  0x0700e5,  // SHIFT_RIGHT

  0x07002b,  // TAB
  0x07002c,  // SPACE

  0,         // SYM
  0,         // EXPLORER
  0,         // ENVELOPE

  0x070028,  // ENTER
  0x07002a,  // DEL (backspace)

  0x070035,  // GRAVE (backtick)
  0x07002d,  // MINUS
  0x07002e,  // EQUALS
  0x07002f,  // LEFT_BRACKET
  0x070030,  // RIGHT_BRACKET
  0x070031,  // BACKSLASH
  0x070033,  // SEMICOLON
  0x070034,  // APOSTROPHE
  0x070038,  // SLASH

  0,         // AT
  0,         // NUM
  0,         // HEADSETHOOK
  0,         // FOCUS
  0,         // PLUS
  0,         // MENU
  0,         // NOTIFICATION
  0,         // SEARCH
  0,         // MEDIA_PLAY_PAUSE
  0,         // MEDIA_STOP
  0,         // MEDIA_NEXT
  0,         // MEDIA_PREVIOUS
  0,         // MEDIA_REWIND
  0,         // MEDIA_FAST_FORWARD
  0,         // MUTE

  0x07004b,  // PAGE_UP
  0x07004e,  // PAGE_DOWN

  0,         // PICTSYMBOLS
  0,         // SWITCH_CHARSET
  0,         // BUTTON_A
  0,         // BUTTON_B
  0,         // BUTTON_C
  0,         // BUTTON_X
  0,         // BUTTON_Y
  0,         // BUTTON_Z
  0,         // BUTTON_L1
  0,         // BUTTON_R1
  0,         // BUTTON_L2
  0,         // BUTTON_R2
  0,         // BUTTON_THUMBL
  0,         // BUTTON_THUMBR
  0,         // BUTTON_START
  0,         // BUTTON_SELECT
  0,         // BUTTON_MODE

  0x070029,  // ESCAPE
  0x07004c,  // FORWARD_DEL

  0x0700e0,  // CTRL_LEFT
  0x0700e4,  // CTRL_RIGHT
  0,         // CAPS_LOCK
  0,         // SCROLL_LOCK
  0x0700e3,  // META_LEFT
  0x0700e7,  // META_RIGHT
  0,         // FUNCTION

  0x070046,  // SYSRQ (printscreen)
  0x070048,  // BREAK (pause)
  0x07004a,  // MOVE_HOME (home)
  0x07004d,  // MOVE_END (end)
  0x070049,  // INSERT

  0,         // FORWARD
  0,         // MEDIA_PLAY
  0,         // MEDIA_PAUSE
  0,         // MEDIA_CLOSE
  0,         // MEDIA_EJECT
  0,         // MEDIA_RECORD

  0x07003a,  // F1
  0x07003b,  // F2
  0x07003c,  // F3
  0x07003d,  // F4
  0x07003e,  // F5
  0x07003f,  // F6
  0x070040,  // F7
  0x070041,  // F8
  0x070042,  // F9
  0x070043,  // F10
  0x070044,  // F11
  0x070045,  // F12

  0,         // NUM_LOCK

  0x070062,  // NUMPAD_0
  0x070059,  // NUMPAD_1
  0x07005a,  // NUMPAD_2
  0x07005b,  // NUMPAD_3
  0x07005c,  // NUMPAD_4
  0x07005d,  // NUMPAD_5
  0x07005e,  // NUMPAD_6
  0x07005f,  // NUMPAD_7
  0x070060,  // NUMPAD_8
  0x070061,  // NUMPAD_9

  0x070054,  // NUMPAD_DIVIDE
  0x070055,  // NUMPAD_MULTIPLY
  0x070056,  // NUMPAD_SUBTRACT
  0x070057,  // NUMPAD_ADD
  0x070063,  // NUMPAD_DOT
  0x070085,  // NUMPAD_COMMA
  0x070058,  // NUMPAD_ENTER
  0x070067,  // NUMPAD_EQUALS
  0x0700b6,  // NUMPAD_LEFT_PAREN
  0x0700b7,  // NUMPAD_RIGHT_PAREN
};

}  // namespace

namespace remoting {

uint32 AndroidKeycodeToUsbKeycode(size_t android) {
  if (android >= sizeof (usb_keycodes) / sizeof (uint32)) {
    LOG(WARNING) << "Attempted to decode out-of-range Android keycode";
    return 0;
  }

  return usb_keycodes[android];
}

}  // namespace remoting
