/*
 * Copyright (c) 2020 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#define DLCI_CONTROL 0

#if IS_ENABLED(CONFIG_GSM_MUX)
#define DLCI_AT      CONFIG_GSM_MUX_DLCI_AT
#define DLCI_PPP     CONFIG_GSM_MUX_DLCI_PPP
#else
#define DLCI_AT      -1
#define DLCI_PPP     -1
#endif

struct gsm_mux;
struct gsm_dlci;

void gsm_mux_recv_buf(struct gsm_mux *mux, uint8_t *buf, int len);
int gsm_mux_send(struct gsm_mux *mux, uint8_t dlci_address,
		 const uint8_t *buf, size_t size);
struct gsm_mux *gsm_mux_create(const struct device *uart);
int gsm_mux_disconnect(struct gsm_mux *mux, k_timeout_t timeout);
void gsm_mux_init(void);

typedef void (*gsm_mux_dlci_created_cb_t)(struct gsm_dlci *dlci,
					  bool connected,
					  void *user_data);

int gsm_dlci_create(struct gsm_mux *mux,
		    const struct device *uart,
		    int dlci_address,
		    gsm_mux_dlci_created_cb_t dlci_created_cb,
		    void *user_data,
		    struct gsm_dlci **dlci);
int gsm_dlci_send(struct gsm_dlci *dlci, const uint8_t *buf, size_t size);
int gsm_dlci_id(struct gsm_dlci *dlci);
void gsm_mux_detach(struct gsm_mux *mux);
