Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / lcom / lab4.h @ 14

History | View | Annotate | Download (3.61 KB)

1 13 up20180614
#pragma once
2
3
#include <stdint.h>
4
5
struct packet {
6
  uint8_t bytes[3]; // mouse packet raw bytes
7
  bool rb, mb, lb;  // right, middle and left mouse buttons pressed
8
  int16_t delta_x;  // mouse x-displacement: rightwards is positive
9
  int16_t delta_y;  // mouse y-displacement: upwards is positive
10
  bool x_ov, y_ov;  // mouse x-displacement and y-displacement overflows
11
};
12
13
enum mouse_ev_t { LB_PRESSED,
14
                  LB_RELEASED,
15
                  RB_PRESSED,
16
                  RB_RELEASED,
17
                  BUTTON_EV,
18
                  MOUSE_MOV };
19
20
struct mouse_ev {
21
  enum mouse_ev_t type;
22
  int16_t delta_x, delta_y;
23
};
24
25
struct mouse_ev *(mouse_detect_event)(struct packet *pp);
26
27
/**
28
 * @brief To test packet reception via interrupts
29
 *
30
 * Displays the packets received from the mouse
31
 * Exits after receiving the number of packets specified in argument
32
 *
33
 * @param cnt Number of packets to receive and display before exiting
34
 *
35
 * @return Return 0 upon success and non-zero otherwise
36
 */
37
38
int (mouse_test_packet)(uint32_t cnt);
39
40
/**
41
 * @brief To test PS/2 remote mode operation
42
 *
43
 * Configures the PS/2 to operate in remote mode
44
 *
45
 * Periodically requests a packet from the mouse,
46
 * and displays the packets received from the mouse
47
 *
48
 * Exits after receiving the number of packets specified in argument
49
 *
50
 * @param period Period in milliseconds
51
 * @param cnt Number of packets to receive and display before exiting
52
 *
53
 * @return Return 0 upon success and non-zero otherwise
54
 */
55
56
int (mouse_test_remote)(uint16_t period, uint8_t cnt);
57
58
/**
59
 * @brief To test handling of more than one interrupt
60
 *
61
 *  Similar test_packet() except that it
62
 *  should terminate if no packets are received for idle_time seconds
63
 *
64
 * @param idle_time Number of seconds without packets before exiting
65
 *
66
 * @return Return 0 upon success and non-zero otherwise
67
 */
68
69
int (mouse_test_async)(uint8_t idle_time);
70
71
/**
72
 * @brief To test state machine implementation
73
 *
74
 *  Similar to mouse_test_packet() except that it
75
 *  should terminate if a gesture is detected.
76
 *
77
 * @return Return 0 upon success and non-zero otherwise
78
 */
79
80
int (mouse_test_gesture)(uint8_t x_len, uint8_t tolerance);
81
82
/**
83
 * @brief Handles mouse interrupts
84
 *
85
 * Reads the status register and the output buffer (OB).
86
 *
87
 * If there was some error, the byte read from the OB should be discarded.
88
 *
89
 * Must be defined using parenthesis around the function name:
90
 *
91
 *   void (mouse_ih)(void) {
92
 *
93
 * @param IH's take no arguments
94
 *
95
 * @return IH's take no values
96
 */
97
98
void (mouse_ih)(void);
99
100
/**
101
 * @brief To print a mouse packet
102
 *
103
 * Displays a mouse packet in a human readable way
104
 *
105
 * This function needs not be implemented: it is provided with the LCF
106
 *
107
 * @param pp Pointer to a struct which contains both the packet bytes
108
 *                                    and the parsed information.
109
 */
110
111
void (mouse_print_packet)(struct packet *pp);
112
113
/**
114
 * @brief Enables stream mode data reporting.
115
 *
116
 * Enables stream mode data reporting, by sending the respective command to the mouse.
117
 *
118
 * This function is provided by the LCF.
119
 *
120
 * In order to score points for your Lab 4 grade, you should implement this functionality yourself. * This can be done by defining your own function with the same functionality, or just by adding
121
 * this functionality somewhere in your code.
122
 *
123
 * @return Returns O on success, and non-zero otherwise
124
 */
125
126
int (mouse_enable_data_reporting)(void);
127
128
/**
129
 * @brief Returns Minix's default KBC command byte.
130
 *
131
 * This function is already implemented by the LCF: you must not implement it.
132
 *
133
 * @return Returns Minix's default KBC command byte
134
 */
135
136
uint8_t (minix_get_dflt_kbc_cmd_byte)(void);