module test_yuy2
(
    input ARESET,

    // MIPI pixel interface
    input MIPI_CLK,
    input [7:0] PIXEL_Y,
    input [7:0] PIXEL_UV,
    input PIXEL_DE,
    input PIXEL_VS,

    // USB function controller interface
    input USB_CLK,
    input USB_TXACT,
    input USB_TXPOP,
    input USB_PKTFIN,
    output [7:0] USB_TXDAT,
    output [11:0] USB_TXDAT_LEN,
    output USB_TXCORK
);

// all "o" and "i" direction is from perspective of buffer module
wire buffer_data_ready_o;
wire [11:0] buffer_length_o;
wire buffer_complete_i;
wire buffer_last_o;
wire [15:0] buffer_read_addr_i;
wire [7:0] buffer_data_o;

video_double_buffer u_buf
(
    .ARESET(ARESET),
    .WRCLK(MIPI_CLK),
    .WRDATA({PIXEL_UV, PIXEL_Y}),
    .PIXEL_DE(PIXEL_DE),
    .PIXEL_VS(PIXEL_VS),
    .RDCLK(USB_CLK),
    .DATA_READY(buffer_data_ready_o),
    .BUFFER_LENGTH(buffer_length_o),
    .DATA_COMPLETE(buffer_complete_i),
    .LAST(buffer_last_o),
    .OVERRUN(),
    .RDADDR(buffer_read_addr_i[10:0]),
    .RDDATA(buffer_data_o)
);

video_packet_sender u_vid_sender
(
    .clk(USB_CLK),
    .areset(ARESET),
    .txact(USB_TXACT),
    .txpop(USB_TXPOP),
    .pktfin(USB_PKTFIN),
    .txdat(USB_TXDAT),
    .txcork(USB_TXCORK),
    .txdat_len(USB_TXDAT_LEN),
    .video_buffer_data(buffer_data_o),
    .video_buffer_length(buffer_length_o),
    .last_buffer_of_frame(buffer_last_o),
    .buffer_ready(buffer_data_ready_o),
    .buffer_address(buffer_read_addr_i),
    .buffer_complete(buffer_complete_i)
);

endmodule
