/* ieee802154_rf2xx_iface.h - ATMEL RF2XX transceiver interface */

/*
 * Copyright (c) 2019-2020 Gerson Fernando Budke
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_DRIVERS_IEEE802154_IEEE802154_RF2XX_IFACE_H_
#define ZEPHYR_DRIVERS_IEEE802154_IEEE802154_RF2XX_IFACE_H_

/**
 * @brief Resets the TRX radio
 *
 * @param[in] dev   Transceiver device instance
 */
void rf2xx_iface_phy_rst(const struct device *dev);

/**
 * @brief Start TX transmition
 *
 * @param[in] dev   Transceiver device instance
 */
void rf2xx_iface_phy_tx_start(const struct device *dev);

/**
 * @brief Reads current value from a transceiver register
 *
 * This function reads the current value from a transceiver register.
 *
 * @param[in] dev   Transceiver device instance
 * @param[in] addr  Specifies the address of the trx register
 * from which the data shall be read
 *
 * @return value of the register read
 */
uint8_t rf2xx_iface_reg_read(const struct device *dev,
			     uint8_t addr);

/**
 * @brief Writes data into a transceiver register
 *
 * This function writes a value into transceiver register.
 *
 * @param[in] dev   Transceiver device instance
 * @param[in] addr  Address of the trx register
 * @param[in] data  Data to be written to trx register
 *
 */
void rf2xx_iface_reg_write(const struct device *dev,
			   uint8_t addr,
			   uint8_t data);

/**
 * @brief Subregister read
 *
 * @param[in] dev   Transceiver device instance
 * @param[in] addr  offset of the register
 * @param[in] mask  bit mask of the subregister
 * @param[in] pos   bit position of the subregister
 *
 * @return  value of the read bit(s)
 */
uint8_t rf2xx_iface_bit_read(const struct device *dev,
			     uint8_t addr,
			     uint8_t mask,
			     uint8_t pos);

/**
 * @brief Subregister write
 *
 * @param[in]   dev       Transceiver device instance
 * @param[in]   reg_addr  Offset of the register
 * @param[in]   mask      Bit mask of the subregister
 * @param[in]   pos       Bit position of the subregister
 * @param[out]  new_value Data, which is muxed into the register
 */
void rf2xx_iface_bit_write(const struct device *dev,
			   uint8_t reg_addr,
			   uint8_t mask,
			   uint8_t pos,
			   uint8_t new_value);

/**
 * @brief Reads frame buffer of the transceiver
 *
 * This function reads the frame buffer of the transceiver.
 *
 * @param[in]   dev     Transceiver device instance
 * @param[out]  data    Pointer to the location to store frame
 * @param[in]   length  Number of bytes to be read from the frame
 */
void rf2xx_iface_frame_read(const struct device *dev,
			    uint8_t *data,
			    uint8_t length);

/**
 * @brief Writes data into frame buffer of the transceiver
 *
 * This function writes data into the frame buffer of the transceiver
 *
 * @param[in] dev    Transceiver device instance
 * @param[in] data   Pointer to data to be written into frame buffer
 * @param[in] length Number of bytes to be written into frame buffer
 */
void rf2xx_iface_frame_write(const struct device *dev,
			     uint8_t *data,
			     uint8_t length);

/**
 * @brief Reads sram data from the transceiver
 *
 * This function reads the sram data of the transceiver.
 *
 * @param[in]   dev     Transceiver device instance
 * @param[in]   address Start address to be read
 * @param[out]  data    Pointer to the location to store data
 * @param[in]   length  Number of bytes to be read from the sram space
 */
void rf2xx_iface_sram_read(const struct device *dev,
			    uint8_t address,
			    uint8_t *data,
			    uint8_t length);

#endif /* ZEPHYR_DRIVERS_IEEE802154_IEEE802154_RF2XX_IFACE_H_ */
