int PS2MouseSetPosition(int x, int y) { s32* data = (s32 *) buffer; data[0] = x; data[1] = y; if (SifCallRpc(&mouseif, PS2MOUSE_SETPOSITION, 0, buffer, 128, buffer, 128, 0, 0) < 0) return -1; return 1; }
int sbcall_soundgcoreattr(tge_sbcall_rpc_arg_t *carg) { tge_sbacall_soundgetcoreattr_arg_t *arg = (tge_sbacall_soundgetcoreattr_arg_t *) carg->sbarg; if (!soundInitialized) { return -1; } rpcBuffer[1] = arg->index; if (SifCallRpc(&sdrsif, SOUND_GCORE_ATTR, SIF_RPC_M_NOWAIT, rpcBuffer, 64, rpcResultBuffer, 16, soundCallback, carg) < 0) { return -SIF_RPCE_SENDP; } return 0; }
// return buffer: // Offset 0 = getsockopt return value // 0ffset 1 = optlen // Offset 2 = optval (max 128 bytes) int getsockopt(int s, int level, int optname, void* optval, socklen_t* optlen) { ((int*)_rpc_buffer)[0] = s; ((int*)_rpc_buffer)[1] = level; ((int*)_rpc_buffer)[2] = optname; SifCallRpc(&_ps2ip, ID_GETSOCKOPT, 0, (void*)_rpc_buffer, 12, (void*)_rpc_buffer, 136, 0, 0); if(_rpc_buffer[1] < *optlen) *optlen = _rpc_buffer[1]; memcpy((void*)optval, &_rpc_buffer[2], *optlen); return _rpc_buffer[0]; }
int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen) { ((int*)_rpc_buffer)[0] = s; ((int*)_rpc_buffer)[1] = level; ((int*)_rpc_buffer)[2] = optname; ((int*)_rpc_buffer)[3] = optlen; memcpy(&_rpc_buffer[4], optval, optlen); SifCallRpc(&_ps2ip, ID_SETSOCKOPT, 0, (void*)_rpc_buffer, 16 + optlen, (void*)_rpc_buffer, 4, 0, 0); return _rpc_buffer[0]; }
// tk // returns connection state of usb device int usb_mass_getConnectState( unsigned int slot ) { int *ret; unsigned int *nums; nums = (unsigned int*) rpcBuffer; nums[0] = slot; SifCallRpc(&client,6,0,(void*)(&rpcBuffer[0]), 4,(void*)(&rpcBuffer[0]),4,0,0); ret = (int*) rpcBuffer; return *ret; }
int sndStreamOpen(char *file, u32 voices, u32 flags, u32 bufaddr, u32 bufsize) { u32 buf[32] ALIGNED(64); buf[0] = voices; buf[1] = flags; buf[2] = bufaddr; buf[3] = bufsize; strncpy((char*)&buf[4], file, 27*4); buf[31] = 0; SifCallRpc(&sd_client, PS2SND_StreamOpen, 0, buf, 128, buf, 4, NULL, NULL); return(((s32 *)buf)[0]); }
int PS2CamSetLEDMode(int handle, int mode) { int *ret; ret = (int *)&data[0]; ret[0] = handle; ret[1] = mode; SifCallRpc(&cdata, PS2CAM_RPC_SETLEDMODE, 0, (void*)(&data[0]),4,(void*)(&data[0]),4,0,0); return ret[0]; }
float PS2MouseGetAccel() { u32* uncached = (u32 *) UNCACHED_SEG(buffer); u32 accel_fixed; if (SifCallRpc(&mouseif, PS2MOUSE_GETACCEL, 0, buffer, 128, buffer, 128, 0, 0) < 0) return -1; accel_fixed = uncached[0]; return ((float) accel_fixed) / 65536.0 ; }
int padGetButtonMask(int port, int slot) { *(u32 *)(&buffer[0])=PAD_RPCCMD_GET_BTNMASK; *(u32 *)(&buffer[4])=port; *(u32 *)(&buffer[8])=slot; if (SifCallRpc(&padsif[0], 1, 0, buffer, 128, buffer, 128, NULL, NULL) < 0) return 0; return *(int *)(&buffer[12]); }
int sbcall_soundtransstat(tge_sbcall_rpc_arg_t *carg) { tge_sbcall_soundtransferstat_arg_t *arg = (tge_sbcall_soundtransferstat_arg_t *) carg->sbarg; if (!soundInitialized) { return -1; } rpcBuffer[1] = arg->channel; rpcBuffer[2] = arg->flag; if (SifCallRpc(&sdrsif, SOUND_SCORE_TRANS, SIF_RPC_M_NOWAIT, rpcBuffer, 64, rpcResultBuffer, 16, soundCallback, carg) < 0) { return -SIF_RPCE_SENDP; } return 0; }
int connect(int s, struct sockaddr *name, int namelen) { cmd_pkt *pkt = (cmd_pkt *)_rpc_buffer; if(!_init_check) return -1; pkt->socket = s; pkt->len = namelen; memcpy((void *)&pkt->sockaddr, (void *)name, sizeof(struct sockaddr)); SifCallRpc(&_ps2ip, ID_CONNECT, 0, (void*)_rpc_buffer, sizeof(cmd_pkt), (void*)_rpc_buffer, 4, 0, 0); return _rpc_buffer[0]; }
int NetManSetLinkMode(int mode){ int result; WaitSema(NetManIOSemaID); *(int*)TransmitBuffer = mode; if((result=SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_SET_LINK_MODE, 0, TransmitBuffer, sizeof(int), ReceiveBuffer, sizeof(int), NULL, NULL))>=0){ result=*(int*)ReceiveBuffer; } SignalSema(NetManIOSemaID); return result; }
int NetManSetLinkMode(int mode) { int result; WaitSema(NetManIOSemaID); TransmitBuffer.mode = mode; if((result=SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_SET_LINK_MODE, 0, &TransmitBuffer, sizeof(s32), &ReceiveBuffer, sizeof(s32), NULL, NULL))>=0) result=ReceiveBuffer.result; SignalSema(NetManIOSemaID); return result; }
int NetManRPCUnregisterNetworkStack(void) { int result; WaitSema(NetManIOSemaID); result=SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_UNREG_NETWORK_STACK, 0, NULL, 0, NULL, 0, NULL, NULL); IOPFrameBuffer = NULL; IOPFrameBufferWrPtr = 0; SignalSema(NetManIOSemaID); return result; }
int audsrv_load_adpcm(audsrv_adpcm_t *adpcm, void *buffer, int size) { void* iop_addr; SifDmaTransfer_t sifdma; int id, ret; iop_addr = SifAllocIopHeap(size); if (iop_addr == 0) { return -AUDSRV_ERR_OUT_OF_MEMORY; } sifdma.src = buffer; sifdma.dest = iop_addr; sifdma.size = size; sifdma.attr = 0; /* send by dma */ while((id = SifSetDma(&sifdma, 1)) == 0); while(SifDmaStat(id) >= 0); WaitSema(completion_sema); sbuff[0] = (int)iop_addr; sbuff[1] = size; sbuff[2] = (int)adpcm; /* use as id */ SifCallRpc(&cd0, AUDSRV_LOAD_ADPCM, 0, sbuff, 12, sbuff, 16, NULL, NULL); if(sbuff[0] != 0) { adpcm->buffer = 0; ret = sbuff[0]; } else { adpcm->buffer = buffer; adpcm->size = size; adpcm->pitch = sbuff[1]; adpcm->loop = sbuff[2]; adpcm->channels = sbuff[3]; ret = AUDSRV_ERR_NOERROR; } SignalSema(completion_sema); SifFreeIopHeap(iop_addr); return ret; }
int ps2ip_getconfig(char *netif_name, t_ip_info *ip_info) { if(!_init_check) return -1; // call with netif name memcpy(_rpc_buffer, netif_name, 8); SifCallRpc(&_ps2ip, ID_GETCONFIG, 0, (void*)_rpc_buffer, 8, (void*)_rpc_buffer, sizeof(t_ip_info), 0, 0); // return config memcpy(ip_info, _rpc_buffer, sizeof(t_ip_info)); return 1; }
void SjPCM_Puts(char *format, ...) { static char buff[4096]; va_list args; int rv; if(!sjpcm_inited) return; va_start(args, format); rv = vsnprintf(buff, 4096, format, args); memcpy((char*)(&sbuff[0]),buff,252); SifCallRpc(&cd0,SJPCM_PUTS,0,(void*)(&sbuff[0]),252,(void*)(&sbuff[0]),252,0,0); }
int poweroffInit(void) { ee_thread_t thread; ee_sema_t sema; int res; static int _init_count = -1; if(_init_count == _iop_reboot_count) return 0; _init_count = _iop_reboot_count; while(((res = SifBindRpc(&cd0, PWROFF_IRX, 0)) >= 0) && (cd0.server == NULL)) nopdelay(); // Terminate and delete any previously created threads if (powerOffThreadId >= 0) { TerminateThread(powerOffThreadId); DeleteThread(powerOffThreadId); powerOffThreadId = -1; } // Delete any previously created semaphores if (PowerOffSema >= 0) { DeleteSema(PowerOffSema); PowerOffSema = -1; } sema.init_count = 0; sema.max_count = 1; sema.option = 0; PowerOffSema = CreateSema(&sema); thread.initial_priority = POWEROFF_THREAD_PRIORITY; thread.stack_size = sizeof(poffThreadStack); thread.gp_reg = &_gp; thread.func = PowerOffThread; thread.stack = (void *)poffThreadStack; powerOffThreadId = CreateThread(&thread); StartThread(powerOffThreadId, NULL); DI(); SifAddCmdHandler(POFF_SIF_CMD, _poff_intr_callback, NULL); EI(); int autoShutdown = 0; SifCallRpc(&cd0, PWROFF_ENABLE_AUTO_SHUTOFF, 0, NULL, 0, &autoShutdown, sizeof(autoShutdown), NULL, NULL); return res; }
int PS2MouseSetAccel(float accel) { u32 accel_fixed; if(accel < 0) return -1; accel_fixed = (u32) (accel * 65536.0); *((u32 *) buffer) = accel_fixed; if (SifCallRpc(&mouseif, PS2MOUSE_SETACCEL, 0, buffer, 128, buffer, 128, 0, 0) < 0) return -1; return 1; }
int PS2CamSetDeviceConfig(int handle, PS2CAM_DEVICE_CONFIG *cfg) { int *ret; ret = (int *)&data[0]; ret[0] = handle; memcpy(&ret[1], cfg, cfg->ssize); SifCallRpc(&cdata, PS2CAM_RPC_SETDEVCONFIG, 0, (void*)(&data[0]), 4+cfg->ssize,(void*)(&data[0]),4+cfg->ssize,0,0); return ret[0]; }
static void TxThread(void *arg){ struct TxFIFOData *TxFIFODataToTransmit; SifDmaTransfer_t dmat; int dmat_id, ThreadToWakeUp; while(1){ SleepThread(); WaitSema(TxBankAccessSema); if(CurrentTxFIFOData->PacketReqs.NumPackets>0){ // Switch banks TxFIFODataToTransmit=CurrentTxFIFOData; if(TxActiveBankID==0){ CurrentTxFIFOData=&TxFIFOData2; TxActiveBankID=1; } else{ CurrentTxFIFOData=&TxFIFOData1; TxActiveBankID=0; } SignalSema(TxBankAccessSema); SifWriteBackDCache(&TxFIFODataToTransmit->PacketReqs, sizeof(TxFIFODataToTransmit->PacketReqs)); dmat.src=&TxFIFODataToTransmit->PacketReqs; dmat.dest=TxFrameTagBuffer; dmat.size=8+sizeof(struct PacketTag)*TxFIFODataToTransmit->PacketReqs.NumPackets; dmat.attr=0; while((dmat_id=SifSetDma(&dmat, 1))==0){}; WaitSema(NetManIOSemaID); SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_SEND_PACKETS, 0, TxFIFODataToTransmit->FrameBuffer, TxFIFODataToTransmit->PacketReqs.TotalLength, NULL, 0, NULL, NULL); SignalSema(NetManIOSemaID); TxFIFODataToTransmit->PacketReqs.NumPackets=0; TxFIFODataToTransmit->PacketReqs.TotalLength=0; } else SignalSema(TxBankAccessSema); if(NetmanTxWaitingThread>=0){ ThreadToWakeUp=NetmanTxWaitingThread; NetmanTxWaitingThread=-1; //To prevent a race condition from occurring, invalidate NetmanTxWaitingThread before invoking WakeupThread. WakeupThread(ThreadToWakeUp); } } }
int getpeername(int s, struct sockaddr *name, int *namelen) { cmd_pkt *pkt = (cmd_pkt *)_rpc_buffer; if(!_init_check) return -1; pkt->socket = s; SifCallRpc(&_ps2ip, ID_GETPEERNAME, 0, (void*)_rpc_buffer, 4, (void*)_rpc_buffer, sizeof(cmd_pkt), 0, 0); if(pkt->len < *namelen) *namelen = pkt->len; memcpy((void *)name, (void *)&pkt->sockaddr, *namelen); return pkt->socket; }
int PS2MouseGetBoundary(int *minx, int *maxx, int *miny, int *maxy) { u32* uncached = (u32 *) UNCACHED_SEG(buffer); if (SifCallRpc(&mouseif, PS2MOUSE_GETBOUNDARY, 0, buffer, 128, buffer, 128, 0, 0) < 0) return -1; *minx = uncached[0]; *maxx = uncached[1]; *miny = uncached[2]; *maxy = uncached[3]; return 1; }
int PS2MouseSetBoundary(int minx, int maxx, int miny, int maxy) { s32* data = (s32 *) buffer; data[0] = minx; data[1] = maxx; data[2] = miny; data[3] = maxy; if (SifCallRpc(&mouseif, PS2MOUSE_SETBOUNDARY, 0, buffer, 128, buffer, 128, 0, 0) < 0) return -1; return 1; }
int audsrv_quit() { WaitSema(completion_sema); SifCallRpc(&cd0, AUDSRV_QUIT, 0, sbuff, 1*4, sbuff, 4, NULL, NULL); set_error(AUDSRV_ERR_NOERROR); SifRemoveRpc(&cb_srv, &cb_queue); SifRemoveRpcQueue(&cb_queue); TerminateThread(rpc_server_thread_id); DeleteThread(rpc_server_thread_id); DeleteSema(completion_sema); return 0; }
int NetManSetMainIF(const char *name) { int result; WaitSema(NetManIOSemaID); strncpy(TransmitBuffer.netifName, name, NETMAN_NETIF_NAME_MAX_LEN); TransmitBuffer.netifName[NETMAN_NETIF_NAME_MAX_LEN-1] = '\0'; if((result=SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_SET_MAIN_NETIF, 0, &TransmitBuffer, NETMAN_NETIF_NAME_MAX_LEN, &ReceiveBuffer, sizeof(s32), NULL, NULL))>=0) result=ReceiveBuffer.result; SignalSema(NetManIOSemaID); return result; }
int PS2CamGetDeviceStatus(int handle) { int *ret; ret = (int *)&data[0]; ret[0] = handle; SifCallRpc(&cdata, PS2CAM_RPC_GETDEVSTATUS, 0, (void*)(&data[0]),4,(void*)(&data[0]),4,0,0); nopdelay(); return ret[0]; }
int NetManRPCRegisterNetworkStack(void){ int result; WaitSema(NetManIOSemaID); if((result=SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_REG_NETWORK_STACK, 0, NULL, 0, ReceiveBuffer, sizeof(struct NetManRegNetworkStackResult), NULL, NULL))>=0){ if((result=((struct NetManRegNetworkStackResult*)ReceiveBuffer)->result) == 0){ IOPFrameBuffer=((struct NetManRegNetworkStackResult*)ReceiveBuffer)->FrameBuffer; } } SignalSema(NetManIOSemaID); return result; }
int NetManSetMainIF(const char *name){ int result; WaitSema(NetManIOSemaID); strncpy(TransmitBuffer, name, NETMAN_NETIF_NAME_MAX_LEN); TransmitBuffer[NETMAN_NETIF_NAME_MAX_LEN-1] = '\0'; if((result=SifCallRpc(&NETMAN_rpc_cd, NETMAN_IOP_RPC_FUNC_SET_MAIN_NETIF, 0, TransmitBuffer, NETMAN_NETIF_NAME_MAX_LEN, ReceiveBuffer, sizeof(int), NULL, NULL))>=0){ result=*(int*)ReceiveBuffer; } SignalSema(NetManIOSemaID); return result; }
int accept(int s, struct sockaddr *addr, int *addrlen) { cmd_pkt *pkt = (cmd_pkt *)_rpc_buffer; if(!_init_check) return -1; pkt->socket = s; SifCallRpc(&_ps2ip, ID_ACCEPT, 0, (void*)_rpc_buffer, 4, (void*)_rpc_buffer, sizeof(cmd_pkt), 0, 0); if(pkt->len < *addrlen) *addrlen = pkt->len; memcpy((void *)addr, (void *)&pkt->sockaddr, *addrlen); return pkt->socket; }