#ifndef ATCA_IFACE_H
#define ATCA_IFACE_H
#ifdef __cplusplus
extern "C" {
#endif
#include "atca_command.h"
typedef enum
{
ATCA_I2C_IFACE,
ATCA_SWI_IFACE,
ATCA_UART_IFACE,
ATCA_SPI_IFACE,
ATCA_HID_IFACE,
ATCA_CUSTOM_IFACE,
ATCA_UNKNOWN_IFACE
} ATCAIfaceType;
typedef enum
{ ATCA_KIT_AUTO_IFACE, ATCA_KIT_I2C_IFACE,
ATCA_KIT_SWI_IFACE,
ATCA_KIT_UNKNOWN_IFACE } ATCAKitType;
typedef struct
{
ATCAIfaceType iface_type; ATCADeviceType devtype;
union {
struct
{
uint8_t slave_address; uint8_t bus; uint32_t baud; } atcai2c;
struct
{
uint8_t bus; } atcaswi;
struct
{
int port; uint32_t baud; uint8_t wordsize; uint8_t parity; uint8_t stopbits; } atcauart;
struct
{
int idx; ATCAKitType dev_interface; uint8_t dev_identity; uint32_t vid; uint32_t pid; uint32_t packetsize; } atcahid;
struct
{
ATCA_STATUS (*halinit)(void *hal, void *cfg);
ATCA_STATUS (*halpostinit)(void *iface);
ATCA_STATUS (*halsend)(void *iface, uint8_t *txdata, int txlength);
ATCA_STATUS (*halreceive)(void *iface, uint8_t* rxdata, uint16_t* rxlength);
ATCA_STATUS (*halwake)(void *iface);
ATCA_STATUS (*halidle)(void *iface);
ATCA_STATUS (*halsleep)(void *iface);
ATCA_STATUS (*halrelease)(void* hal_data);
} atcacustom;
};
uint16_t wake_delay; int rx_retries; void * cfg_data; } ATCAIfaceCfg;
typedef struct atca_iface * ATCAIface;
struct atca_iface
{
ATCAIfaceType mType;
ATCAIfaceCfg *mIfaceCFG;
ATCA_STATUS (*atinit)(void *hal, ATCAIfaceCfg *);
ATCA_STATUS (*atpostinit)(ATCAIface hal);
ATCA_STATUS (*atsend)(ATCAIface hal, uint8_t *txdata, int txlength);
ATCA_STATUS (*atreceive)(ATCAIface hal, uint8_t *rxdata, uint16_t *rxlength);
ATCA_STATUS (*atwake)(ATCAIface hal);
ATCA_STATUS (*atidle)(ATCAIface hal);
ATCA_STATUS (*atsleep)(ATCAIface hal);
void *hal_data; };
ATCA_STATUS initATCAIface(ATCAIfaceCfg *cfg, ATCAIface ca_iface);
ATCAIface newATCAIface(ATCAIfaceCfg *cfg);
ATCA_STATUS releaseATCAIface(ATCAIface ca_iface);
void deleteATCAIface(ATCAIface *ca_iface);
ATCA_STATUS atinit(ATCAIface ca_iface);
ATCA_STATUS atpostinit(ATCAIface ca_iface);
ATCA_STATUS atsend(ATCAIface ca_iface, uint8_t *txdata, int txlength);
ATCA_STATUS atreceive(ATCAIface ca_iface, uint8_t *rxdata, uint16_t *rxlength);
ATCA_STATUS atwake(ATCAIface ca_iface);
ATCA_STATUS atidle(ATCAIface ca_iface);
ATCA_STATUS atsleep(ATCAIface ca_iface);
ATCAIfaceCfg * atgetifacecfg(ATCAIface ca_iface);
void* atgetifacehaldat(ATCAIface ca_iface);
#ifdef __cplusplus
}
#endif
#endif