}
void sync()
{
pinMode(NCS, OUTPUT);
digitalWrite(NCS, LOW);
delayMicroseconds(2);
digitalWrite(NCS, HIGH);
ADNS_write_old(RESET, 0x5a);
delay(100); // From NRESET pull high to valid motion, assuming VDD and motion is present.
if(ADNS_read_old(PRODUCT_ID) == 0x12)
{
ADNS_write_old(MOUSE_CONTROL2, 0x1B);
}
}
void ADNS_write_old(unsigned char addr, unsigned char data) {
char temp;
int n;
digitalWrite(NCS, LOW);//nADNSCS = 0; // select the chip
temp = addr ;
digitalWrite(SCLK, LOW);//SCK = 0; // start clock low
pinMode(SDIO, OUTPUT);//DATA_OUT; // set data line for output
for (n=0; n<8; n++) {
digitalWrite(SCLK, LOW);//SCK = 0;
pinMode(SDIO, OUTPUT);
delayMicroseconds(1);
if (temp & 0x80)
digitalWrite(SDIO, HIGH);//SDOUT = 1;
else
digitalWrite(SDIO, LOW);//SDOUT = 0;
temp = (temp << 1);
digitalWrite(SCLK, HIGH);//SCK = 1;
delayMicroseconds(1);//delayMicroseconds(1); // short clock pulse
}
temp = data;
for (n=0; n<8; n++) {
digitalWrite(SCLK, LOW);//SCK = 0;
delayMicroseconds(1);
if (temp & 0x80)
digitalWrite(SDIO, HIGH);//SDOUT = 1;
else
digitalWrite(SDIO, LOW);//SDOUT = 0;
temp = (temp << 1);
digitalWrite(SCLK, HIGH);//SCK = 1;
delayMicroseconds(1); // short clock pulse
}
delayMicroseconds(20);
digitalWrite(NCS, HIGH);//nADNSCS = 1; // de-select the chip
}
byte ADNS_read_old(unsigned char addr) {
byte temp;
int n;
digitalWrite(NCS, LOW);//nADNSCS = 0; // select the chip
temp = addr;
digitalWrite(SCLK, OUTPUT); //SCK = 0; // start clock low
pinMode(SDIO, OUTPUT); //DATA_OUT; // set data line for output
for (n=0; n<8; n++) {
digitalWrite(SCLK, LOW);//SCK = 0;
pinMode(SDIO, OUTPUT); //DATA_OUT;
if (temp & 0x80) {
digitalWrite(SDIO, HIGH);//SDOUT = 1;
}
else {
digitalWrite(SDIO, LOW);//SDOUT = 0;
}
temp = (temp << 1);
delayMicroseconds(1);
digitalWrite(SCLK, HIGH); //SCK = 1;
delayMicroseconds(1); // short clock pulse
}
temp = 0; // This is a read, switch to input
pinMode(SDIO, INPUT); //DATA_IN;
for (n=0; n<8; n++) { // read back the data
digitalWrite(SCLK, LOW);
if(digitalRead(SDIO)) {// got a '1'
temp |= 0x1;
}
if( n != 7) temp = (temp << 1); // shift left
digitalWrite(SCLK, HIGH);
}
digitalWrite(NCS, HIGH);// de-select the chip
return temp;
}