Skip to content

Commit 975aebe

Browse files
dkosmariDaniel K. O. (dkosmari)
andauthored
Add all missing IM_*() functions. (#459)
* - Added all missing IM_*() functions. - Added details for the "args" field of IMRequest. * Flag enums should always be unsigned because the mask type is unsigned. This avoids "narrowing conversion" warnings. * Use a macro to correct Nintendo's typo. --------- Co-authored-by: Daniel K. O. (dkosmari) <none@none>
1 parent cc35feb commit 975aebe

1 file changed

Lines changed: 144 additions & 30 deletions

File tree

  • include/coreinit

‎include/coreinit/im.h‎

Lines changed: 144 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ typedef struct IMHomeButtonParams IMHomeButtonParams;
1818
typedef struct IMParameters IMParameters;
1919
typedef struct IMDeviceStateEx IMDeviceStateEx;
2020
typedef 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

2227
typedef 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

6362
struct IMHomeButtonParams
6463
{
@@ -119,29 +118,105 @@ typedef enum IMTimer
119118

120119
typedef 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+
139212
IOSHandle
140213
IM_Open(void);
141214

142215
IOSError
143216
IM_Close(IOSHandle handle);
144217

218+
/* NOTE: for all functions, if asyncCallback == NULL, the call becomes synchronous */
219+
145220
IOSError
146221
IM_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

Comments
 (0)