summaryrefslogtreecommitdiffstats
path: root/cpukit/include/rtems/mw_uid.h
blob: 86fdae99717e524e0bc4740a9cc9211f626ba689 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/**
 * @file
 *
 * @ingroup libmisc_fb_mw
 *
 * @brief Input Devices for MicroWindows
 *
 * This file defines the interface for input devices used by MicroWindows
 * in an embedded system environment.
 */

/*
 * Copyright (c) 2000 - Rosimildo da Silva
 */

#ifndef _MW_UID_H
#define _MW_UID_H

#include <sys/types.h>
#include <rtems/print.h>

/**
 *  @defgroup libmisc_fb_mw Input Devices for MicroWindows
 *
 *  @ingroup RTEMSDeviceDrivers
 */
/**@{*/
#ifdef __cplusplus
extern "C" {
#endif

/* 0x41XX  -- IOCTL functions for the Micro Input Devices commands */
#define MW_UID_REGISTER_DEVICE     0x4100
#define MW_UID_UNREGISTER_DEVICE   0x4101

/* devices supported by MicroWindows */
enum MW_INPUT_DEVICE_TYPE {
  MV_UID_INVALID   = 0,
  MV_UID_REL_POS   = 1,   /* mouse        */
  MV_UID_ABS_POS   = 2,   /* touch-screen */
  MV_UID_KBD       = 3,   /* keyboard     */
  MV_UID_TIMER     = 4    /* timer -- not used */
};

/* matching MicroWindows */
#define MV_BUTTON_RIGHT                 0x01
#define MV_BUTTON_CENTER                0x02
#define MV_BUTTON_LEFT                  0x04

/* modifiers of the keyboard type devices */
#define MV_KEY_MODIFIER_SHIFT_DOWN      0x10
#define MV_KEY_MODIFIER_ALT_DOWN        0x20

/* indication of the LEDS */
#define MV_KEY_MODIFIER_CAPS_ON         0x04
#define MV_KEY_MODIFIER_NUN_LOCK_ON     0x02
#define MV_KEY_SCROLL_LOCK_ON           0x01

/* keyboard modes -- default ASCII     */
#define MV_KEY_MODE_ASCII               0x01
/*
 * This mode one event is sent when a key is pressed,
 * and another one is send when a key is released.
 */
#define MV_KEY_MODE_SCANCODE            0x00

/* these defines match with the linux keyboard range
 * for ioctls functions for the keyboard interface.
 * 0x4BXX --- keyboard related functions
 */
#define MV_KDGKBMODE  0x4B44   /* gets current keyboard mode */
#define MV_KDSKBMODE  0x4B45   /* sets current keyboard mode */

/*
 * Message generated by input devices controlled by MicroWindows.
 */
struct MW_UID_MESSAGE {
  enum MW_INPUT_DEVICE_TYPE type;  /* device type */
  union {
    /* fired when keyboard events are raised */
    struct kbd_t {
      unsigned short code;        /* keycode or scancode        */
      unsigned char  modifiers;   /* key modifiers              */
      unsigned char  mode;        /* current Kbd mode           */
    } kbd;

    /* fired when position events are raised, mouse, touch screen, etc */
    struct pos_t {
      unsigned short btns; /* indicates which buttons are pressed */
      short x;             /* x location */
      short y;             /* y location */
      short z;             /* z location, 0 for 2D */
    } pos;

    /* fired by a timer device periodically */
    struct timer_t {
      unsigned long  frt;   /* free running timer */
      unsigned long  seq;   /* sequence number */
    } tmr;
  } m;
};


/*
 * API for creating/closing/accessing the message queue used by the micro
 * input device interface. All functions in this interface returns a
 * zero ( 0 ) on success. One exception for that is the "read" routine
 * that returns the number of bytes read. Negaive numbers indicate errors
 *
 * The implementation of the message queue for RTEMS uses a POSIX message
 * queue interface. It should be very portable among systems with a POSIX
 * support.
 */

/**
 * This method creates the message queue that holds events from the
 * input devices.
 *
 * @param[in] q_name is the name of the message queue
 * @param[in] flags controls the behaviour of the queue
 * @param[in] max_msgs specifies the maximum number of pending messages
 *
 * @note The message queue is from the Classic API.
 *
 * @retval This method returns 0 on success and -1 on error.
 */
extern int uid_open_queue( const char *q_name, int flags, size_t max_msgs );

/**
 * This method closes the message queue and deletes it.
 *
 * @retval This method returns 0 on success and -1 on error.
 */
extern int uid_close_queue( void );

/**
 * This method reads a message from the queue. It waits up to the specified
 * timeout in miliseconds. A @a timeout of 0 is a poll.
 *
 * @param[in] m will be filled in with the received message
 * @param[in] timeout is the maximum number of mulliseconds to wait
 *
 * @retval This method returns 0 on success and -1 on error.
 */
extern int uid_read_message( struct MW_UID_MESSAGE *m, unsigned long timeout );

/**
 * This methods writes a message to the queue.
 *
 * @param[in] m is the message to send
 *
 * @retval This method returns 0 on success and -1 on error.
 */
extern int uid_send_message( struct MW_UID_MESSAGE *m );

/**
 *  This method registers the device associated with @a fd to
 *  to insert data to the queue
 */
extern int uid_register_device( int fd, const char *q_name );

/* unregister device to stop adding messages to the queue */
extern int uid_unregister_device( int fd );

/* set the keyboard */
extern int uid_set_kbd_mode( int fd, int mode, int *old_mode );

/**
 * This methods prints the specified UID message using printk
 *
 * @param[in] uid points to the message to print
 */
void uid_print_message(
  struct MW_UID_MESSAGE *uid
);

/**
 * This methods prints the specified UID message using your fprintf
 * style method of choice.
 *
 * @param[in] RTEMS printer
 * @param[in] uid points to the message to print
 */
void uid_print_message_with_plugin(
  const rtems_printer   *printer,
  struct MW_UID_MESSAGE *uid
);

#ifdef __cplusplus
}
#endif
/**@}*/
#endif /* _MW_UID_H */