Пример #1
0
  @HLEFunction(nid = 0xA4FC06A4, version = 150, checkInsideInterrupt = true)
  public int sceGeSetCallback(TPointer cbdata_addr) {
    pspGeCallbackData cbdata = new pspGeCallbackData();
    cbdata.read(cbdata_addr);

    // The cbid returned has a value in the range [0..15].
    int cbid = SceUidManager.getNewId(geCallbackPurpose, 0, 15);
    if (cbid == SceUidManager.INVALID_ID) {
      log.warn(String.format("sceGeSetCallback no more callback ID available"));
      return SceKernelErrors.ERROR_OUT_OF_MEMORY;
    }

    if (log.isDebugEnabled()) {
      log.debug(
          String.format(
              "sceGeSetCallback signalFunc=0x%08X, signalArg=0x%08X, finishFunc=0x%08X, finishArg=0x%08X, result cbid=0x%X",
              cbdata.signalFunction,
              cbdata.signalArgument,
              cbdata.finishFunction,
              cbdata.finishArgument,
              cbid));
    }

    ThreadManForUser threadMan = Modules.ThreadManForUserModule;
    SceKernelCallbackInfo callbackSignal =
        threadMan.hleKernelCreateCallback(
            "GeCallbackSignal", cbdata.signalFunction, cbdata.signalArgument);
    SceKernelCallbackInfo callbackFinish =
        threadMan.hleKernelCreateCallback(
            "GeCallbackFinish", cbdata.finishFunction, cbdata.finishArgument);
    signalCallbacks.put(cbid, callbackSignal);
    finishCallbacks.put(cbid, callbackFinish);

    return cbid;
  }