#ifndef _PROTOCOL_KISS
#define _PROTOCOL_KISS 0x02

#include "../hardware/AFSK.h"
#include "../hardware/Serial.h"
#include "../util/time.h"
#include "AX25.h"

#define FEND 0xC0
#define FESC 0xDB
#define TFEND 0xDC
#define TFESC 0xDD

#define CMD_UNKNOWN 0xFE
#define CMD_DATA 0x00
#define CMD_PREAMBLE 0x01
#define CMD_P 0x02
#define CMD_SLOTTIME 0x03
#define CMD_TXTAIL 0x04
#define CMD_FULLDUPLEX 0x05
#define CMD_SETHARDWARE 0x06
#define CMD_SAVE_CONFIG 0x07
#define CMD_LED_INTENSITY 0x08
#define CMD_OUTPUT_GAIN 0x09
#define CMD_INPUT_GAIN 0x0A
#define CMD_PASSALL 0x0B
#define CMD_LOG_PACKETS 0x0C
#define CMD_GPS_MODE 0x0D
#define CMD_BT_MODE	0x0E
#define CMD_READY 0x0F
#define CMD_SERIAL_BAUDRATE 0x10
#define CMD_REBOOT 0x11
#define CMD_REBOOT_CONFIRM 0x9A
#define CMD_AUDIO_PEAK 0x12
#define CMD_ENABLE_DIAGNOSTICS 0x13
#define CMD_MODE 0x14
#define CMD_NMEA 0x40
#define CMD_PRINT_CONFIG 0xF0
#define CMD_RETURN 0xFF

void kiss_init(AX25Ctx *ax25, Afsk *afsk, Serial *ser);
void kiss_messageCallback(AX25Ctx *ctx);
void kiss_serialCallback(uint8_t sbyte);
void kiss_flushQueue(void);
void kiss_csma(void);
void kiss_poll(void);

void kiss_output_modem_mode(void);
void kiss_output_afsk_peak(void);
void kiss_output_config(uint8_t* data, size_t length);
void kiss_output_nmea(char* data, size_t length);

bool log_init(void);
bool load_log_index(void);
bool update_log_index(void);

#endif