// 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); }
// 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); }
// 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); }