#pragma once

#define BQ27220_ADDRESS     (0xAAu)
#define BQ27220_I2C_TIMEOUT (50u)

#define CommandControl             (0x00u)
#define CommandAtRate              (0x02u)
#define CommandAtRateTimeToEmpty   (0x04u)
#define CommandTemperature         (0x06u)
#define CommandVoltage             (0x08u)
#define CommandBatteryStatus       (0x0Au)
#define CommandCurrent             (0x0Cu)
#define CommandRemainingCapacity   (0x10u)
#define CommandFullChargeCapacity  (0x12u)
#define CommandAverageCurrent      (0x14u)
#define CommandTimeToEmpty         (0x16u)
#define CommandTimeToFull          (0x18u)
#define CommandStandbyCurrent      (0x1Au)
#define CommandStandbyTimeToEmpty  (0x1Cu)
#define CommandMaxLoadCurrent      (0x1Eu)
#define CommandMaxLoadTimeToEmpty  (0x20u)
#define CommandRawCoulombCount     (0x22u)
#define CommandAveragePower        (0x24u)
#define CommandInternalTemperature (0x28u)
#define CommandCycleCount          (0x2Au)
#define CommandStateOfCharge       (0x2Cu)
#define CommandStateOfHealth       (0x2Eu)
#define CommandChargeVoltage       (0x30u)
#define CommandChargeCurrent       (0x32u)
#define CommandBTPDischargeSet     (0x34u)
#define CommandBTPChargeSet        (0x36u)
#define CommandOperationStatus     (0x3Au)
#define CommandDesignCapacity      (0x3Cu)
#define CommandSelectSubclass      (0x3Eu)
#define CommandMACData             (0x40u)
#define CommandMACDataSum          (0x60u)
#define CommandMACDataLen          (0x61u)
#define CommandAnalogCount         (0x79u)
#define CommandRawCurrent          (0x7Au)
#define CommandRawVoltage          (0x7Cu)
#define CommandRawIntTemp          (0x7Eu)

#define Control_CONTROL_STATUS         (0x0000u)
#define Control_DEVICE_NUMBER          (0x0001u)
#define Control_FW_VERSION             (0x0002u)
#define Control_HW_VERSION             (0x0003u)
#define Control_BOARD_OFFSET           (0x0009u)
#define Control_CC_OFFSET              (0x000Au)
#define Control_CC_OFFSET_SAVE         (0x000Bu)
#define Control_OCV_CMD                (0x000Cu)
#define Control_BAT_INSERT             (0x000Du)
#define Control_BAT_REMOVE             (0x000Eu)
#define Control_SET_SNOOZE             (0x0013u)
#define Control_CLEAR_SNOOZE           (0x0014u)
#define Control_SET_PROFILE_1          (0x0015u)
#define Control_SET_PROFILE_2          (0x0016u)
#define Control_SET_PROFILE_3          (0x0017u)
#define Control_SET_PROFILE_4          (0x0018u)
#define Control_SET_PROFILE_5          (0x0019u)
#define Control_SET_PROFILE_6          (0x001Au)
#define Control_CAL_TOGGLE             (0x002Du)
#define Control_SEALED                 (0x0030u)
#define Control_RESET                  (0x0041u)
#define Control_OERATION_STATUS        (0x0054u)
#define Control_GAUGING_STATUS         (0x0056u)
#define Control_EXIT_CAL               (0x0080u)
#define Control_ENTER_CAL              (0x0081u)
#define Control_ENTER_CFG_UPDATE       (0x0090u)
#define Control_EXIT_CFG_UPDATE_REINIT (0x0091u)
#define Control_EXIT_CFG_UPDATE        (0x0092u)
#define Control_RETURN_TO_ROM          (0x0F00u)

#define UnsealKey1 (0x0414u)
#define UnsealKey2 (0x3672u)

#define FullAccessKey (0xffffu)
