Mercurial > sdl-ios-xcode
comparison src/joystick/darwin/SDL_sysjoystick.c @ 1487:dc6b59e925a2
Cleaning up warnings on MacOS X
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 09 Mar 2006 06:33:21 +0000 |
parents | ebc8b5855040 |
children | 405e20dc004c |
comparison
equal
deleted
inserted
replaced
1486:9d77fc9d0ace | 1487:dc6b59e925a2 |
---|---|
46 #include "../SDL_sysjoystick.h" | 46 #include "../SDL_sysjoystick.h" |
47 #include "../SDL_joystick_c.h" | 47 #include "../SDL_joystick_c.h" |
48 | 48 |
49 struct recElement | 49 struct recElement |
50 { | 50 { |
51 IOHIDElementCookie cookie; // unique value which identifies element, will NOT change | 51 IOHIDElementCookie cookie; /* unique value which identifies element, will NOT change */ |
52 long min; // reported min value possible | 52 long min; /* reported min value possible */ |
53 long max; // reported max value possible | 53 long max; /* reported max value possible */ |
54 /* | 54 #if 0 |
55 TODO: maybe should handle the following stuff somehow? | 55 /* TODO: maybe should handle the following stuff somehow? */ |
56 | 56 |
57 long scaledMin; // reported scaled min value possible | 57 long scaledMin; /* reported scaled min value possible */ |
58 long scaledMax; // reported scaled max value possible | 58 long scaledMax; /* reported scaled max value possible */ |
59 long size; // size in bits of data return from element | 59 long size; /* size in bits of data return from element */ |
60 Boolean relative; // are reports relative to last report (deltas) | 60 Boolean relative; /* are reports relative to last report (deltas) */ |
61 Boolean wrapping; // does element wrap around (one value higher than max is min) | 61 Boolean wrapping; /* does element wrap around (one value higher than max is min) */ |
62 Boolean nonLinear; // are the values reported non-linear relative to element movement | 62 Boolean nonLinear; /* are the values reported non-linear relative to element movement */ |
63 Boolean preferredState; // does element have a preferred state (such as a button) | 63 Boolean preferredState; /* does element have a preferred state (such as a button) */ |
64 Boolean nullState; // does element have null state | 64 Boolean nullState; /* does element have null state */ |
65 */ | 65 #endif /* 0 */ |
66 | 66 |
67 /* runtime variables used for auto-calibration */ | 67 /* runtime variables used for auto-calibration */ |
68 long minReport; // min returned value | 68 long minReport; /* min returned value */ |
69 long maxReport; // max returned value | 69 long maxReport; /* max returned value */ |
70 | 70 |
71 struct recElement * pNext; // next element in list | 71 struct recElement * pNext; /* next element in list */ |
72 }; | 72 }; |
73 typedef struct recElement recElement; | 73 typedef struct recElement recElement; |
74 | 74 |
75 struct joystick_hwdata | 75 struct joystick_hwdata |
76 { | 76 { |
77 IOHIDDeviceInterface ** interface; // interface to device, NULL = no interface | 77 IOHIDDeviceInterface ** interface; /* interface to device, NULL = no interface */ |
78 | 78 |
79 char product[256]; // name of product | 79 char product[256]; /* name of product */ |
80 long usage; // usage page from IOUSBHID Parser.h which defines general usage | 80 long usage; /* usage page from IOUSBHID Parser.h which defines general usage */ |
81 long usagePage; // usage within above page from IOUSBHID Parser.h which defines specific usage | 81 long usagePage; /* usage within above page from IOUSBHID Parser.h which defines specific usage */ |
82 | 82 |
83 long axes; // number of axis (calculated, not reported by device) | 83 long axes; /* number of axis (calculated, not reported by device) */ |
84 long buttons; // number of buttons (calculated, not reported by device) | 84 long buttons; /* number of buttons (calculated, not reported by device) */ |
85 long hats; // number of hat switches (calculated, not reported by device) | 85 long hats; /* number of hat switches (calculated, not reported by device) */ |
86 long elements; // number of total elements (shouldbe total of above) (calculated, not reported by device) | 86 long elements; /* number of total elements (shouldbe total of above) (calculated, not reported by device) */ |
87 | 87 |
88 recElement* firstAxis; | 88 recElement* firstAxis; |
89 recElement* firstButton; | 89 recElement* firstButton; |
90 recElement* firstHat; | 90 recElement* firstHat; |
91 | 91 |
92 int removed; | 92 int removed; |
93 int uncentered; | 93 int uncentered; |
94 | 94 |
95 struct joystick_hwdata* pNext; // next device | 95 struct joystick_hwdata* pNext; /* next device */ |
96 }; | 96 }; |
97 typedef struct joystick_hwdata recDevice; | 97 typedef struct joystick_hwdata recDevice; |
98 | 98 |
99 | 99 |
100 /* Linked list of all available devices */ | 100 /* Linked list of all available devices */ |
129 if (hidEvent.value > pElement->maxReport) | 129 if (hidEvent.value > pElement->maxReport) |
130 pElement->maxReport = hidEvent.value; | 130 pElement->maxReport = hidEvent.value; |
131 } | 131 } |
132 } | 132 } |
133 | 133 |
134 // auto user scale | 134 /* auto user scale */ |
135 return hidEvent.value; | 135 return hidEvent.value; |
136 } | 136 } |
137 | |
138 /* similiar to HIDGetElementValue, but auto-calibrates the value before returning it */ | |
139 | |
140 static SInt32 HIDCalibratedValue (recDevice *pDevice, recElement *pElement) | |
141 { | |
142 float deviceScale = pElement->max - pElement->min; | |
143 float readScale = pElement->maxReport - pElement->minReport; | |
144 SInt32 value = HIDGetElementValue(pDevice, pElement); | |
145 if (readScale == 0) | |
146 return value; // no scaling at all | |
147 else | |
148 return ((value - pElement->minReport) * deviceScale / readScale) + pElement->min; | |
149 } | |
150 | |
151 /* similiar to HIDCalibratedValue but calibrates to an arbitrary scale instead of the elements default scale */ | |
152 | 137 |
153 static SInt32 HIDScaledCalibratedValue (recDevice *pDevice, recElement *pElement, long min, long max) | 138 static SInt32 HIDScaledCalibratedValue (recDevice *pDevice, recElement *pElement, long min, long max) |
154 { | 139 { |
155 float deviceScale = max - min; | 140 float deviceScale = max - min; |
156 float readScale = pElement->maxReport - pElement->minReport; | 141 float readScale = pElement->maxReport - pElement->minReport; |
157 SInt32 value = HIDGetElementValue(pDevice, pElement); | 142 SInt32 value = HIDGetElementValue(pDevice, pElement); |
158 if (readScale == 0) | 143 if (readScale == 0) |
159 return value; // no scaling at all | 144 return value; /* no scaling at all */ |
160 else | 145 else |
161 return ((value - pElement->minReport) * deviceScale / readScale) + min; | 146 return ((value - pElement->minReport) * deviceScale / readScale) + min; |
162 } | 147 } |
163 | 148 |
164 | 149 |
189 { | 174 { |
190 result = IOCreatePlugInInterfaceForService (hidDevice, kIOHIDDeviceUserClientTypeID, | 175 result = IOCreatePlugInInterfaceForService (hidDevice, kIOHIDDeviceUserClientTypeID, |
191 kIOCFPlugInInterfaceID, &ppPlugInInterface, &score); | 176 kIOCFPlugInInterfaceID, &ppPlugInInterface, &score); |
192 if (kIOReturnSuccess == result) | 177 if (kIOReturnSuccess == result) |
193 { | 178 { |
194 // Call a method of the intermediate plug-in to create the device interface | 179 /* Call a method of the intermediate plug-in to create the device interface */ |
195 plugInResult = (*ppPlugInInterface)->QueryInterface (ppPlugInInterface, | 180 plugInResult = (*ppPlugInInterface)->QueryInterface (ppPlugInInterface, |
196 CFUUIDGetUUIDBytes (kIOHIDDeviceInterfaceID), (void *) &(pDevice->interface)); | 181 CFUUIDGetUUIDBytes (kIOHIDDeviceInterfaceID), (void *) &(pDevice->interface)); |
197 if (S_OK != plugInResult) | 182 if (S_OK != plugInResult) |
198 HIDReportErrorNum ("CouldnŐt query HID class device interface from plugInInterface", plugInResult); | 183 HIDReportErrorNum ("CouldnŐt query HID class device interface from plugInInterface", plugInResult); |
199 (*ppPlugInInterface)->Release (ppPlugInInterface); | 184 (*ppPlugInInterface)->Release (ppPlugInInterface); |
223 { | 208 { |
224 IOReturn result = kIOReturnSuccess; | 209 IOReturn result = kIOReturnSuccess; |
225 | 210 |
226 if ((NULL != pDevice) && (NULL != pDevice->interface)) | 211 if ((NULL != pDevice) && (NULL != pDevice->interface)) |
227 { | 212 { |
228 // close the interface | 213 /* close the interface */ |
229 result = (*(pDevice->interface))->close (pDevice->interface); | 214 result = (*(pDevice->interface))->close (pDevice->interface); |
230 if (kIOReturnNotOpen == result) | 215 if (kIOReturnNotOpen == result) |
231 { | 216 { |
232 // do nothing as device was not opened, thus can't be closed | 217 /* do nothing as device was not opened, thus can't be closed */ |
233 } | 218 } |
234 else if (kIOReturnSuccess != result) | 219 else if (kIOReturnSuccess != result) |
235 HIDReportErrorNum ("Failed to close IOHIDDeviceInterface.", result); | 220 HIDReportErrorNum ("Failed to close IOHIDDeviceInterface.", result); |
236 //release the interface | 221 /* release the interface */ |
237 result = (*(pDevice->interface))->Release (pDevice->interface); | 222 result = (*(pDevice->interface))->Release (pDevice->interface); |
238 if (kIOReturnSuccess != result) | 223 if (kIOReturnSuccess != result) |
239 HIDReportErrorNum ("Failed to release IOHIDDeviceInterface.", result); | 224 HIDReportErrorNum ("Failed to release IOHIDDeviceInterface.", result); |
240 pDevice->interface = NULL; | 225 pDevice->interface = NULL; |
241 } | 226 } |
557 { | 542 { |
558 kern_return_t result = KERN_SUCCESS; | 543 kern_return_t result = KERN_SUCCESS; |
559 recDevice *pDeviceNext = NULL; | 544 recDevice *pDeviceNext = NULL; |
560 if (*ppDevice) | 545 if (*ppDevice) |
561 { | 546 { |
562 // save next device prior to disposing of this device | 547 /* save next device prior to disposing of this device */ |
563 pDeviceNext = (*ppDevice)->pNext; | 548 pDeviceNext = (*ppDevice)->pNext; |
564 | 549 |
565 /* free element lists */ | 550 /* free element lists */ |
566 HIDDisposeElementList (&(*ppDevice)->firstAxis); | 551 HIDDisposeElementList (&(*ppDevice)->firstAxis); |
567 HIDDisposeElementList (&(*ppDevice)->firstButton); | 552 HIDDisposeElementList (&(*ppDevice)->firstButton); |
656 if (!device) | 641 if (!device) |
657 continue; | 642 continue; |
658 | 643 |
659 /* dump device object, it is no longer needed */ | 644 /* dump device object, it is no longer needed */ |
660 result = IOObjectRelease (ioHIDDeviceObject); | 645 result = IOObjectRelease (ioHIDDeviceObject); |
661 // if (KERN_SUCCESS != result) | 646 /* if (KERN_SUCCESS != result) |
662 // HIDReportErrorNum ("IOObjectRelease error with ioHIDDeviceObject.", result); | 647 HIDReportErrorNum ("IOObjectRelease error with ioHIDDeviceObject.", result); |
648 */ | |
663 | 649 |
664 /* Filter device list to non-keyboard/mouse stuff */ | 650 /* Filter device list to non-keyboard/mouse stuff */ |
665 if ( (device->usagePage != kHIDPage_GenericDesktop) || | 651 if ( (device->usagePage != kHIDPage_GenericDesktop) || |
666 ((device->usage != kHIDUsage_GD_Joystick && | 652 ((device->usage != kHIDUsage_GD_Joystick && |
667 device->usage != kHIDUsage_GD_GamePad)) ) { | 653 device->usage != kHIDUsage_GD_GamePad)) ) { |