1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/drivers/include/at24mac.h
2020-02-27 08:46:40 +01:00

106 lines
2.7 KiB
C

/*
* Copyright (C) 2019 Benjamin Valentin
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup drivers_at24mac AT24MAC unique ID chip
* @ingroup drivers_misc
* @brief Device driver interface for the AT24MAC I2C chip
* @{
*
* @file
*
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
*/
#ifndef AT24MAC_H
#define AT24MAC_H
#include <stdint.h>
#include "net/eui48.h"
#include "net/eui64.h"
#include "periph/i2c.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Device handle type for AT24Mac devices
*/
typedef uint_fast8_t at24mac_t;
#define AT24MAC_ID_LEN (16) /**< Length of ID128 */
/**
* @brief Type of the AT24Mac device
*/
typedef enum {
AT24MAC4XX, /**< provides EUI-48 */
AT24MAC6XX /**< provides EUI-64 */
} at24mac_type_t;
/**
* @brief struct holding all params needed for device communication
*/
typedef struct {
i2c_t i2c_dev; /**< I2C device */
uint8_t i2c_addr; /**< I2C address */
at24mac_type_t type; /**< Device type */
} at24mac_params_t;
/**
* @brief Get the unique EUI48 address from a AT24MAC4xx chip
*
* @param[in] dev Index of the AT24Mac chip in the at24mac_params
* array.
* @param[out] addr memory location to copy the address into.
*
* @return 0 on success, error otherwise.
*/
int at24mac_get_eui48(at24mac_t dev, eui48_t *addr);
/**
* @brief Get the unique EUI64 address from a AT24MAC6xx chip
*
* @param[in] dev Index of the AT24Mac chip in the at24mac_params
* array.
* @param[out] addr memory location to copy the address into.
*
* @return 0 on success, error otherwise.
*/
int at24mac_get_eui64(at24mac_t dev, eui64_t *addr);
/**
* @brief Get the unique ID from a AT24MACxxx chip
*
* @param[in] dev Index of the AT24MAC chip in the at24mac_params
* array.
* @param[out] dst memory location to copy the ID into.
* Must be able to hold at least @ref AT24MAC_ID_LEN bytes.
*
* @return 0 on success, error otherwise.
*/
int at24mac_get_id128(at24mac_t dev, void *dst);
/**
* @brief Get the type of a AT24MACxxx chip
*
* @param[in] dev Index of the AT24MAC chip in the at24mac_params
* array.
*
* @return The type of the device (AT24MAC4XX or AT24MAC6XX)
*/
at24mac_type_t at24mac_get_type(at24mac_t dev);
#ifdef __cplusplus
}
#endif
#endif /* AT24MAC_H */
/** @} */