#include "xbus.h" #include #include char xdata *ledaddress; bit En; bit Done; int Diamond; unsigned char CameraX; //Bright Pixel Row data from Camera unsigned char CameraY; //Bright Pixel Column data from Camera unsigned char Status; unsigned char NewX; //New Bright Pixel Row in Monitor pixels unsigned char NewY; //New Bright Pixel Column in Monitor pixels unsigned char OldX; //Last Bright Pixel Row in Monitor pixels unsigned char OldY; //Last Bright Pixel Column in Monitor pixels unsigned int StatusAddress; //Address of Status register in FPGA unsigned int RowAddress; //Address of Row Data Register in FPGA unsigned int ColumnAddress; //Address of Column Data Register in FPGA //Data before sign change int PreXData; int PreYData; //Data to PS/2 char XData; char YData; char Sign; void init () { Done = 1; Sign = 0; Diamond = 1; En = 0; StatusAddress = 2; //Address of Status Register in FPGA RowAddress = 0; //Address of Row Data Register in FPGA ColumnAddress = 1; //Address of Column Data Register in FPGA } char FindSign ( int X, int Y ) { char tempSign; tempSign = 0; if (X > 0 && Y > 0 ) // X > 0 and Y > 0 //abs(X) == X && abs(Y) == Y { tempSign = 1; // Quadrant 1 } else if (X < 0 && Y > 0) // Quadrant 4 { tempSign = 4; } else if (X < 0 && Y < 0) // Quadrant 3 { tempSign = 3; } else if (X > 0 && Y < 0) // Quadrant 2 { tempSign = 2; } else // ERROR CONDITION!! { tempSign = 0; } return (tempSign); } //*********** FPGA ADDRESSES ************** // 0 = Row Data // 1 = Column Data // 2 = Status //***************************************** void main() { init(); while (1) // All programs run forever { Status = XRead(StatusAddress); //Read data from FPGA at Address 2 //********* DEBUG *************** // Status = 1; if (Status == 1) //There is data for me to read from FPGA { CameraX = XRead(RowAddress); //Read data from the FPGA at Address 0 CameraY = XRead(ColumnAddress); //Read data from the FPGA at Address 1 //******** DEBUG *************** // CameraX = 100; // CameraY = 100; //insert function to translate between pixels // ********** FOR TESTING PURPOSES ********************* // Monitor Resolution: 1280 X 1024 Camera Resolution: 256 X 256 // Ratio: 6 X 5 NewX = CameraX * 6; NewY = CameraY * 5; //insert function to determine relative movement PreXData = OldX - NewX; // Relative movement PreYData = OldY - NewY; OldX = NewX; // Keep the current data as 'old' data OldY = NewY; if (Done && !En) // I can put new data in the variables to send to the PS/2 port { /* switch(Diamond) { case 1: Done = 0; // reset done PreXData = 150; PreYData = 150; Diamond = 2; break; case 2: Done = 0; // reset done PreXData = 150; PreYData = -150; Diamond = 3; break; case 3: Done = 0; // reset done PreXData = -150; PreYData = -150; Diamond = 4; break; case 4: Done = 0; // reset done PreXData = -150; PreYData = 150; Diamond = 1; break; } */ XData = abs(PreXData); YData = abs(PreYData); Sign = FindSign(PreXData, PreYData); En = 1; // Set En high to let PS/2 port know that we have data in the variables } } } }