/*
 * Copyright 2018, Data61, CSIRO (ABN 41 687 119 230)
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#include <plat/serial.h>

import <GetChar.idl4>;
import <PutChar.idl4>;
import <Batch.idl4>;
import <Timer.idl4>;
import <serial.camkes>;
import <VirtQueue/VirtQueue.camkes>;

component SerialServer {
    control;
    has mutex serial;
    provides PutChar processed_putchar;
    provides PutChar raw_putchar;
    provides Batch processed_batch;
    provides Batch raw_batch;
    provides GetChar getchar;
    uses Timer timeout;

    /* Virtqueue connection to faciliate read and write */
    maybe uses VirtQueueDev read;
    maybe uses VirtQueueDev write;
    //emits Callback self;
    emits Callback self_read;
    emits Callback self_write;

    //maybe consumes Callback serial_wait;
    maybe consumes Callback serial_write_wait;
    maybe consumes Callback serial_read_wait;

    /* Size of the driver's heap */
    attribute int heap_size = 16 * 1024;

    HARDWARE_SERIAL_INTERFACES
    HARDWARE_SERIAL_ATTRIBUTES

    composition {
        HARDWARE_SERIAL_COMPOSITION
    }

    configuration {
        HARDWARE_SERIAL_CONFIG
    }
}
