- // Set Buttons (Primary)\r
- for( i = 0; i < 3; i ++ )\r
- {\r
- Uint8 newVal = (flags & (1 << i)) ? 0xFF : 0;\r
- if(newVal != gMouse_Buttons[i]) {\r
- if( gMouse_Callback )\r
- gMouse_Callback(gMouse_CallbackArg, 0, i, newVal - gMouse_Buttons[i]);\r
- gMouse_Buttons[i] = newVal;\r
- }\r
- }\r
- \r
- // Update X and Y Positions\r
- for( i = 0; i < 2; i ++ )\r
- {\r
- Sint16 newCursor = 0;\r
- if( giMouse_AxisLimits[i] )\r
- newCursor = MIN( MAX(0, gMouse_Axies[i].CursorPos + d_accel[i]), giMouse_AxisLimits[i] );;\r
- \r
- if( gMouse_Callback )\r
- {\r
- if(giMouse_AxisLimits[i] && gMouse_Axies[i].CursorPos != newCursor)\r
- gMouse_Callback(gMouse_CallbackArg, 1, i, newCursor - gMouse_Axies[i].CursorPos);\r
- if(!giMouse_AxisLimits[i] && gMouse_Axies[i].CurValue != d_accel[i])\r
- gMouse_Callback(gMouse_CallbackArg, 1, i, d_accel[i] - gMouse_Axies[i].CurValue);\r
- }\r
- \r
- gMouse_Axies[i].CurValue = d_accel[i];\r
- gMouse_Axies[i].CursorPos = newCursor;\r
- }\r
-\r
-// Log("Mouse at %ix%i", gMouse_Axies[0].CursorPos, gMouse_Axies[1].CursorPos);\r
- \r
- VFS_MarkAvaliable(&gMouse_DriverStruct.RootNode, 1);\r
-}\r
-\r
-/* Read mouse state (coordinates)\r
- */\r
-size_t PS2Mouse_Read(tVFS_Node *Node, off_t Offset, size_t Length, void *Buffer)\r
-{\r
- if(Offset > sizeof(gMouse_FileData)) return 0;\r
- if(Length > sizeof(gMouse_FileData)) Length = sizeof(gMouse_FileData);\r
- if(Offset + Length > sizeof(gMouse_FileData)) Length = sizeof(gMouse_FileData) - Offset;\r
-\r
- memcpy(Buffer, &gMouse_FileData[Offset], Length);\r
- \r
- VFS_MarkAvaliable(Node, 0);\r
- return Length;\r
-}\r
-\r
-static const char *csaIOCtls[] = {DRV_IOCTLNAMES, DRV_JOY_IOCTLNAMES, NULL};\r
-/* Handle messages to the device\r
- */\r
-int PS2Mouse_IOCtl(tVFS_Node *Node, int ID, void *Data)\r
-{\r
- tJoystick_NumValue *info = Data;\r
-\r
- switch(ID)\r
- {\r
- BASE_IOCTLS(DRV_TYPE_JOYSTICK, "PS2Mouse", 0x100, csaIOCtls);\r
-\r
- case JOY_IOCTL_SETCALLBACK: // TODO: Implement\r
- return -1;\r
- \r
- case JOY_IOCTL_SETCALLBACKARG: // TODO: Implement\r
- return -1;\r
- \r
- case JOY_IOCTL_GETSETAXISLIMIT:\r
- if(!info) return 0;\r
- if(info->Num < 0 || info->Num >= 2) return 0;\r
- if(info->Value != -1)\r
- giMouse_AxisLimits[info->Num] = info->Value;\r
- return giMouse_AxisLimits[info->Num];\r
- \r
- case JOY_IOCTL_GETSETAXISPOSITION:\r
- if(!info) return 0;\r
- if(info->Num < 0 || info->Num >= 2) return 0;\r
- if(info->Value != -1)\r
- gMouse_Axies[info->Num].CursorPos = info->Value;\r
- return gMouse_Axies[info->Num].CursorPos;\r
-\r
- case JOY_IOCTL_GETSETAXISFLAGS:\r
- return -1;\r
- \r
- case JOY_IOCTL_GETSETBUTTONFLAGS:\r
- return -1;\r
-\r
- default:\r
- return 0;\r
- }\r