PS/2

Dependents:   Synth Lab3Translator PS2_Keyboard CLI ... more

PS2Mouse.cpp

Committer:
shintamainjp
Date:
2010-09-29
Revision:
1:823c2798e398
Child:
2:a57bbbec16b1

File content as of revision 1:823c2798e398:

/**
 * PS/2 mouse interface control class (Version 0.0.1)
 *
 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
 * http://shinta.main.jp/
 */
#include "PS2Mouse.h"

PS2Mouse::PS2Mouse(PinName clk_pin, PinName dat_pin)
        : ps2ms_init(clk_pin, dat_pin), ps2ms(clk_pin, dat_pin) {
    cnt = 0;
}

PS2Mouse::~PS2Mouse() {
}

bool PS2Mouse::processing(mouse_event_t *p) {
    bool emit = false;
    const int c = ps2ms.getc();
    if (0 <= c) {
        switch (cnt % 4) {
            case 0:
                mi.byte1.byte = c;
                break;
            case 1:
                mi.byte2.byte = c;
                break;
            case 2:
                mi.byte3.byte = c;
                break;
            case 3:
                mi.byte4.byte = c;
#if 0
                printf("[%c:%c:%c] - (%4d,%4d) - <%d:%3d>\n",
                       mi.byte1.bit.btnLeft ? 'o' : ' ',
                       mi.byte1.bit.btnMiddle ? 'o' : ' ',
                       mi.byte1.bit.btnRight ? 'o' : ' ',
                       mi.byte1.bit.signX ? (-256 + mi.byte2.byte) : mi.byte2.byte,
                       mi.byte1.bit.signY ? (-256 + mi.byte3.byte) : mi.byte3.byte,
                       mi.byte4.bit.signZ,
                       mi.byte4.bit.signZ ? (-128 + mi.byte4.bit.value) : mi.byte4.bit.value);
#endif
                p->left = mi.byte1.bit.btnLeft ? true : false;
                p->center = mi.byte1.bit.btnCenter ? true : false;
                p->right = mi.byte1.bit.btnRight ? true : false;
                p->x = mi.byte1.bit.signX ? (-256 + mi.byte2.byte) : mi.byte2.byte;
                p->y = mi.byte1.bit.signY ? (-256 + mi.byte3.byte) : mi.byte3.byte;
                p->z = mi.byte4.bit.signZ ? (-128 + mi.byte4.bit.value) : mi.byte4.bit.value;
                emit = true;
                break;
        }
        cnt++;
    }
    return emit;
}