sig
  module Prop :
    sig
      type 'a t =
          Unit : unit Rpi.Mbox.Prop.t
        | Bytes : int *
            (Rpi.Mem.Map.bytes -> 'Rpi.result) -> 'Rpi.Mbox.Prop.t
        | Int32 : int *
            (Rpi.Mem.Map.int32s -> 'Rpi.result) -> 'Rpi.Mbox.Prop.t
        | Int64 : int *
            (Rpi.Mem.Map.int64s -> 'Rpi.result) -> 'Rpi.Mbox.Prop.t
      val unit : unit Rpi.Mbox.Prop.t
      val string : max:int -> string Rpi.Mbox.Prop.t
      val int : int Rpi.Mbox.Prop.t
      val int32 : int32 Rpi.Mbox.Prop.t
      val int64 : int64 Rpi.Mbox.Prop.t
      val int_pair : (int * int) Rpi.Mbox.Prop.t
      val int32_pair : (int32 * int32) Rpi.Mbox.Prop.t
      val int64_pair : (int64 * int64) Rpi.Mbox.Prop.t
      type args = int32 list
      type 'a req
      type ereq
      val req :
        ?args:Rpi.Mbox.Prop.args ->
        int32 -> resp:'Rpi.Mbox.Prop.t -> 'Rpi.Mbox.Prop.req
      val r : 'Rpi.Mbox.Prop.req -> Rpi.Mbox.Prop.ereq
      type resp
      val send : Rpi.Mbox.Prop.ereq list -> Rpi.Mbox.Prop.resp Rpi.result
      val find :
        Rpi.Mbox.Prop.resp -> 'Rpi.Mbox.Prop.req -> 'a option Rpi.result
    end
  type channel =
      Power_management
    | Framebuffer
    | Virtual_UART
    | VCHIQ
    | LEDs
    | Buttons
    | Touchscreen
    | Unused
    | Tags_ARM_to_VC
    | Tags_VC_to_ARM
  val read : Rpi.Mbox.channel -> Rpi.Mem.addr
  val write : Rpi.Mbox.channel -> Rpi.Mem.addr -> unit
end