#if !defined(__SYS_BLE_H)

#define __SYS_BLE_H


#include <stdint.h>


// The advertising interval (in units of 0.625 ms).
#define SYS_BLE_ADV_INTERVAL_MIN    64  // 40 ms, nordic default
#define SYS_BLE_ADV_INTERVAL_MAX    96  // 60ms

#define SYS_BLE_RX_BUF_NUM          8
#define SYS_BLE_RX_BUF_SIZE         247


typedef struct {
    void (*connected)(struct bt_conn *conn, uint8_t err);
    void (*disconnected)(struct bt_conn *conn, uint8_t reason);
    
    void (*received)(struct bt_conn *conn, const void *data, uint16_t len, void *ctx);
} sys_ble_callback, *psys_ble_callback;


typedef struct {
    int     adv_interval;
} sys_ble_state, *psys_ble_state;


#ifdef  __cplusplus
extern "C" {
#endif
  

int         sys_ble_init(char *device_name, psys_ble_callback callback);


int         sys_ble_send_data(uint8_t *data, uint16_t len);

int         sys_ble_printf(const char *fmt, ...);


uint8_t*    sys_ble_recv_data(uint16_t *len);


int         sys_ble_get_address(char *addr);

bool        sys_ble_is_connected(void);

void        sys_ble_close(void);

int         sys_ble_change_adv_interval(uint32_t interval_min, uint32_t interval_max);


#ifdef  __cplusplus
}
#endif


#endif // __SYS_BLE_H
