#ifndef __APP_FP_RFCOMM_H__
#define __APP_FP_RFCOMM_H__
#include "bluetooth.h"
#include <stdbool.h>
#include <stdint.h>
#define FP_MESSAGE_RESERVED_LEN 4 // at least 4 bytes
// TODO: increase this value if needed
#define FP_MESSAGE_STREAM_MAX_ADDITIONAL_DATA_LEN 16
typedef struct {
  uint8_t messageGroup;
  uint8_t messageCode;
  uint8_t dataLenHighByte;
  uint8_t dataLenLowByte;
  uint8_t data[FP_MESSAGE_STREAM_MAX_ADDITIONAL_DATA_LEN];
} __attribute__((packed)) FP_MESSAGE_STREAM_T;

// The values is posted at FP spec 8/27/19 revision
#define FP_MSG_GROUP_BLUETOOTH_EVENT 0x01
#define FP_MSG_BT_EVENT_ENABLE_SILENCE_MODE 0x01
#define FP_MSG_BT_EVENT_DISABLE_SILENCE_MODE 0x02

#define FP_MSG_GROUP_COMPANION_APP_EVENT 0x02
#define FP_MSG_COMPANION_APP_LOG_BUF_FULL 0x01

#define FP_MSG_GROUP_DEVICE_INFO 0x03
#define FP_MSG_DEVICE_INFO_MODEL_ID 0x01
#define FP_MSG_DEVICE_INFO_BLE_ADD_UPDATED 0x02
#define FP_MSG_DEVICE_INFO_BATTERY_UPDATED 0x03
#define FP_MSG_DEVICE_INFO_REMAINING_BATTERY_TIME 0x04
#define FP_MSG_DEVICE_INFO_ACTIVE_COMPONENTS_REQ 0x05
#define FP_MSG_DEVICE_INFO_ACTIVE_COMPONENTS_RSP 0x06
#define FP_MSG_DEVICE_INFO_TELL_CAPABILITIES 0x07
#define FP_MSG_DEVICE_INFO_PLATFORM_TYPE 0x08

#define FP_MSG_GROUP_DEVICE_ACTION 0x04
#define FP_MSG_DEVICE_ACTION_RING 0x01

#define FP_MSG_NEITHER_BUD_ACTIVE 0x00
#define FP_MSG_RIGHT_BUD_ACTIVE 0x01
#define FP_MSG_LEFT_BUD_ACTIVE 0x02
#define FP_MSG_BOTH_BUDS_ACTIVE 0x03

#define FP_MSG_GROUP_ACKNOWLEDGEMENT 0xFF
#define FP_MSG_ACK 0x01
#define FP_MSG_NAK 0x02

#define FP_MSG_NAK_REASON_NOT_SUPPORTED 0x00
#define FP_MSG_NAK_REASON_DEVICE_BUSY 0x01
#define FP_MSG_NAK_REASON_NOT_ALLOWED 0x02

#ifdef __cplusplus
extern "C" {
#endif

void app_fp_rfcomm_send(uint8_t *ptrData, uint32_t length);
bt_status_t app_fp_rfcomm_init(void);
void app_fp_disconnect_rfcomm(void);
bool app_is_fp_rfcomm_connected(void);

void app_fp_msg_enable_bt_silence_mode(bool isEnable);
void app_fp_msg_send_model_id(void);
void app_fp_msg_send_updated_ble_addr(void);
void app_fp_msg_send_battery_levels(void);

#ifdef __cplusplus
}
#endif

#endif // __APP_FP_RFCOMM_H__
