/*
* gnss_hd8122.h
*
* UC6228CI Header.
*
* Author : lb
* Date   : 2024/5/20 17:53:51
*/
#ifndef _GNSS_HD8122_H
#define _GNSS_HD8122_H
#include "gnss_info.h"
#include "mbtk_type.h"

#define HD8122_PACK_LEN_MIN 8
#define HD8122_PACK_HEAD 0xD9F1

typedef enum {
    HD8122_ID_TYPE_NAV = 0x01,
    HD8122_ID_TYPE_ACK = 0x05,
    HD8122_ID_TYPE_CFG = 0x06,
    HD8122_ID_TYPE_MON = 0x0A,
    HD8122_ID_TYPE_AID = 0x0B
} hd8122_id_type_enum;

typedef enum {
    HD8122_ID_NAV_POSECEF = 0x01,
    HD8122_ID_NAV_POSLLH = 0x02,
    HD8122_ID_NAV_DOP = 0x04,
    HD8122_ID_NAV_TIME = 0x05,
    HD8122_ID_NAV_VELECEF = 0x11,
    HD8122_ID_NAV_VELNED = 0x12,
    HD8122_ID_NAV_TIMEUTC = 0x21,
    HD8122_ID_NAV_CLOCK = 0x22,
    HD8122_ID_NAV_CLOCK2 = 0x23,
    HD8122_ID_NAV_PVERR = 0x26,
    HD8122_ID_NAV_SVINFO = 0x30,
    HD8122_ID_NAV_SVSTATE = 0x32,
    HD8122_ID_NAV_AUTO = 0xC0,
    HD8122_ID_NAV_PVT = 0xC1
} hd8122_id_nav_enum;

typedef enum {
    HD8122_ID_ACK_NAK = 0x00,
    HD8122_ID_ACK_ACK = 0x01
} hd8122_id_ack_enum;

typedef enum {
    HD8122_ID_CFG_PRT = 0x00,
    HD8122_ID_CFG_MSG = 0x01,
    HD8122_ID_CFG_COORD = 0x06,
    HD8122_ID_CFG_PPS = 0x07,
    HD8122_ID_CFG_CFG = 0x09,
    HD8122_ID_CFG_DOP = 0x0A,
    HD8122_ID_CFG_ELEV = 0x0B,
    HD8122_ID_CFG_NAVSAT = 0x0C,
    HD8122_ID_CFG_HEIGHT = 0x0D,
    HD8122_ID_CFG_SBAS = 0x0E,
    HD8122_ID_CFG_SPDHOLD = 0x0F,
    HD8122_ID_CFG_EPHSAVE = 0x10,
    HD8122_ID_CFG_NUMSV = 0x11,
    HD8122_ID_CFG_SURVEY = 0x12,
    HD8122_ID_CFG_FIXEDLLA = 0x13,
    HD8122_ID_CFG_FIXEDECEF = 0x14,
    HD8122_ID_CFG_ANTIJAM = 0x15,
    HD8122_ID_CFG_BDGEO = 0x16,
    HD8122_ID_CFG_CARRSMOOTH = 0x17,
    HD8122_ID_CFG_GEOFENCE = 0x18,
    HD8122_ID_CFG_SIMPLERST = 0x40,
    HD8122_ID_CFG_SLEEP = 0x41,
    HD8122_ID_CFG_PWRCTL = 0x42,
    HD8122_ID_CFG_PWRCTL2 = 0x44,
    HD8122_ID_CFG_NMEAVER = 0x43,
    HD8122_ID_CFG_FWUP = 0x50
} hd8122_id_cfg_enum;

typedef enum {
    HD8122_ID_MON_VER = 0x04,
    HD8122_ID_MON_INFO = 0x05,
    HD8122_ID_MON_TRKCHAN = 0x08,
    HD8122_ID_MON_RCVCLK = 0x09,
    HD8122_ID_MON_CWI = 0x0A,
} hd8122_id_mon_enum;

typedef enum {
    HD8122_ID_AID_INI = 0x01,
    HD8122_ID_AID_POS = 0x10,
    HD8122_ID_AID_TIME = 0x11,
    HD8122_ID_AID_PEPH_GPS = 0x32,
    HD8122_ID_AID_PEPH_BDS = 0x33,
    HD8122_ID_AID_PALM_GPS = 0x22,
    HD8122_ID_AID_PALM_BD = 0x23,
    HD8122_ID_AID_PALM_GLN = 0x24,
    HD8122_ID_AID_PALM_GAL = 0x25,
    HD8122_ID_AID_PALM_QZSS = 0x26
} hd8122_id_aid_enum;

typedef enum {
    HD8122_EPHSAVE_STATUS_DISABLE = 0x0,
    HD8122_EPHSAVE_STATUS_ENABLE = 0x1
} hd8122_ephsave_status_enum;
typedef struct {
    bool enable;
    uint8 gid;  // Groud ID
    uint8 sid;  // Sub ID
    hd8122_id_ack_enum ack_nak;
} hd8122_msg_id_t;

typedef struct {
    uint16 head;
    uint8 id_type;
    uint8 id;
    uint16 data_len;
    uint8 *data;
} hd8122_pack_info_t;

int gnss_8122_dev_open();

int gnss_8122_dev_close(int fd);

int gnss_8122_open();

int gnss_8122_close();

int gnss_8122_init_set(int fd);

int gnss_8122_fw_dl(int fd, const char *fw_name, const char *dev);

gnss_err_enum gnss_8122_agnss_get_eph(const char *param);

gnss_err_enum gnss_8122_agnss_inject(int fd);
//void gnss_8122_dl_read_cb(const void *data, int data_len);

gnss_err_enum gnss_8122_set(int fd, const char *cmd, void *cmd_rsp, int cmd_rsp_len);

void gnss_8122_set_cb(const void *data, int data_len);

#endif /* _GNSS_HD8122_H */

