PS/2
Dependents: Synth Lab3Translator PS2_Keyboard CLI ... more
PS2Mouse.cpp@1:823c2798e398, 2010-09-29 (annotated)
- Committer:
- shintamainjp
- Date:
- Wed Sep 29 14:11:44 2010 +0000
- Revision:
- 1:823c2798e398
- Child:
- 2:a57bbbec16b1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 1:823c2798e398 | 1 | /** |
shintamainjp | 1:823c2798e398 | 2 | * PS/2 mouse interface control class (Version 0.0.1) |
shintamainjp | 1:823c2798e398 | 3 | * |
shintamainjp | 1:823c2798e398 | 4 | * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems) |
shintamainjp | 1:823c2798e398 | 5 | * http://shinta.main.jp/ |
shintamainjp | 1:823c2798e398 | 6 | */ |
shintamainjp | 1:823c2798e398 | 7 | #include "PS2Mouse.h" |
shintamainjp | 1:823c2798e398 | 8 | |
shintamainjp | 1:823c2798e398 | 9 | PS2Mouse::PS2Mouse(PinName clk_pin, PinName dat_pin) |
shintamainjp | 1:823c2798e398 | 10 | : ps2ms_init(clk_pin, dat_pin), ps2ms(clk_pin, dat_pin) { |
shintamainjp | 1:823c2798e398 | 11 | cnt = 0; |
shintamainjp | 1:823c2798e398 | 12 | } |
shintamainjp | 1:823c2798e398 | 13 | |
shintamainjp | 1:823c2798e398 | 14 | PS2Mouse::~PS2Mouse() { |
shintamainjp | 1:823c2798e398 | 15 | } |
shintamainjp | 1:823c2798e398 | 16 | |
shintamainjp | 1:823c2798e398 | 17 | bool PS2Mouse::processing(mouse_event_t *p) { |
shintamainjp | 1:823c2798e398 | 18 | bool emit = false; |
shintamainjp | 1:823c2798e398 | 19 | const int c = ps2ms.getc(); |
shintamainjp | 1:823c2798e398 | 20 | if (0 <= c) { |
shintamainjp | 1:823c2798e398 | 21 | switch (cnt % 4) { |
shintamainjp | 1:823c2798e398 | 22 | case 0: |
shintamainjp | 1:823c2798e398 | 23 | mi.byte1.byte = c; |
shintamainjp | 1:823c2798e398 | 24 | break; |
shintamainjp | 1:823c2798e398 | 25 | case 1: |
shintamainjp | 1:823c2798e398 | 26 | mi.byte2.byte = c; |
shintamainjp | 1:823c2798e398 | 27 | break; |
shintamainjp | 1:823c2798e398 | 28 | case 2: |
shintamainjp | 1:823c2798e398 | 29 | mi.byte3.byte = c; |
shintamainjp | 1:823c2798e398 | 30 | break; |
shintamainjp | 1:823c2798e398 | 31 | case 3: |
shintamainjp | 1:823c2798e398 | 32 | mi.byte4.byte = c; |
shintamainjp | 1:823c2798e398 | 33 | #if 0 |
shintamainjp | 1:823c2798e398 | 34 | printf("[%c:%c:%c] - (%4d,%4d) - <%d:%3d>\n", |
shintamainjp | 1:823c2798e398 | 35 | mi.byte1.bit.btnLeft ? 'o' : ' ', |
shintamainjp | 1:823c2798e398 | 36 | mi.byte1.bit.btnMiddle ? 'o' : ' ', |
shintamainjp | 1:823c2798e398 | 37 | mi.byte1.bit.btnRight ? 'o' : ' ', |
shintamainjp | 1:823c2798e398 | 38 | mi.byte1.bit.signX ? (-256 + mi.byte2.byte) : mi.byte2.byte, |
shintamainjp | 1:823c2798e398 | 39 | mi.byte1.bit.signY ? (-256 + mi.byte3.byte) : mi.byte3.byte, |
shintamainjp | 1:823c2798e398 | 40 | mi.byte4.bit.signZ, |
shintamainjp | 1:823c2798e398 | 41 | mi.byte4.bit.signZ ? (-128 + mi.byte4.bit.value) : mi.byte4.bit.value); |
shintamainjp | 1:823c2798e398 | 42 | #endif |
shintamainjp | 1:823c2798e398 | 43 | p->left = mi.byte1.bit.btnLeft ? true : false; |
shintamainjp | 1:823c2798e398 | 44 | p->center = mi.byte1.bit.btnCenter ? true : false; |
shintamainjp | 1:823c2798e398 | 45 | p->right = mi.byte1.bit.btnRight ? true : false; |
shintamainjp | 1:823c2798e398 | 46 | p->x = mi.byte1.bit.signX ? (-256 + mi.byte2.byte) : mi.byte2.byte; |
shintamainjp | 1:823c2798e398 | 47 | p->y = mi.byte1.bit.signY ? (-256 + mi.byte3.byte) : mi.byte3.byte; |
shintamainjp | 1:823c2798e398 | 48 | p->z = mi.byte4.bit.signZ ? (-128 + mi.byte4.bit.value) : mi.byte4.bit.value; |
shintamainjp | 1:823c2798e398 | 49 | emit = true; |
shintamainjp | 1:823c2798e398 | 50 | break; |
shintamainjp | 1:823c2798e398 | 51 | } |
shintamainjp | 1:823c2798e398 | 52 | cnt++; |
shintamainjp | 1:823c2798e398 | 53 | } |
shintamainjp | 1:823c2798e398 | 54 | return emit; |
shintamainjp | 1:823c2798e398 | 55 | } |