/* Copyright (c) 2017 ARM Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef UART_CELLULAR_INTERFACE_
#define UART_CELLULAR_INTERFACE_

#include "PPPCellularInterface.h"
#include "UARTSerial.h"

#if NSAPI_PPP_AVAILABLE

/** UARTCellularInterface class
 *
 *  This interface serves as the controller/driver for Cellular
 *  modems attached via a UART (tested with UBLOX_C027 and MTS_DRAGONFLY_F411RE).
 *
 *  It constructs a FileHandle and passes it back to its base class as well as overrides
 *  enable_hup() in the base class.
 */
class UARTCellularInterface : public PPPCellularInterface {

public:

    UARTCellularInterface(PinName tx, PinName rx, PinName dcd = NC, PinName rts = NC, PinName cts = NC, PinName ri = NC,
                             PinName dtr = NC, PinName dsr = NC, int baud = MBED_CONF_PPP_CELL_IFACE_BAUD_RATE,
                             bool active_high = false,
                             bool debug = false);

    virtual ~UARTCellularInterface();

private:
    UARTSerial _serial;
    PinName _dcd_pin;
    bool _active_high;

protected:
    /** Enable or disable hang-up detection
     *
     *  When in PPP data pump mode, it is helpful if the FileHandle will signal hang-up via
     *  POLLHUP, e.g., if the DCD line is deasserted on a UART. During command mode, this
     *  signaling is not desired. enable_hup() controls whether this function should be
     *  active.
     */
    virtual void enable_hup(bool enable);
};

#endif //NSAPI_PPP_AVAILABLE

#endif //UART_CELLULAR_INTERFACE_
