26 static int rmman_type;
36 static struct rmEEData *rmGetDmaStr(
int port,
int slot)
42 pdata = ports[port].rmData;
43 SyncDCache(pdata, (u8 *)pdata + 256);
45 if (pdata[0].frame < pdata[1].frame)
55 static void RMMan_Cleanup(
void)
57 memset(&rmmanif, 0,
sizeof(rmmanif));
69 printf(
"RMMan Library already initialised\n");
81 rmmanif.server = NULL;
82 for (i = 0; i < (int)(
sizeof(rpc_ids)/
sizeof(rpc_ids[0])); i += 1)
84 rpciftmp[i].server = NULL;
89 for (i = 0; i < (int)(
sizeof(rpc_ids)/
sizeof(rpc_ids[0])); i += 1)
91 if ((sceSifBindRpc(&rpciftmp[i], rpc_ids[i], 0) < 0))
95 if (rpciftmp[i].server != NULL)
115 memcpy(&rmmanif, &rpciftmp[i],
sizeof(rmmanif));
119 if (rmmanif.server != NULL)
132 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_INIT : RMMAN_RPCFUNC_INIT;
134 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
140 for (i = 0; i < (int)(
sizeof(ports)/
sizeof(ports[0])); i += 1)
143 ports[i].rmData = NULL;
149 return buffer.cmd.u.cmd1.result;
151 return buffer.cmd.u.cmd2.result;
159 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_VERSION : RMMAN_RPCFUNC_VERSION;
161 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
169 return buffer.cmd.u.cmd1.result;
171 return buffer.cmd.u.cmd2.result;
179 if ((port < 0) || (port > 1) || (slot != 0))
181 printf(
"Error, port must be 0 or 1 and slot set to 0\n");
185 if ((u32)pData & 0x3F)
187 printf(
"Error, pData not aligned to 64byte boundary");
191 if (rmman_type != 1 && port != 0)
196 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_OPEN : RMMAN_RPCFUNC_OPEN;
201 buffer.cmd.u.cmd1.port = port;
202 buffer.cmd.u.cmd1.slot = slot;
203 buffer.cmd.u.cmd1.data = pData;
208 buffer.cmd.u.cmd2.data = pData;
217 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
222 ports[port].opened = 1;
223 ports[port].rmData = pData;
228 return buffer.cmd.u.cmd1.result;
230 return buffer.cmd.u.cmd2.result;
238 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_END : RMMAN_RPCFUNC_END;
240 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
248 return buffer.cmd.u.cmd1.result;
250 return buffer.cmd.u.cmd2.result;
258 if ((port < 0) || (port > 1) || (slot != 0))
260 printf(
"Error, port must be 0 or 1 and slot set to 0\n");
264 if (rmman_type != 1 && port != 0)
269 if (!ports[port].opened)
274 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_CLOSE : RMMAN_RPCFUNC_CLOSE;
279 buffer.cmd.u.cmd1.port = port;
280 buffer.cmd.u.cmd1.slot = slot;
289 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
297 return buffer.cmd.u.cmd1.result;
299 return buffer.cmd.u.cmd2.result;
309 if ((port < 0) || (port > 1) || (slot != 0))
311 printf(
"Error, port must be 0 or 1 and slot set to 0\n");
315 if (rmman_type != 1 && port != 0)
320 pdata = rmGetDmaStr(port, slot);
328 if (pdata->data[0] == 0x14)
330 status = RM_KEYPRESSED;
331 button = pdata->data[1] | (pdata->data[2] << 8) | (pdata->data[3] << 16);
333 data->status = status;
334 data->button = button;
338 memcpy(data, pdata->data, 8);