@@ -18,6 +18,11 @@ typedef struct IMHomeButtonParams IMHomeButtonParams;
1818typedef struct IMParameters IMParameters ;
1919typedef struct IMDeviceStateEx IMDeviceStateEx ;
2020typedef uint32_t IMEventMask ;
21+ typedef struct IMRequestArgDeviceState IMRequestArgDeviceState ;
22+ typedef struct IMRequestArgEventNotify IMRequestArgEventNotify ;
23+ typedef struct IMRequestArgParameter IMRequestArgParameter ;
24+ typedef struct IMRequestArgHomeButton IMRequestArgHomeButton ;
25+ typedef struct IMRequestArgTimer IMRequestArgTimer ;
2126
2227typedef enum IMPadType
2328{
@@ -38,27 +43,21 @@ typedef enum IMDeviceState
3843 IM_DEVICE_STATE_SYNC = 5 ,
3944} IMDeviceState ;
4045
41- struct WUT_PACKED IMRequest
46+ typedef enum IMRequestID
4247{
43- uint8_t args [0x80 ];
44- IOSVec ioctlVecs [2 ];
45- IOSHandle handle ;
46- int32_t request ;
47- IOSAsyncCallbackFn asyncCallback ;
48- void * asyncCallbackContext ;
49- void * copySrc ;
50- void * copyDst ;
51- uint32_t copySize ;
52- };
53- WUT_CHECK_OFFSET (IMRequest , 0x80 , ioctlVecs );
54- WUT_CHECK_OFFSET (IMRequest , 0x98 , handle );
55- WUT_CHECK_OFFSET (IMRequest , 0x9C , request );
56- WUT_CHECK_OFFSET (IMRequest , 0xA0 , asyncCallback );
57- WUT_CHECK_OFFSET (IMRequest , 0xA4 , asyncCallbackContext );
58- WUT_CHECK_OFFSET (IMRequest , 0xA8 , copySrc );
59- WUT_CHECK_OFFSET (IMRequest , 0xAC , copyDst );
60- WUT_CHECK_OFFSET (IMRequest , 0xB0 , copySize );
61- WUT_CHECK_SIZE (IMRequest , 0xB4 );
48+ IM_REQUEST_ID_SET_SYSTEM_POLICY = 0 ,
49+ IM_REQUEST_ID_SET_NV_PARAMETER = 1 ,
50+ IM_REQUEST_ID_SET_PARAMETER = 2 ,
51+ IM_REQUEST_ID_GET_PARAMETER = 3 ,
52+ IM_REQUEST_ID_SET_DEVICE_STATE = 4 ,
53+ IM_REQUEST_ID_GET_EVENT_NOTIFY = 5 ,
54+ IM_REQUEST_ID_CANCEL_GET_EVENT_NOTIFY = 6 ,
55+ IM_REQUEST_ID_GET_HOME_BUTTON_PARAMS = 7 ,
56+ IM_REQUEST_ID_GET_TIMER_REMAINING = 8 ,
57+ IM_REQUEST_ID_GET_NV_PARAMETER = 9 ,
58+ IM_REQUEST_ID_SET_TIMER_ELAPSED_SECONDS = 10 ,
59+ IM_REQUEST_ID_SET_HOME_BUTTON_PARAMS = 11 ,
60+ } IMRequestID ;
6261
6362struct IMHomeButtonParams
6463{
@@ -119,29 +118,105 @@ typedef enum IMTimer
119118
120119typedef enum IMEvent
121120{
122- IM_EVENT_ACTIVE = 1 << 0 ,
123- IM_EVENT_INACTIVE = 1 << 1 ,
124- IM_EVENT_DIM = 1 << 2 ,
125- IM_EVENT_UNDIM = 1 << 3 ,
121+ IM_EVENT_ACTIVE = 1u << 0u ,
122+ IM_EVENT_INACTIVE = 1u << 1u ,
123+ IM_EVENT_DIM = 1u << 2u ,
124+ IM_EVENT_UNDIM = 1u << 3u ,
126125 //! Automatic power down
127- IM_EVENT_APD = 1 << 4 ,
126+ IM_EVENT_APD = 1u << 4u ,
128127 //! Controller power button was pressed
129- IM_EVENT_POWER = 1 << 5 ,
128+ IM_EVENT_POWER = 1u << 5u ,
130129 //! Home button was pressed
131- IM_EVENT_HOME = 1 << 6 ,
130+ IM_EVENT_HOME = 1u << 6u ,
132131 //! Console sync button was pressed
133- IM_EVENT_SYNC = 1 << 7 ,
134- IM_EVENT_RESET = 1 << 8 ,
132+ IM_EVENT_SYNC = 1u << 7u ,
133+ IM_EVENT_RESET = 1u << 8u ,
135134 //! Event notify was cancelled
136- IM_EVENT_CANCELLED = 1 << 31 ,
135+ IM_EVENT_CANCELLED = 1u << 31u ,
137136} IMEvent ;
138137
138+ struct WUT_PACKED IMRequestArgDeviceState
139+ {
140+ IMDeviceState state ;
141+ uint32_t unknown1 ;
142+ uint32_t unknown2 ;
143+ };
144+ WUT_CHECK_OFFSET (IMRequestArgDeviceState , 0x00 , state );
145+ WUT_CHECK_OFFSET (IMRequestArgDeviceState , 0x04 , unknown1 );
146+ WUT_CHECK_OFFSET (IMRequestArgDeviceState , 0x08 , unknown2 );
147+ WUT_CHECK_SIZE (IMRequestArgDeviceState , 0x0C );
148+
149+ struct WUT_PACKED IMRequestArgEventNotify
150+ {
151+ IMEventMask event ;
152+ };
153+ WUT_CHECK_OFFSET (IMRequestArgEventNotify , 0x00 , event );
154+ WUT_CHECK_SIZE (IMRequestArgEventNotify , 0x04 );
155+
156+ struct WUT_PACKED IMRequestArgParameter
157+ {
158+ IMParameter parameter ;
159+ uint32_t value ;
160+ };
161+ WUT_CHECK_OFFSET (IMRequestArgParameter , 0x00 , parameter );
162+ WUT_CHECK_OFFSET (IMRequestArgParameter , 0x04 , value );
163+ WUT_CHECK_SIZE (IMRequestArgParameter , 0x08 );
164+
165+ struct WUT_PACKED IMRequestArgHomeButton
166+ {
167+ IMHomeButtonParams params ;
168+ };
169+ WUT_CHECK_OFFSET (IMRequestArgHomeButton , 0x00 , params );
170+ WUT_CHECK_SIZE (IMRequestArgHomeButton , 0x08 );
171+
172+ struct WUT_PACKED IMRequestArgTimer
173+ {
174+ IMTimer timer ;
175+ uint32_t value ;
176+ };
177+ WUT_CHECK_OFFSET (IMRequestArgTimer , 0x00 , timer );
178+ WUT_CHECK_OFFSET (IMRequestArgTimer , 0x04 , value );
179+ WUT_CHECK_SIZE (IMRequestArgTimer , 0x08 );
180+
181+ struct WUT_PACKED IMRequest
182+ {
183+ union
184+ {
185+ IMRequestArgDeviceState deviceState ;
186+ IMRequestArgEventNotify eventNotify ;
187+ IMRequestArgParameter parameter ;
188+ IMRequestArgHomeButton homeButton ;
189+ IMRequestArgTimer timer ;
190+ uint8_t padding [0x80 ];
191+ } arg ;
192+ IOSVec ioctlVecs [2 ];
193+ IOSHandle handle ;
194+ IMRequestID request ;
195+ IOSAsyncCallbackFn asyncCallback ;
196+ void * asyncCallbackContext ;
197+ void * copySrc ;
198+ void * copyDst ;
199+ uint32_t copySize ;
200+ };
201+ WUT_CHECK_OFFSET (IMRequest , 0x00 , arg );
202+ WUT_CHECK_OFFSET (IMRequest , 0x80 , ioctlVecs );
203+ WUT_CHECK_OFFSET (IMRequest , 0x98 , handle );
204+ WUT_CHECK_OFFSET (IMRequest , 0x9C , request );
205+ WUT_CHECK_OFFSET (IMRequest , 0xA0 , asyncCallback );
206+ WUT_CHECK_OFFSET (IMRequest , 0xA4 , asyncCallbackContext );
207+ WUT_CHECK_OFFSET (IMRequest , 0xA8 , copySrc );
208+ WUT_CHECK_OFFSET (IMRequest , 0xAC , copyDst );
209+ WUT_CHECK_OFFSET (IMRequest , 0xB0 , copySize );
210+ WUT_CHECK_SIZE (IMRequest , 0xB4 );
211+
139212IOSHandle
140213IM_Open (void );
141214
142215IOSError
143216IM_Close (IOSHandle handle );
144217
218+ /* NOTE: for all functions, if asyncCallback == NULL, the call becomes synchronous */
219+
145220IOSError
146221IM_GetHomeButtonParams (IOSHandle handle ,
147222 IMRequest * request ,
@@ -227,6 +302,45 @@ IM_SetDeviceStateEx(IOSHandle handle,
227302 IOSAsyncCallbackFn asyncCallback ,
228303 void * asyncCallbackContext );
229304
305+ IOSError
306+ IM_GetNvParameterWithoutHandleAndItb (IMParameter parameter ,
307+ uint32_t * output );
308+
309+ IOSError
310+ IM_SetNvParameterWithoutHandleAndItb (IMParameter parameter ,
311+ uint32_t value );
312+
313+ IOSError
314+ IM_SetHomeButtonParams (IOSHandle handle ,
315+ IMRequest * request ,
316+ IMHomeButtonParams * params ,
317+ IOSAsyncCallbackFn * asyncCallback ,
318+ void * asyncCallbackContext );
319+
320+ IOSError
321+ IM_SetNvParameter (IOSHandle handle ,
322+ IMRequest * request ,
323+ IMParameter parameter ,
324+ uint32_t value ,
325+ IOSAsyncCallbackFn * asyncCallback ,
326+ void * asyncCallbackContext );
327+
328+ IOSError
329+ IM_SetSystemPolicy (IOSHandle handle ,
330+ IMRequest * request ,
331+ IOSAsyncCallbackFn * asyncCallback ,
332+ void * asyncCallbackContext );
333+
334+ IOSError
335+ IM_SetTimerElpasedSeconds (IOSHandle handle ,
336+ IMRequest * request ,
337+ IMTimer timer ,
338+ uint32_t value ,
339+ IOSAsyncCallbackFn * asyncCallback ,
340+ void * asyncCallbackContext );
341+
342+ #define IM_SetTimerElapsedSeconds IM_SetTimerElpasedSeconds
343+
230344#ifdef __cplusplus
231345}
232346#endif
0 commit comments