Our PS2 converted into library

Dependents:   Position_Mouse Test_Mouse

Committer:
joshwilkins2013
Date:
Mon Apr 06 16:53:22 2015 +0000
Revision:
1:11b4710b30c2
Parent:
0:eb8581df1f5e
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joshwilkins2013 0:eb8581df1f5e 1 #ifndef MOUSE_H
joshwilkins2013 0:eb8581df1f5e 2 #define MOUSE_H
joshwilkins2013 0:eb8581df1f5e 3
joshwilkins2013 0:eb8581df1f5e 4 #include "mbed.h"
joshwilkins2013 0:eb8581df1f5e 5
joshwilkins2013 0:eb8581df1f5e 6 #define sensorConfig 0x00
joshwilkins2013 0:eb8581df1f5e 7 #define sensorStatus 0x01
joshwilkins2013 0:eb8581df1f5e 8 #define Delta_Y 0x02
joshwilkins2013 0:eb8581df1f5e 9 #define Delta_X 0x03
joshwilkins2013 0:eb8581df1f5e 10
joshwilkins2013 0:eb8581df1f5e 11 DigitalInOut pinC(PTB23);
joshwilkins2013 0:eb8581df1f5e 12 DigitalInOut pinD(PTA2);
joshwilkins2013 0:eb8581df1f5e 13
joshwilkins2013 0:eb8581df1f5e 14 class MOUSE {
joshwilkins2013 0:eb8581df1f5e 15
joshwilkins2013 0:eb8581df1f5e 16 protected:
joshwilkins2013 0:eb8581df1f5e 17
joshwilkins2013 0:eb8581df1f5e 18 public:
joshwilkins2013 0:eb8581df1f5e 19
joshwilkins2013 0:eb8581df1f5e 20 //=====================================
joshwilkins2013 0:eb8581df1f5e 21 //====== Set of useful functions ======
joshwilkins2013 0:eb8581df1f5e 22 //=====================================
joshwilkins2013 0:eb8581df1f5e 23
joshwilkins2013 0:eb8581df1f5e 24 void init(){
joshwilkins2013 0:eb8581df1f5e 25 pinC.output();
joshwilkins2013 0:eb8581df1f5e 26 pinD.input();
joshwilkins2013 0:eb8581df1f5e 27 }
joshwilkins2013 0:eb8581df1f5e 28
joshwilkins2013 0:eb8581df1f5e 29 void reSync(){
joshwilkins2013 0:eb8581df1f5e 30 pinC = 1; // ReSync (startup) mouse
joshwilkins2013 0:eb8581df1f5e 31 wait_us(5);
joshwilkins2013 0:eb8581df1f5e 32 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 33 wait_us(1);
joshwilkins2013 0:eb8581df1f5e 34 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 35 wait_us(1000); // wait for OptiMouse serial transaction timer to time out:
joshwilkins2013 0:eb8581df1f5e 36 }
joshwilkins2013 0:eb8581df1f5e 37
joshwilkins2013 0:eb8581df1f5e 38 uint8_t readRegister(uint8_t address){ // Bitbang SPI read operation
joshwilkins2013 0:eb8581df1f5e 39 int i = 7;
joshwilkins2013 0:eb8581df1f5e 40 uint8_t r = 0;
joshwilkins2013 0:eb8581df1f5e 41 pinD.output(); // Write the address of the register we want to read:
joshwilkins2013 0:eb8581df1f5e 42 for (; i>=0; i--){
joshwilkins2013 0:eb8581df1f5e 43 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 44 pinD = (address & (1 << i));
joshwilkins2013 0:eb8581df1f5e 45 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 46 }
joshwilkins2013 0:eb8581df1f5e 47 pinD.input(); // Switch data line from OUTPUT to INPUT
joshwilkins2013 0:eb8581df1f5e 48 wait_us(100); // Wait according to datasheet
joshwilkins2013 0:eb8581df1f5e 49 for (i=7; i>=0; i--){ // Fetch the data!
joshwilkins2013 0:eb8581df1f5e 50 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 51 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 52 r |= ((pinD.read()) << i);
joshwilkins2013 0:eb8581df1f5e 53 }
joshwilkins2013 0:eb8581df1f5e 54 wait_us(100);
joshwilkins2013 0:eb8581df1f5e 55 return r;
joshwilkins2013 0:eb8581df1f5e 56 }
joshwilkins2013 0:eb8581df1f5e 57
joshwilkins2013 0:eb8581df1f5e 58 void writeRegister(uint8_t address, uint8_t data){
joshwilkins2013 0:eb8581df1f5e 59 int i = 7;
joshwilkins2013 0:eb8581df1f5e 60 address |= 0x80;// Set MSB high, to indicate write operation:
joshwilkins2013 0:eb8581df1f5e 61 pinD.output(); // Write the address:
joshwilkins2013 0:eb8581df1f5e 62 for (; i>=0; i--){
joshwilkins2013 0:eb8581df1f5e 63 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 64 pinD = (address & (1 << i));
joshwilkins2013 0:eb8581df1f5e 65 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 66 }
joshwilkins2013 0:eb8581df1f5e 67 for (i=7; i>=0; i--){ // Write the data:
joshwilkins2013 0:eb8581df1f5e 68 pinC = 0;
joshwilkins2013 0:eb8581df1f5e 69 pinD = (data & (1 << i));
joshwilkins2013 0:eb8581df1f5e 70 pinC = 1;
joshwilkins2013 0:eb8581df1f5e 71 }
joshwilkins2013 0:eb8581df1f5e 72 }
joshwilkins2013 0:eb8581df1f5e 73
joshwilkins2013 0:eb8581df1f5e 74 void forceAwake(char value){
joshwilkins2013 0:eb8581df1f5e 75 if (value>0) writeRegister(sensorConfig,0x01);
joshwilkins2013 0:eb8581df1f5e 76 else writeRegister(sensorConfig,0x00);
joshwilkins2013 0:eb8581df1f5e 77 }
joshwilkins2013 0:eb8581df1f5e 78
joshwilkins2013 0:eb8581df1f5e 79 signed char getDx(void){
joshwilkins2013 0:eb8581df1f5e 80 return (signed char) readRegister(Delta_X);
joshwilkins2013 0:eb8581df1f5e 81 }
joshwilkins2013 0:eb8581df1f5e 82
joshwilkins2013 0:eb8581df1f5e 83 signed char getDy(void){
joshwilkins2013 0:eb8581df1f5e 84 return (signed char) readRegister(Delta_Y);
joshwilkins2013 0:eb8581df1f5e 85 }
joshwilkins2013 0:eb8581df1f5e 86
joshwilkins2013 0:eb8581df1f5e 87 signed char status(void){
joshwilkins2013 0:eb8581df1f5e 88 return (signed char) readRegister(sensorStatus);
joshwilkins2013 0:eb8581df1f5e 89 }
joshwilkins2013 0:eb8581df1f5e 90 };
joshwilkins2013 0:eb8581df1f5e 91 #endif