Changeset a2afd8f in mainline for uspace/drv/hid


Ignore:
Timestamp:
2017-11-13T18:07:46Z (8 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
0dd4779
Parents:
56763a4
Message:

Move ADB keyboard and mouse support to separate drivers.

Location:
uspace/drv/hid
Files:
10 added
2 moved

Legend:

Unmodified
Added
Removed
  • uspace/drv/hid/adb-kbd/ctl.c

    r56763a4 ra2afd8f  
    2727 */
    2828
    29 /** @addtogroup kbd_ctl
    30  * @ingroup input
    31  * @{
    32  */
    3329/**
    3430 * @file
    35  * @brief Apple ADB keyboard controller driver.
    36  */
    37 
     31 * @brief Apple ADB keyboard controller
     32 */
     33
     34#include <errno.h>
    3835#include <io/console.h>
    3936#include <io/keycode.h>
    40 #include "../kbd.h"
    41 #include "../kbd_ctl.h"
    42 #include "../kbd_port.h"
    43 
    44 static void apple_ctl_parse(sysarg_t);
    45 static int apple_ctl_init(kbd_dev_t *);
    46 static void apple_ctl_set_ind(kbd_dev_t *, unsigned int);
    47 
    48 kbd_ctl_ops_t apple_ctl = {
    49         .parse = apple_ctl_parse,
    50         .init = apple_ctl_init,
    51         .set_ind = apple_ctl_set_ind
    52 };
     37
     38#include "ctl.h"
    5339
    5440#define KBD_KEY_RELEASE  0x80
     
    185171};
    186172
    187 static kbd_dev_t *kbd_dev;
    188 
    189 static int apple_ctl_init(kbd_dev_t *kdev)
     173/** Translate ADB keyboard scancode into keyboard event.
     174 *
     175 * @param scancode Scancode
     176 * @param rtype Place to store type of keyboard event (press or release)
     177 * @param rkey Place to store key code
     178 *
     179 * @return EOK on success, ENOENT if no translation exists
     180 */
     181int adb_kbd_key_translate(sysarg_t scancode, kbd_event_type_t *rtype,
     182    unsigned int *rkey)
    190183{
    191         kbd_dev = kdev;
    192         return 0;
    193 }
    194 
    195 static void apple_ctl_parse(sysarg_t scancode)
    196 {
    197         kbd_event_type_t type;
    198        
     184        kbd_event_type_t etype;
     185        unsigned int key;
     186
    199187        if (scancode & KBD_KEY_RELEASE) {
    200188                scancode &= ~KBD_KEY_RELEASE;
    201                 type = KEY_RELEASE;
    202         } else
    203                 type = KEY_PRESS;
    204        
     189                etype = KEY_RELEASE;
     190        } else {
     191                etype = KEY_PRESS;
     192        }
     193
    205194        if (scancode >= sizeof(scanmap) / sizeof(unsigned int))
    206                 return;
    207        
    208         unsigned int key = scanmap[scancode];
    209         if (key != 0)
    210                 kbd_push_event(kbd_dev, type, key);
     195                return ENOENT;
     196
     197        key = scanmap[scancode];
     198        if (key == 0)
     199                return ENOENT;
     200
     201        *rtype = etype;
     202        *rkey = key;
     203        return EOK;
    211204}
    212205
    213 static void apple_ctl_set_ind(kbd_dev_t *kdev, unsigned mods)
    214 {
    215         (void) mods;
    216 }
    217 
    218206/** @}
    219207 */
  • uspace/drv/hid/adb-mouse/adb-mouse.h

    r56763a4 ra2afd8f  
    11/*
    2  * Copyright (c) 2011 Martin Decky
     2 * Copyright (c) 2017 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    2727 */
    2828
    29 /** @addtogroup mouse_proto
    30  * @ingroup input
    31  * @{
    32  */
    33 /**
    34  * @file
    35  * @brief ADB protocol driver.
     29/** @file ADB mouse driver
    3630 */
    3731
     32#ifndef ADB_MOUSE_H
     33#define ADB_MOUSE_H
     34
     35#include <async.h>
     36#include <ddf/driver.h>
    3837#include <stdbool.h>
    39 #include "../mouse.h"
    40 #include "../mouse_port.h"
    41 #include "../mouse_proto.h"
    4238
    43 static mouse_dev_t *mouse_dev;
    44 static bool b1_pressed;
    45 static bool b2_pressed;
     39/** ADB mouse */
     40typedef struct {
     41        ddf_dev_t *dev;
     42        async_sess_t *parent_sess;
     43        ddf_fun_t *fun;
     44        async_sess_t *client_sess;
     45        bool b1_pressed;
     46        bool b2_pressed;
     47} adb_mouse_t;
    4648
    47 static int adb_proto_init(mouse_dev_t *mdev)
    48 {
    49         mouse_dev = mdev;
    50         b1_pressed = false;
    51         b2_pressed = false;
    52        
    53         return 0;
    54 }
     49extern int adb_mouse_add(adb_mouse_t *);
     50extern int adb_mouse_remove(adb_mouse_t *);
     51extern int adb_mouse_gone(adb_mouse_t *);
    5552
    56 /** Process mouse data */
    57 static void adb_proto_parse(sysarg_t data)
    58 {
    59         bool b1, b2;
    60         uint16_t udx, udy;
    61         int dx, dy;
    62        
    63         /* Extract fields. */
    64         b1 = ((data >> 15) & 1) == 0;
    65         udy = (data >> 8) & 0x7f;
    66         b2 = ((data >> 7) & 1) == 0;
    67         udx = data & 0x7f;
    68        
    69         /* Decode 7-bit two's complement signed values. */
    70         dx = (udx & 0x40) ? (udx - 0x80) : udx;
    71         dy = (udy & 0x40) ? (udy - 0x80) : udy;
    72        
    73         if (b1 != b1_pressed) {
    74                 mouse_push_event_button(mouse_dev, 1, b1);
    75                 b1_pressed = b1;
    76         }
    77        
    78         if (b2 != b2_pressed) {
    79                 mouse_push_event_button(mouse_dev, 2, b2);
    80                 b1_pressed = b1;
    81         }
    82        
    83         if (dx != 0 || dy != 0)
    84                 mouse_push_event_move(mouse_dev, dx, dy, 0);
    85 }
     53#endif
    8654
    87 mouse_proto_ops_t adb_proto = {
    88         .parse = adb_proto_parse,
    89         .init = adb_proto_init
    90 };
    91 
    92 /**
    93  * @}
     55/** @}
    9456 */
Note: See TracChangeset for help on using the changeset viewer.