# Constantes para SX1262

# Comandos SPI
CMD_NOP = 0x00
CMD_SET_STANDBY = 0x80
CMD_SET_RX = 0x82
CMD_SET_TX = 0x83
CMD_SET_DIO_IRQ_PARAMS = 0x08
CMD_SET_SLEEP = 0x84
CMD_SET_RF_FREQUENCY = 0x86
CMD_SET_PACKET_TYPE = 0x8A
CMD_SET_MODULATION_PARAMS = 0x8B
CMD_SET_PACKET_PARAMS = 0x8C
CMD_SET_PA_CONFIG = 0x95
CMD_SET_RX_TX_FALLBACK_MODE = 0x93
CMD_SET_DIO2_AS_RF_SWITCH_CTRL = 0x9D
CMD_SET_DIO3_AS_TCXO_CTRL = 0x97
CMD_SET_TX_PARAMS = 0x8E
CMD_SET_BUFFER_BASE_ADDRESS = 0x8F
CMD_SET_REGULATOR_MODE = 0x96
CMD_CALIBRATE = 0x89
CMD_CALIBRATE_IMAGE = 0x98
CMD_WRITE_BUFFER = 0x0E
CMD_READ_BUFFER = 0x1E
CMD_GET_IRQ_STATUS = 0x12
CMD_CLEAR_IRQ_STATUS = 0x02
CMD_GET_RX_BUFFER_STATUS = 0x13
CMD_GET_PACKET_STATUS = 0x14
CMD_GET_PACKET_TYPE = 0x11
CMD_WRITE_REGISTER = 0x0D
CMD_READ_REGISTER = 0x1D

# Registros
REG_LORA_SYNC_WORD_MSB = 0x0740
REG_LORA_SYNC_WORD_LSB = 0x0741
REG_IQ_CONFIG = 0x0736
REG_OCP_CONFIGURATION = 0x08E7
REG_TX_CLAMP_CONFIG = 0x08D8
REG_SENSITIVITY_CONFIG = 0x0889

# Valores fijos
MAX_PACKET_LENGTH = 255
CRYSTAL_FREQ = 32.0
DIV_EXPONENT = 25

# Tipos y modos
PACKET_TYPE_LORA = 0x01
STANDBY_RC = 0x00
RX_TX_FALLBACK_MODE_STDBY_RC = 0x20
REGULATOR_LDO = 0x00
REGULATOR_DC_DC = 0x01
DIO2_AS_RF_SWITCH = 0x01

# IRQ
IRQ_TX_DONE = 0b0000000001
IRQ_RX_DONE = 0b0000000010
IRQ_TIMEOUT = 0b1000000000
IRQ_CRC_ERR = 0b0001000000
IRQ_HEADER_ERR = 0b0000100000
IRQ_ALL = 0b1111111111
IRQ_NONE = 0b0000000000

# LoRa
LORA_BW_125_0 = 0x04
LORA_BW_250_0 = 0x05
LORA_BW_500_0 = 0x06
LORA_CR_4_5 = 0x01
LORA_CR_4_6 = 0x02
LORA_CR_4_7 = 0x03
LORA_CR_4_8 = 0x04
LORA_CRC_OFF = 0x00
LORA_CRC_ON = 0x01
LORA_HEADER_EXPLICIT = 0x00
LORA_HEADER_IMPLICIT = 0x01
LORA_IQ_STANDARD = 0x00
LORA_IQ_INVERTED = 0x01
LORA_LOW_DATA_RATE_OPTIMIZE_OFF = 0x00
LORA_LOW_DATA_RATE_OPTIMIZE_ON = 0x01
PA_RAMP_200U = 0x04
PA_CONFIG_HP_MAX = 0x07
PA_CONFIG_PA_LUT = 0x01
PA_CONFIG_SX1262 = 0x00

# TCXO
DIO3_OUTPUT_1_6 = 0x00
DIO3_OUTPUT_1_7 = 0x01
DIO3_OUTPUT_1_8 = 0x02
DIO3_OUTPUT_2_2 = 0x03
DIO3_OUTPUT_2_4 = 0x04
DIO3_OUTPUT_2_7 = 0x05
DIO3_OUTPUT_3_0 = 0x06
DIO3_OUTPUT_3_3 = 0x07

# Calibración de imagen
CAL_IMG_430_MHZ_1 = 0x6B
CAL_IMG_430_MHZ_2 = 0x6F
CAL_IMG_470_MHZ_1 = 0x75
CAL_IMG_470_MHZ_2 = 0x81
CAL_IMG_863_MHZ_1 = 0xD7
CAL_IMG_863_MHZ_2 = 0xDB
CAL_IMG_902_MHZ_1 = 0xE1
CAL_IMG_902_MHZ_2 = 0xE9

# Sync words
SYNC_WORD_PUBLIC = 0x34
SYNC_WORD_PRIVATE = 0x12

# Errores
ERR_NONE = 0
ERR_UNKNOWN = -1
ERR_CHIP_NOT_FOUND = -2
ERR_PACKET_TOO_LONG = -4
ERR_TX_TIMEOUT = -5
ERR_RX_TIMEOUT = -6
ERR_CRC_MISMATCH = -7
ERR_INVALID_BANDWIDTH = -8
ERR_INVALID_SPREADING_FACTOR = -9
ERR_INVALID_CODING_RATE = -10
ERR_INVALID_FREQUENCY = -12
ERR_INVALID_OUTPUT_POWER = -13
ERR_INVALID_CURRENT_LIMIT = -17
ERR_WRONG_MODEM = -20
ERR_INVALID_SYNC_WORD = -105
ERR_INVALID_TCXO_VOLTAGE = -703
ERR_SPI_CMD_TIMEOUT = -705
ERR_INVALID_PACKET_LENGTH = -805

ERROR = {
    0: "ERR_NONE",
    -1: "ERR_UNKNOWN",
    -2: "ERR_CHIP_NOT_FOUND",
    -4: "ERR_PACKET_TOO_LONG",
    -5: "ERR_TX_TIMEOUT",
    -6: "ERR_RX_TIMEOUT",
    -7: "ERR_CRC_MISMATCH",
    -8: "ERR_INVALID_BANDWIDTH",
    -9: "ERR_INVALID_SPREADING_FACTOR",
    -10: "ERR_INVALID_CODING_RATE",
    -12: "ERR_INVALID_FREQUENCY",
    -13: "ERR_INVALID_OUTPUT_POWER",
    -17: "ERR_INVALID_CURRENT_LIMIT",
    -20: "ERR_WRONG_MODEM",
    -105: "ERR_INVALID_SYNC_WORD",
    -703: "ERR_INVALID_TCXO_VOLTAGE",
    -705: "ERR_SPI_CMD_TIMEOUT",
    -805: "ERR_INVALID_PACKET_LENGTH",
}