/*
 * Copyright (c) 2019 Brett Witherspoon
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_DRIVERS_IEEE802154_IEEE802154_CC13XX_CC26XX_H_
#define ZEPHYR_DRIVERS_IEEE802154_IEEE802154_CC13XX_CC26XX_H_

#include <kernel.h>
#include <net/net_if.h>

#include <ti/drivers/rf/RF.h>

#include <driverlib/rf_common_cmd.h>
#include <driverlib/rf_data_entry.h>
#include <driverlib/rf_ieee_cmd.h>
#include <driverlib/rf_mailbox.h>

/* IEEE 802.15.4-2006 2450 MHz O-QPSK PHY symbol rate (6.5.3.2) */
#define IEEE802154_2450MHZ_OQPSK_SYMBOLS_PER_SECOND 62500

/* IEEE 802.15.4-2006 PHY constants (6.4.1) */
#define IEEE802154_MAX_PHY_PACKET_SIZE 127
#define IEEE802154_TURNAROUND_TIME 12

/* IEEE 802.15.4-2006 PHY PIB attributes (6.4.2) */
#define IEEE802154_PHY_CCA_MODE 3
#define IEEE802154_PHY_SHR_DURATION 10
#define IEEE802154_PHY_SYMBOLS_PER_OCTET 2

/* IEEE 802.15.4-2006 MAC constants (7.4.1) */
#define IEEE802154_UNIT_BACKOFF_PERIOD 20

/* ACK is 2 bytes for PHY header + 2 bytes MAC header + 2 bytes MAC footer */
#define IEEE802154_ACK_FRAME_OCTETS 6

/* IEEE 802.15.4-2006 MAC PIB attributes (7.4.2)
 *
 * The macAckWaitDuration attribute does not include aUnitBackoffPeriod for
 * non-beacon enabled PANs (See IEEE 802.15.4-2006 7.5.6.4.2)
 */
#define IEEE802154_MAC_ACK_WAIT_DURATION                                       \
	(IEEE802154_TURNAROUND_TIME + IEEE802154_PHY_SHR_DURATION +            \
	 IEEE802154_ACK_FRAME_OCTETS * IEEE802154_PHY_SYMBOLS_PER_OCTET)

/* Reserve two bytes for 16-bit CRC */
#define IEEE802154_MTU (IEEE802154_MAX_PHY_PACKET_SIZE - 2)

#define CC13XX_CC26XX_RAT_CYCLES_PER_SECOND 4000000

#define CC13XX_CC26XX_NUM_RX_BUF 2

/* Three additional bytes for length, RSSI and correlation values from CPE. */
#define CC13XX_CC26XX_RX_BUF_SIZE (IEEE802154_MAX_PHY_PACKET_SIZE + 3)

#define CC13XX_CC26XX_CPE0_IRQ (INT_RFC_CPE_0 - 16)
#define CC13XX_CC26XX_CPE1_IRQ (INT_RFC_CPE_1 - 16)

#define CC13XX_CC26XX_RECEIVER_SENSITIVITY -100
#define CC13XX_CC26XX_RSSI_DYNAMIC_RANGE 95

struct ieee802154_cc13xx_cc26xx_data {
	RF_Handle rf_handle;
	RF_Object rf_object;

	struct net_if *iface;

	uint8_t mac[8];

	struct k_mutex tx_mutex;

	dataQueue_t rx_queue;
	rfc_dataEntryPointer_t rx_entry[CC13XX_CC26XX_NUM_RX_BUF];
	uint8_t rx_data[CC13XX_CC26XX_NUM_RX_BUF]
		    [CC13XX_CC26XX_RX_BUF_SIZE] __aligned(4);

	volatile rfc_CMD_FS_t cmd_fs;
	volatile rfc_CMD_IEEE_CCA_REQ_t cmd_ieee_cca_req;
	volatile rfc_CMD_CLEAR_RX_t cmd_clear_rx;
	volatile rfc_CMD_IEEE_RX_t cmd_ieee_rx;
	volatile rfc_CMD_SET_TX_POWER_t cmd_set_tx_power;
	volatile rfc_CMD_IEEE_CSMA_t cmd_ieee_csma;
	volatile rfc_CMD_IEEE_TX_t cmd_ieee_tx;
	volatile rfc_CMD_IEEE_RX_ACK_t cmd_ieee_rx_ack;
	volatile rfc_CMD_RADIO_SETUP_t cmd_radio_setup;

	volatile int16_t saved_cmdhandle;
};

#endif /* ZEPHYR_DRIVERS_IEEE802154_IEEE802154_CC13XX_CC26XX_H_ */
