112660Sandreas.sandberg@arm.com/*
212660Sandreas.sandberg@arm.com * Copyright (c) 2011, 2018 ARM Limited
312660Sandreas.sandberg@arm.com * All rights reserved
412660Sandreas.sandberg@arm.com *
512660Sandreas.sandberg@arm.com * The license below extends only to copyright in the software and shall
612660Sandreas.sandberg@arm.com * not be construed as granting a license to any other intellectual
712660Sandreas.sandberg@arm.com * property including but not limited to intellectual property relating
812660Sandreas.sandberg@arm.com * to a hardware implementation of the functionality of the software
912660Sandreas.sandberg@arm.com * licensed hereunder.  You may use the software subject to the license
1012660Sandreas.sandberg@arm.com * terms below provided that you ensure that this notice is replicated
1112660Sandreas.sandberg@arm.com * unmodified and in its entirety in all distributions of the software,
1212660Sandreas.sandberg@arm.com * modified or unmodified, in source code or in binary form.
1312660Sandreas.sandberg@arm.com *
1412660Sandreas.sandberg@arm.com * Redistribution and use in source and binary forms, with or without
1512660Sandreas.sandberg@arm.com * modification, are permitted provided that the following conditions are
1612660Sandreas.sandberg@arm.com * met: redistributions of source code must retain the above copyright
1712660Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer;
1812660Sandreas.sandberg@arm.com * redistributions in binary form must reproduce the above copyright
1912660Sandreas.sandberg@arm.com * notice, this list of conditions and the following disclaimer in the
2012660Sandreas.sandberg@arm.com * documentation and/or other materials provided with the distribution;
2112660Sandreas.sandberg@arm.com * neither the name of the copyright holders nor the names of its
2212660Sandreas.sandberg@arm.com * contributors may be used to endorse or promote products derived from
2312660Sandreas.sandberg@arm.com * this software without specific prior written permission.
2412660Sandreas.sandberg@arm.com *
2512660Sandreas.sandberg@arm.com * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2612660Sandreas.sandberg@arm.com * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2712660Sandreas.sandberg@arm.com * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2812660Sandreas.sandberg@arm.com * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2912660Sandreas.sandberg@arm.com * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
3012660Sandreas.sandberg@arm.com * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3112660Sandreas.sandberg@arm.com * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
3212660Sandreas.sandberg@arm.com * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
3312660Sandreas.sandberg@arm.com * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3412660Sandreas.sandberg@arm.com * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3512660Sandreas.sandberg@arm.com * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3612660Sandreas.sandberg@arm.com *
3712660Sandreas.sandberg@arm.com * Authors: Ali Saidi
3812660Sandreas.sandberg@arm.com */
3912660Sandreas.sandberg@arm.com
4012660Sandreas.sandberg@arm.com#ifndef __DEV_PS2_HH__
4112660Sandreas.sandberg@arm.com#define __DEV_PS2_HH__
4212660Sandreas.sandberg@arm.com
4312660Sandreas.sandberg@arm.com#include <stdint.h>
4412660Sandreas.sandberg@arm.com
4512660Sandreas.sandberg@arm.com#include <list>
4612660Sandreas.sandberg@arm.com#include <vector>
4712660Sandreas.sandberg@arm.com
4812660Sandreas.sandberg@arm.com#include "base/bitunion.hh"
4912660Sandreas.sandberg@arm.com
5012660Sandreas.sandberg@arm.com/** @file misc functions and constants required to interface with or
5112660Sandreas.sandberg@arm.com * emulate ps2 devices
5212660Sandreas.sandberg@arm.com */
5312660Sandreas.sandberg@arm.com
5412660Sandreas.sandberg@arm.comnamespace Ps2 {
5512660Sandreas.sandberg@arm.com
5612660Sandreas.sandberg@arm.comenum {
5712660Sandreas.sandberg@arm.com    SelfTestPass       = 0xAA,
5812660Sandreas.sandberg@arm.com    ReadID             = 0xF2,
5912660Sandreas.sandberg@arm.com    Enable             = 0xF4,
6012660Sandreas.sandberg@arm.com    Disable            = 0xF5,
6112660Sandreas.sandberg@arm.com    DefaultsAndDisable = 0xF6,
6212660Sandreas.sandberg@arm.com    SelfTestFail       = 0xFC,
6312660Sandreas.sandberg@arm.com    Ack                = 0xFA,
6412660Sandreas.sandberg@arm.com    Resend             = 0xFE,
6512660Sandreas.sandberg@arm.com    Reset              = 0xFF,
6612660Sandreas.sandberg@arm.com};
6712660Sandreas.sandberg@arm.com
6812660Sandreas.sandberg@arm.comnamespace Keyboard {
6912660Sandreas.sandberg@arm.com
7012660Sandreas.sandberg@arm.comenum {
7112660Sandreas.sandberg@arm.com    LEDWrite = 0xED,
7212660Sandreas.sandberg@arm.com    DiagnosticEcho = 0xEE,
7312660Sandreas.sandberg@arm.com    AlternateScanCodes = 0xF0,
7412660Sandreas.sandberg@arm.com    TypematicInfo = 0xF3,
7512660Sandreas.sandberg@arm.com    AllKeysToTypematic = 0xF7,
7612660Sandreas.sandberg@arm.com    AllKeysToMakeRelease = 0xF8,
7712660Sandreas.sandberg@arm.com    AllKeysToMake = 0xF9,
7812660Sandreas.sandberg@arm.com    AllKeysToTypematicMakeRelease = 0xFA,
7912660Sandreas.sandberg@arm.com    KeyToTypematic = 0xFB,
8012660Sandreas.sandberg@arm.com    KeyToMakeRelease = 0xFC,
8112660Sandreas.sandberg@arm.com    KeyToMakeOnly = 0xFD,
8212660Sandreas.sandberg@arm.com};
8312660Sandreas.sandberg@arm.com
8412660Sandreas.sandberg@arm.comextern const std::vector<uint8_t> ID;
8512660Sandreas.sandberg@arm.com
8612660Sandreas.sandberg@arm.com};
8712660Sandreas.sandberg@arm.com
8812660Sandreas.sandberg@arm.comnamespace Mouse {
8912660Sandreas.sandberg@arm.com
9012660Sandreas.sandberg@arm.comenum {
9112660Sandreas.sandberg@arm.com    Scale1to1 = 0xE6,
9212660Sandreas.sandberg@arm.com    Scale2to1 = 0xE7,
9312660Sandreas.sandberg@arm.com    SetResolution = 0xE8,
9412660Sandreas.sandberg@arm.com    GetStatus = 0xE9,
9512660Sandreas.sandberg@arm.com    ReadData = 0xEB,
9612660Sandreas.sandberg@arm.com    ResetWrapMode = 0xEC,
9712660Sandreas.sandberg@arm.com    WrapMode = 0xEE,
9812660Sandreas.sandberg@arm.com    RemoteMode = 0xF0,
9912660Sandreas.sandberg@arm.com    SampleRate = 0xF3,
10012660Sandreas.sandberg@arm.com};
10112660Sandreas.sandberg@arm.com
10212660Sandreas.sandberg@arm.comextern const std::vector<uint8_t> ID;
10312660Sandreas.sandberg@arm.com
10412660Sandreas.sandberg@arm.com};
10512660Sandreas.sandberg@arm.com
10612660Sandreas.sandberg@arm.com/** A bitfield that represents the first byte of a mouse movement packet
10712660Sandreas.sandberg@arm.com */
10812660Sandreas.sandberg@arm.comBitUnion8(Ps2MouseMovement)
10912660Sandreas.sandberg@arm.com    Bitfield<0> leftButton;
11012660Sandreas.sandberg@arm.com    Bitfield<1> rightButton;
11112660Sandreas.sandberg@arm.com    Bitfield<2> middleButton;
11212660Sandreas.sandberg@arm.com    Bitfield<3> one;
11312660Sandreas.sandberg@arm.com    Bitfield<4> xSign;
11412660Sandreas.sandberg@arm.com    Bitfield<5> ySign;
11512660Sandreas.sandberg@arm.com    Bitfield<6> xOverflow;
11612660Sandreas.sandberg@arm.com    Bitfield<7> yOverflow;
11712660Sandreas.sandberg@arm.comEndBitUnion(Ps2MouseMovement)
11812660Sandreas.sandberg@arm.com
11912660Sandreas.sandberg@arm.com/** Convert an x11 key symbol into a set of ps2 charecters.
12012660Sandreas.sandberg@arm.com * @param key x11 key symbol
12112660Sandreas.sandberg@arm.com * @param down if the key is being pressed or released
12212660Sandreas.sandberg@arm.com * @param cur_shift if device has already sent a shift
12312660Sandreas.sandberg@arm.com * @param keys list of keys command to send to emulate the x11 key symbol
12412660Sandreas.sandberg@arm.com */
12512660Sandreas.sandberg@arm.comvoid keySymToPs2(uint32_t key, bool down, bool &cur_shift,
12612660Sandreas.sandberg@arm.com        std::list<uint8_t> &keys);
12712660Sandreas.sandberg@arm.com
12812660Sandreas.sandberg@arm.com} /* namespace Ps2 */
12912660Sandreas.sandberg@arm.com#endif // __DEV_PS2_HH__
130