示例#1
0
        // CreateStrayLayer(u32, u64) -> (u64, u64, buffer<bytes, 6>)
        public ResultCode CreateStrayLayer(ServiceCtx context)
        {
            long layerFlags = context.RequestData.ReadInt64();
            long displayId  = context.RequestData.ReadInt64();

            long parcelPtr = context.Request.ReceiveBuff[0].Position;

            Display disp = _displays.GetData <Display>((int)displayId);

            IBinder producer = context.Device.System.SurfaceFlinger.CreateLayer(context.Process, out long layerId);

            HOSBinderDriverServer.RegisterBinderObject(producer);

            Parcel parcel = new Parcel(0x28, 0x4);

            parcel.WriteObject(producer, "dispdrv\0");

            ReadOnlySpan <byte> parcelData = parcel.Finish();

            context.Memory.WriteBytes(parcelPtr, parcelData.ToArray());

            context.ResponseData.Write(layerId);
            context.ResponseData.Write((long)parcelData.Length);

            return(ResultCode.Success);
        }
示例#2
0
        // CreateManagedLayer(u32, u64, nn::applet::AppletResourceUserId) -> u64
        public ResultCode CreateManagedLayer(ServiceCtx context)
        {
            long layerFlags = context.RequestData.ReadInt64();
            long displayId  = context.RequestData.ReadInt64();

            IBinder producer = context.Device.System.SurfaceFlinger.CreateLayer(context.Process, out long layerId);

            HOSBinderDriverServer.RegisterBinderObject(producer);

            context.ResponseData.Write(layerId);

            return(ResultCode.Success);
        }
示例#3
0
        // OpenLayer(nn::vi::DisplayName, u64, nn::applet::AppletResourceUserId, pid) -> (u64, buffer<bytes, 6>)
        public ResultCode OpenLayer(ServiceCtx context)
        {
            byte[] displayName = context.RequestData.ReadBytes(0x40);

            long layerId   = context.RequestData.ReadInt64();
            long userId    = context.RequestData.ReadInt64();
            long parcelPtr = context.Request.ReceiveBuff[0].Position;

            IBinder producer = context.Device.System.SurfaceFlinger.OpenLayer(context.Process, layerId);

            HOSBinderDriverServer.RegisterBinderObject(producer);

            Parcel parcel = new Parcel(0x28, 0x4);

            parcel.WriteObject(producer, "dispdrv\0");

            ReadOnlySpan <byte> parcelData = parcel.Finish();

            context.Memory.WriteBytes(parcelPtr, parcelData.ToArray());

            context.ResponseData.Write((long)parcelData.Length);

            return(ResultCode.Success);
        }