#ifndef _MW_BT_H
#define _MW_BT_H

#define BT_RST_PIN		BIT3
#define BT_RST_PSEL		P10SEL
#define BT_RST_POUT		P10OUT
#define BT_RST_PDIR		P10DIR

#define BT_IO_PSEL		P1SEL
#define BT_IO_RTS		BIT0
#define BT_IO_CTS		BIT3
#define BT_IO_POUT		P1OUT
#define BT_IO_PIN		P1IN
#define BT_IO_PDIR		P1DIR
#define BT_IO_REN		P1REN

#define BT_IO_PIN1		BIT5
#define BT_IO_PIN2		BIT6
#define BT_IO_CLKREQ	BIT4

#define BT_SHUTDOWN()		{ BT_RST_POUT &= ~BT_RST_PIN; }
#define BT_ENABLE()			{ BT_RST_POUT |= BT_RST_PIN; }

#define BT_UART_PSEL		P5SEL
#define BT_UART_PDIR		P5DIR
#define BT_UART_REN			P5REN
#define BT_UART_POUT		P5OUT
#define BT_UART_TX_PIN		BIT6
#define BT_UART_RX_PIN		BIT7

#define CONFIG_BT_PINS() { \
	BT_RST_PSEL &= ~BT_RST_PIN; \
	BT_RST_PDIR |= BT_RST_PIN; \
	BT_SHUTDOWN(); \
	BT_IO_PSEL &= ~(BT_IO_RTS | BT_IO_CTS | BT_IO_PIN1 | BT_IO_PIN2 | BT_IO_CLKREQ); \
	BT_IO_PDIR &= ~(BT_IO_RTS | BT_IO_CTS | BT_IO_PIN1 | BT_IO_PIN2 | BT_IO_CLKREQ); \
	BT_IO_POUT &= ~(BT_IO_RTS | BT_IO_CTS | BT_IO_PIN1 | BT_IO_PIN2 | BT_IO_CLKREQ); \
	BT_UART_PSEL &= ~(BT_UART_TX_PIN | BT_UART_RX_PIN); \
	BT_UART_PDIR &= ~(BT_UART_TX_PIN | BT_UART_RX_PIN); \
	BT_UART_REN |= BT_UART_TX_PIN | BT_UART_RX_PIN; \
	BT_UART_POUT |= BT_UART_TX_PIN | BT_UART_RX_PIN; \
}

void mw_enable_bt(void);
void mw_disable_bt(void);

typedef enum {
	BT_UART_BD19200 = 0,
	BT_UART_BD38400,
	BT_UART_BD57600,
	BT_UART_BD115200,
	BT_UART_BD234000,
} bt_uart_baud_t;

#define BT_MW_DEVICE_CLASS	0x842704 /* Limited discovery, Rendering, Information, Wearable, Wrist Watch */
#define BT_RX_MAX_SIZE		255

void mw_init_bt_uart(const bt_uart_baud_t baud);

int mw_bt_uart_tx(const void *buf, const unsigned int len);
// extern char BT_UART_RX_CHAR;

int mw_bt_get_rxbuf_len(void);
const unsigned char *mw_bt_get_rx_buf(unsigned char **rpos, unsigned char *len);
unsigned char bt_feed_packet_data(unsigned char pdata);
uint8_t mw_bt_is_enabled(void);
#endif