60 printf(
"RMMan Library already initialised\n");
72 rmmanif.server = NULL;
73 for (i = 0; i < (int)(
sizeof(rpc_ids)/
sizeof(rpc_ids[0])); i += 1)
75 rpciftmp[i].server = NULL;
80 for (i = 0; i < (int)(
sizeof(rpc_ids)/
sizeof(rpc_ids[0])); i += 1)
82 if ((sceSifBindRpc(&rpciftmp[i], rpc_ids[i], 0) < 0))
86 if (rpciftmp[i].server != NULL)
106 memcpy(&rmmanif, &rpciftmp[i],
sizeof(rmmanif));
110 if (rmmanif.server != NULL)
123 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_INIT : RMMAN_RPCFUNC_INIT;
125 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
131 for (i = 0; i < (int)(
sizeof(ports)/
sizeof(ports[0])); i += 1)
134 ports[i].rmData = NULL;
140 return buffer.cmd.u.cmd1.result;
142 return buffer.cmd.u.cmd2.result;
150 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_VERSION : RMMAN_RPCFUNC_VERSION;
152 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
160 return buffer.cmd.u.cmd1.result;
162 return buffer.cmd.u.cmd2.result;
170 if ((port < 0) || (port > 1) || (slot != 0))
172 printf(
"Error, port must be 0 or 1 and slot set to 0\n");
176 if ((u32)pData & 0x3F)
178 printf(
"Error, pData not aligned to 64byte boundary");
182 if (rmman_type != 1 && port != 0)
187 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_OPEN : RMMAN_RPCFUNC_OPEN;
192 buffer.cmd.u.cmd1.port = port;
193 buffer.cmd.u.cmd1.slot = slot;
194 buffer.cmd.u.cmd1.data = pData;
199 buffer.cmd.u.cmd2.data = pData;
208 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
213 ports[port].opened = 1;
214 ports[port].rmData = pData;
219 return buffer.cmd.u.cmd1.result;
221 return buffer.cmd.u.cmd2.result;
229 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_END : RMMAN_RPCFUNC_END;
231 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
239 return buffer.cmd.u.cmd1.result;
241 return buffer.cmd.u.cmd2.result;
249 if ((port < 0) || (port > 1) || (slot != 0))
251 printf(
"Error, port must be 0 or 1 and slot set to 0\n");
255 if (rmman_type != 1 && port != 0)
260 if (!ports[port].opened)
265 buffer.cmd.command = (rmman_type == 2) ? RMMAN2_RPCFUNC_CLOSE : RMMAN_RPCFUNC_CLOSE;
270 buffer.cmd.u.cmd1.port = port;
271 buffer.cmd.u.cmd1.slot = slot;
280 if (sceSifCallRpc(&rmmanif, 0, 0, &buffer, 128, &buffer, 128, NULL, NULL) < 0)
288 return buffer.cmd.u.cmd1.result;
290 return buffer.cmd.u.cmd2.result;
300 if ((port < 0) || (port > 1) || (slot != 0))
302 printf(
"Error, port must be 0 or 1 and slot set to 0\n");
306 if (rmman_type != 1 && port != 0)
311 pdata = rmGetDmaStr(port, slot);
319 if (pdata->data[0] == 0x14)
321 status = RM_KEYPRESSED;
322 button = pdata->data[1] | (pdata->data[2] << 8) | (pdata->data[3] << 16);
324 data->status = status;
325 data->button = button;
329 memcpy(data, pdata->data, 8);