Although Minix 3 boots up in command line mode and does not use the mouse, its terminal driver configures the mouse and installs its own mouse interrupt handler (IH). So, you need not initialize the mouse, and can use Minix 3's configuration. However, to prevent this handler from stealing the mouse packets away from your program, you should do as described in Section 4.1 of Lab 3. I.e., when subscribing the mouse interrupts, your program should specify not only the IRQ_REENABLE
policy but also the IRQ_EXCLUSIVE
policy. As a result, the standard Minix 3 mouse interrupt handler will not be notified of the occurrence of mouse interrupts, thus preventing it from interfering with your code.
Although Minix 3 in command line mode does not use the mouse, your code should cancel its subscription of the mouse interrupt before exiting, by calling the sys_irqrmpolicy()
kernel call
Note that the mouse's IRQ number is 12.
If your code issues commands to the mouse, you need to prevent Minix's default IH from "stealing" the bytes sent by the mouse. If you do not use interrupts, the proper way to do this is to disable mouse interrupts by setting the appropriate bit in the KBC's Command Byte.
Like the keyboard, the mouse communicates with the KBC via a serial line, and thus you should not expect to receive the acknowledgment to a byte you write to the mouse, or the response it sends to a command, immediately after issuing a command. As suggested for Lab 3 rather than wait indefinitely, or until the KBC reports a time-out, your code should give enough-time for the KBC or the mouse to respond, retry a few times on time-out, and finally give up. Given that the time intervals to consider are in the order of tens of ms, it is not appropriate to use sleep()
, which measures time intervals whose duration is a multiple of a second. Instead, you can use the function tickdelay()
of Minix 3's libsys
as described in Section 4.2 of Lab 3