Update to code after running clang-format on all *.c and *.h files.

This commit is contained in:
mdlewisfb
2018-10-08 11:33:39 -07:00
parent d0963785a0
commit 09068532eb
185 changed files with 7623 additions and 7533 deletions

View File

@@ -16,8 +16,8 @@
#include <stdbool.h>
#include <stdlib.h>
#define POST_ENABLED 0
#define POST_DISABLED 1
#define POST_ENABLED 0
#define POST_DISABLED 1
/* For enabling schema sharing between host and firmware we need to import the
* factory config and driver config to schema.c as weak attribute from
@@ -63,7 +63,7 @@ typedef struct Parameter {
};
} Parameter;
typedef bool (*CB_Command) (void *driver, void *params);
typedef bool (*CB_Command)(void *driver, void *params);
typedef struct Command {
const char *name;
@@ -71,37 +71,37 @@ typedef struct Command {
const CB_Command cb_cmd;
} Command;
typedef bool (*CB_POST) (void **params);
typedef bool (*CB_POST)(void **params);
typedef struct Post {
const char *name;
const CB_POST cb_postCmd;
}Post;
} Post;
// To avoid the awkward situation of not knowing how much to allocate for the return value (think
// string returns), we instead rely on the 'get' and 'set' functions to allocate and return a
// pointer to the value it wants to return via OCMP
typedef bool (*StatusGet_Cb) (void *driver, unsigned int param_id,
void *return_buf);
typedef bool (*ConfigGet_Cb) (void *driver, unsigned int param_id,
void *return_buf);
typedef bool (*ConfigSet_Cb) (void *driver, unsigned int param_id,
const void *data);
typedef bool (*StatusGet_Cb)(void *driver, unsigned int param_id,
void *return_buf);
typedef bool (*ConfigGet_Cb)(void *driver, unsigned int param_id,
void *return_buf);
typedef bool (*ConfigSet_Cb)(void *driver, unsigned int param_id,
const void *data);
typedef ePostCode (*CB_Probe) (void *driver, POSTData* postData);
typedef ePostCode (*CB_Init) (void *driver, const void *config,
const void *alert_token);
typedef ePostCode (*CB_Probe)(void *driver, POSTData *postData);
typedef ePostCode (*CB_Init)(void *driver, const void *config,
const void *alert_token);
typedef bool (*ssHook_Cb) (void *driver, void *return_buf);
typedef bool (*ssHook_Cb)(void *driver, void *return_buf);
typedef struct Driver_fxnTable {
// TODO: These callbacks are a bit rough. They'll get the job done, but we should revisit other
// options (per-parameter callbacks for example)
StatusGet_Cb cb_get_status;
ConfigGet_Cb cb_get_config;
ConfigSet_Cb cb_set_config;
CB_Probe cb_probe;
CB_Init cb_init;
// options (per-parameter callbacks for example)
StatusGet_Cb cb_get_status;
ConfigGet_Cb cb_get_config;
ConfigSet_Cb cb_set_config;
CB_Probe cb_probe;
CB_Init cb_init;
} Driver_fxnTable;
typedef struct Driver {
@@ -111,27 +111,28 @@ typedef struct Driver {
const Parameter *alerts;
const Parameter *argList;
const Command *commands;
const Driver_fxnTable* fxnTable;
const Driver_fxnTable *fxnTable;
const Post *post;
bool payload_fmt_union; /* TODO: hack to account for OBC/Testmodule payload
being packed as a union instead of a struct */
} Driver;
typedef struct SSHookSet {
ssHook_Cb preInitFxn ;/* Function will run before post is executed */
ssHook_Cb postInitFxn; /* Function will run after post is executed */
}SSHookSet;
ssHook_Cb preInitFxn; /* Function will run before post is executed */
ssHook_Cb postInitFxn; /* Function will run after post is executed */
} SSHookSet;
typedef void (*Component_InitCb) (void);
typedef void (*Component_InitCb)(void);
typedef struct Component {
const char *name;
const struct Component *components;
const Driver *driver;
void *driver_cfg; // TODO: this could be turned into a standard polymorphism struct to hold the
// driver, hw config & driver object data (like we did for GPIO)
// driver, hw config & driver object data (like we did for GPIO)
const void *factory_config; /* Factory defaults for the device */
const Command *commands; /* TODO: super gross hack to fit into current CLI */
const Command
*commands; /* TODO: super gross hack to fit into current CLI */
const SSHookSet *ssHookSet;
bool postDisabled; //Flag for POST execution.
void *ss;
@@ -144,8 +145,7 @@ typedef struct AlertData {
uint8_t deviceId;
} AlertData;
void OCMP_GenerateAlert(const AlertData *alert_data,
unsigned int alert_id,
void OCMP_GenerateAlert(const AlertData *alert_data, unsigned int alert_id,
const void *data);
#endif /* _SYS_CFG_FRAMEWORK_H */

View File

@@ -13,41 +13,44 @@
extern "C" {
#endif
#define OC_PMIC_ENABLE (1)
#define OC_PMIC_DISABLE (0)
#define OC_SDR_ENABLE (1)
#define OC_SDR_DISABLE (0)
#define OC_SDR_FE_IO_ENABLE (1)
#define OC_SDR_FE_IO_DISABLE (0)
#define OC_FE_ENABLE (1)
#define OC_FE_DISABLE (0)
#define OC_PWR_LION_BATT (1)
#define OC_PWR_LEAD_BATT (0)
#define OC_PWR_PSE_RESET_STATE (1)
#define OC_PWR_PSE_ON_STATE (0)
#define OC_GBC_PROC_ENABLE (1)
#define OC_GBC_PROC_RESET (0)
#define OC_SYNC_IOEXP_ENABLE (1)
#define OC_SYNC_IOEXP_RESET (0)
#define OC_HCI_LED_ENABLE (1)
#define OC_HCI_LED_DISABLE (0)
#define OC_ETH_SW_ENABLE (1)
#define OC_ETH_SW_DISABLE (0)
#define CAT24C256 { .page_size = 64, .mem_size = (256 / 8) }
#define OC_PMIC_ENABLE (1)
#define OC_PMIC_DISABLE (0)
#define OC_SDR_ENABLE (1)
#define OC_SDR_DISABLE (0)
#define OC_SDR_FE_IO_ENABLE (1)
#define OC_SDR_FE_IO_DISABLE (0)
#define OC_FE_ENABLE (1)
#define OC_FE_DISABLE (0)
#define OC_PWR_LION_BATT (1)
#define OC_PWR_LEAD_BATT (0)
#define OC_PWR_PSE_RESET_STATE (1)
#define OC_PWR_PSE_ON_STATE (0)
#define OC_GBC_PROC_ENABLE (1)
#define OC_GBC_PROC_RESET (0)
#define OC_SYNC_IOEXP_ENABLE (1)
#define OC_SYNC_IOEXP_RESET (0)
#define OC_HCI_LED_ENABLE (1)
#define OC_HCI_LED_DISABLE (0)
#define OC_ETH_SW_ENABLE (1)
#define OC_ETH_SW_DISABLE (0)
#define CAT24C256 \
{ \
.page_size = 64, .mem_size = (256 / 8) \
}
/* GBC IO expander Slave address */
#define BIGBROTHER_IOEXP0_ADDRESS 0x71
#define BIGBROTHER_IOEXP1_ADDRESS 0x70
#define BIGBROTHER_IOEXP0_ADDRESS 0x71
#define BIGBROTHER_IOEXP1_ADDRESS 0x70
/* SYNC IO expander Slave address */
#define SYNC_IO_DEVICE_ADDR 0x71
#define SYNC_IO_DEVICE_ADDR 0x71
/* SDR IO expander Slave address */
#define SDR_FX3_IOEXP_ADDRESS 0x1E
#define SDR_FX3_IOEXP_ADDRESS 0x1E
/* RFFE IO expander Slave address */
#define RFFE_CHANNEL1_IO_TX_ATTEN_ADDR 0x18
#define RFFE_CHANNEL1_IO_RX_ATTEN_ADDR 0x1A
#define RFFE_CHANNEL2_IO_TX_ATTEN_ADDR 0x1C
#define RFFE_CHANNEL2_IO_RX_ATTEN_ADDR 0x1D
#define RFFE_IO_REVPOWER_ALERT_ADDR 0x1B
#define RFFE_CHANNEL1_IO_TX_ATTEN_ADDR 0x18
#define RFFE_CHANNEL1_IO_RX_ATTEN_ADDR 0x1A
#define RFFE_CHANNEL2_IO_TX_ATTEN_ADDR 0x1C
#define RFFE_CHANNEL2_IO_RX_ATTEN_ADDR 0x1D
#define RFFE_IO_REVPOWER_ALERT_ADDR 0x1B
/*!
* @def OC_CONNECT1_EMACName
@@ -79,7 +82,7 @@ typedef enum OC_EC_PORTGroupName {
PN,
PP,
PQ
}OC_EC_PORTGroupName;
} OC_EC_PORTGroupName;
typedef enum OC_CONNECT1_GPIOName {
//PA
@@ -116,7 +119,7 @@ typedef enum OC_CONNECT1_GPIOName {
OC_EC_SYNC_IOEXP_ALERT,
//PE
OC_EC_GBC_IOEXP71_ALERT = 32,
OC_EC_FE_CONTROL,//OC_CONNECT1_GBC_TEMP_ALERT2,
OC_EC_FE_CONTROL, //OC_CONNECT1_GBC_TEMP_ALERT2,
OC_EC_AP_GPIO1,
OC_EC_GPP_AP_BM_1,
OC_EC_FLASH_MOSI,
@@ -173,7 +176,8 @@ typedef enum OC_CONNECT1_GPIOName {
OC_EC_FE_PWR_GD,
OC_EC_MODULE_UART1_RIN,
//PP
OC_EC_SDR_FE_IO_RESET_CTRL = 104,//OC_EC_MPPT_LACID = 104, //OC_SDR_FE_IO_RESET_CTRL
OC_EC_SDR_FE_IO_RESET_CTRL =
104, //OC_EC_MPPT_LACID = 104, //OC_SDR_FE_IO_RESET_CTRL
OC_EC_FE_RESET_OUT,
OC_EC_SDR_PWR_CNTRL,
OC_EC_GPP_PWRGD_PROTECTION,

View File

@@ -18,18 +18,19 @@
* MACRO DEFINITIONS
*****************************************************************************/
/* Start Of Frame & Message Lengths */
#define OCMP_MSG_SOF 0x55
#define OCMP_FRAME_TOTAL_LENGTH 64
#define OCMP_MSG_SOF 0x55
#define OCMP_FRAME_TOTAL_LENGTH 64
#define OCMP_FRAME_HEADER_LENGTH 17
#define OCMP_FRAME_MSG_LENGTH (OCMP_FRAME_TOTAL_LENGTH - OCMP_FRAME_HEADER_LENGTH)
#define OCMP_FRAME_MSG_LENGTH \
(OCMP_FRAME_TOTAL_LENGTH - OCMP_FRAME_HEADER_LENGTH)
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
*****************************************************************************/
typedef enum {
OC_SS_BB = -1, //Hack around the fact that IPC reuses OCMP to allow us
// to split BB (internal) and SYS (CLI) message handling
OC_SS_BB = -1, //Hack around the fact that IPC reuses OCMP to allow us
// to split BB (internal) and SYS (CLI) message handling
OC_SS_SYS = 0,
OC_SS_PWR,
OC_SS_BMS,
@@ -42,17 +43,17 @@ typedef enum {
OC_SS_SYNC,
OC_SS_TEST_MODULE,
OC_SS_DEBUG,
OC_SS_MAX_LIMIT,//TODO:REV C Change
OC_SS_MAX_LIMIT, //TODO:REV C Change
OC_SS_WD
//OC_SS_ALERT_MNGR,
//OC_SS_MAX_LIMIT
} OCMPSubsystem;
typedef enum {
OCMP_COMM_IFACE_UART = 1, // Uart - 1
OCMP_COMM_IFACE_ETHERNET, // Ethernet - 2
OCMP_COMM_IFACE_SBD, // SBD(Satellite) - 3
OCMP_COMM_IFACE_USB // Usb - 4
OCMP_COMM_IFACE_UART = 1, // Uart - 1
OCMP_COMM_IFACE_ETHERNET, // Ethernet - 2
OCMP_COMM_IFACE_SBD, // SBD(Satellite) - 3
OCMP_COMM_IFACE_USB // Usb - 4
} OCMPInterface;
/*
@@ -122,47 +123,45 @@ typedef enum {
* communication with EC from External entity (e.g. AP over UART, Ethernet
* or SBD)
*/
typedef enum {
OCMP_DEBUG_READ = 1,
OCMP_DEBUG_WRITE
} eOCMPDebugOperation;
typedef enum { OCMP_DEBUG_READ = 1, OCMP_DEBUG_WRITE } eOCMPDebugOperation;
/* TODO::This OCWARE_HOST has to be removed with OCMP cleanUp*/
#ifndef OCWARE_HOST
#define OC_SS OCMPSubsystem
#define OC_MSG_TYP OCMPMsgType
#define OC_AXN_TYP OCMPActionType
#define OC_SS OCMPSubsystem
#define OC_MSG_TYP OCMPMsgType
#define OC_AXN_TYP OCMPActionType
#else
#define OC_SS uint8_t
#define OC_MSG_TYP uint8_t
#define OC_AXN_TYP uint8_t
#define OC_IFACE_TYP uint8_t
#define OC_SS uint8_t
#define OC_MSG_TYP uint8_t
#define OC_AXN_TYP uint8_t
#define OC_IFACE_TYP uint8_t
#endif
/*
* Header is the field which will be containing SOF, Framelen,
* Source Interface, Sequence number, and timestamp.
*/
typedef struct __attribute__((packed, aligned(1))) {
uint8_t ocmpSof; // SOF - It must be 0x55
uint8_t ocmpFrameLen; // Framelen - tells about the configuration size ONLY.
typedef struct __attribute__((packed, aligned(1))) {
uint8_t ocmpSof; // SOF - It must be 0x55
uint8_t ocmpFrameLen; // Framelen - tells about the configuration size ONLY.
OCMPInterface ocmpInterface; // Interface - UART/Ethernet/SBD
uint32_t ocmpSeqNumber; // SeqNo - Don't know!!!
uint32_t ocmpTimestamp; // Timestamp - When AP sent the command?
uint32_t ocmpSeqNumber; // SeqNo - Don't know!!!
uint32_t ocmpTimestamp; // Timestamp - When AP sent the command?
} OCMPHeader;
/*
* This is the Message structure for Subsystem level information
*/
typedef struct __attribute__((packed, aligned(1))) {
OC_SS subsystem; // RF/GPP/BMS/Watchdog etc..
uint8_t componentID; // Compononent ID. Different for different subsystem.
OCMPMsgType msgtype; // Msg type is Config/Status/Alert/Command/Watchdog/Debug
uint8_t action; // Action is - Get/Set/Reply.
uint16_t parameters; // List of Parameters to be set or get.
OC_SS subsystem; // RF/GPP/BMS/Watchdog etc..
uint8_t componentID; // Compononent ID. Different for different subsystem.
OCMPMsgType
msgtype; // Msg type is Config/Status/Alert/Command/Watchdog/Debug
uint8_t action; // Action is - Get/Set/Reply.
uint16_t parameters; // List of Parameters to be set or get.
#ifndef OCWARE_HOST
uint8_t ocmp_data[]; // The data payload.
uint8_t ocmp_data[]; // The data payload.
#else
int8_t* info;
int8_t *info;
#endif
} OCMPMessage;

View File

@@ -21,29 +21,23 @@ typedef union ADT7481_Config {
} ADT7481_Config;
#ifdef UT_FRAMEWORK
extern const Driver_fxnTable ADT7481_fxnTable;
extern const Driver_fxnTable ADT7481_fxnTable;
#else
SCHEMA_IMPORT const Driver_fxnTable ADT7481_fxnTable;
SCHEMA_IMPORT const Driver_fxnTable ADT7481_fxnTable;
#endif
static const Driver ADT7481 = {
.name = "ADT7481",
.status = (Parameter[]){
{ .name = "temperature", .type = TYPE_UINT8 },
{}
},
.config = (Parameter[]){
{ .name = "lowlimit", .type = TYPE_INT8 },
{ .name = "highlimit", .type = TYPE_UINT8 },
{ .name = "critlimit", .type = TYPE_UINT8 },
{}
},
.alerts = (Parameter[]){
{ .name = "BAW", .type = TYPE_UINT8 },
{ .name = "AAW", .type = TYPE_UINT8 },
{ .name = "ACW", .type = TYPE_UINT8 },
{}
},
.status =
(Parameter[]){ { .name = "temperature", .type = TYPE_UINT8 }, {} },
.config = (Parameter[]){ { .name = "lowlimit", .type = TYPE_INT8 },
{ .name = "highlimit", .type = TYPE_UINT8 },
{ .name = "critlimit", .type = TYPE_UINT8 },
{} },
.alerts = (Parameter[]){ { .name = "BAW", .type = TYPE_UINT8 },
{ .name = "AAW", .type = TYPE_UINT8 },
{ .name = "ACW", .type = TYPE_UINT8 },
{} },
.fxnTable = &ADT7481_fxnTable,
};

View File

@@ -16,10 +16,7 @@ SCHEMA_IMPORT const Driver_fxnTable DATXXR5APP_fxnTable;
static const Driver DATXXR5APP = {
.name = "DAT-XXR5A-PP+",
.status = NULL,
.config = (Parameter[]){
{ .name = "atten", .type = TYPE_INT16 },
{}
},
.config = (Parameter[]){ { .name = "atten", .type = TYPE_INT16 }, {} },
.alerts = NULL,
.fxnTable = &DATXXR5APP_fxnTable,
};

View File

@@ -16,24 +16,20 @@ SCHEMA_IMPORT bool i2c_write(void *driver, void *data);
static const Driver OC_I2C = {
.name = "OC_I2C",
.argList = (Parameter[]){
{ .name = "slave_address", .type = TYPE_UINT8 },
{ .name = "no_of_bytes", .type = TYPE_UINT8 },
{ .name = "reg_address", .type = TYPE_UINT8 },
{ .name = "reg_values", .type = TYPE_UINT16 },
{}
},
.commands = (Command[]){
{
.name = "get",
.cb_cmd = i2c_read,
},
{
.name = "set",
.cb_cmd = i2c_write,
},
{}
},
.argList = (Parameter[]){ { .name = "slave_address", .type = TYPE_UINT8 },
{ .name = "no_of_bytes", .type = TYPE_UINT8 },
{ .name = "reg_address", .type = TYPE_UINT8 },
{ .name = "reg_values", .type = TYPE_UINT16 },
{} },
.commands = (Command[]){ {
.name = "get",
.cb_cmd = i2c_read,
},
{
.name = "set",
.cb_cmd = i2c_write,
},
{} },
};
#endif /* INC_DEVICES_OCMP_WRAPPERS_OCMP_I2C_H_ */

View File

@@ -16,22 +16,18 @@ SCHEMA_IMPORT bool mdio_write(void *driver, void *data);
static const Driver OC_MDIO = {
.name = "OC_MDIO",
.argList = (Parameter[]){
{ .name = "reg_address", .type = TYPE_UINT16 },
{ .name = "reg_values", .type = TYPE_UINT16 },
{}
},
.commands = (Command[]){
{
.name = "get",
.cb_cmd = mdio_read,
},
{
.name = "set",
.cb_cmd = mdio_write,
},
{}
},
.argList = (Parameter[]){ { .name = "reg_address", .type = TYPE_UINT16 },
{ .name = "reg_values", .type = TYPE_UINT16 },
{} },
.commands = (Command[]){ {
.name = "get",
.cb_cmd = mdio_read,
},
{
.name = "set",
.cb_cmd = mdio_write,
},
{} },
};
#endif /* INC_DEVICES_OCMP_WRAPPERS_OCMP_MDIO_H_ */

View File

@@ -14,26 +14,22 @@
SCHEMA_IMPORT bool ocgpio_get(void *driver, void *data);
SCHEMA_IMPORT bool ocgpio_set(void *driver, void *data);
SCHEMA_IMPORT const Driver_fxnTable DEBUG_OCGPIO_fxnTable;
SCHEMA_IMPORT const Driver_fxnTable DEBUG_OCGPIO_fxnTable;
static const Driver OC_GPIO = {
.name = "OC_GPIO",
.argList = (Parameter[]){
{ .name = "pin", .type = TYPE_UINT8 },
{ .name = "value", .type = TYPE_UINT8 },
{}
},
.commands = (Command[]){
{
.name = "get",
.cb_cmd = ocgpio_get,
},
{
.name = "set",
.cb_cmd = ocgpio_set,
},
{}
},
.argList = (Parameter[]){ { .name = "pin", .type = TYPE_UINT8 },
{ .name = "value", .type = TYPE_UINT8 },
{} },
.commands = (Command[]){ {
.name = "get",
.cb_cmd = ocgpio_get,
},
{
.name = "set",
.cb_cmd = ocgpio_set,
},
{} },
.fxnTable = &DEBUG_OCGPIO_fxnTable,
};

View File

@@ -20,10 +20,11 @@ SCHEMA_IMPORT const Driver_fxnTable CAT24C04_fe_inv_fxnTable;
static const Driver CAT24C04_gbc_sid = {
.name = "EEPROM",
.status = (Parameter[]){
{ .name = "ocserialinfo", .type = TYPE_STR, .size = 21 },
{ .name = "gbcboardinfo", .type = TYPE_STR, .size = 21 },
},
.status =
(Parameter[]){
{ .name = "ocserialinfo", .type = TYPE_STR, .size = 21 },
{ .name = "gbcboardinfo", .type = TYPE_STR, .size = 21 },
},
.fxnTable = &CAT24C04_gbc_sid_fxnTable,
};
@@ -32,47 +33,33 @@ static const Driver CAT24C04_gbc_inv = {
.fxnTable = &CAT24C04_gbc_inv_fxnTable,
};
static const Driver CAT24C04_sdr_inv = {
.name = "Inventory",
.status = (Parameter[]){
{ .name = "dev_id", .type = TYPE_STR,
.size = 19 },
{}
},
.fxnTable = &CAT24C04_sdr_inv_fxnTable,
.name = "Inventory",
.status = (Parameter[]){ { .name = "dev_id", .type = TYPE_STR, .size = 19 },
{} },
.fxnTable = &CAT24C04_sdr_inv_fxnTable,
};
static const Driver CAT24C04_fe_inv = {
.name = "Inventory",
.status = (Parameter[]){
{ .name = "dev_id", .type = TYPE_STR,
.size = 18 },
{}
},
.fxnTable = &CAT24C04_fe_inv_fxnTable,
.name = "Inventory",
.status = (Parameter[]){ { .name = "dev_id", .type = TYPE_STR, .size = 18 },
{} },
.fxnTable = &CAT24C04_fe_inv_fxnTable,
};
static const Driver SYSTEMDRV = {
.name = "SYSTEMDRV",
.status = (Parameter[]){
{}
},
.config = (Parameter[]){
{}
},
.alerts = (Parameter[]){
{}
},
.post = (Post[]){
{
.name = "results",
.cb_postCmd = SYS_post_get_results,
},
{
.name = "enable",
.cb_postCmd = SYS_post_enable,
},
{}
}
.status = (Parameter[]){ {} },
.config = (Parameter[]){ {} },
.alerts = (Parameter[]){ {} },
.post = (Post[]){ {
.name = "results",
.cb_postCmd = SYS_post_get_results,
},
{
.name = "enable",
.cb_postCmd = SYS_post_enable,
},
{} }
};
#endif /* INC_DEVICES_OCMP_EEPROM_H_ */

View File

@@ -20,62 +20,54 @@ SCHEMA_IMPORT bool ETHERNET_tivaClient(void *driver, void *params);
static const Driver ETH_SW = {
.name = "Marvel_88E6071",
.status = (Parameter[]){
{ .name = "speed", .type = TYPE_UINT8 },
{ .name = "duplex", .type = TYPE_UINT8 },
{ .name = "autoneg_on", .type = TYPE_UINT8 },
{ .name = "sleep_mode_en", .type = TYPE_UINT8 },
{ .name = "autoneg_complete", .type = TYPE_UINT8 },
{ .name = "link_up", .type = TYPE_UINT8 },
{}
},
.config = (Parameter[]){
{ .name = "speed", .type = TYPE_UINT8 },
{ .name = "duplex", .type = TYPE_UINT8 },
{ .name = "powerDown", .type = TYPE_UINT8 },
{ .name = "enable_sleepMode", .type = TYPE_UINT8 },
{ .name = "enable_interrupt", .type = TYPE_UINT8 },
{ .name = "switch_reset", .type = TYPE_UINT8 },
{ .name = "restart_autoneg", .type = TYPE_UINT8 },
{}
},
.alerts = (Parameter[]){
{ .name = "speed", .type = TYPE_UINT8 },
{ .name = "duplex", .type = TYPE_UINT8 },
{ .name = "autoneg_complete", .type = TYPE_UINT8 },
{ .name = "crossover_det", .type = TYPE_UINT8 },
{ .name = "energy_det", .type = TYPE_UINT8 },
{ .name = "polarity_change", .type = TYPE_UINT8 },
{ .name = "jabber_det", .type = TYPE_UINT8 },
{}
},
.commands = (Command[]){
{
.name = "reset",
.cb_cmd = ETHERNET_reset,
},
{
.name = "en_loopBk",
.cb_cmd = ETHERNET_enLoopBk,
},
{
.name = "dis_loopBk",
.cb_cmd = ETHERNET_disLoopBk,
},
{
.name = "en_pktGen",
.cb_cmd = ETHERNET_enPktGen,
},
{
.name = "dis_pktGen",
.cb_cmd = ETHERNET_disPktGen,
},
{
.name = "en_tivaClient",
.cb_cmd = ETHERNET_tivaClient,
},
{}
},
.status = (Parameter[]){ { .name = "speed", .type = TYPE_UINT8 },
{ .name = "duplex", .type = TYPE_UINT8 },
{ .name = "autoneg_on", .type = TYPE_UINT8 },
{ .name = "sleep_mode_en", .type = TYPE_UINT8 },
{ .name = "autoneg_complete", .type = TYPE_UINT8 },
{ .name = "link_up", .type = TYPE_UINT8 },
{} },
.config = (Parameter[]){ { .name = "speed", .type = TYPE_UINT8 },
{ .name = "duplex", .type = TYPE_UINT8 },
{ .name = "powerDown", .type = TYPE_UINT8 },
{ .name = "enable_sleepMode", .type = TYPE_UINT8 },
{ .name = "enable_interrupt", .type = TYPE_UINT8 },
{ .name = "switch_reset", .type = TYPE_UINT8 },
{ .name = "restart_autoneg", .type = TYPE_UINT8 },
{} },
.alerts = (Parameter[]){ { .name = "speed", .type = TYPE_UINT8 },
{ .name = "duplex", .type = TYPE_UINT8 },
{ .name = "autoneg_complete", .type = TYPE_UINT8 },
{ .name = "crossover_det", .type = TYPE_UINT8 },
{ .name = "energy_det", .type = TYPE_UINT8 },
{ .name = "polarity_change", .type = TYPE_UINT8 },
{ .name = "jabber_det", .type = TYPE_UINT8 },
{} },
.commands = (Command[]){ {
.name = "reset",
.cb_cmd = ETHERNET_reset,
},
{
.name = "en_loopBk",
.cb_cmd = ETHERNET_enLoopBk,
},
{
.name = "dis_loopBk",
.cb_cmd = ETHERNET_disLoopBk,
},
{
.name = "en_pktGen",
.cb_cmd = ETHERNET_enPktGen,
},
{
.name = "dis_pktGen",
.cb_cmd = ETHERNET_disPktGen,
},
{
.name = "en_tivaClient",
.cb_cmd = ETHERNET_tivaClient,
},
{} },
.fxnTable = &eth_fxnTable,
};

View File

@@ -15,11 +15,9 @@ SCHEMA_IMPORT const Driver_fxnTable FE_PARAM_fxnTable;
static const Driver FE_Param = {
.name = "FE_parametrs",
.config = (Parameter[]){
{ .name = "band", .type = TYPE_UINT16 },
{ .name = "arfcn", .type = TYPE_UINT16 },
{}
},
.config = (Parameter[]){ { .name = "band", .type = TYPE_UINT16 },
{ .name = "arfcn", .type = TYPE_UINT16 },
{} },
.fxnTable = &FE_PARAM_fxnTable,
};

View File

@@ -15,25 +15,18 @@ typedef struct INA226_Config {
uint16_t current_lim;
} INA226_Config;
SCHEMA_IMPORT const Driver_fxnTable INA226_fxnTable;
SCHEMA_IMPORT const Driver_fxnTable INA226_fxnTable;
static const Driver INA226 = {
.name = "INA226",
.status = (Parameter[]){
{ .name = "busvoltage", .type = TYPE_UINT16 },
{ .name = "shuntvoltage", .type = TYPE_UINT16 },
{ .name = "current", .type = TYPE_UINT16 },
{ .name = "power", .type = TYPE_UINT16 },
{}
},
.config = (Parameter[]){
{ .name = "currlimit", .type = TYPE_UINT16 },
{}
},
.alerts = (Parameter[]){
{ .name = "Overcurrent", .type = TYPE_UINT16 },
{}
},
.status = (Parameter[]){ { .name = "busvoltage", .type = TYPE_UINT16 },
{ .name = "shuntvoltage", .type = TYPE_UINT16 },
{ .name = "current", .type = TYPE_UINT16 },
{ .name = "power", .type = TYPE_UINT16 },
{} },
.config = (Parameter[]){ { .name = "currlimit", .type = TYPE_UINT16 }, {} },
.alerts =
(Parameter[]){ { .name = "Overcurrent", .type = TYPE_UINT16 }, {} },
.fxnTable = &INA226_fxnTable,
};

View File

@@ -16,31 +16,32 @@ SCHEMA_IMPORT bool IRIDIUM_reset(void *driver, void *params);
static const Driver OBC_Iridium = {
.name = "Iridium 96xx",
.status = (Parameter[]){
{ .name = "imei", .type = TYPE_UINT64 },
{ .name = "mfg", .type = TYPE_STR, .size = 10 },
{ .name = "model", .type = TYPE_STR, .size = 4 },
{ .name = "signal_quality", .type = TYPE_UINT8 },
{ .name = "registration", .type = TYPE_ENUM,
.values = (Enum_Map[]){
{ 0, "Detached" },
{ 1, "None" },
{ 2, "Registered" },
{ 3, "Registration Denied" },
{}
},
},
{ .name = "numberofoutgoingmessage", .type = TYPE_UINT8 },
{ .name = "lasterror", .type = TYPE_UINT8, .size = 3 }, /* TODO: this is a complex type */
{}
},
.commands = (Command[]){
{
.name = "reset",
.cb_cmd = IRIDIUM_reset,
},
{}
},
.status =
(Parameter[]){
{ .name = "imei", .type = TYPE_UINT64 },
{ .name = "mfg", .type = TYPE_STR, .size = 10 },
{ .name = "model", .type = TYPE_STR, .size = 4 },
{ .name = "signal_quality", .type = TYPE_UINT8 },
{
.name = "registration",
.type = TYPE_ENUM,
.values =
(Enum_Map[]){ { 0, "Detached" },
{ 1, "None" },
{ 2, "Registered" },
{ 3, "Registration Denied" },
{} },
},
{ .name = "numberofoutgoingmessage", .type = TYPE_UINT8 },
{ .name = "lasterror",
.type = TYPE_UINT8,
.size = 3 }, /* TODO: this is a complex type */
{} },
.commands = (Command[]){ {
.name = "reset",
.cb_cmd = IRIDIUM_reset,
},
{} },
.fxnTable = &OBC_fxnTable,
.payload_fmt_union = true, /* OBC breaks serialization pattern :( */
};

View File

@@ -18,13 +18,11 @@ static const Driver HCI_LED = {
.status = NULL,
.config = NULL,
.alerts = NULL,
.commands = (Command[]){
{
.name = "set",
.cb_cmd = led_testpattern_control,
},
{}
},
.commands = (Command[]){ {
.name = "set",
.cb_cmd = led_testpattern_control,
},
{} },
.fxnTable = &LED_fxnTable,
};

View File

@@ -26,37 +26,32 @@ SCHEMA_IMPORT const Driver_fxnTable LTC4015_fxnTable;
static const Driver LTC4015 = {
.name = "LTC4015",
.status = (Parameter[]){
{ .name = "batteryVoltage", .type = TYPE_INT16 },
{ .name = "batteryCurrent", .type = TYPE_INT16 },
{ .name = "systemVoltage", .type = TYPE_INT16 },
{ .name = "inputVoltage", .type = TYPE_INT16 },
{ .name = "inputCurrent", .type = TYPE_INT16 },
{ .name = "dieTemperature", .type = TYPE_INT16 },
{ .name = "ichargeDAC", .type = TYPE_INT16 },
{}
},
.config = (Parameter[]){
{ .name = "batteryVoltageLow", .type = TYPE_INT16 },
{ .name = "batteryVoltageHigh", .type = TYPE_INT16 },
{ .name = "batteryCurrentLow", .type = TYPE_INT16 },
{ .name = "inputVoltageLow", .type = TYPE_INT16 },
{ .name = "inputCurrentHigh", .type = TYPE_INT16 },
{ .name = "inputCurrentLimit", .type = TYPE_UINT16 },
{ .name = "icharge", .type = TYPE_UINT16 },
{ .name = "vcharge", .type = TYPE_UINT16 },
{ .name = "dieTemperature", .type = TYPE_INT16 },
{}
},
.alerts = (Parameter[]){
{ .name = "BVL", .type = TYPE_INT16 },
{ .name = "BVH", .type = TYPE_INT16 },
{ .name = "BCL", .type = TYPE_INT16 },
{ .name = "IVL", .type = TYPE_INT16 },
{ .name = "ICH", .type = TYPE_INT16 },
{ .name = "DTH", .type = TYPE_INT16 },
{}
},
.status = (Parameter[]){ { .name = "batteryVoltage", .type = TYPE_INT16 },
{ .name = "batteryCurrent", .type = TYPE_INT16 },
{ .name = "systemVoltage", .type = TYPE_INT16 },
{ .name = "inputVoltage", .type = TYPE_INT16 },
{ .name = "inputCurrent", .type = TYPE_INT16 },
{ .name = "dieTemperature", .type = TYPE_INT16 },
{ .name = "ichargeDAC", .type = TYPE_INT16 },
{} },
.config =
(Parameter[]){ { .name = "batteryVoltageLow", .type = TYPE_INT16 },
{ .name = "batteryVoltageHigh", .type = TYPE_INT16 },
{ .name = "batteryCurrentLow", .type = TYPE_INT16 },
{ .name = "inputVoltageLow", .type = TYPE_INT16 },
{ .name = "inputCurrentHigh", .type = TYPE_INT16 },
{ .name = "inputCurrentLimit", .type = TYPE_UINT16 },
{ .name = "icharge", .type = TYPE_UINT16 },
{ .name = "vcharge", .type = TYPE_UINT16 },
{ .name = "dieTemperature", .type = TYPE_INT16 },
{} },
.alerts = (Parameter[]){ { .name = "BVL", .type = TYPE_INT16 },
{ .name = "BVH", .type = TYPE_INT16 },
{ .name = "BCL", .type = TYPE_INT16 },
{ .name = "IVL", .type = TYPE_INT16 },
{ .name = "ICH", .type = TYPE_INT16 },
{ .name = "DTH", .type = TYPE_INT16 },
{} },
.fxnTable = &LTC4015_fxnTable,
};

View File

@@ -30,39 +30,31 @@ SCHEMA_IMPORT bool LTC4274_reset(void *driver, void *params);
static const Driver LTC4274 = {
.name = "PSE",
.status = (Parameter[]){
{ .name = "detection", .type = TYPE_UINT16 },
{ .name = "class", .type = TYPE_UINT16 },
{ .name = "powerGood", .type = TYPE_UINT16 },
{}
},
.config = (Parameter[]){
{ .name = "operatingMode", .type = TYPE_UINT16 },
{ .name = "detectEnable", .type = TYPE_UINT16 },
{ .name = "interruptMask", .type = TYPE_UINT16 },
{ .name = "interruptEnable", .type = TYPE_UINT16 },
{ .name = "enableHighpower", .type = TYPE_UINT16 },
{}
},
.alerts = (Parameter[]){
{ .name = "NoAlert", .type = TYPE_UINT8 },
{ .name = "PowerEnable", .type = TYPE_UINT8 },
{ .name = "PowerGood", .type = TYPE_UINT8 },
{ .name = "DiconnectAlert", .type = TYPE_UINT8 },
{ .name = "DetectionAlert", .type = TYPE_UINT8 },
{ .name = "ClassAlert", .type = TYPE_UINT8 },
{ .name = "TCUTAler", .type = TYPE_UINT8 },
{ .name = "TStartAlert", .type = TYPE_UINT8 },
{ .name = "SupplyAlert", .type = TYPE_UINT8 },
{}
},
.commands = (Command[]){
{
.name = "reset",
.cb_cmd = LTC4274_reset,
},
{}
},
.status = (Parameter[]){ { .name = "detection", .type = TYPE_UINT16 },
{ .name = "class", .type = TYPE_UINT16 },
{ .name = "powerGood", .type = TYPE_UINT16 },
{} },
.config = (Parameter[]){ { .name = "operatingMode", .type = TYPE_UINT16 },
{ .name = "detectEnable", .type = TYPE_UINT16 },
{ .name = "interruptMask", .type = TYPE_UINT16 },
{ .name = "interruptEnable", .type = TYPE_UINT16 },
{ .name = "enableHighpower", .type = TYPE_UINT16 },
{} },
.alerts = (Parameter[]){ { .name = "NoAlert", .type = TYPE_UINT8 },
{ .name = "PowerEnable", .type = TYPE_UINT8 },
{ .name = "PowerGood", .type = TYPE_UINT8 },
{ .name = "DiconnectAlert", .type = TYPE_UINT8 },
{ .name = "DetectionAlert", .type = TYPE_UINT8 },
{ .name = "ClassAlert", .type = TYPE_UINT8 },
{ .name = "TCUTAler", .type = TYPE_UINT8 },
{ .name = "TStartAlert", .type = TYPE_UINT8 },
{ .name = "SupplyAlert", .type = TYPE_UINT8 },
{} },
.commands = (Command[]){ {
.name = "reset",
.cb_cmd = LTC4274_reset,
},
{} },
.fxnTable = &LTC4274_fxnTable,
};

View File

@@ -15,17 +15,13 @@ SCHEMA_IMPORT const Driver_fxnTable LTC4275_fxnTable;
static const Driver LTC4275 = {
.name = "LTC4275",
.status = (Parameter[]){
{ .name = "class", .type = TYPE_ENUM },
{ .name = "powerGoodState", .type = TYPE_ENUM },
{}
},
.alerts = (Parameter[]){
{ .name = "INCOMPATIBLE", .type = TYPE_ENUM },
{ .name = "DISCONNECT", .type = TYPE_ENUM },
{ .name = "CONNECT", .type = TYPE_ENUM },
{}
},
.status = (Parameter[]){ { .name = "class", .type = TYPE_ENUM },
{ .name = "powerGoodState", .type = TYPE_ENUM },
{} },
.alerts = (Parameter[]){ { .name = "INCOMPATIBLE", .type = TYPE_ENUM },
{ .name = "DISCONNECT", .type = TYPE_ENUM },
{ .name = "CONNECT", .type = TYPE_ENUM },
{} },
.fxnTable = &LTC4275_fxnTable,
};

View File

@@ -11,16 +11,15 @@
#include "common/inc/global/Framework.h"
#define OC_MAC_ADDRESS_SIZE 13
#define OC_MAC_ADDRESS_SIZE 13
SCHEMA_IMPORT const Driver_fxnTable MAC_fxnTable;
static const Driver Driver_MAC = {
.name = "MAC",
.config = (Parameter[]){
{ .name = "address", .type = TYPE_STR,
.size = OC_MAC_ADDRESS_SIZE + 1 }
},
.config = (Parameter[]){ { .name = "address",
.type = TYPE_STR,
.size = OC_MAC_ADDRESS_SIZE + 1 } },
.fxnTable = &MAC_fxnTable,
};

View File

@@ -15,17 +15,17 @@ SCHEMA_IMPORT const Driver_fxnTable PWRSRC_fxnTable;
static const Driver PWRSRC = {
.name = "powerSource",
.status = (Parameter[]){
{ .name = "poeAvailability", .type = TYPE_UINT8 },
{ .name = "poeAccessebility", .type = TYPE_UINT8 },
{ .name = "solarAvailability", .type = TYPE_UINT8 },
{ .name = "solarAccessebility", .type = TYPE_UINT8 },
{ .name = "extBattAvailability", .type = TYPE_UINT8 },
{ .name = "extBattAccessebility", .type = TYPE_UINT8 },
{ .name = "intBattAvailability", .type = TYPE_UINT8 },
{ .name = "intBattAccessebility", .type = TYPE_UINT8 },
{}
},
.status =
(Parameter[]){
{ .name = "poeAvailability", .type = TYPE_UINT8 },
{ .name = "poeAccessebility", .type = TYPE_UINT8 },
{ .name = "solarAvailability", .type = TYPE_UINT8 },
{ .name = "solarAccessebility", .type = TYPE_UINT8 },
{ .name = "extBattAvailability", .type = TYPE_UINT8 },
{ .name = "extBattAccessebility", .type = TYPE_UINT8 },
{ .name = "intBattAvailability", .type = TYPE_UINT8 },
{ .name = "intBattAccessebility", .type = TYPE_UINT8 },
{} },
.fxnTable = &PWRSRC_fxnTable,
};
#endif /* _OCMP_POWERSOURCE_H_ */

View File

@@ -14,11 +14,9 @@
SCHEMA_IMPORT const Driver_fxnTable RFPowerMonitor_fxnTable;
static const Driver RFPowerMonitor = {
.status = (Parameter[]){
{ .name = "forward", .type = TYPE_UINT16 },
{ .name = "reverse", .type = TYPE_UINT16 },
{}
},
.status = (Parameter[]){ { .name = "forward", .type = TYPE_UINT16 },
{ .name = "reverse", .type = TYPE_UINT16 },
{} },
.fxnTable = &RFPowerMonitor_fxnTable,
};

View File

@@ -15,11 +15,8 @@ SCHEMA_IMPORT const Driver_fxnTable RFFEWatchdogP_fxnTable;
static const Driver RFFEWatchdog = {
.name = "RFFE Watchdog",
.alerts = (Parameter[]){
{ .name = "LB_R_PWR" },
{ .name = "HB_R_PWR" },
{}
},
.alerts =
(Parameter[]){ { .name = "LB_R_PWR" }, { .name = "HB_R_PWR" }, {} },
.fxnTable = &RFFEWatchdogP_fxnTable,
};

View File

@@ -20,26 +20,20 @@ typedef union SE98A_Config {
int8_t limits[3];
} SE98A_Config;
SCHEMA_IMPORT const Driver_fxnTable SE98_fxnTable;
SCHEMA_IMPORT const Driver_fxnTable SE98_fxnTable;
static const Driver SE98A = {
.name = "SE98A",
.status = (Parameter[]){
{ .name = "temperature", .type = TYPE_UINT8 },
{}
},
.config = (Parameter[]){
{ .name = "lowlimit", .type = TYPE_INT8 },
{ .name = "highlimit", .type = TYPE_UINT8 },
{ .name = "critlimit", .type = TYPE_UINT8 },
{}
},
.alerts = (Parameter[]){
{ .name = "BAW", .type = TYPE_UINT8 },
{ .name = "AAW", .type = TYPE_UINT8 },
{ .name = "ACW", .type = TYPE_UINT8 },
{}
},
.status =
(Parameter[]){ { .name = "temperature", .type = TYPE_UINT8 }, {} },
.config = (Parameter[]){ { .name = "lowlimit", .type = TYPE_INT8 },
{ .name = "highlimit", .type = TYPE_UINT8 },
{ .name = "critlimit", .type = TYPE_UINT8 },
{} },
.alerts = (Parameter[]){ { .name = "BAW", .type = TYPE_UINT8 },
{ .name = "AAW", .type = TYPE_UINT8 },
{ .name = "ACW", .type = TYPE_UINT8 },
{} },
.fxnTable = &SE98_fxnTable,
};

View File

@@ -11,21 +11,19 @@
#include "common/inc/global/Framework.h"
SCHEMA_IMPORT const Driver_fxnTable SYNC_fxnTable;
SCHEMA_IMPORT const Driver_fxnTable SYNC_fxnTable;
static const Driver Sync_IO = {
.name = "sync_ioexp",
.status = (Parameter[]){
{
.name = "gps_lock",
.type = TYPE_ENUM,
.values = (Enum_Map[]){
{0, "Gps Not Locked" },
{1, "Gps Locked" },
{}
},
},
{}
},
.status =
(Parameter[]){
{
.name = "gps_lock",
.type = TYPE_ENUM,
.values = (Enum_Map[]){ { 0, "Gps Not Locked" },
{ 1, "Gps Locked" },
{} },
},
{} },
.fxnTable = &SYNC_fxnTable,
};

View File

@@ -24,77 +24,72 @@ SCHEMA_IMPORT bool TestMod_cmdReset(void *driver, void *params);
static const Driver Testmod_G510 = {
.name = "Fibocom G510",
.status = (Parameter[]){
{ .name = "imei", .type = TYPE_UINT64 },
{ .name = "imsi", .type = TYPE_UINT64 },
{ .name = "mfg", .type = TYPE_STR, .size = 10 },
{ .name = "model", .type = TYPE_STR, .size = 5 },
{ .name = "rssi", .type = TYPE_UINT8 },
{ .name = "ber", .type = TYPE_UINT8 },
{ .name = "registration", .type = TYPE_ENUM,
.values = (Enum_Map[]){
{ 0, "Not Registered, Not Searching" },
{ 1, "Registered, Home Network" },
{ 2, "Not Registered, Searching" },
{ 3, "Registration Denied" },
{ 4, "Status Unknown" },
{ 5, "Registered, Roaming" },
{}
},
},
{ .name = "network_operatorinfo", .type = TYPE_UINT8, .size = 3 }, /* TODO: this is a complex type */
{ .name = "cellid", .type = TYPE_UINT32 },
{ .name = "bsic", .type = TYPE_UINT8 },
{ .name = "lasterror",.type = TYPE_UINT8, .size = 3 }, /* TODO: this is a complex type */
{}
},
.alerts = (Parameter[]){
{ .name = "Call State Changed", .type = TYPE_ENUM,
.values = (Enum_Map[]){
{ 0, "Ringing" },
{ 1, "Call End" },
{}
},
},
/* TODO: var len str */
{ .name = "Incoming SMS", .type = TYPE_STR, .size = 20 },
{}
},
.commands = (Command[]){
{
.name = "disconnect_nw",
.cb_cmd = TestMod_cmdDisconnect
},
{
.name = "connect_nw",
.cb_cmd = TestMod_cmdConnect
},
{
.name = "send",
.cb_cmd = TestMod_cmdSendSms
},
{
.name = "dial",
.cb_cmd = TestMod_cmdDial
},
{
.name = "answer",
.cb_cmd = TestMod_cmdAnswer,
},
{
.name = "hangup",
.cb_cmd = TestMod_cmdHangup,
},
{
.name = "enable",
.cb_cmd = TestMod_cmdEnable,
},
{
.name = "disable",
.cb_cmd = TestMod_cmdDisable,
},
{}
},
.status =
(Parameter[]){
{ .name = "imei", .type = TYPE_UINT64 },
{ .name = "imsi", .type = TYPE_UINT64 },
{ .name = "mfg", .type = TYPE_STR, .size = 10 },
{ .name = "model", .type = TYPE_STR, .size = 5 },
{ .name = "rssi", .type = TYPE_UINT8 },
{ .name = "ber", .type = TYPE_UINT8 },
{
.name = "registration",
.type = TYPE_ENUM,
.values =
(Enum_Map[]){
{ 0,
"Not Registered, Not Searching" },
{ 1, "Registered, Home Network" },
{ 2, "Not Registered, Searching" },
{ 3, "Registration Denied" },
{ 4, "Status Unknown" },
{ 5, "Registered, Roaming" },
{} },
},
{ .name = "network_operatorinfo",
.type = TYPE_UINT8,
.size = 3 }, /* TODO: this is a complex type */
{ .name = "cellid", .type = TYPE_UINT32 },
{ .name = "bsic", .type = TYPE_UINT8 },
{ .name = "lasterror",
.type = TYPE_UINT8,
.size = 3 }, /* TODO: this is a complex type */
{} },
.alerts =
(Parameter[]){
{
.name = "Call State Changed",
.type = TYPE_ENUM,
.values = (Enum_Map[]){ { 0, "Ringing" },
{ 1, "Call End" },
{} },
},
/* TODO: var len str */
{ .name = "Incoming SMS", .type = TYPE_STR, .size = 20 },
{} },
.commands =
(Command[]){ { .name = "disconnect_nw",
.cb_cmd = TestMod_cmdDisconnect },
{ .name = "connect_nw", .cb_cmd = TestMod_cmdConnect },
{ .name = "send", .cb_cmd = TestMod_cmdSendSms },
{ .name = "dial", .cb_cmd = TestMod_cmdDial },
{
.name = "answer",
.cb_cmd = TestMod_cmdAnswer,
},
{
.name = "hangup",
.cb_cmd = TestMod_cmdHangup,
},
{
.name = "enable",
.cb_cmd = TestMod_cmdEnable,
},
{
.name = "disable",
.cb_cmd = TestMod_cmdDisable,
},
{} },
.fxnTable = &G510_fxnTable,
.payload_fmt_union = true, /* Testmodule breaks serialization pattern :( */
};

View File

@@ -19,13 +19,13 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define BIGBROTHER_TASK_PRIORITY 5
#define BIGBROTHER_TASK_STACK_SIZE 8096
#define BIGBROTHER_TASK_PRIORITY 5
#define BIGBROTHER_TASK_STACK_SIZE 8096
typedef enum {
OC_SYS_S_ID_EEPROM = 1,
OC_SYS_INVEN_EEPROM = 2,
OC_SYS_FLASH= 3,
OC_SYS_FLASH = 3,
} eSysDeviceSno;
/* Semaphore and Queue Handles for Big Brother */

View File

@@ -12,44 +12,45 @@
/* Detect endianness if using TI compiler */
#ifndef __BYTE_ORDER__
#define __ORDER_LITTLE_ENDIAN__ 1234
#define __ORDER_BIG_ENDIAN__ 4321
#ifdef __little_endian__
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
#else
#ifdef __big_endian__
#define __BYTE_ORDER__ __ORDER_BIG_ENDIAN__
#else
#error Unable to detect byte order!
#endif
#endif
#define __ORDER_LITTLE_ENDIAN__ 1234
#define __ORDER_BIG_ENDIAN__ 4321
#ifdef __little_endian__
#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
#else
#ifdef __big_endian__
#define __BYTE_ORDER__ __ORDER_BIG_ENDIAN__
#else
#error Unable to detect byte order!
#endif
#endif
#endif
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
/* Little endian host functions here */
#define htobe16(a) ( (((a)>>8)&0xff) + (((a)<<8)&0xff00) )
#define betoh16(a) htobe16(a)
/* Little endian host functions here */
#define htobe16(a) ((((a) >> 8) & 0xff) + (((a) << 8) & 0xff00))
#define betoh16(a) htobe16(a)
#define htobe32(a) ((((a) & 0xff000000) >> 24) | (((a) & 0x00ff0000) >> 8) | \
(((a) & 0x0000ff00) << 8) | (((a) & 0x000000ff) << 24) )
#define betoh32(a) htobe32(a)
#define htobe32(a) \
((((a)&0xff000000) >> 24) | (((a)&0x00ff0000) >> 8) | \
(((a)&0x0000ff00) << 8) | (((a)&0x000000ff) << 24))
#define betoh32(a) htobe32(a)
#define htole16(a) a; // Host is a little endian.
#define letoh16(a) htole16(a)
#define htole16(a) a; // Host is a little endian.
#define letoh16(a) htole16(a)
#else
/* Big endian host functions here */
#define htole16(a) ( (((a)>>8)&0xff) + (((a)<<8)&0xff00) )
#define letoh16(a) htobe16(a)
/* Big endian host functions here */
#define htole16(a) ((((a) >> 8) & 0xff) + (((a) << 8) & 0xff00))
#define letoh16(a) htobe16(a)
#define htole32(a) ((((a) & 0xff000000) >> 24) | (((a) & 0x00ff0000) >> 8) | \
(((a) & 0x0000ff00) << 8) | (((a) & 0x000000ff) << 24) )
#define letoh32(a) htobe32(a)
#define htole32(a) \
((((a)&0xff000000) >> 24) | (((a)&0x00ff0000) >> 8) | \
(((a)&0x0000ff00) << 8) | (((a)&0x000000ff) << 24))
#define letoh32(a) htobe32(a)
#define htobe16(a) a; // Host is a little endian.
#define betoh16(a) htole16(a)
#define htobe16(a) a; // Host is a little endian.
#define betoh16(a) htole16(a)
#endif
#endif /* INC_COMMON_BYTEORDER_H_ */

View File

@@ -9,8 +9,8 @@
#ifndef GLOBAL_HEADER_H_
#define GLOBAL_HEADER_H_
#define _FW_REV_MAJOR_ 0
#define _FW_REV_MINOR_ 4
#define _FW_REV_MAJOR_ 0
#define _FW_REV_MINOR_ 4
#define _FW_REV_BUGFIX_ 0
#define _FW_REV_TAG_ __COMMIT_HASH__
@@ -21,54 +21,78 @@
#include <xdc/runtime/System.h> /* For System_printf */
#if 1
#define DEBUG(...) {System_printf(__VA_ARGS__); System_flush();}
#define DEBUG(...) \
{ \
System_printf(__VA_ARGS__); \
System_flush(); \
}
#define LOGGER(...) {System_printf(__VA_ARGS__); System_flush();}
#define LOGGER_WARNING(...) {System_printf(__VA_ARGS__); System_flush();}
#define LOGGER_ERROR(...) {System_printf(__VA_ARGS__); System_flush();}
#define LOGGER(...) \
{ \
System_printf(__VA_ARGS__); \
System_flush(); \
}
#define LOGGER_WARNING(...) \
{ \
System_printf(__VA_ARGS__); \
System_flush(); \
}
#define LOGGER_ERROR(...) \
{ \
System_printf(__VA_ARGS__); \
System_flush(); \
}
#ifdef DEBUG_LOGS
#define LOGGER_DEBUG(...) {System_printf(__VA_ARGS__); System_flush();}
#define LOGGER_DEBUG(...) \
{ \
System_printf(__VA_ARGS__); \
System_flush(); \
}
#define NOP_DELAY() { uint32_t delay =7000000;\
while (delay--) \
;\
}
#define NOP_DELAY() \
{ \
uint32_t delay = 7000000; \
while (delay--) \
; \
}
#else
#define LOGGER_DEBUG(...)
#define NOP_DELAY()
#define LOGGER_DEBUG(...)
#define NOP_DELAY()
#endif
#else
#define DEBUG(...) //
#define DEBUG(...) //
#define LOGGER(...) //
#define LOGGER_WARNING(...) //
#define LOGGER_ERROR(...) //
#define LOGGER(...) //
#define LOGGER_WARNING(...) //
#define LOGGER_ERROR(...) //
#ifdef DEBUG_LOGS
#define LOGGER_DEBUG(...) //
#define LOGGER_DEBUG(...) //
#endif
#define NOP_DELAY() { uint32_t delay =7000000;\
while (delay--) \
;\
}
#define NOP_DELAY() \
{ \
uint32_t delay = 7000000; \
while (delay--) \
; \
}
#endif
#define RET_OK 0
#define RET_NOT_OK 1
#define RET_OK 0
#define RET_NOT_OK 1
typedef enum {
RETURN_OK = 0x00,
RETURN_NOTOK = 0x01,
RETURN_OCMP_INVALID_SS_TYPE = 0x02,
RETURN_OCMP_INVALID_MSG_TYPE = 0x03,
RETURN_OCMP_INVALID_COMP_TYPE = 0x04,
RETURN_OCMP_INVALID_AXN_TYPE = 0x05,
RETURN_OCMP_INVALID_PARAM_INFO = 0x06,
RETURN_OCMP_INVALID_CMD_INFO = 0x07,
RETURN_OCMP_INVALID_IFACE_TYPE = 0x08,
RETURN_DEV_VALUE_TOO_LOW = 0x09,
RETURN_DEV_VALUE_TOO_HIGH = 0x0A,
RETURN_DEV_I2C_BUS_FAILURE = 0x0B,
RETURN_SS_NOT_READY = 0x0C,
RETURN_SS_NOT_RESET_STATE = 0x0D
RETURN_OK = 0x00,
RETURN_NOTOK = 0x01,
RETURN_OCMP_INVALID_SS_TYPE = 0x02,
RETURN_OCMP_INVALID_MSG_TYPE = 0x03,
RETURN_OCMP_INVALID_COMP_TYPE = 0x04,
RETURN_OCMP_INVALID_AXN_TYPE = 0x05,
RETURN_OCMP_INVALID_PARAM_INFO = 0x06,
RETURN_OCMP_INVALID_CMD_INFO = 0x07,
RETURN_OCMP_INVALID_IFACE_TYPE = 0x08,
RETURN_DEV_VALUE_TOO_LOW = 0x09,
RETURN_DEV_VALUE_TOO_HIGH = 0x0A,
RETURN_DEV_I2C_BUS_FAILURE = 0x0B,
RETURN_SS_NOT_READY = 0x0C,
RETURN_SS_NOT_RESET_STATE = 0x0D
} ReturnStatus;
#endif /* GLOBAL_HEADER_H_ */

View File

@@ -33,16 +33,12 @@ I2C_Handle i2c_open_bus(unsigned int index);
/* Wrapper to ease migration */
#define i2c_get_handle i2c_open_bus
void i2c_close_bus(I2C_Handle* i2cHandle);
ReturnStatus i2c_reg_write( I2C_Handle i2cHandle,
uint8_t deviceAddress,
uint8_t regAddress,
uint16_t value,
uint8_t numofBytes);
ReturnStatus i2c_reg_read( I2C_Handle i2cHandle,
uint8_t deviceAddress,
uint8_t regAddress,
uint16_t *value,
uint8_t numofBytes);
void i2c_close_bus(I2C_Handle *i2cHandle);
ReturnStatus i2c_reg_write(I2C_Handle i2cHandle, uint8_t deviceAddress,
uint8_t regAddress, uint16_t value,
uint8_t numofBytes);
ReturnStatus i2c_reg_read(I2C_Handle i2cHandle, uint8_t deviceAddress,
uint8_t regAddress, uint16_t *value,
uint8_t numofBytes);
#endif /* I2CBUS_H_ */

View File

@@ -24,9 +24,8 @@
*****************************************************************************/
#define POST_RECORDS 55
#define OC_POST_TASKPRIORITY 3
#define POST_TASK_STACK_SIZE 4096
#define OC_POST_TASKPRIORITY 3
#define POST_TASK_STACK_SIZE 4096
/*****************************************************************************
* HANDLE DECLARATIONS

View File

@@ -12,7 +12,6 @@
#include "common/inc/global/Framework.h"
#include "inc/common/post.h"
ReturnStatus _execPost(OCMPMessageFrame *pMsg,
unsigned int subsystem_id);
ReturnStatus _execPost(OCMPMessageFrame *pMsg, unsigned int subsystem_id);
#endif /* INC_COMMON_POST_UTIL_H_ */

View File

@@ -10,214 +10,214 @@
#define _88E6071_REGISTERS_H_
/* SMI Device IDs */
#define PHY_PORT_0 0
#define PHY_PORT_1 1
#define PHY_PORT_2 2
#define PHY_PORT_3 3
#define PHY_PORT_4 4
#define GLOBAL_2 7
#define SW_PORT_0 8
#define SW_PORT_1 9
#define SW_PORT_2 10
#define SW_PORT_3 11
#define SW_PORT_4 12
#define SW_PORT_5 13
#define SW_PORT_6 14
#define GLOBAL_1 15
#define PHY_PORT_0 0
#define PHY_PORT_1 1
#define PHY_PORT_2 2
#define PHY_PORT_3 3
#define PHY_PORT_4 4
#define GLOBAL_2 7
#define SW_PORT_0 8
#define SW_PORT_1 9
#define SW_PORT_2 10
#define SW_PORT_3 11
#define SW_PORT_4 12
#define SW_PORT_5 13
#define SW_PORT_6 14
#define GLOBAL_1 15
/* PHY Specific Register set */
#define REG_PHY_CONTROL 0x0
#define REG_PHY_STATUS 0x1
#define REG_PHY_ID_1 0x2
#define REG_PHY_ID_2 0x3
#define REG_AUTONEG_ADV 0x4
#define REG_LINK_PARTNER_ABILITY 0x5
#define REG_AUTO_NEG_EXPANSION 0x6
#define REG_NXT_PAGE_TRANSMIT 0x7
#define REG_LINK_PARTNER_NXT_PAGE 0x8
#define REG_MMD_ACCESS_CNTRL 0xD
#define REG_MMD_ADDR_DATA 0xC
#define REG_PHY_SPEC_CONTROL 0x10
#define REG_PHY_SPEC_STATUS 0x11
#define REG_PHY_INTERRUPT_EN 0x12
#define REG_PHY_INTERRUPT_STATUS 0x13
#define REG_RCV_ERR_COUNTER 0x15
#define REG_PHY_CONTROL 0x0
#define REG_PHY_STATUS 0x1
#define REG_PHY_ID_1 0x2
#define REG_PHY_ID_2 0x3
#define REG_AUTONEG_ADV 0x4
#define REG_LINK_PARTNER_ABILITY 0x5
#define REG_AUTO_NEG_EXPANSION 0x6
#define REG_NXT_PAGE_TRANSMIT 0x7
#define REG_LINK_PARTNER_NXT_PAGE 0x8
#define REG_MMD_ACCESS_CNTRL 0xD
#define REG_MMD_ADDR_DATA 0xC
#define REG_PHY_SPEC_CONTROL 0x10
#define REG_PHY_SPEC_STATUS 0x11
#define REG_PHY_INTERRUPT_EN 0x12
#define REG_PHY_INTERRUPT_STATUS 0x13
#define REG_RCV_ERR_COUNTER 0x15
/* GLOBAL - 1 */
#define REG_GLOBAL_STATUS 0x0
#define REG_GLOBAL_CONTROL 0x4
#define REG_VTU_CONTROL 0x5
#define REG_VTU_VID 0x6
#define REG_VTU_DATA_PORT_3_0 0x7
#define REG_VTU_DATA_PORT_6_4 0x8
#define REG_ATU_CONTROL 0xA
#define REG_ATU_OPERATION 0xB
#define REG_ATU_DATA 0xC
#define REG_GLOBAL_STATUS 0x0
#define REG_GLOBAL_CONTROL 0x4
#define REG_VTU_CONTROL 0x5
#define REG_VTU_VID 0x6
#define REG_VTU_DATA_PORT_3_0 0x7
#define REG_VTU_DATA_PORT_6_4 0x8
#define REG_ATU_CONTROL 0xA
#define REG_ATU_OPERATION 0xB
#define REG_ATU_DATA 0xC
/* GLOBAL - 2 */
#define REG_INTERRUPT_SOURCE 0x0
#define REG_INTERRUPT_MASK 0x1
#define REG_MGMT_EN_2X 0x2
#define REG_MGMT_EN_0X 0x3
#define REG_MANAGEMENT 0x5
#define REG_TRUNK_MASK 0x7
#define REG_INGRESS_RATE_CMD 0x9
#define REG_INGRESS_RATE_DATA 0xA
#define REG_SWITCH_MAC 0xD
#define REG_ATU_STATS 0xE
#define REG_PRIORITY_OVERRIDES 0xF
#define REG_EEPROM_CMD 0x14
#define REG_EEPROM_DATA 0x15
#define REG_AVB_CMD 0x16
#define REG_AVB_DATA 0x17
#define REG_SMI_CMD 0x18
#define REG_SMI_DATA 0x19
#define REG_SCRATCH_MISC 0x1A
#define REG_WATCHDOG 0x1B
#define REG_INTERRUPT_SOURCE 0x0
#define REG_INTERRUPT_MASK 0x1
#define REG_MGMT_EN_2X 0x2
#define REG_MGMT_EN_0X 0x3
#define REG_MANAGEMENT 0x5
#define REG_TRUNK_MASK 0x7
#define REG_INGRESS_RATE_CMD 0x9
#define REG_INGRESS_RATE_DATA 0xA
#define REG_SWITCH_MAC 0xD
#define REG_ATU_STATS 0xE
#define REG_PRIORITY_OVERRIDES 0xF
#define REG_EEPROM_CMD 0x14
#define REG_EEPROM_DATA 0x15
#define REG_AVB_CMD 0x16
#define REG_AVB_DATA 0x17
#define REG_SMI_CMD 0x18
#define REG_SMI_DATA 0x19
#define REG_SCRATCH_MISC 0x1A
#define REG_WATCHDOG 0x1B
/* Switch Ports registers */
#define REG_PORT_STATUS 0x0
#define REG_MAC_CONTROL 0x1
#define REG_JAMING_CONTROL 0x2
#define REG_SW_IDENTIFIER 0x3
#define REG_PORT_CONTROL 0x4
#define REG_PORT_CONTROL_1 0x5
#define REG_VLAN_MAP 0x6
#define REG_VLAN_ID_PRIORITY 0x7
#define REG_PORT_ID_2 0x8
#define REG_EGRESS_RATE_CONTROL 0x9
#define REG_EGRESS_RATE_CONTROL_2 0xA
#define REG_PORT_ASSOCITATION_VECTOR 0xB
#define REG_PRIORITY_OVERRIDE 0xD
#define REG_POLICY_CONTROL 0xE
#define REG_PORT_ETYPE 0xF
#define REG_RX_FRAME_COUNTER 0x10
#define REG_TX_FRAME_COUNTER 0x11
#define REG_INDISCARD_COUNTER 0x12
#define REG_INFILTERED_COUNTER 0x13
#define REG_LED_CONTROL 0x16
#define REG_TAG_REMAP_3_0 0x18
#define REG_TAG_REMAP_7_4 0x19
#define REG_QUEUE_COUNTER 0x1B
#define REG_PORT_STATUS 0x0
#define REG_MAC_CONTROL 0x1
#define REG_JAMING_CONTROL 0x2
#define REG_SW_IDENTIFIER 0x3
#define REG_PORT_CONTROL 0x4
#define REG_PORT_CONTROL_1 0x5
#define REG_VLAN_MAP 0x6
#define REG_VLAN_ID_PRIORITY 0x7
#define REG_PORT_ID_2 0x8
#define REG_EGRESS_RATE_CONTROL 0x9
#define REG_EGRESS_RATE_CONTROL_2 0xA
#define REG_PORT_ASSOCITATION_VECTOR 0xB
#define REG_PRIORITY_OVERRIDE 0xD
#define REG_POLICY_CONTROL 0xE
#define REG_PORT_ETYPE 0xF
#define REG_RX_FRAME_COUNTER 0x10
#define REG_TX_FRAME_COUNTER 0x11
#define REG_INDISCARD_COUNTER 0x12
#define REG_INFILTERED_COUNTER 0x13
#define REG_LED_CONTROL 0x16
#define REG_TAG_REMAP_3_0 0x18
#define REG_TAG_REMAP_7_4 0x19
#define REG_QUEUE_COUNTER 0x1B
#define REG_C45_PACKET_GEN 0x8030
#define REG_C45_CRC_ERROR_COUNTER 0x8031
#define REG_C45_PACKET_GEN 0x8030
#define REG_C45_CRC_ERROR_COUNTER 0x8031
/*
* PHY Register fields SMI Device address 0x0 to 0x4
*/
//REG_PHY_CONTROL - 0x0
#define SOFT_RESET (1 << 0xF)
#define LOOPBACK_EN (1 << 0xE)
#define SPEED (1 << 0xD)
#define AUTONEG_EN (1 << 0xC)
#define PWR_DOWN (1 << 0xB)
#define RESTART_AUTONEG (1 << 0xA)
#define DUPLEX (1 << 0x8)
#define SOFT_RESET (1 << 0xF)
#define LOOPBACK_EN (1 << 0xE)
#define SPEED (1 << 0xD)
#define AUTONEG_EN (1 << 0xC)
#define PWR_DOWN (1 << 0xB)
#define RESTART_AUTONEG (1 << 0xA)
#define DUPLEX (1 << 0x8)
//REG_PHY_STATUS - 0x1
#define AUTONEG_DONE (1 << 0x5)
#define LINK_UP (1 << 0x2)
#define AUTONEG_DONE (1 << 0x5)
#define LINK_UP (1 << 0x2)
//REG_MMD_ACCESS_CNTRL - 0xD
#define DEVADDR (0x1F << 0x0)
#define FUNCTION (0x03 << 0xD)
#define DEVADDR (0x1F << 0x0)
#define FUNCTION (0x03 << 0xD)
//REG_PHY_SPEC_CONTROL - 0x10
#define ENERGY_DET (1 << 0xE)
#define DIS_NLP_CHECK (1 << 0xD)
#define EXT_DISTANCE (1 << 0x7)
#define SIGDET_POL (1 << 0x6)
#define AUTOMDI_CROSSOVER (0x03 << 0x4)
#define AUTOPOL_REVERSE (1 << 0x1)
#define ENERGY_DET (1 << 0xE)
#define DIS_NLP_CHECK (1 << 0xD)
#define EXT_DISTANCE (1 << 0x7)
#define SIGDET_POL (1 << 0x6)
#define AUTOMDI_CROSSOVER (0x03 << 0x4)
#define AUTOPOL_REVERSE (1 << 0x1)
//REG_PHY_SPEC_STATUS - 0x11
#define RES_SPEED (1 << 0xE)
#define RES_DUPLEX (1 << 0xD)
#define RT_LINK (1 << 0xA)
#define MDI_CROSSOVER_STATUS (1 << 0x6)
#define SLEEP_MODE (1 << 0x4)
#define POLARITY (1 << 0x1)
#define JABBER_DET (1 << 0x0)
#define RES_SPEED (1 << 0xE)
#define RES_DUPLEX (1 << 0xD)
#define RT_LINK (1 << 0xA)
#define MDI_CROSSOVER_STATUS (1 << 0x6)
#define SLEEP_MODE (1 << 0x4)
#define POLARITY (1 << 0x1)
#define JABBER_DET (1 << 0x0)
//REG_PHY_INTERRUPT_EN - 0x12
#define SPEED_INT_EN (1 << 0xE)
#define DUPLEX_INT_EN (1 << 0xD)
#define PAGE_RX_INT_STATUS_EN (1 << 0xC)
#define AUTONEG_COMPLETE_INT_EN (1 << 0xB)
#define LINK_CHANGE_INT_EN (1 << 0xA)
#define MDI_CROSSOVER_INT_EN (1 << 0x6)
#define ENERGY_DET_INT_EN (1 << 0x4)
#define POLARITY_INT_EN (1 << 0x1)
#define JABBER_INT_EN (1 << 0x0)
#define SPEED_INT_EN (1 << 0xE)
#define DUPLEX_INT_EN (1 << 0xD)
#define PAGE_RX_INT_STATUS_EN (1 << 0xC)
#define AUTONEG_COMPLETE_INT_EN (1 << 0xB)
#define LINK_CHANGE_INT_EN (1 << 0xA)
#define MDI_CROSSOVER_INT_EN (1 << 0x6)
#define ENERGY_DET_INT_EN (1 << 0x4)
#define POLARITY_INT_EN (1 << 0x1)
#define JABBER_INT_EN (1 << 0x0)
//REG_PHY_INTERRUPT_STATUS - 0x13
#define SPEED_INT_STATUS (1 << 0xE)
#define DUPLEX_INT_STATUS (1 << 0xD)
#define PAGE_RX_INT_STATUS (1 << 0xC)
#define SPEED_INT_STATUS (1 << 0xE)
#define DUPLEX_INT_STATUS (1 << 0xD)
#define PAGE_RX_INT_STATUS (1 << 0xC)
#define AUTONEG_COMPLETE_INT_STATUS (1 << 0xB)
#define LINK_CHANGE_INT_STATUS (1 << 0xA)
#define MDI_CROSSOVER_INT_STATUS (1 << 0x6)
#define ENERGY_DET_INT_STATUS (1 << 0x4)
#define POLARITY_INT_STATUS (1 << 0x1)
#define JABBER_INT_STATUS (1 << 0x0)
#define LINK_CHANGE_INT_STATUS (1 << 0xA)
#define MDI_CROSSOVER_INT_STATUS (1 << 0x6)
#define ENERGY_DET_INT_STATUS (1 << 0x4)
#define POLARITY_INT_STATUS (1 << 0x1)
#define JABBER_INT_STATUS (1 << 0x0)
/*
* GLOBAL -1 Register fields (SMI Device address 0xF)
*/
// REG_GLOBAL_STATUS 0x1
#define INIT_RDY (1 << 11)
#define AVB_INT (1 << 8)
#define DEV_INT (1 << 7)
#define STATS_DONE (1 << 6)
#define VLAN_PROB (1 << 5)
#define VLAN_DONE (1 << 4)
#define ATU_PROB (1 << 3)
#define ATU_DONE (1 << 2)
#define EE_INT (1 << 0)
#define INIT_RDY (1 << 11)
#define AVB_INT (1 << 8)
#define DEV_INT (1 << 7)
#define STATS_DONE (1 << 6)
#define VLAN_PROB (1 << 5)
#define VLAN_DONE (1 << 4)
#define ATU_PROB (1 << 3)
#define ATU_DONE (1 << 2)
#define EE_INT (1 << 0)
// REG_GLOBAL_CONTROL 0x4
#define SW_RESET (1 << 15)
#define DISCARD_EXCESSIVE (1 << 13)
#define ARP_WO_BROADCAST (1 << 12)
#define MAX_FRAME_SIZE (1 << 10)
#define RELOAD (1 << 9)
#define AVB_INT_EN (1 << 8)
#define DEV_INT_EN (1 << 7)
#define STATS_DONE_INT_EN (1 << 6)
#define VTU_PROB_INT_EN (1 << 5)
#define ATU_DONE_INT_EN (1 << 4)
#define EE_INT_EN (1 << 0)
#define SW_RESET (1 << 15)
#define DISCARD_EXCESSIVE (1 << 13)
#define ARP_WO_BROADCAST (1 << 12)
#define MAX_FRAME_SIZE (1 << 10)
#define RELOAD (1 << 9)
#define AVB_INT_EN (1 << 8)
#define DEV_INT_EN (1 << 7)
#define STATS_DONE_INT_EN (1 << 6)
#define VTU_PROB_INT_EN (1 << 5)
#define ATU_DONE_INT_EN (1 << 4)
#define EE_INT_EN (1 << 0)
/*
* GLOBAL - 2 Register fields (SMI Device address 0x7)
*/
//REG_INTERRUPT_SOURCE 0x0
#define WATCHDOG_INT (1 << 15)
#define JAM_INT (1 << 14)
#define WAKE_EVENT_INT (1 << 12)
#define PHY_4_INT (1 << 4)
#define PHY_3_INT (1 << 3)
#define PHY_2_INT (1 << 2)
#define PHY_1_INT (1 << 1)
#define PHY_0_INT (1 << 0)
#define WATCHDOG_INT (1 << 15)
#define JAM_INT (1 << 14)
#define WAKE_EVENT_INT (1 << 12)
#define PHY_4_INT (1 << 4)
#define PHY_3_INT (1 << 3)
#define PHY_2_INT (1 << 2)
#define PHY_1_INT (1 << 1)
#define PHY_0_INT (1 << 0)
//REG_INTERRUPT_MASK 0x1
#define WATCHDOG_INT_EN (1 << 15)
#define JAM_INT_EN (1 << 14)
#define WAKE_EVENT_INT_EN (1 << 12)
#define PHY_4_INT_EN (1 << 4)
#define PHY_3_INT_EN (1 << 3)
#define PHY_2_INT_EN (1 << 2)
#define PHY_1_INT_EN (1 << 1)
#define PHY_0_INT_EN (1 << 0)
#define WATCHDOG_INT_EN (1 << 15)
#define JAM_INT_EN (1 << 14)
#define WAKE_EVENT_INT_EN (1 << 12)
#define PHY_4_INT_EN (1 << 4)
#define PHY_3_INT_EN (1 << 3)
#define PHY_2_INT_EN (1 << 2)
#define PHY_1_INT_EN (1 << 1)
#define PHY_0_INT_EN (1 << 0)
//REG_C45_PACKET_GEN 0x8030
#define CRC_ENABLE (1 << 6)
#define FRAME_COUNT_EN (1 << 5)
#define FORCE_BURST_STOP (1 << 4)
#define PACKET_GEN_EN (1 << 3)
#define PAYLOAD_TYPE (1 << 2)
#define PACKET_LENGTH (1 << 1)
#define ERROR_PACKET_INJECTION (1 << 0)
#define CRC_ENABLE (1 << 6)
#define FRAME_COUNT_EN (1 << 5)
#define FORCE_BURST_STOP (1 << 4)
#define PACKET_GEN_EN (1 << 3)
#define PAYLOAD_TYPE (1 << 2)
#define PACKET_LENGTH (1 << 1)
#define ERROR_PACKET_INJECTION (1 << 0)
#endif /* _88E6071_REGISTERS_H_ */

View File

@@ -25,7 +25,7 @@
* to be in extended region(-64°C to +191°C) otherwise 0 if temperature region
* is in normal range(0°C to +127°C).
*/
#define ADT7481_EXTENDED_FLAG 1
#define ADT7481_EXTENDED_FLAG 1
/*
* 7 - (Mask) - Setting this bit to 1 masks all ALERTs on the ALERT pin.
@@ -51,7 +51,8 @@
* 0 - (Mask R2) - 0 - Setting this bit to 1 masks ALERTs due to the Remote 2
* temperature exceeding a programmed limit. Default = 0.
*/
#define ADT7481_CONFIGURATION_REG_VALUE (ADT7481_EXTENDED_FLAG << 2) /* Set/Clear Only Temp Range bit */
#define ADT7481_CONFIGURATION_REG_VALUE \
(ADT7481_EXTENDED_FLAG << 2) /* Set/Clear Only Temp Range bit */
/*
* 7 - (Averaging) - Setting this bit to 1 disables averaging of the
@@ -81,11 +82,12 @@
* 1010 = 64 15.5 m
* 1011 = Continuous Measurements 73 m (Averaging Enabled)
*/
#define ADT7481_CONVERSION_RATE_REG_VALUE 0x07 /* Set conversion rate to 125ms(default) */
#define ADT7481_CONVERSION_RATE_REG_VALUE \
0x07 /* Set conversion rate to 125ms(default) */
/* ADT7481 Manufacturer Id and Device Id */
#define TEMP_ADT7481_MANF_ID 0x41
#define TEMP_ADT7481_DEV_ID 0x81
#define TEMP_ADT7481_MANF_ID 0x41
#define TEMP_ADT7481_DEV_ID 0x81
/*
* Enumeration of Temperature limit registers
@@ -99,71 +101,71 @@ typedef enum {
/*****************************************************************************
* FUNCTION DECLARATIONS
*****************************************************************************/
ReturnStatus adt7481_get_dev_id(const I2C_Dev *i2c_dev,
uint8_t *devID);
ReturnStatus adt7481_get_mfg_id(const I2C_Dev *i2c_dev,
uint8_t *mfgID);
ePostCode adt7481_probe(const I2C_Dev *i2c_dev,
POSTData *postData);
ReturnStatus adt7481_get_config1(const I2C_Dev *i2c_dev,
uint8_t *configValue);
ReturnStatus adt7481_set_config1(const I2C_Dev *i2c_dev,
uint8_t configValue);
ReturnStatus adt7481_get_dev_id(const I2C_Dev *i2c_dev, uint8_t *devID);
ReturnStatus adt7481_get_mfg_id(const I2C_Dev *i2c_dev, uint8_t *mfgID);
ePostCode adt7481_probe(const I2C_Dev *i2c_dev, POSTData *postData);
ReturnStatus adt7481_get_config1(const I2C_Dev *i2c_dev, uint8_t *configValue);
ReturnStatus adt7481_set_config1(const I2C_Dev *i2c_dev, uint8_t configValue);
ReturnStatus adt7481_get_conv_rate(const I2C_Dev *i2c_dev,
uint8_t *convRateValue);
ReturnStatus adt7481_set_conv_rate(const I2C_Dev *i2c_dev,
uint8_t convRateValue);
ReturnStatus adt7481_get_status1(const I2C_Dev *i2c_dev,
uint8_t *statusValue);
ReturnStatus adt7481_get_status2(const I2C_Dev *i2c_dev,
uint8_t *statusValue);
ReturnStatus adt7481_get_status1(const I2C_Dev *i2c_dev, uint8_t *statusValue);
ReturnStatus adt7481_get_status2(const I2C_Dev *i2c_dev, uint8_t *statusValue);
ReturnStatus adt7481_get_local_temp_val(const I2C_Dev *i2c_dev,
int16_t *tempValue);
ReturnStatus adt7481_get_remote1_temp_val(const I2C_Dev *i2c_dev,
int16_t *tempValue);
ReturnStatus adt7481_get_remote2_temp_val(const I2C_Dev *i2c_dev,
int8_t *tempValue);
ReturnStatus adt7481_get_local_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int16_t* tempLimitValue);
ReturnStatus adt7481_set_local_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int16_t tempLimitValue);
ReturnStatus
adt7481_get_local_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int16_t *tempLimitValue);
ReturnStatus
adt7481_set_local_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int16_t tempLimitValue);
ReturnStatus adt7481_get_remote2_temp_low_limit(const I2C_Dev *i2c_dev,
int8_t* tempLimitValue);
int8_t *tempLimitValue);
ReturnStatus adt7481_get_remote2_temp_high_limit(const I2C_Dev *i2c_dev,
int8_t* tempLimitValue);
int8_t *tempLimitValue);
ReturnStatus adt7481_get_remote2_temp_therm_limit(const I2C_Dev *i2c_dev,
int8_t* tempLimitValue);
ReturnStatus adt7481_get_remote1_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t* tempLimitValue);
int8_t *tempLimitValue);
ReturnStatus
adt7481_get_remote1_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t *tempLimitValue);
ReturnStatus adt7481_set_remote2_temp_low_limit(const I2C_Dev *i2c_dev,
int8_t tempLimitValue);
ReturnStatus adt7481_set_remote2_temp_high_limit(const I2C_Dev *i2c_dev,
int8_t tempLimitValue);
ReturnStatus adt7481_set_remote2_temp_therm_limit(const I2C_Dev *i2c_dev,
int8_t tempLimitValue);
ReturnStatus adt7481_set_remote1_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t tempLimitValue);
ReturnStatus adt7481_get_remote2_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t* tempLimitValue);
ReturnStatus adt7481_set_remote2_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t tempLimitValue);
ReturnStatus
adt7481_set_remote1_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t tempLimitValue);
ReturnStatus
adt7481_get_remote2_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t *tempLimitValue);
ReturnStatus
adt7481_set_remote2_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t tempLimitValue);
ReturnStatus adt7481_get_remote1_temp_offset(const I2C_Dev *i2c_dev,
int16_t* tempOffsetValue);
int16_t *tempOffsetValue);
ReturnStatus adt7481_set_remote1_temp_offset(const I2C_Dev *i2c_dev,
int16_t tempOffsetValue);
ReturnStatus adt7481_get_remote2_temp_offset(const I2C_Dev *i2c_dev,
int16_t* tempOffsetValue);
int16_t *tempOffsetValue);
ReturnStatus adt7481_set_remote2_temp_offset(const I2C_Dev *i2c_dev,
int8_t tempOffsetValue);
ReturnStatus adt7481_get_therm_hysteresis(const I2C_Dev *i2c_dev,
int8_t* tempHysteresisValue);
int8_t *tempHysteresisValue);
ReturnStatus adt7481_set_therm_hysteresis(const I2C_Dev *i2c_dev,
int8_t tempHysteresisValue);

View File

@@ -11,14 +11,14 @@
#include "drivers/OcGpio.h"
typedef struct __attribute__ ((packed, aligned(1))) {
uint8_t pin;
uint8_t value;
}S_OCGPIO;
typedef struct __attribute__((packed, aligned(1))) {
uint8_t pin;
uint8_t value;
} S_OCGPIO;
typedef struct S_OCGPIO_Cfg {
OcGpio_Port* port;
OcGpio_Port *port;
unsigned int group;
}S_OCGPIO_Cfg;
} S_OCGPIO_Cfg;
#endif /* _OC_GPIO_H_ */

View File

@@ -11,15 +11,15 @@
#include <stdint.h>
typedef struct __attribute__ ((packed, aligned(1))){
uint8_t slaveAddress;
uint8_t number_of_bytes;
uint8_t reg_address;
uint16_t reg_value;
}S_OCI2C;
typedef struct __attribute__((packed, aligned(1))) {
uint8_t slaveAddress;
uint8_t number_of_bytes;
uint8_t reg_address;
uint16_t reg_value;
} S_OCI2C;
typedef struct S_I2C_Cfg {
unsigned int bus;
}S_I2C_Cfg;
} S_I2C_Cfg;
#endif /* INC_DEVICES_OC_I2C_H_ */

View File

@@ -11,13 +11,13 @@
#include <stdint.h>
typedef struct __attribute__ ((packed, aligned(1))){
uint16_t reg_address;
uint16_t reg_value;
}S_OCMDIO;
typedef struct __attribute__((packed, aligned(1))) {
uint16_t reg_address;
uint16_t reg_value;
} S_OCMDIO;
typedef struct S_MDIO_Cfg {
unsigned int port;
}S_MDIO_Cfg;
} S_MDIO_Cfg;
#endif /* INC_DEVICES_OC_MDIO_H_ */

View File

@@ -19,19 +19,19 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define OC_TEST_ADDRESS 0xFFFF
#define OC_CONNECT1_SERIAL_INFO 0x01C6
#define OC_CONNECT1_SERIAL_SIZE 0x12
#define OC_GBC_BOARD_INFO 0x01AC
#define OC_GBC_BOARD_INFO_SIZE 0x12
#define OC_GBC_DEVICE_INFO 0x0100 /*TODO: Update offsets*/
#define OC_SDR_BOARD_INFO 0x01AC
#define OC_SDR_BOARD_INFO_SIZE 0x12
#define OC_SDR_DEVICE_INFO 0x0100 /*TODO: Update offsets*/
#define OC_RFFE_BOARD_INFO 0x01AC
#define OC_RFFE_BOARD_INFO_SIZE 0x11
#define OC_RFFE_DEVICE_INFO 0x0100 /*TODO: Update offsets*/
#define OC_DEVICE_INFO_SIZE 0x0A
#define OC_TEST_ADDRESS 0xFFFF
#define OC_CONNECT1_SERIAL_INFO 0x01C6
#define OC_CONNECT1_SERIAL_SIZE 0x12
#define OC_GBC_BOARD_INFO 0x01AC
#define OC_GBC_BOARD_INFO_SIZE 0x12
#define OC_GBC_DEVICE_INFO 0x0100 /*TODO: Update offsets*/
#define OC_SDR_BOARD_INFO 0x01AC
#define OC_SDR_BOARD_INFO_SIZE 0x12
#define OC_SDR_DEVICE_INFO 0x0100 /*TODO: Update offsets*/
#define OC_RFFE_BOARD_INFO 0x01AC
#define OC_RFFE_BOARD_INFO_SIZE 0x11
#define OC_RFFE_DEVICE_INFO 0x0100 /*TODO: Update offsets*/
#define OC_DEVICE_INFO_SIZE 0x0A
/*****************************************************************************
* STRUCT DEFINITIONS
@@ -62,31 +62,25 @@ typedef enum {
*****************************************************************************/
bool eeprom_init(Eeprom_Cfg *cfg);
ReturnStatus eeprom_read(const Eeprom_Cfg *cfg,
uint16_t address,
void *buffer,
ReturnStatus eeprom_read(const Eeprom_Cfg *cfg, uint16_t address, void *buffer,
size_t size);
ReturnStatus eeprom_write(const Eeprom_Cfg *cfg,
uint16_t address,
const void *buffer,
size_t size);
ReturnStatus eeprom_write(const Eeprom_Cfg *cfg, uint16_t address,
const void *buffer, size_t size);
ReturnStatus eeprom_disable_write(Eeprom_Cfg *cfg);
ReturnStatus eeprom_enable_write(Eeprom_Cfg *cfg);
ReturnStatus eeprom_read_oc_info(uint8_t * oc_serial);
ReturnStatus eeprom_read_oc_info(uint8_t *oc_serial);
ReturnStatus eeprom_read_board_info(const Eeprom_Cfg *cfg,
uint8_t * rom_info);
ReturnStatus eeprom_read_board_info(const Eeprom_Cfg *cfg, uint8_t *rom_info);
ReturnStatus eeprom_read_device_info_record(const Eeprom_Cfg *cfg,
uint8_t recordNo,
char * device_info);
char *device_info);
ReturnStatus eeprom_write_device_info_record(Eeprom_Cfg *cfg,
uint8_t recordNo,
char * device_info);
ReturnStatus eeprom_write_device_info_record(Eeprom_Cfg *cfg, uint8_t recordNo,
char *device_info);
#endif /* EEPROM_H_ */

View File

@@ -19,59 +19,52 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define ETH_SW_PRODUCT_ID 0x0071
#define PHY_IDENTIFIER 0x0141
#define ETH_SW_PRODUCT_ID 0x0071
#define PHY_IDENTIFIER 0x0141
#define DEFAULT_PHY_INTS (PHY_4_INT_EN | PHY_3_INT_EN | PHY_2_INT_EN |PHY_1_INT_EN | PHY_0_INT_EN)
#define DEFUALT_INT (LINK_CHANGE_INT_EN)
#define DEFAULT_PHY_INTS \
(PHY_4_INT_EN | PHY_3_INT_EN | PHY_2_INT_EN | PHY_1_INT_EN | PHY_0_INT_EN)
#define DEFUALT_INT (LINK_CHANGE_INT_EN)
/*
* MDC MDIO definitions
*/
#define NO_CPU_MODE 1
#define CPU_MODE 0
#define NO_CPU_MODE 1
#define CPU_MODE 0
//#define ETH_SW_ADDR
#define MDIO_PORT GPIO_PORTC_BASE
#define MDC_PIN GPIO_PIN_6
#define MDIO_PIN GPIO_PIN_7
#define MDIO_PORT GPIO_PORTC_BASE
#define MDC_PIN GPIO_PIN_6
#define MDIO_PIN GPIO_PIN_7
#define LAN_MUX_SELECT_PORT GPIO_PORTN_BASE
#define LAN_MUX_SELECT_PIN GPIO_PIN_1
#define LAN_MUX_SELECT_PORT GPIO_PORTN_BASE
#define LAN_MUX_SELECT_PIN GPIO_PIN_1
#define ETH_SW_DEV_SERIAL_NO 1
#define IPPARAMS 4
#define ETH_SW_DEV_SERIAL_NO 1
#define IPPARAMS 4
/*
* Ethernet Components ID. This is the part of the OCMPMsg in componentID field.
*/
typedef enum {
ETH_COMP_ALL = 0x0,
PORT_0, // PORT# 0
ETH_COMP_ALL = 0x0,
PORT_0, // PORT# 0
PORT_1,
PORT_2,
PORT_3,
PORT_4,
ETH_COMPONENT_MAX // Limiter
ETH_COMPONENT_MAX // Limiter
} e_ethernet_component_ID;
typedef enum {
PORT0=0,
PORT0 = 0,
PORT1,
PORT2,
PORT3,
PORT4,
}Eth_Sw_Port;
} Eth_Sw_Port;
typedef enum {
SPEED_10M = 0,
SPEED_100M,
SPEED_AUTONEG
} port_speed;
typedef enum { SPEED_10M = 0, SPEED_100M, SPEED_AUTONEG } port_speed;
typedef enum {
HALF_DUPLEX = 0,
FULL_DUPLEX,
DUPLEX_AUTONEG
} port_duplex;
typedef enum { HALF_DUPLEX = 0, FULL_DUPLEX, DUPLEX_AUTONEG } port_duplex;
typedef enum Eth_Sw_Status {
ETH_SW_STATUS_SPEED = 0x00,
@@ -97,16 +90,16 @@ typedef enum Eth_Sw_Config {
typedef enum Eth_Sw_Alert {
ETH_ALERT_SPEED_CHANGE = 0x01,
ETH_ALERT_DUPLEX_CHANGE = 0x02,
ETH_ALERT_AUTONEG_DONE=0x04,
ETH_ALERT_LINK_CHANGE=0x08,
ETH_ALERT_CROSSOVER_DET=0x10,
ETH_ALERT_ENERGY_DET=0x20,
ETH_ALERT_POLARITY_DET=0x040,
ETH_ALERT_JABBER_DET=0x80
ETH_ALERT_AUTONEG_DONE = 0x04,
ETH_ALERT_LINK_CHANGE = 0x08,
ETH_ALERT_CROSSOVER_DET = 0x10,
ETH_ALERT_ENERGY_DET = 0x20,
ETH_ALERT_POLARITY_DET = 0x040,
ETH_ALERT_JABBER_DET = 0x80
} Eth_Sw_Alert;
typedef enum {
ETH_EVT_SPEED =0x00,
ETH_EVT_SPEED = 0x00,
ETH_EVT_DUPLEX,
ETH_EVT_AUTONEG,
ETH_EVT_LINK,
@@ -114,11 +107,10 @@ typedef enum {
ETH_EVT_ENERGY,
ETH_EVT_POLARITY,
ETH_EVT_JABBER,
}Eth_Sw_Events;
} Eth_Sw_Events;
typedef void (*Eth_Sw_CallbackFn) (Eth_Sw_Events evt, int16_t value,
void *context);
typedef void (*Eth_Sw_CallbackFn)(Eth_Sw_Events evt, int16_t value,
void *context);
typedef struct Eth_Sw_Obj {
Eth_Sw_CallbackFn alert_cb;
@@ -130,7 +122,7 @@ typedef struct Eth_Sw_Dev {
} Eth_Sw_Dev;
typedef struct Eth_Sw_Cfg {
OcGpio_Pin* pin_evt;
OcGpio_Pin *pin_evt;
Eth_Sw_Dev eth_switch;
OcGpio_Pin pin_ec_ethsw_reset;
} Eth_Sw_Cfg;
@@ -143,17 +135,17 @@ typedef struct Eth_cfg {
typedef struct Eth_LoopBack_Params {
uint8_t loopBackType;
}Eth_LoopBack_Params;
} Eth_LoopBack_Params;
typedef struct Eth_PacketGen_Params {
uint16_t reg_value;
}Eth_PacketGen_Params;
} Eth_PacketGen_Params;
typedef struct Eth_TcpClient_Params {
uint8_t ipAddress[IPPARAMS];
uint16_t tcpPort;
uint8_t repeat;
}Eth_TcpClient_Params;
} Eth_TcpClient_Params;
ePostCode eth_sw_probe();
ePostCode eth_sw_init();
@@ -162,28 +154,34 @@ ReturnStatus get_interrupt(uint8_t port);
ReturnStatus eth_sw_get_status_speed(uint8_t port, port_speed *speed);
ReturnStatus eth_sw_get_status_duplex(uint8_t port, port_duplex *duplex);
ReturnStatus eth_sw_get_status_auto_neg(uint8_t port, port_duplex *autoneg_on);
ReturnStatus eth_sw_get_status_sleep_mode(uint8_t port, port_duplex *sleep_mode_en);
ReturnStatus eth_sw_get_status_auto_neg_complete(uint8_t port, port_duplex *autoneg_complete);
ReturnStatus eth_sw_get_status_sleep_mode(uint8_t port,
port_duplex *sleep_mode_en);
ReturnStatus eth_sw_get_status_auto_neg_complete(uint8_t port,
port_duplex *autoneg_complete);
ReturnStatus eth_sw_get_status_link_up(uint8_t port, port_duplex *link_up);
ReturnStatus restart_autoneg(uint8_t port);
ReturnStatus eth_sw_set_config_speed(uint8_t port, port_speed speed);
ReturnStatus eth_sw_set_config_duplex(uint8_t port, port_duplex duplex);
ReturnStatus eth_sw_set_config_power_down(uint8_t port,uint8_t power_down);
ReturnStatus eth_sw_set_config_sleep_mode_enable(uint8_t port,uint8_t sleep_mode_en);
ReturnStatus eth_sw_set_config_power_down(uint8_t port, uint8_t power_down);
ReturnStatus eth_sw_set_config_sleep_mode_enable(uint8_t port,
uint8_t sleep_mode_en);
ReturnStatus eth_sw_set_config_restart_neg(uint8_t port);
ReturnStatus eth_sw_set_config_interrupt_enable(uint8_t port, uint8_t *interrupt_mask);
ReturnStatus eth_sw_set_config_interrupt_enable(uint8_t port,
uint8_t *interrupt_mask);
ReturnStatus eth_sw_set_config_soft_reset(uint8_t port);
ReturnStatus eth_sw_get_config_speed(uint8_t port, port_speed* speed);
ReturnStatus eth_sw_get_config_duplex(uint8_t port, port_duplex* duplex);
ReturnStatus eth_sw_get_config_power_down(uint8_t port, uint8_t* power_dwn);
ReturnStatus eth_sw_get_config_sleep_mode(uint8_t port, uint8_t* sleep_mode);
ReturnStatus eth_sw_get_config_interrupt_enable(uint8_t port, uint8_t* interrupt_enb);
ReturnStatus eth_sw_get_config_speed(uint8_t port, port_speed *speed);
ReturnStatus eth_sw_get_config_duplex(uint8_t port, port_duplex *duplex);
ReturnStatus eth_sw_get_config_power_down(uint8_t port, uint8_t *power_dwn);
ReturnStatus eth_sw_get_config_sleep_mode(uint8_t port, uint8_t *sleep_mode);
ReturnStatus eth_sw_get_config_interrupt_enable(uint8_t port,
uint8_t *interrupt_enb);
ReturnStatus eth_sw_enable_loopback(void *driver, void *params);
ReturnStatus eth_sw_disable_loopback(void *driver, void *params);
ReturnStatus eth_sw_enable_macloopback(uint8_t port);
ReturnStatus eth_sw_disable_macloopback(uint8_t port);
ReturnStatus eth_sw_enable_packet_gen(void *driver, void *params);
ReturnStatus eth_sw_disable_packet_gen(void *driver);
void eth_sw_setAlertHandler(Eth_cfg *ethCfg, Eth_Sw_CallbackFn alert_cb, void *cb_context);
void eth_sw_setAlertHandler(Eth_cfg *ethCfg, Eth_Sw_CallbackFn alert_cb,
void *cb_context);
#endif /* INC_DEVICES_ETH_SW_H_ */

View File

@@ -12,27 +12,27 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define PWR_LEAD_ACID_BATT_DEV_TEMP_SENS_ADDR 0x18
#define PWR_LEAD_ACID_BATT_DEV_TEMP_SENS_ADDR 0x18
#define PWR_EXT_BATT_RSNSB 3 //milli ohms
#define PWR_EXT_BATT_RSNSI 2 //milli ohms
#define PWR_EXT_BATT_RSNSB 3 //milli ohms
#define PWR_EXT_BATT_RSNSI 2 //milli ohms
/*
* External Battery Temperature sensors Low, High and Critical Temeprature Alert Limits
*/
#define PWR_EXT_BATT_TEMP_LOW_LIMIT -20 //(in Celcius)
#define PWR_EXT_BATT_TEMP_HIGH_LIMIT 75 //(in Celcius)
#define PWR_EXT_BATT_TEMP_CRITICAL_LIMIT 80 //(in Celcius)
#define PWR_EXT_BATT_DIE_TEMP_LIMIT 60
#define PWR_EXT_BATT_TEMP_LOW_LIMIT -20 //(in Celcius)
#define PWR_EXT_BATT_TEMP_HIGH_LIMIT 75 //(in Celcius)
#define PWR_EXT_BATT_TEMP_CRITICAL_LIMIT 80 //(in Celcius)
#define PWR_EXT_BATT_DIE_TEMP_LIMIT 60
/* Config parameters for External battery charger */
#define PWR_EXTBATT_ICHARGE_VAL 10660 //milliAmps
#define PWR_EXTBATT_VCHARGE_VAL 12000 //milliVolts
#define PWR_EXTBATT_UNDERVOLTAGE_VAL 9500 //milliVolts
#define PWR_EXTBATT_OVERVOLTAGE_VAL 13800 //milliVolts
#define PWR_EXTBATT_INPUTBATTUNDERVOLATGE_VAL 16200 //milliVolts
#define PWR_EXTBATT_INPUTHICURRENT_VAL 17000 //milliAmps
#define PWR_EXTBATT_LOWBATTCURRENT_VAL 100 //milliAmps
#define PWR_EXTBATT_INPUTCURRENTLIMIT_VAL 16500 //milliAmps
#define PWR_EXTBATT_ICHARGE_VAL 10660 //milliAmps
#define PWR_EXTBATT_VCHARGE_VAL 12000 //milliVolts
#define PWR_EXTBATT_UNDERVOLTAGE_VAL 9500 //milliVolts
#define PWR_EXTBATT_OVERVOLTAGE_VAL 13800 //milliVolts
#define PWR_EXTBATT_INPUTBATTUNDERVOLATGE_VAL 16200 //milliVolts
#define PWR_EXTBATT_INPUTHICURRENT_VAL 17000 //milliAmps
#define PWR_EXTBATT_LOWBATTCURRENT_VAL 100 //milliAmps
#define PWR_EXTBATT_INPUTCURRENTLIMIT_VAL 16500 //milliAmps
#endif /* EXT_BATTERY_H_ */

View File

@@ -21,25 +21,30 @@
*****************************************************************************/
/* Mask/Enable Register Bits */
#define INA_ALERT_EN_MASK 0xF800 /* Upper 5 bits are the enable bits */
#define INA_MSK_SOL (1 << 15) /* Shunt over-voltage */
#define INA_MSK_SUL (1 << 14) /* Shunt under-voltage */
#define INA_MSK_BOL (1 << 13) /* Bus over-voltage */
#define INA_MSK_BUL (1 << 12) /* Bus under-voltage */
#define INA_MSK_POL (1 << 11) /* Power over limit */
#define INA_MSK_CNVR (1 << 10) /* Conversion ready - enable alert when
#define INA_MSK_SOL (1 << 15) /* Shunt over-voltage */
#define INA_MSK_SUL (1 << 14) /* Shunt under-voltage */
#define INA_MSK_BOL (1 << 13) /* Bus over-voltage */
#define INA_MSK_BUL (1 << 12) /* Bus under-voltage */
#define INA_MSK_POL (1 << 11) /* Power over limit */
#define INA_MSK_CNVR \
(1 << 10) /* Conversion ready - enable alert when
* CVRF is set (ready for next conversion) */
#define INA_MSK_AFF (1 << 4) /* Alert Function Flag (caused by alert)
#define INA_MSK_AFF \
(1 << 4) /* Alert Function Flag (caused by alert)
* In latch mode, cleared on mask read */
#define INA_MSK_CVRF (1 << 3) /* Conversion Ready Flag, cleared when
#define INA_MSK_CVRF \
(1 << 3) /* Conversion Ready Flag, cleared when
* writing to cfg reg or mask read */
#define INA_MSK_OVF (1 << 2) /* Math Overflow Flag (data may be invalid) */
#define INA_MSK_APOL (1 << 1) /* Alert Polarity (1 = invert, active high) */
#define INA_MSK_LEN (1 << 0) /* Alert Latch Enable
#define INA_MSK_OVF (1 << 2) /* Math Overflow Flag (data may be invalid) */
#define INA_MSK_APOL (1 << 1) /* Alert Polarity (1 = invert, active high) */
#define INA_MSK_LEN \
(1 << 0) /* Alert Latch Enable
* 1 Latch (alert only cleared by read to msk)
* 0 Transparent (auto-clear on fault clear) */
#define INA_HYSTERESIS 30 /* 30mA TODO: need to make more robust, maybe percentage based */
#define INA_HYSTERESIS \
30 /* 30mA TODO: need to make more robust, maybe percentage based */
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
@@ -56,8 +61,8 @@ typedef enum INA226_Event {
INA226_EVT_CUL, /* Current under limit - based on SUL */
} INA226_Event;
typedef void (*INA226_CallbackFn) (INA226_Event evt, uint16_t value,
void *context);
typedef void (*INA226_CallbackFn)(INA226_Event evt, uint16_t value,
void *context);
typedef struct INA226_Cfg {
I2C_Dev dev;
@@ -78,13 +83,12 @@ typedef struct INA226_Dev {
/*****************************************************************************
* FUNCTION DECLARATIONS
*****************************************************************************/
ReturnStatus ina226_readCurrentLim(INA226_Dev *dev, uint16_t* currLimit);
ReturnStatus ina226_readCurrentLim(INA226_Dev *dev, uint16_t *currLimit);
ReturnStatus ina226_setCurrentLim(INA226_Dev *dev, uint16_t currLimit);
ReturnStatus ina226_readBusVoltage(INA226_Dev *dev, uint16_t* busVoltValue);
ReturnStatus ina226_readShuntVoltage(INA226_Dev *dev,
uint16_t* shuntVoltValue);
ReturnStatus ina226_readCurrent(INA226_Dev *dev, uint16_t* currValue);
ReturnStatus ina226_readPower(INA226_Dev *dev, uint16_t* powValue);
ReturnStatus ina226_readBusVoltage(INA226_Dev *dev, uint16_t *busVoltValue);
ReturnStatus ina226_readShuntVoltage(INA226_Dev *dev, uint16_t *shuntVoltValue);
ReturnStatus ina226_readCurrent(INA226_Dev *dev, uint16_t *currValue);
ReturnStatus ina226_readPower(INA226_Dev *dev, uint16_t *powValue);
ReturnStatus ina226_init(INA226_Dev *dev);
void ina226_setAlertHandler(INA226_Dev *dev, INA226_CallbackFn alert_cb,
void *cb_context);

View File

@@ -12,15 +12,15 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define PWR_INT_BATT_RSNSB 30 //milli ohms
#define PWR_INT_BATT_RSNSI 7 //milli ohms
#define PWR_INT_BATT_RSNSB 30 //milli ohms
#define PWR_INT_BATT_RSNSI 7 //milli ohms
/* Config parameters for Internal battery charger */
#define PWR_INTBATT_UNDERVOLTAGE_VAL 9000 //milliVolts
#define PWR_INTBATT_OVERVOLTAGE_VAL 12600 //milliVolts
#define PWR_INTBATT_INPUTUNDERVOLATGE_VAL 16200 //milliVolts
#define PWR_INTBATT_INPUTOVERCURRENT_VAL 5000 //milliAmps
#define PWR_INTBATT_LOWBATTERYCURRENT_VAL 100 //milliAmps
#define PWR_INTBATT_INPUTCURRENTLIMIT_VAL 5570 //milliAmps
#define PWR_INTBATT_UNDERVOLTAGE_VAL 9000 //milliVolts
#define PWR_INTBATT_OVERVOLTAGE_VAL 12600 //milliVolts
#define PWR_INTBATT_INPUTUNDERVOLATGE_VAL 16200 //milliVolts
#define PWR_INTBATT_INPUTOVERCURRENT_VAL 5000 //milliAmps
#define PWR_INTBATT_LOWBATTERYCURRENT_VAL 100 //milliAmps
#define PWR_INTBATT_INPUTCURRENTLIMIT_VAL 5570 //milliAmps
#endif /* INT_BATTERY_H_ */

View File

@@ -22,34 +22,30 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define LED_OFF 0xFF
#define LED_OFF 0xFF
/* ClkX = fOSC/(2^(RegMisc[6:4]-1); 0x50-125kHz, 0x40-250KHz, 0x30-500KHz,
* 0x20-1MHz, 0x10-2MHz; Fading - Linear */
#define REG_MISC_VALUE 0x24
#define REG_MISC_VALUE 0x24
/* 4:0 => ON Time of IO[X]; If 0 : TOnX = Infinite;
* 1 - 15 : TOnX = 64 * RegTOnX * (255/ClkX);
* 16 - 31 : TOnX = 512 * RegTOnX * (255/ClkX) */
#define REG_T_ON_VALUE 0x10
#define REG_T_ON_VALUE 0x10
/* 7:3 - OFF Time of IO[X]; If 0 : TOffX = Infinite;
* 1 - 15 : TOffX = 64 * RegOffX[7:3] * (255/ClkX);
* 16 - 31 : TOffX = 512 * RegOffX[ 7:3] * (255/ClkX) */
/* 2:0 - OFF Intensity of IO[X] = >Linear mode : IOffX = 4 x RegOff[2:0] */
#define REG_OFF_VALUE 0x80
#define REG_OFF_VALUE 0x80
#define HCI_LED_TOTAL_NOS 14
#define HCI_LED_TOTAL_NOS 14
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
*****************************************************************************/
/* LED Test Params */
typedef enum {
HCI_LED_OFF = 0,
HCI_LED_RED,
HCI_LED_GREEN
} ledTestParam;
typedef enum { HCI_LED_OFF = 0, HCI_LED_RED, HCI_LED_GREEN } ledTestParam;
typedef enum {
HCI_LED_1 = 0,
@@ -86,6 +82,6 @@ ReturnStatus hci_led_turnon_red(const HciLedCfg *driver);
ReturnStatus hci_led_turnoff_all(const HciLedCfg *driver);
ReturnStatus hci_led_system_boot(const HciLedCfg *driver);
ReturnStatus led_init(const HciLedCfg *driver);
ePostCode led_probe(const HciLedCfg *driver,POSTData* postData);
ePostCode led_probe(const HciLedCfg *driver, POSTData *postData);
#endif /* INA226_H_ */

View File

@@ -22,24 +22,25 @@
*****************************************************************************/
/* Mask/Enable Register Bits */
#define LTC4015_ALERT_EN_MASK 0xFFFF /* Bits 15-0 are the enable bits(except bit 14) */
#define LTC4015_MSK_MSRV (1 << 15) /* Measurement system results valid */
#define LTC4015_MSK_QCL (1 << 13) /* QCOUNT Low alert */
#define LTC4015_MSK_QCH (1 << 12) /* QCOUNT High alert */
#define LTC4015_MSK_BVL (1 << 11) /* Battery voltage Low alert */
#define LTC4015_MSK_BVH (1 << 10) /* Battery voltage High alert */
#define LTC4015_MSK_IVL (1 << 9) /* Input voltage Low alert */
#define LTC4015_MSK_IVH (1 << 8) /* Input voltage High alert */
#define LTC4015_MSK_SVL (1 << 7) /* System voltage Low alert */
#define LTC4015_MSK_SVH (1 << 6) /* System voltage High alert */
#define LTC4015_MSK_ICH (1 << 5) /* Input current High alert */
#define LTC4015_MSK_BCL (1 << 4) /* Battery current Low alert */
#define LTC4015_MSK_DTH (1 << 3) /* Die temperature High alert */
#define LTC4015_MSK_BSRH (1 << 2) /* BSR High alert */
#define LTC4015_MSK_NTCH (1 << 1) /* NTC ratio High alert */
#define LTC4015_MSK_NTCL (1 << 0) /* NTC ratio Low alert */
#define LTC4015_ALERT_EN_MASK \
0xFFFF /* Bits 15-0 are the enable bits(except bit 14) */
#define LTC4015_MSK_MSRV (1 << 15) /* Measurement system results valid */
#define LTC4015_MSK_QCL (1 << 13) /* QCOUNT Low alert */
#define LTC4015_MSK_QCH (1 << 12) /* QCOUNT High alert */
#define LTC4015_MSK_BVL (1 << 11) /* Battery voltage Low alert */
#define LTC4015_MSK_BVH (1 << 10) /* Battery voltage High alert */
#define LTC4015_MSK_IVL (1 << 9) /* Input voltage Low alert */
#define LTC4015_MSK_IVH (1 << 8) /* Input voltage High alert */
#define LTC4015_MSK_SVL (1 << 7) /* System voltage Low alert */
#define LTC4015_MSK_SVH (1 << 6) /* System voltage High alert */
#define LTC4015_MSK_ICH (1 << 5) /* Input current High alert */
#define LTC4015_MSK_BCL (1 << 4) /* Battery current Low alert */
#define LTC4015_MSK_DTH (1 << 3) /* Die temperature High alert */
#define LTC4015_MSK_BSRH (1 << 2) /* BSR High alert */
#define LTC4015_MSK_NTCH (1 << 1) /* NTC ratio High alert */
#define LTC4015_MSK_NTCL (1 << 0) /* NTC ratio Low alert */
#define LTC4015_MSK_BMFA (1 << 1) /* Battery Missing Fault alert */
#define LTC4015_MSK_BMFA (1 << 1) /* Battery Missing Fault alert */
#define LTC4015_CHARGER_ENABLED (1 << 13)
@@ -58,17 +59,17 @@ typedef enum LTC4015_Chem {
typedef enum LTC4015_Event {
LTC4015_EVT_MSRV = LTC4015_MSK_MSRV, /* Measurement system results valid */
LTC4015_EVT_QCL = LTC4015_MSK_QCL, /* QCOUNT Low alert */
LTC4015_EVT_QCH = LTC4015_MSK_QCH, /* QCOUNT High alert */
LTC4015_EVT_BVL = LTC4015_MSK_BVL, /* Battery voltage Low alert */
LTC4015_EVT_BVH = LTC4015_MSK_BVH, /* Battery voltage High alert */
LTC4015_EVT_IVL = LTC4015_MSK_IVL, /* Input voltage Low alert */
LTC4015_EVT_IVH = LTC4015_MSK_IVH, /* Input voltage High alert */
LTC4015_EVT_SVL = LTC4015_MSK_SVL, /* System voltage Low alert */
LTC4015_EVT_SVH = LTC4015_MSK_SVH, /* System voltage High alert */
LTC4015_EVT_ICH = LTC4015_MSK_ICH, /* Input current High alert */
LTC4015_EVT_BCL = LTC4015_MSK_BCL, /* Battery current Low alert */
LTC4015_EVT_DTH = LTC4015_MSK_DTH, /* Die temperature High alert */
LTC4015_EVT_QCL = LTC4015_MSK_QCL, /* QCOUNT Low alert */
LTC4015_EVT_QCH = LTC4015_MSK_QCH, /* QCOUNT High alert */
LTC4015_EVT_BVL = LTC4015_MSK_BVL, /* Battery voltage Low alert */
LTC4015_EVT_BVH = LTC4015_MSK_BVH, /* Battery voltage High alert */
LTC4015_EVT_IVL = LTC4015_MSK_IVL, /* Input voltage Low alert */
LTC4015_EVT_IVH = LTC4015_MSK_IVH, /* Input voltage High alert */
LTC4015_EVT_SVL = LTC4015_MSK_SVL, /* System voltage Low alert */
LTC4015_EVT_SVH = LTC4015_MSK_SVH, /* System voltage High alert */
LTC4015_EVT_ICH = LTC4015_MSK_ICH, /* Input current High alert */
LTC4015_EVT_BCL = LTC4015_MSK_BCL, /* Battery current Low alert */
LTC4015_EVT_DTH = LTC4015_MSK_DTH, /* Die temperature High alert */
LTC4015_EVT_BSRH = LTC4015_MSK_BSRH, /* BSR High alert */
LTC4015_EVT_NTCL = LTC4015_MSK_NTCL, /* NTC ratio High alert */
LTC4015_EVT_NTCH = LTC4015_MSK_NTCH, /* NTC ratio Low alert */
@@ -76,14 +77,15 @@ typedef enum LTC4015_Event {
LTC4015_EVT_BMFA = LTC4015_MSK_BMFA, /* Battery Missing Fault alert */
} LTC4015_Event;
typedef void (*LTC4015_CallbackFn) (LTC4015_Event evt, int16_t value,
typedef void (*LTC4015_CallbackFn)(LTC4015_Event evt, int16_t value,
void *context);
typedef struct LTC4015_HWCfg {
I2C_Dev i2c_dev;
/* TODO: this can be read from the IC itself */
LTC4015_Chem chem; /* Battery chemistry we're controlling (verified during init) */
LTC4015_Chem
chem; /* Battery chemistry we're controlling (verified during init) */
uint8_t r_snsb; /* Value of SNSB resistor in milli-ohms */
uint8_t r_snsi; /* Value of SNSI resistor in milli-ohms */
@@ -108,8 +110,7 @@ typedef struct LTC4015_Dev {
/*****************************************************************************
* FUNCTION DECLARATIONS
*****************************************************************************/
ReturnStatus LTC4015_cfg_icharge(LTC4015_Dev *dev,
uint16_t max_chargeCurrent);
ReturnStatus LTC4015_cfg_icharge(LTC4015_Dev *dev, uint16_t max_chargeCurrent);
ReturnStatus LTC4015_get_cfg_icharge(LTC4015_Dev *dev,
uint16_t *max_chargeCurrent);
@@ -151,10 +152,10 @@ ReturnStatus LTC4015_get_cfg_battery_current_low(LTC4015_Dev *dev,
int16_t *lowbattCurrent);
ReturnStatus LTC4015_cfg_die_temperature_high(LTC4015_Dev *dev,
int16_t dieTemp);
int16_t dieTemp);
ReturnStatus LTC4015_get_cfg_die_temperature_high(LTC4015_Dev *dev,
int16_t *dieTemp);
int16_t *dieTemp);
ReturnStatus LTC4015_cfg_input_current_limit(LTC4015_Dev *dev,
uint16_t inputCurrentLimit);
@@ -162,34 +163,26 @@ ReturnStatus LTC4015_cfg_input_current_limit(LTC4015_Dev *dev,
ReturnStatus LTC4015_get_cfg_input_current_limit(LTC4015_Dev *dev,
uint16_t *currentLimit);
ReturnStatus LTC4015_get_die_temperature(LTC4015_Dev *dev,
int16_t *dieTemp);
ReturnStatus LTC4015_get_die_temperature(LTC4015_Dev *dev, int16_t *dieTemp);
ReturnStatus LTC4015_get_battery_current(LTC4015_Dev *dev,
int16_t *iBatt);
ReturnStatus LTC4015_get_battery_current(LTC4015_Dev *dev, int16_t *iBatt);
ReturnStatus LTC4015_get_input_current(LTC4015_Dev *dev,
int16_t *iIn);
ReturnStatus LTC4015_get_input_current(LTC4015_Dev *dev, int16_t *iIn);
ReturnStatus LTC4015_get_battery_voltage(LTC4015_Dev *dev,
int16_t *vbat);
ReturnStatus LTC4015_get_battery_voltage(LTC4015_Dev *dev, int16_t *vbat);
ReturnStatus LTC4015_get_input_voltage(LTC4015_Dev *dev,
int16_t *vIn);
ReturnStatus LTC4015_get_input_voltage(LTC4015_Dev *dev, int16_t *vIn);
ReturnStatus LTC4015_get_system_voltage(LTC4015_Dev *dev,
int16_t *vSys);
ReturnStatus LTC4015_get_system_voltage(LTC4015_Dev *dev, int16_t *vSys);
ReturnStatus LTC4015_get_icharge_dac(LTC4015_Dev *dev,
int16_t *ichargeDac);
ReturnStatus LTC4015_get_icharge_dac(LTC4015_Dev *dev, int16_t *ichargeDac);
ReturnStatus LTC4015_get_bat_presence(LTC4015_Dev *dev,
bool *present);
ReturnStatus LTC4015_get_bat_presence(LTC4015_Dev *dev, bool *present);
ReturnStatus LTC4015_init(LTC4015_Dev *dev);
void LTC4015_setAlertHandler(LTC4015_Dev *dev, LTC4015_CallbackFn alert_cb,
void *cb_context);
void *cb_context);
ReturnStatus LTC4015_enableLimitAlerts(LTC4015_Dev *dev, uint16_t alert_mask);

View File

@@ -20,52 +20,50 @@
#include <ti/sysbios/gates/GateMutex.h>
/* PSE Configuration */
#define LTC4274_INTERRUPT_MASK 0x00
#define LTC4274_OPERATING_MODE_SET 0x03
#define LTC4274_DETCET_CLASS_ENABLE 0x11
#define LTC4274_MISC_CONF 0xD1
#define LTC4274_INTERRUPT_MASK 0x00
#define LTC4274_OPERATING_MODE_SET 0x03
#define LTC4274_DETCET_CLASS_ENABLE 0x11
#define LTC4274_MISC_CONF 0xD1
/* PSE operating modes */
#define LTC4274_SHUTDOWN_MODE 0x00
#define LTC4274_MANUAL_MODE 0x01
#define LTC4274_SEMIAUTO_MODE 0x02
#define LTC4274_AUTO_MODE 0x03
#define LTC4274_SHUTDOWN_MODE 0x00
#define LTC4274_MANUAL_MODE 0x01
#define LTC4274_SEMIAUTO_MODE 0x02
#define LTC4274_AUTO_MODE 0x03
#define LTC4274_INTERRUPT_ENABLE 0x80
#define LTC4274_DETECT_ENABLE 0x40
#define LTC4274_FAST_IV 0x20
#define LTC4274_MSD_MASK 0x01
#define LTC4274_INTERRUPT_ENABLE 0x80
#define LTC4274_DETECT_ENABLE 0x40
#define LTC4274_FAST_IV 0x20
#define LTC4274_MSD_MASK 0x01
#define LTC4274_HP_ENABLE 0x11
#define LTC4274_HP_ENABLE 0x11
/* POE Device Info */
#define LTC4274_DEV_ID 0x0C
#define LTC4274_ADDRESS 0x2F
#define LTC4274_LTEPOE_90W 0x0E
#define LTC4274_DEV_ID 0x0C
#define LTC4274_ADDRESS 0x2F
#define LTC4274_LTEPOE_90W 0x0E
#define LTC4274_DEVID(x) (x>>3)
#define LTC4274_PWRGD(x) ((x&0x10)>>4)
#define LTC4374_CLASS(x) ((x&0xF0)>>4) /*if MSB is set it specifies LTEPOE++ device*/
#define LTC4374_DETECT(x) ((x&0x07))
#define LTC4274_DETECTION_COMPLETE(x) (x&0x01)
#define LTC4274_CLASSIFICATION_COMPLETE(x) (x&0x10)
#define LTC4274_DEVID(x) (x >> 3)
#define LTC4274_PWRGD(x) ((x & 0x10) >> 4)
#define LTC4374_CLASS(x) \
((x & 0xF0) >> 4) /*if MSB is set it specifies LTEPOE++ device*/
#define LTC4374_DETECT(x) ((x & 0x07))
#define LTC4274_DETECTION_COMPLETE(x) (x & 0x01)
#define LTC4274_CLASSIFICATION_COMPLETE(x) (x & 0x10)
typedef enum LTC4274_Event {
LTC4274_EVT_SUPPLY = 1 << 7,
LTC4274_EVT_TSTART = 1 << 6,
LTC4274_EVT_TCUT = 1 << 5,
LTC4274_EVT_CLASS = 1 << 4,
LTC4274_EVT_DETECTION = 1 << 3,
LTC4274_EVT_DISCONNECT = 1 << 2,
LTC4274_EVT_POWERGOOD = 1 << 1,
LTC4274_EVT_SUPPLY = 1 << 7,
LTC4274_EVT_TSTART = 1 << 6,
LTC4274_EVT_TCUT = 1 << 5,
LTC4274_EVT_CLASS = 1 << 4,
LTC4274_EVT_DETECTION = 1 << 3,
LTC4274_EVT_DISCONNECT = 1 << 2,
LTC4274_EVT_POWERGOOD = 1 << 1,
LTC4274_EVT_POWER_ENABLE = 1 << 0,
LTC4274_EVT_NONE = 0,
LTC4274_EVT_NONE = 0,
} LTC4274_Event; // From LTC4274 Datasheet, Interrupts table
typedef enum {
LTC4274_POWERGOOD = 0,
LTC4274_POWERGOOD_NOTOK
} ePSEPowerState;
typedef enum { LTC4274_POWERGOOD = 0, LTC4274_POWERGOOD_NOTOK } ePSEPowerState;
typedef enum {
LTC4274_DETECT_UNKOWN = 0,
@@ -87,33 +85,29 @@ typedef enum {
LTC4274_CLASSTYPE_RESERVED,
LTC4274_CLASSTYPE_0,
LTC4274_OVERCURRENT,
LTC4274_LTEPOE_TYPE_52_7W =0x09,
LTC4274_LTEPOE_TYPE_70W =0x0a,
LTC4274_LTEPOE_TYPE_90W=0x0b,
LTC4274_LTEPOE_TYPE_38_7W=0xe,
LTC4274_LTEPOE_TYPE_52_7W = 0x09,
LTC4274_LTEPOE_TYPE_70W = 0x0a,
LTC4274_LTEPOE_TYPE_90W = 0x0b,
LTC4274_LTEPOE_TYPE_38_7W = 0xe,
LTC4274_LTEPOE_RESERVED,
LTC4274_CLASS_ERROR
} ePSEClassType;
typedef enum {
LTC4274_STATE_OK = 0,
LTC4274_STATE_NOTOK
} ePSEState;
typedef enum { LTC4274_STATE_OK = 0, LTC4274_STATE_NOTOK } ePSEState;
typedef enum {
LTC4274_NO_ACTIVE_ALERT = 0x00,
LTC4274_POWER_ENABLE_ALERT = 0x01,
LTC4274_POWERGOOD_ALERT = 0x02,
LTC4274_DISCONNECT_ALERT = 0x04,
LTC4274_DETECTION_ALERT = 0x08,
LTC4274_CLASS_ALERT = 0x10,
LTC4274_TCUT_ALERT = 0x20,
LTC4274_TSTART_ALERT = 0x40,
LTC4274_SUPPLY_ALERT = 0x80
LTC4274_NO_ACTIVE_ALERT = 0x00,
LTC4274_POWER_ENABLE_ALERT = 0x01,
LTC4274_POWERGOOD_ALERT = 0x02,
LTC4274_DISCONNECT_ALERT = 0x04,
LTC4274_DETECTION_ALERT = 0x08,
LTC4274_CLASS_ALERT = 0x10,
LTC4274_TCUT_ALERT = 0x20,
LTC4274_TSTART_ALERT = 0x40,
LTC4274_SUPPLY_ALERT = 0x80
} ePSEAlert;
typedef void (*LTC4274_CallbackFn) (LTC4274_Event evt,
void *context);
typedef void (*LTC4274_CallbackFn)(LTC4274_Event evt, void *context);
typedef struct LTC4274_Cfg {
I2C_Dev i2c_dev;
@@ -132,34 +126,44 @@ typedef struct LTC4274_Dev {
LTC4274_Obj obj;
} LTC4274_Dev;
ReturnStatus ltc4274_set_cfg_operation_mode(const I2C_Dev *i2c_dev, uint8_t operatingMode);
ReturnStatus ltc4274_get_operation_mode(const I2C_Dev *i2c_dev, uint8_t *operatingMode);
ReturnStatus ltc4274_set_cfg_detect_enable(const I2C_Dev *i2c_dev, uint8_t detectEnable);
ReturnStatus ltc4274_get_detect_enable(const I2C_Dev *i2c_dev, uint8_t *detectVal);
ReturnStatus ltc4274_set_interrupt_mask(const I2C_Dev *i2c_dev, uint8_t interruptMask);
ReturnStatus ltc4274_get_interrupt_mask(const I2C_Dev *i2c_dev, uint8_t *intrMask);
ReturnStatus ltc4274_set_cfg_operation_mode(const I2C_Dev *i2c_dev,
uint8_t operatingMode);
ReturnStatus ltc4274_get_operation_mode(const I2C_Dev *i2c_dev,
uint8_t *operatingMode);
ReturnStatus ltc4274_set_cfg_detect_enable(const I2C_Dev *i2c_dev,
uint8_t detectEnable);
ReturnStatus ltc4274_get_detect_enable(const I2C_Dev *i2c_dev,
uint8_t *detectVal);
ReturnStatus ltc4274_set_interrupt_mask(const I2C_Dev *i2c_dev,
uint8_t interruptMask);
ReturnStatus ltc4274_get_interrupt_mask(const I2C_Dev *i2c_dev,
uint8_t *intrMask);
ReturnStatus ltc4274_cfg_interrupt_enable(const I2C_Dev *i2c_dev, bool enable);
ReturnStatus ltc4274_get_interrupt_enable(const I2C_Dev *i2c_dev, uint8_t *interruptEnable);
ReturnStatus ltc4274_set_cfg_pshp_feature(const I2C_Dev *i2c_dev, uint8_t hpEnable);
ReturnStatus ltc4274_get_pshp_feature(const I2C_Dev *i2c_dev, uint8_t *hpEnable);
ReturnStatus ltc4274_get_detection_status(const I2C_Dev *i2c_dev, ePSEDetection *pseDetect);
ReturnStatus ltc4274_get_class_status(const I2C_Dev *i2c_dev, ePSEClassType *pseClass);
ReturnStatus ltc4274_get_powergood_status(const I2C_Dev *i2c_dev, uint8_t *psePwrGood);
void ltc4274_set_alert_handler(LTC4274_Dev *dev, LTC4274_CallbackFn alert_cb, void *cb_context);
ReturnStatus ltc4274_clear_interrupt( const I2C_Dev *i2c_dev,
uint8_t *pwrEvent,
uint8_t *overCurrent,
uint8_t *supply);
ReturnStatus ltc4274_get_interrupt_enable(const I2C_Dev *i2c_dev,
uint8_t *interruptEnable);
ReturnStatus ltc4274_set_cfg_pshp_feature(const I2C_Dev *i2c_dev,
uint8_t hpEnable);
ReturnStatus ltc4274_get_pshp_feature(const I2C_Dev *i2c_dev,
uint8_t *hpEnable);
ReturnStatus ltc4274_get_detection_status(const I2C_Dev *i2c_dev,
ePSEDetection *pseDetect);
ReturnStatus ltc4274_get_class_status(const I2C_Dev *i2c_dev,
ePSEClassType *pseClass);
ReturnStatus ltc4274_get_powergood_status(const I2C_Dev *i2c_dev,
uint8_t *psePwrGood);
void ltc4274_set_alert_handler(LTC4274_Dev *dev, LTC4274_CallbackFn alert_cb,
void *cb_context);
ReturnStatus ltc4274_clear_interrupt(const I2C_Dev *i2c_dev, uint8_t *pwrEvent,
uint8_t *overCurrent, uint8_t *supply);
ReturnStatus ltc4274_get_interrupt_status(const I2C_Dev *i2c_dev, uint8_t *val);
ReturnStatus ltc4274_debug_write(const I2C_Dev *i2c_dev,
uint8_t reg_address, uint8_t value);
ReturnStatus ltc4274_debug_read(const I2C_Dev *i2c_dev,
uint8_t reg_address, uint8_t *value);
ReturnStatus ltc4274_debug_write(const I2C_Dev *i2c_dev, uint8_t reg_address,
uint8_t value);
ReturnStatus ltc4274_debug_read(const I2C_Dev *i2c_dev, uint8_t reg_address,
uint8_t *value);
void ltc4274_enable(LTC4274_Dev *dev, uint8_t enableVal);
ReturnStatus ltc4274_get_devid(const I2C_Dev *i2c_dev,
uint8_t *devID);
ReturnStatus ltc4274_detect(const I2C_Dev *i2c_dev,
uint8_t *detect, uint8_t *val);
ReturnStatus ltc4274_get_devid(const I2C_Dev *i2c_dev, uint8_t *devID);
ReturnStatus ltc4274_detect(const I2C_Dev *i2c_dev, uint8_t *detect,
uint8_t *val);
void ltc4274_config(LTC4274_Dev *dev);
ePostCode ltc4274_probe(const LTC4274_Dev *i2c_dev, POSTData *postData);
void ltc4274_init(LTC4274_Dev *dev);

View File

@@ -21,12 +21,9 @@
typedef enum {
LTC4275_STATUS_CLASS = 0x00,
LTC4275_STATUS_POWERGOOD = 0x01,
}eltc4275StatusParamId;
} eltc4275StatusParamId;
typedef enum {
LTC4275_POWERGOOD = 0,
LTC4275_POWERGOOD_NOTOK
} ePDPowerState;
typedef enum { LTC4275_POWERGOOD = 0, LTC4275_POWERGOOD_NOTOK } ePDPowerState;
typedef enum {
LTC4275_CLASSTYPE_UNKOWN = 0,
@@ -36,10 +33,7 @@ typedef enum {
LTC4275_CLASSTYPE_POEPP
} ePDClassType;
typedef enum {
LTC4275_STATE_OK = 0,
LTC4275_STATE_NOTOK
} ePDState;
typedef enum { LTC4275_STATE_OK = 0, LTC4275_STATE_NOTOK } ePDState;
typedef enum {
LTC4275_CONNECT_ALERT = 1,
@@ -48,29 +42,28 @@ typedef enum {
} ePDAlert;
typedef enum {
LTC4275_CONNECT_EVT = 1 << 2, /* PD device Connected. */
LTC4275_DISCONNECT_EVT = 1 << 1, /* PD device removed. */
LTC4275_INCOMPATIBLE_EVT = 1 << 0, /* Incomaptible device */
LTC4275_CONNECT_EVT = 1 << 2, /* PD device Connected. */
LTC4275_DISCONNECT_EVT = 1 << 1, /* PD device removed. */
LTC4275_INCOMPATIBLE_EVT = 1 << 0, /* Incomaptible device */
} LTC4275_Event;
typedef struct __attribute__((packed, aligned(1))) {
uint8_t classStatus;
uint8_t powerGoodStatus;
}tPower_PDStatus;
uint8_t classStatus;
uint8_t powerGoodStatus;
} tPower_PDStatus;
typedef struct __attribute__((packed, aligned(1))) {
tPower_PDStatus pdStatus;
ePDState state;
ePDAlert pdalert;
}tPower_PDStatus_Info;
ePDState state;
ePDAlert pdalert;
} tPower_PDStatus_Info;
typedef struct LTC4275_Cfg {
OcGpio_Pin *pin_evt;
OcGpio_Pin *pin_detect;
} LTC4275_Cfg;
typedef void (*LTC4275_CallbackFn) (LTC4275_Event evt,
void *context);
typedef void (*LTC4275_CallbackFn)(LTC4275_Event evt, void *context);
typedef struct LTC4275_Obj {
LTC4275_CallbackFn alert_cb;
void *cb_context;
@@ -88,7 +81,8 @@ typedef struct LTC4275A_Dev {
void ltc4275_config(const LTC4275_Dev *dev);
ePostCode ltc4275_probe(const LTC4275_Dev *dev, POSTData *postData);
ReturnStatus ltc4275_init(LTC4275_Dev *dev);
void ltc4275_set_alert_handler(LTC4275_Dev *dev, LTC4275_CallbackFn alert_cb, void *cb_context);
void ltc4275_set_alert_handler(LTC4275_Dev *dev, LTC4275_CallbackFn alert_cb,
void *cb_context);
ReturnStatus ltc4275_get_power_good(const LTC4275_Dev *dev, ePDPowerState *val);
ReturnStatus ltc4275_get_class(const LTC4275_Dev *dev, ePDClassType *val);
void ltc4275_update_status(const LTC4275_Dev *dev);

View File

@@ -27,40 +27,40 @@ typedef enum {
} ePowerSource;
typedef enum {
PWR_SRC_ACTIVE = 0, /* If source is primary source */
PWR_SRC_AVAILABLE, /* If source is available */
PWR_SRC_NON_AVAILABLE /* If source is not connected */
PWR_SRC_ACTIVE = 0, /* If source is primary source */
PWR_SRC_AVAILABLE, /* If source is available */
PWR_SRC_NON_AVAILABLE /* If source is not connected */
} ePowerSourceState;
typedef enum {
PWR_STAT_POE_AVAILABILITY = 0x00,
PWR_STAT_POE_ACCESSIBILITY = 0x01,
PWR_STAT_SOLAR_AVAILABILITY = 0x02,
PWR_STAT_SOLAR_ACCESSIBILITY = 0x03,
PWR_STAT_EXTBATT_AVAILABILITY = 0x04,
PWR_STAT_EXTBATT_ACCESSIBILITY = 0x05,
PWR_STAT_INTBATT_AVAILABILITY = 0x06,
PWR_STAT_INTBATT_ACCESSIBILITY = 0x07
}ePower_StatusParamId;
PWR_STAT_POE_AVAILABILITY = 0x00,
PWR_STAT_POE_ACCESSIBILITY = 0x01,
PWR_STAT_SOLAR_AVAILABILITY = 0x02,
PWR_STAT_SOLAR_ACCESSIBILITY = 0x03,
PWR_STAT_EXTBATT_AVAILABILITY = 0x04,
PWR_STAT_EXTBATT_ACCESSIBILITY = 0x05,
PWR_STAT_INTBATT_AVAILABILITY = 0x06,
PWR_STAT_INTBATT_ACCESSIBILITY = 0x07
} ePower_StatusParamId;
typedef enum {
PWR_STATUS_POE_AVAILABILITY = 0x01,
PWR_STATUS_POE_ACCESSIBILITY = 0x02,
PWR_STATUS_SOLAR_AVAILABILITY = 0x04,
PWR_STATUS_SOLAR_ACCESSIBILITY = 0x08,
PWR_STATUS_EXTBATT_AVAILABILITY = 0x10,
PWR_STATUS_POE_AVAILABILITY = 0x01,
PWR_STATUS_POE_ACCESSIBILITY = 0x02,
PWR_STATUS_SOLAR_AVAILABILITY = 0x04,
PWR_STATUS_SOLAR_ACCESSIBILITY = 0x08,
PWR_STATUS_EXTBATT_AVAILABILITY = 0x10,
PWR_STATUS_EXTBATT_ACCESSIBILITY = 0x20,
PWR_STATUS_INTBATT_AVAILABILITY = 0x40,
PWR_STATUS_INTBATT_AVAILABILITY = 0x40,
PWR_STATUS_INTBATT_ACCESSIBILITY = 0x80,
PWR_STATUS_PARAM_MAX = 0x100
}ePower_StatusParam;
PWR_STATUS_PARAM_MAX = 0x100
} ePower_StatusParam;
typedef struct {
ePowerSource powerSource;
ePowerSourceState state;
} tPowerSource;
typedef struct __attribute__((packed, aligned(1))) {
typedef struct __attribute__((packed, aligned(1))) {
uint8_t poeAvail;
uint8_t poeAccess;
uint8_t solarAvail;
@@ -89,7 +89,8 @@ typedef struct PWRSRC_Dev {
void pwr_source_init(void);
void pwr_get_source_info(PWRSRC_Dev *pwrSrcDev);
ReturnStatus pwr_process_get_status_parameters_data(
ePower_StatusParamId paramIndex, uint8_t *pPowerStatusData);
ReturnStatus
pwr_process_get_status_parameters_data(ePower_StatusParamId paramIndex,
uint8_t *pPowerStatusData);
#endif /* POWERSOURCE_H_ */

View File

@@ -12,20 +12,20 @@
#include <stdint.h>
typedef enum {
IRIDIUM_IMEI = 0,
IRIDIUM_MFG = 1,
IRIDIUM_MODEL = 2,
IRIDIUM_SIG_QUALITY = 3,
IRIDIUM_REGSTATUS = 4,
IRIDIUM_NO_OUT_MSG = 5,
IRIDIUM_LASTERR = 6,
IRIDIUM_PARAM_MAX /* Limiter */
IRIDIUM_IMEI = 0,
IRIDIUM_MFG = 1,
IRIDIUM_MODEL = 2,
IRIDIUM_SIG_QUALITY = 3,
IRIDIUM_REGSTATUS = 4,
IRIDIUM_NO_OUT_MSG = 5,
IRIDIUM_LASTERR = 6,
IRIDIUM_PARAM_MAX /* Limiter */
} eOBC_StatusParam;
typedef enum {
ERR_RC_INTERNAL = 0,
ERR_SRC_CMS = 1,
ERR_SRC_CME = 2
ERR_RC_INTERNAL = 0,
ERR_SRC_CMS = 1,
ERR_SRC_CME = 2
} eOBC_ErrorSource;
typedef struct OBC_lastError {

View File

@@ -28,15 +28,14 @@ typedef enum SE98A_Event {
SE98A_EVT_BAW = 1 << 0, /* Below alarm window */
} SE98A_Event;
typedef enum
{
typedef enum {
CONF_TEMP_SE98A_LOW_LIMIT_REG = 1,
CONF_TEMP_SE98A_HIGH_LIMIT_REG,
CONF_TEMP_SE98A_CRITICAL_LIMIT_REG
}eTempSensor_ConfigParamsId;
} eTempSensor_ConfigParamsId;
typedef void (*SE98A_CallbackFn) (SE98A_Event evt, int8_t temperature,
void *context);
typedef void (*SE98A_CallbackFn)(SE98A_Event evt, int8_t temperature,
void *context);
typedef struct SE98A_Cfg {
I2C_Dev dev;
@@ -84,7 +83,7 @@ ReturnStatus se98a_enable_alerts(SE98A_Dev *dev);
* @param dev Device struct pointer, Post data struct
* @return POST_DEV_FOUND on success, error code on failure
*/
ePostCode se98a_probe(SE98A_Dev *dev, POSTData *postData);
ePostCode se98a_probe(SE98A_Dev *dev, POSTData *postData);
/*! Sets one of the 3 alert thresholds on the device
* @param dev Device struct pointer
@@ -104,7 +103,7 @@ ReturnStatus se98a_set_limit(SE98A_Dev *dev,
*/
ReturnStatus se98a_get_limit(SE98A_Dev *dev,
eTempSensor_ConfigParamsId limitToConfig,
int8_t* tempLimitValue);
int8_t *tempLimitValue);
/*! Reads the current temperature from the sensor
* @param dev Device struct pointer

View File

@@ -19,40 +19,36 @@
* MACRO DEFINITIONS
*****************************************************************************/
/* Oscillator frequency source */
#define SX1509_EXTERNAL_CLOCK 1
#define SX1509_INTERNAL_CLOCK_2MHZ 2
#define SX1509_EXTERNAL_CLOCK 1
#define SX1509_INTERNAL_CLOCK_2MHZ 2
/* OSCIO pin function */
#define SX1509_CLOCK_OSC_IN 0
#define SX1509_CLOCK_OSC_OUT 1
#define SX1509_CLOCK_OSC_IN 0
#define SX1509_CLOCK_OSC_OUT 1
/* IO pin definitions */
#define SX1509_IO_PIN_0 0x0001
#define SX1509_IO_PIN_1 0x0002
#define SX1509_IO_PIN_2 0x0004
#define SX1509_IO_PIN_3 0x0008
#define SX1509_IO_PIN_4 0x0010
#define SX1509_IO_PIN_5 0x0020
#define SX1509_IO_PIN_6 0x0040
#define SX1509_IO_PIN_7 0x0080
#define SX1509_IO_PIN_8 0x0001
#define SX1509_IO_PIN_9 0x0002
#define SX1509_IO_PIN_10 0x0004
#define SX1509_IO_PIN_11 0x0008
#define SX1509_IO_PIN_12 0x0010
#define SX1509_IO_PIN_13 0x0020
#define SX1509_IO_PIN_14 0x0040
#define SX1509_IO_PIN_15 0x0080
#define SX1509_IO_PIN_0 0x0001
#define SX1509_IO_PIN_1 0x0002
#define SX1509_IO_PIN_2 0x0004
#define SX1509_IO_PIN_3 0x0008
#define SX1509_IO_PIN_4 0x0010
#define SX1509_IO_PIN_5 0x0020
#define SX1509_IO_PIN_6 0x0040
#define SX1509_IO_PIN_7 0x0080
#define SX1509_IO_PIN_8 0x0001
#define SX1509_IO_PIN_9 0x0002
#define SX1509_IO_PIN_10 0x0004
#define SX1509_IO_PIN_11 0x0008
#define SX1509_IO_PIN_12 0x0010
#define SX1509_IO_PIN_13 0x0020
#define SX1509_IO_PIN_14 0x0040
#define SX1509_IO_PIN_15 0x0080
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
*****************************************************************************/
/* Enumeration of SX1509 register types */
typedef enum {
SX1509_REG_A = 0,
SX1509_REG_B,
SX1509_REG_AB
} sx1509RegType;
typedef enum { SX1509_REG_A = 0, SX1509_REG_B, SX1509_REG_AB } sx1509RegType;
typedef enum {
SX1509_EDGE_SENSE_REG_LOW = 0,
@@ -63,18 +59,13 @@ typedef enum {
/*****************************************************************************
* FUNCTION DECLARATIONS
*****************************************************************************/
ReturnStatus ioexp_led_get_data(const I2C_Dev *i2c_dev,
sx1509RegType regType,
ReturnStatus ioexp_led_get_data(const I2C_Dev *i2c_dev, sx1509RegType regType,
uint8_t *regValue);
ReturnStatus ioexp_led_set_data(const I2C_Dev *i2c_dev,
sx1509RegType regType,
uint8_t regValue1,
uint8_t regValue2);
ReturnStatus ioexp_led_set_on_time(const I2C_Dev *i2c_dev,
uint8_t index,
ReturnStatus ioexp_led_set_data(const I2C_Dev *i2c_dev, sx1509RegType regType,
uint8_t regValue1, uint8_t regValue2);
ReturnStatus ioexp_led_set_on_time(const I2C_Dev *i2c_dev, uint8_t index,
uint8_t tOnRegValue);
ReturnStatus ioexp_led_set_off_time(const I2C_Dev *i2c_dev,
uint8_t index,
ReturnStatus ioexp_led_set_off_time(const I2C_Dev *i2c_dev, uint8_t index,
uint8_t tOffRegValue);
ReturnStatus ioexp_led_software_reset(const I2C_Dev *i2c_dev);
ReturnStatus ioexp_led_config_inputbuffer(const I2C_Dev *i2c_dev,
@@ -86,9 +77,9 @@ ReturnStatus ioexp_led_config_pullup(const I2C_Dev *i2c_dev,
uint8_t pullUpRegValue1,
uint8_t pullUpRegValue2);
ReturnStatus ioexp_led_config_pulldown(const I2C_Dev *i2c_dev,
sx1509RegType regType,
uint8_t pullDownRegValue1,
uint8_t pullDownRegValue2);
sx1509RegType regType,
uint8_t pullDownRegValue1,
uint8_t pullDownRegValue2);
ReturnStatus ioexp_led_config_opendrain(const I2C_Dev *i2c_dev,
sx1509RegType regType,
uint8_t openDrainRegValue1,
@@ -101,11 +92,9 @@ ReturnStatus ioexp_led_config_polarity(const I2C_Dev *i2c_dev,
sx1509RegType regType,
uint8_t polarityRegValue1,
uint8_t polarityRegValue2);
ReturnStatus ioexp_led_config_clock(const I2C_Dev *i2c_dev,
uint8_t oscSource,
ReturnStatus ioexp_led_config_clock(const I2C_Dev *i2c_dev, uint8_t oscSource,
uint8_t oscPin);
ReturnStatus ioexp_led_config_misc(const I2C_Dev *i2c_dev,
uint8_t regValue);
ReturnStatus ioexp_led_config_misc(const I2C_Dev *i2c_dev, uint8_t regValue);
ReturnStatus ioexp_led_enable_leddriver(const I2C_Dev *i2c_dev,
sx1509RegType regType,
uint8_t ledEnableRegValue1,
@@ -117,13 +106,13 @@ ReturnStatus ioexp_led_config_interrupt(const I2C_Dev *i2c_dev,
uint8_t interruptMaskRegValue1,
uint8_t interruptMaskRegValue2);
ReturnStatus ioexp_led_config_edge_sense_A(const I2C_Dev *i2c_dev,
sx1509EdgeSenseRegType regType,
uint8_t edgeSenseLowARegValue,
uint8_t edgeSenseHighARegValue);
sx1509EdgeSenseRegType regType,
uint8_t edgeSenseLowARegValue,
uint8_t edgeSenseHighARegValue);
ReturnStatus ioexp_led_config_edge_sense_A(const I2C_Dev *i2c_dev,
sx1509EdgeSenseRegType regType,
uint8_t edgeSenseLowBRegValue,
uint8_t edgeSenseHighBRegValue);
sx1509EdgeSenseRegType regType,
uint8_t edgeSenseLowBRegValue,
uint8_t edgeSenseHighBRegValue);
ReturnStatus ioexp_led_config_edge_sense_B(const I2C_Dev *i2c_dev,
sx1509EdgeSenseRegType regType,
uint8_t edgeSenseLowBRegValue,

View File

@@ -17,14 +17,14 @@
/*****************************************************************************
* MACROS DEFINITION
*****************************************************************************/
#define OCUARTDMA_TASK_PRIORITY 7
#define OCUARTDMA_TASK_STACK_SIZE 1024
#define OCUARTDMA_TASK_PRIORITY 7
#define OCUARTDMA_TASK_STACK_SIZE 1024
#define OCUARTDMATX_TASK_PRIORITY 7
#define OCUARTDMATX_TASK_STACK_SIZE 1024
#define OCUARTDMATX_TASK_PRIORITY 7
#define OCUARTDMATX_TASK_STACK_SIZE 1024
#define UART_TXBUF_SIZE OCMP_FRAME_TOTAL_LENGTH
#define UART_RXBUF_SIZE OCMP_FRAME_TOTAL_LENGTH
#define UART_TXBUF_SIZE OCMP_FRAME_TOTAL_LENGTH
#define UART_RXBUF_SIZE OCMP_FRAME_TOTAL_LENGTH
/*****************************************************************************
* HANDLE DECLARATIONS

View File

@@ -65,8 +65,7 @@ extern void USBCDCD_init(void);
* @return Number of bytes added to the USB Buffer for transmission
*/
extern unsigned int USBCDCD_sendData(const unsigned char *pStr,
unsigned int length,
unsigned int timeout);
unsigned int length, unsigned int timeout);
/*!
* ======== USBCDCD_receiveData ========

View File

@@ -18,16 +18,16 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define BMS_TASK_PRIORITY 2
#define BMS_TASK_STACK_SIZE 2048
#define BMS_TASK_PRIORITY 2
#define BMS_TASK_STACK_SIZE 2048
/*
* Define all the constant information of BMS subsystem here, like device
* addresses or Constant configuration values or NUMBER of sensors
*/
#define BMS_EC_TEMP_SENSOR_ADDR 0x19
#define BMS_EC_CURRENT_SENSOR_12V_ADDR 0x40
#define BMS_EC_CURRENT_SENSOR_3P3V_ADDR 0x45
#define BMS_EC_TEMP_SENSOR_ADDR 0x19
#define BMS_EC_CURRENT_SENSOR_12V_ADDR 0x40
#define BMS_EC_CURRENT_SENSOR_3P3V_ADDR 0x45
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS

View File

@@ -12,6 +12,6 @@
#include <stdbool.h>
void ethernet_switch_setup();
bool eth_sw_pre_init(void** driver, void *returnValue);
bool eth_sw_pre_init(void **driver, void *returnValue);
#endif /* ETHERNETSS_H_ */

View File

@@ -14,8 +14,8 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define EBMP_TASK_STACK_SIZE 1024
#define EBMP_TASK_PRIORITY 2
#define EBMP_TASK_STACK_SIZE 1024
#define EBMP_TASK_PRIORITY 2
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
@@ -46,7 +46,7 @@ typedef enum {
} apStates;
typedef enum {
AP_RESET = 0,
AP_RESET = 0,
AP_BOOT_PROGRESS_MONITOR_1 = 1,
AP_BOOT_PROGRESS_MONITOR_2 = 2
} apBootMonitor;
@@ -54,6 +54,6 @@ typedef enum {
/*****************************************************************************
* FUNCTION DECLARATIONS
*****************************************************************************/
void ebmp_init(Gpp_gpioCfg* driver);
void ebmp_init(Gpp_gpioCfg *driver);
#endif /* EBMP_H_ */

View File

@@ -20,23 +20,23 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define GPP_TASK_PRIORITY 2
#define GPP_TASK_STACK_SIZE 2048
#define GPP_TASK_PRIORITY 2
#define GPP_TASK_STACK_SIZE 2048
/*
* Define all the constant information of GPP subsystem here, like device
* addresses or Constant configuration values or NUMBER of sensors.
*/
#define GPP_TEMP_SENSOR_NOS 3
#define GPP_TEMP_SENSOR_NOS 3
/*
* Device address of GPP sub system are as below.
*/
#define GPP_AP_TEMPSENS1_ADDR 0x1A
#define GPP_AP_TEMPSENS2_ADDR 0x1D
#define GPP_AP_TEMPSENS3_ADDR 0x1C
#define GPP_AP_CURRENT_SENSOR_ADDR 0x44
#define GPP_MSATA_CURRENT_SENSOR_ADDR 0x45
#define GPP_AP_TEMPSENS1_ADDR 0x1A
#define GPP_AP_TEMPSENS2_ADDR 0x1D
#define GPP_AP_TEMPSENS3_ADDR 0x1C
#define GPP_AP_CURRENT_SENSOR_ADDR 0x44
#define GPP_MSATA_CURRENT_SENSOR_ADDR 0x45
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS

View File

@@ -19,8 +19,8 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define HCI_TASK_PRIORITY 6
#define HCI_TASK_STACK_SIZE 4096
#define HCI_TASK_PRIORITY 6
#define HCI_TASK_STACK_SIZE 4096
#define HCI_LED_TEMP_SENSOR_ADDR 0x1A

View File

@@ -20,8 +20,8 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define LED_SX1509_LEFT_ADDRESS 0x3E
#define LED_SX1509_RIGHT_ADDRESS 0x3F
#define LED_SX1509_LEFT_ADDRESS 0x3E
#define LED_SX1509_RIGHT_ADDRESS 0x3F
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS

View File

@@ -21,8 +21,8 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define RFFE_TASK_PRIORITY 2
#define RFFE_TASK_STACK_SIZE 2048
#define RFFE_TASK_PRIORITY 2
#define RFFE_TASK_STACK_SIZE 2048
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
@@ -50,21 +50,21 @@ typedef struct Fe_Lna_Cfg {
} Fe_Lna_Cfg;
typedef struct Fe_Ch1_Gain_Cfg {
Fe_Gain_Cfg* fe_gain_cfg;
Fe_Gain_Cfg *fe_gain_cfg;
} Fe_Ch1_Gain_Cfg;
typedef struct Fe_Ch2_Gain_Cfg {
OcGpio_Pin pin_ch1_2g_lb_band_sel_l;
Fe_Gain_Cfg* fe_gain_cfg;
Fe_Gain_Cfg *fe_gain_cfg;
} Fe_Ch2_Gain_Cfg;
typedef struct Fe_Ch1_Lna_Cfg {
Fe_Lna_Cfg* fe_lna_cfg;
Fe_Lna_Cfg *fe_lna_cfg;
} Fe_Ch1_Lna_Cfg;
typedef struct Fe_Ch2_Lna_Cfg {
OcGpio_Pin pin_ch1_rf_pwr_off;
Fe_Lna_Cfg* fe_lna_cfg;
Fe_Lna_Cfg *fe_lna_cfg;
} Fe_Ch2_Lna_Cfg;
typedef struct Fe_Watchdog_Cfg {
@@ -82,15 +82,15 @@ typedef struct Fe_gpioCfg {
OcGpio_Pin pin_rf_pgood_ldo;
OcGpio_Pin pin_fe_12v_ctrl;
OcGpio_Pin pin_trxfe_conn_reset;
}Fe_gpioCfg;
} Fe_gpioCfg;
typedef struct Fe_Cfg {
Fe_gpioCfg* fe_gpio_cfg;
Fe_Ch1_Gain_Cfg* fe_ch1_gain_cfg;
Fe_Ch2_Gain_Cfg* fe_ch2_gain_cfg;
Fe_Ch1_Lna_Cfg* fe_ch1_lna_cfg;
Fe_Ch2_Lna_Cfg* fe_ch2_lna_cfg;
Fe_Watchdog_Cfg* fe_watchdog_cfg;
Fe_gpioCfg *fe_gpio_cfg;
Fe_Ch1_Gain_Cfg *fe_ch1_gain_cfg;
Fe_Ch2_Gain_Cfg *fe_ch2_gain_cfg;
Fe_Ch1_Lna_Cfg *fe_ch1_lna_cfg;
Fe_Ch2_Lna_Cfg *fe_ch2_lna_cfg;
Fe_Watchdog_Cfg *fe_watchdog_cfg;
} Fe_Cfg;
typedef struct __attribute__((packed, aligned(1))) {

View File

@@ -19,7 +19,7 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define RFFE_IO_BOARD_CFG_ADDR 0x19
#define RFFE_IO_BOARD_CFG_ADDR 0x19
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
@@ -33,7 +33,7 @@ typedef enum rfChannel {
typedef struct FE_Ch_Band_cfg {
rffeChannel channel;
}FE_Ch_Band_cfg;
} FE_Ch_Band_cfg;
/* RFFE Band Type */
typedef enum {
@@ -49,7 +49,7 @@ typedef enum {
typedef struct FE_Band_Cfg {
rffeBand band;
}FE_Band_Cfg;
} FE_Band_Cfg;
/* Power Amplifier Control Type */
typedef enum rfPACtrl {

View File

@@ -18,24 +18,21 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define RFFEPOWERMONITOR_TASK_PRIORITY 2
#define RFFEPOWERMONITOR_TASK_STACK_SIZE 1024
#define RFFEPOWERMONITOR_TASK_PRIORITY 2
#define RFFEPOWERMONITOR_TASK_STACK_SIZE 1024
/* RF POWER Detector Device Addresses */
#define RFFE_CHANNEL1_ADC_ADDR 0x4A
#define RFFE_CHANNEL2_ADC_ADDR 0x48
#define RFFE_CHANNEL1_ADC_ADDR 0x4A
#define RFFE_CHANNEL2_ADC_ADDR 0x48
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
*****************************************************************************/
typedef enum {
RFFE_STAT_FW_POWER = 1,
RFFE_STAT_REV_POWER
} eRffeStatusParamId;
typedef enum { RFFE_STAT_FW_POWER = 1, RFFE_STAT_REV_POWER } eRffeStatusParamId;
typedef enum {
RFFE_STATUS_FW_POWER = 0x01,
RFFE_STATUS_REV_POWER = 0x02,
RFFE_STATUS_FW_POWER = 0x01,
RFFE_STATUS_REV_POWER = 0x02,
RFFE_STATUS_PARAMS_MAX = 0x04
} eRffeStatusParam;
@@ -71,8 +68,8 @@ typedef enum FePowerStatus {
* FUNCTION DECLARATIONS
*****************************************************************************/
ReturnStatus rffe_powermonitor_read_power(const I2C_Dev *i2c_dev,
eRffeStatusParamId rfPowerSelect,
uint16_t *rfpower);
eRffeStatusParamId rfPowerSelect,
uint16_t *rfpower);
void rffe_powermonitor_createtask(void);
#endif /* RFFE_POWERMONITOR_H_ */

View File

@@ -13,11 +13,11 @@
* MACRO DEFINITIONS
*****************************************************************************/
/* RFFE Temperature Sensor Device Addresses */
#define RFFE_CH1_TEMP_SENSOR_ADDR 0x4B
#define RFFE_CH2_TEMP_SENSOR_ADDR 0x4C
#define RFFE_CH1_TEMP_SENSOR_ADDR 0x4B
#define RFFE_CH2_TEMP_SENSOR_ADDR 0x4C
/* RFFE INA226 Sensor Device Addresses */
#define RFFE_INA226_CH1_5_7V_ADDR 0x41
#define RFFE_INA226_CH2_5_7V_ADDR 0x40
#define RFFE_INA226_CH1_5_7V_ADDR 0x41
#define RFFE_INA226_CH2_5_7V_ADDR 0x40
#endif /* RFFE_SENSOR_H_ */

View File

@@ -17,14 +17,13 @@
#include "inc/devices/eeprom.h"
#include "inc/devices/ina226.h"
#include <stdbool.h>
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define SDR_TASK_PRIORITY 2
#define SDR_TASK_STACK_SIZE 4096
#define SDR_TASK_PRIORITY 2
#define SDR_TASK_STACK_SIZE 4096
/*
* Define all the constant information of RF SDR subsystem here, like device
@@ -32,14 +31,14 @@
*/
/* SDR Temperature Sensor Device Addresses */
#define SDR_FPGA_TEMP_SENSOR_ADDR 0x4C
#define SDR_FPGA_TEMP_SENSOR_ADDR 0x4C
/* SDR INA226 Sensor Device Addresses */
#define SDR_FPGA_CURRENT_SENSOR_ADDR 0x44
#define SDR_CURRENT_SENSOR_ADDR 0x41
#define SDR_FPGA_CURRENT_SENSOR_ADDR 0x44
#define SDR_CURRENT_SENSOR_ADDR 0x41
/* FX3 IO Expander Device Address */
#define SDR_EEPROM_IOEXP_ADDRESS 0x1F
#define SDR_EEPROM_IOEXP_ADDRESS 0x1F
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
@@ -57,17 +56,18 @@ typedef struct Sdr_gpioCfg {
OcGpio_Pin pin_sdr_reset_in;
OcGpio_Pin pin_ec_trxfe_reset;
OcGpio_Pin pin_fx3_reset;
}Sdr_gpioCfg;
} Sdr_gpioCfg;
/*****************************************************************************
* FUNCTION DECLARATIONS
*****************************************************************************/
void sdr_pwr_control(Sdr_gpioCfg *driver, uint8_t control); /* TODO: hack to let OBC work */
void sdr_pwr_control(Sdr_gpioCfg *driver,
uint8_t control); /* TODO: hack to let OBC work */
/* Schema hooks */
bool SDR_Init(void *driver, void *return_buf);
bool Sdr_InventoryGetStatus(void *driver, unsigned int param_id,
void *return_buf);
void *return_buf);
bool SDR_fx3Reset(void *driver, void *params);
bool SDR_reset(void *driver, void *params);

View File

@@ -21,14 +21,14 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define SYNC_TASK_PRIORITY 2
#define SYNC_TASK_STACK_SIZE 1024
#define SYNC_TASK_PRIORITY 2
#define SYNC_TASK_STACK_SIZE 1024
/* Temporary fix */
#define SYNC_GPS_TASK_PRIORITY 2
#define SYNC_GPS_TASK_STACK_SIZE 1024
#define SYNC_GPS_TASK_PRIORITY 2
#define SYNC_GPS_TASK_STACK_SIZE 1024
#define SYNC_TEMP_SENSOR_ADDR 0x4C
#define SYNC_TEMP_SENSOR_ADDR 0x4C
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
@@ -47,10 +47,7 @@ typedef struct Sync_gpioCfg {
OcGpio_Pin pin_ec_sync_reset;
} Sync_gpioCfg;
typedef enum gpsStatus {
GPS_NOTLOCKED = 0,
GPS_LOCKED
} gpsStatus;
typedef enum gpsStatus { GPS_NOTLOCKED = 0, GPS_LOCKED } gpsStatus;
/*****************************************************************************
* FUNCTION DECLARATIONS

View File

@@ -16,7 +16,6 @@
#include "drivers/OcGpio.h"
#include "helpers/attribute.h"
/*****************************************************************************
* STRUCT/ENUM DEFINITIONS
*****************************************************************************/
@@ -53,9 +52,9 @@ typedef struct TestModule_opInfo {
} TestModule_opInfo;
typedef enum TestModule_errorSource {
TESTMOD_ERR_INTERNAL = 0,
TESTMOD_ERR_CMS = 1,
TESTMOD_ERR_CME = 2
TESTMOD_ERR_INTERNAL = 0,
TESTMOD_ERR_CMS = 1,
TESTMOD_ERR_CME = 2
} TestModule_errorSource;
typedef struct TestModule_lastError {

View File

@@ -12,7 +12,7 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define WATCHDOG_TASK_STACK_SIZE 1024
#define WATCHDOG_TASK_PRIORITY 2
#define WATCHDOG_TASK_STACK_SIZE 1024
#define WATCHDOG_TASK_PRIORITY 2
#endif /* WATCHDOG_H_ */

View File

@@ -26,7 +26,7 @@
**
*****************************************************************************/
OCMPMessageFrame * OCMP_mallocFrame(uint16_t len);
OCMPMessageFrame *OCMP_mallocFrame(uint16_t len);
/*****************************************************************************
** FUNCTION NAME : create_ocmp_msg_frame
@@ -38,13 +38,10 @@ OCMPMessageFrame * OCMP_mallocFrame(uint16_t len);
** RETURN TYPE : OCMPMessageFrame
**
*****************************************************************************/
OCMPMessageFrame* create_ocmp_msg_frame(OCMPSubsystem subSystem,
OCMPMsgType msgtype,
OCMPActionType actionType,
uint8_t componentId,
uint16_t parameters,
uint8_t payloadSize);
OCMPMessageFrame *
create_ocmp_msg_frame(OCMPSubsystem subSystem, OCMPMsgType msgtype,
OCMPActionType actionType, uint8_t componentId,
uint16_t parameters, uint8_t payloadSize);
/*****************************************************************************
** FUNCTION NAME : create_ocmp_alert_from_Evt
@@ -58,8 +55,8 @@ OCMPMessageFrame* create_ocmp_msg_frame(OCMPSubsystem subSystem,
** RETURN TYPE : OCMPMessageFrame
**
*****************************************************************************/
OCMPMessageFrame* create_ocmp_alert_from_Evt(OCMPMessageFrame* ocmpEventMsg,
uint8_t componentId,
uint16_t parameters );
OCMPMessageFrame *create_ocmp_alert_from_Evt(OCMPMessageFrame *ocmpEventMsg,
uint8_t componentId,
uint16_t parameters);
#endif /* INC_UTILS_OCMP_UTIL_H_ */

View File

@@ -66,11 +66,10 @@ extern "C" {
* TYPEDEFS
*/
typedef struct
{
uint16_t event; // Event type.
uint8_t state; // Event state;
}appEvtHdr_t;
typedef struct {
uint16_t event; // Event type.
uint8_t state; // Event state;
} appEvtHdr_t;
/*********************************************************************
* MACROS
@@ -95,12 +94,9 @@ typedef struct
*
* @return Clock_Handle - a handle to the clock instance.
*/
Clock_Handle Util_constructClock(Clock_Struct *pClock,
Clock_FuncPtr clockCB,
uint32_t clockDuration,
uint32_t clockPeriod,
uint8_t startFlag,
UArg arg);
Clock_Handle Util_constructClock(Clock_Struct *pClock, Clock_FuncPtr clockCB,
uint32_t clockDuration, uint32_t clockPeriod,
uint8_t startFlag, UArg arg);
/*********************************************************************
* @fn Util_startClock
@@ -184,7 +180,8 @@ Queue_Handle Util_constructQueue(Queue_Struct *pQueue);
*
* @return TRUE if message was queued, FALSE otherwise.
*/
uint8_t Util_enqueueMsg(Queue_Handle msgQueue, Semaphore_Handle sem, uint8_t *pMsg);
uint8_t Util_enqueueMsg(Queue_Handle msgQueue, Semaphore_Handle sem,
uint8_t *pMsg);
/*********************************************************************
* @fn Util_dequeueMsg

View File

@@ -82,9 +82,9 @@ extern int USBSerialPPP_NIMUInit();
#if defined(__TI_COMPILER_VERSION__)
#pragma DATA_ALIGN(dmaControlTable, 1024)
#elif defined(__IAR_SYSTEMS_ICC__)
#pragma data_alignment=1024
#pragma data_alignment = 1024
#elif defined(__GNUC__)
__attribute__ ((aligned (1024)))
__attribute__((aligned(1024)))
#endif
static tDMAControlTable dmaControlTable[32];
static bool dmaInitialized = false;
@@ -182,11 +182,11 @@ void OC_CONNECT1_initGeneral(void)
NIMU_DEVICE_TABLE_ENTRY NIMUDeviceTable[2] = {
{
#if TI_EXAMPLES_PPP
/* Use PPP driver for PPP example only */
.init = USBSerialPPP_NIMUInit
/* Use PPP driver for PPP example only */
.init = USBSerialPPP_NIMUInit
#else
/* Default: use Ethernet driver */
.init = EMACSnow_NIMUInit
/* Default: use Ethernet driver */
.init = EMACSnow_NIMUInit
#endif
},
{ NULL }
@@ -203,20 +203,16 @@ EMACSnow_Object emacObjects[OC_CONNECT1_EMACCOUNT];
unsigned char macAddress[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
const EMACSnow_HWAttrs emacHWAttrs[OC_CONNECT1_EMACCOUNT] = {
[OC_CONNECT1_EMAC0] = {
.baseAddr = EMAC0_BASE,
.intNum = INT_EMAC0,
.intPriority = (~0),
.macAddress = macAddress
}
[OC_CONNECT1_EMAC0] = { .baseAddr = EMAC0_BASE,
.intNum = INT_EMAC0,
.intPriority = (~0),
.macAddress = macAddress }
};
const EMAC_Config EMAC_config[] = {
[OC_CONNECT1_EMAC0] = {
.fxnTablePtr = &EMACSnow_fxnTable,
.object = &emacObjects[OC_CONNECT1_EMAC0],
.hwAttrs = &emacHWAttrs[OC_CONNECT1_EMAC0]
},
[OC_CONNECT1_EMAC0] = { .fxnTablePtr = &EMACSnow_fxnTable,
.object = &emacObjects[OC_CONNECT1_EMAC0],
.hwAttrs = &emacHWAttrs[OC_CONNECT1_EMAC0] },
{ NULL, NULL, NULL }
};
@@ -242,15 +238,15 @@ void OC_CONNECT1_initEMAC(void)
macAddress[3] = ((ulUser1 >> 0) & 0xff);
macAddress[4] = ((ulUser1 >> 8) & 0xff);
macAddress[5] = ((ulUser1 >> 16) & 0xff);
} else if (macAddress[0] == 0xff && macAddress[1] == 0xff
&& macAddress[2] == 0xff && macAddress[3] == 0xff
&& macAddress[4] == 0xff && macAddress[5] == 0xff) {
} else if (macAddress[0] == 0xff && macAddress[1] == 0xff &&
macAddress[2] == 0xff && macAddress[3] == 0xff &&
macAddress[4] == 0xff && macAddress[5] == 0xff) {
System_printf("Change the macAddress variable to valid Mac address");
}
// GPIOPinConfigure(GPIO_PF0_EN0LED0); /* OC_CONNECT1_USR_D3 */
// GPIOPinConfigure(GPIO_PF4_EN0LED1); /* OC_CONNECT1_USR_D4 */
// GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_4);
// GPIOPinConfigure(GPIO_PF0_EN0LED0); /* OC_CONNECT1_USR_D3 */
// GPIOPinConfigure(GPIO_PF4_EN0LED1); /* OC_CONNECT1_USR_D4 */
// GPIOPinTypeEthernetLED(GPIO_PORTF_BASE, GPIO_PIN_0 | GPIO_PIN_4);
/* Once EMAC_init is called, EMAC_config cannot be changed */
EMAC_init();
@@ -277,77 +273,69 @@ extern GPIO_PinConfig gpioPinConfigs[];
*/
GPIO_PinConfig gpioPinConfigs[OC_EC_GPIOCOUNT] = {
[OC_EC_SOC_UART3_TX] =
GPIOTiva_PA_5 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
GPIOTiva_PA_5 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
[OC_EC_SDR_INA_ALERT] =
GPIOTiva_PD_2 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_PWR_PSE_RESET] =
GPIOTiva_PD_3 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
[OC_EC_PWR_PRSNT_SOLAR_AUX] =
GPIOTiva_PD_6 | GPIO_CFG_IN_PU ,
GPIOTiva_PD_2 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_PWR_PSE_RESET] = GPIOTiva_PD_3 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
[OC_EC_PWR_PRSNT_SOLAR_AUX] = GPIOTiva_PD_6 | GPIO_CFG_IN_PU,
[OC_EC_SYNC_IOEXP_ALERT] =
GPIOTiva_PD_7 | GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING,
GPIOTiva_PD_7 | GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING,
[OC_EC_GBC_IOEXP71_ALERT] =
GPIOTiva_PE_0 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_FE_CONTROL] =
GPIOTiva_PE_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
GPIOTiva_PE_0 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_FE_CONTROL] = GPIOTiva_PE_1 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
[OC_EC_GPP_AP_BM_1] =
GPIOTiva_PE_3 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
[OC_EC_GPP_PMIC_CORE_PWR] =
GPIOTiva_PH_0 | GPIO_CFG_IN_PU ,
GPIOTiva_PE_3 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
[OC_EC_GPP_PMIC_CORE_PWR] = GPIOTiva_PH_0 | GPIO_CFG_IN_PU,
[OC_EC_GPP_SOC_PLTRST] =
GPIOTiva_PH_1 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
[OC_EC_GPP_PMIC_CTRL] =
GPIOTiva_PH_2 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
GPIOTiva_PH_1 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
[OC_EC_GPP_PMIC_CTRL] = GPIOTiva_PH_2 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
[OC_EC_GBC_INA_ALERT] =
GPIOTiva_PH_3 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_PWR_PD_NT2P] =
GPIOTiva_PJ_0 | GPIO_CFG_IN_PU ,
GPIOTiva_PH_3 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_PWR_PD_NT2P] = GPIOTiva_PJ_0 | GPIO_CFG_IN_PU,
[OC_EC_GBC_AP_INA_ALERT] =
GPIOTiva_PJ_1 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
GPIOTiva_PJ_1 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_GBC_PSE_ALERT] =
GPIOTiva_PL_2 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
GPIOTiva_PL_2 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_GPP_AP_BM_2] =
GPIOTiva_PL_3 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
[OC_EC_PWR_PRSNT_POE] =
GPIOTiva_PL_5 | GPIO_CFG_IN_PU ,
GPIOTiva_PL_3 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
[OC_EC_PWR_PRSNT_POE] = GPIOTiva_PL_5 | GPIO_CFG_IN_PU,
[OC_EC_PWR_LION_ALERT] =
GPIOTiva_PM_0 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_HCI_LED_RESET] =
GPIOTiva_PM_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
GPIOTiva_PM_0 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_HCI_LED_RESET] = GPIOTiva_PM_1 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
[OC_EC_PWR_LACID_ALERT] =
GPIOTiva_PM_3 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
GPIOTiva_PM_3 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_RFFE_TEMP_INA_ALERT] =
GPIOTiva_PM_4 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_ETH_SW_RESET] =
GPIOTiva_PM_5 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
[OC_EC_PWR_BATT_SELECT] =
GPIOTiva_PM_7 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
GPIOTiva_PM_4 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_ETH_SW_RESET] = GPIOTiva_PM_5 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
[OC_EC_PWR_BATT_SELECT] = GPIOTiva_PM_7 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
[OC_EC_PD_PWRGD_ALERT] =
GPIOTiva_PN_0 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
GPIOTiva_PN_0 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_BOTH_EDGES,
[OC_EC_SDR_FPGA_TEMP_INA_ALERT] =
GPIOTiva_PN_1 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_SDR_PWR_GD] =
GPIOTiva_PN_3 | GPIO_CFG_IN_NOPULL,
[OC_EC_SDR_DEVICE_CONTROL] =
GPIOTiva_PN_2 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
[OC_EC_FE_PWR_GD] =
GPIOTiva_PN_4 | GPIO_CFG_IN_NOPULL,
[OC_EC_SDR_FE_IO_RESET_CTRL] =
GPIOTiva_PP_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
[OC_EC_SDR_PWR_CNTRL] =
GPIOTiva_PP_2 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
[OC_EC_GPP_PWRGD_PROTECTION] =
GPIOTiva_PP_3 | GPIO_CFG_IN_PU ,
[OC_EC_RFFE_RESET] =
GPIOTiva_PP_4 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
GPIOTiva_PN_1 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING,
[OC_EC_SDR_PWR_GD] = GPIOTiva_PN_3 | GPIO_CFG_IN_NOPULL,
[OC_EC_SDR_DEVICE_CONTROL] = GPIOTiva_PN_2 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
[OC_EC_FE_PWR_GD] = GPIOTiva_PN_4 | GPIO_CFG_IN_NOPULL,
[OC_EC_SDR_FE_IO_RESET_CTRL] = GPIOTiva_PP_1 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
[OC_EC_SDR_PWR_CNTRL] = GPIOTiva_PP_2 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
[OC_EC_GPP_PWRGD_PROTECTION] = GPIOTiva_PP_3 | GPIO_CFG_IN_PU,
[OC_EC_RFFE_RESET] = GPIOTiva_PP_4 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW,
[OC_EC_FE_TRXFE_CONN_RESET] = /* Watchdog nAO pin */
GPIOTiva_PQ_0 | GPIO_CFG_IN_NOPULL,
[OC_EC_GPP_MSATA_DAS] =
GPIOTiva_PQ_1 | GPIO_CFG_IN_PU ,
[OC_EC_GPP_RST_TO_PROC] =
GPIOTiva_PQ_3 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
[OC_EC_SYNC_RESET] =
GPIOTiva_PQ_4 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
GPIOTiva_PQ_0 | GPIO_CFG_IN_NOPULL,
[OC_EC_GPP_MSATA_DAS] = GPIOTiva_PQ_1 | GPIO_CFG_IN_PU,
[OC_EC_GPP_RST_TO_PROC] = GPIOTiva_PQ_3 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
[OC_EC_SYNC_RESET] = GPIOTiva_PQ_4 | GPIO_CFG_OUT_STD |
GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_HIGH,
};
/*
@@ -359,15 +347,15 @@ GPIO_PinConfig gpioPinConfigs[OC_EC_GPIOCOUNT] = {
* We have lots of RAM right now, so just set it to full size of
* GPIO array
*/
GPIO_CallbackFxn gpioCallbackFunctions[OC_EC_GPIOCOUNT] = { };
GPIO_CallbackFxn gpioCallbackFunctions[OC_EC_GPIOCOUNT] = {};
/* The device-specific GPIO_config structure */
const GPIOTiva_Config GPIOTiva_config = {
.pinConfigs = (GPIO_PinConfig *) gpioPinConfigs,
.callbacks = (GPIO_CallbackFxn *) gpioCallbackFunctions,
.pinConfigs = (GPIO_PinConfig *)gpioPinConfigs,
.callbacks = (GPIO_CallbackFxn *)gpioCallbackFunctions,
.numberOfPinConfigs = sizeof(gpioPinConfigs) / sizeof(GPIO_PinConfig),
.numberOfCallbacks = sizeof(gpioCallbackFunctions) /
sizeof(GPIO_CallbackFxn),
.numberOfCallbacks =
sizeof(gpioCallbackFunctions) / sizeof(GPIO_CallbackFxn),
.intPriority = (~0)
};
@@ -386,7 +374,7 @@ OcGpio_Port gbc_io_0;
OcGpio_Port sdr_fx3_io;
//OcGpio_Port sdr_eeprom_wp_io;
OcGpio_Port fe_ch1_gain_io;
OcGpio_Port fe_ch2_gain_io ;
OcGpio_Port fe_ch2_gain_io;
OcGpio_Port fe_ch1_lna_io;
OcGpio_Port fe_ch2_lna_io;
OcGpio_Port fe_watchdog_io;
@@ -398,27 +386,31 @@ OcGpio_Port ec_io = {
OcGpio_Port gbc_io_0 = {
.fn_table = &GpioSX1509_fnTable,
.cfg = &(SX1509_Cfg) {
.i2c_dev = { OC_CONNECT1_I2C6, BIGBROTHER_IOEXP0_ADDRESS },
.pin_irq = &(OcGpio_Pin){ &ec_io, OC_EC_GBC_IOEXP71_ALERT },
},
.cfg =
&(SX1509_Cfg){
.i2c_dev = { OC_CONNECT1_I2C6, BIGBROTHER_IOEXP0_ADDRESS },
.pin_irq = &(OcGpio_Pin){ &ec_io, OC_EC_GBC_IOEXP71_ALERT },
},
.object_data = &(SX1509_Obj){},
};
OcGpio_Port gbc_io_1 = {
.fn_table = &GpioSX1509_fnTable,
.cfg = &(SX1509_Cfg) {
.i2c_dev = { OC_CONNECT1_I2C6, BIGBROTHER_IOEXP1_ADDRESS },
.pin_irq = NULL, /* This IO expander doesn't provide interrupts */
},
.cfg =
&(SX1509_Cfg){
.i2c_dev = { OC_CONNECT1_I2C6, BIGBROTHER_IOEXP1_ADDRESS },
.pin_irq =
NULL, /* This IO expander doesn't provide interrupts */
},
.object_data = &(SX1509_Obj){},
};
OcGpio_Port sdr_fx3_io = {
.fn_table = &GpioPCA9557_fnTable,
.cfg = &(PCA9557_Cfg) {
.i2c_dev = { OC_CONNECT1_I2C3, SDR_FX3_IOEXP_ADDRESS },
},
.cfg =
&(PCA9557_Cfg){
.i2c_dev = { OC_CONNECT1_I2C3, SDR_FX3_IOEXP_ADDRESS },
},
.object_data = &(PCA9557_Obj){},
};
@@ -433,50 +425,61 @@ OcGpio_Port sdr_fx3_io = {
OcGpio_Port fe_ch1_gain_io = {
.fn_table = &GpioPCA9557_fnTable,
.cfg = &(PCA9557_Cfg) {
.i2c_dev = { OC_CONNECT1_I2C2, RFFE_CHANNEL1_IO_TX_ATTEN_ADDR },
},
.cfg =
&(PCA9557_Cfg){
.i2c_dev = { OC_CONNECT1_I2C2,
RFFE_CHANNEL1_IO_TX_ATTEN_ADDR },
},
.object_data = &(PCA9557_Obj){},
};
OcGpio_Port fe_ch2_gain_io = {
.fn_table = &GpioPCA9557_fnTable,
.cfg = &(PCA9557_Cfg) {
.i2c_dev = { OC_CONNECT1_I2C2, RFFE_CHANNEL2_IO_TX_ATTEN_ADDR },
},
.cfg =
&(PCA9557_Cfg){
.i2c_dev = { OC_CONNECT1_I2C2,
RFFE_CHANNEL2_IO_TX_ATTEN_ADDR },
},
.object_data = &(PCA9557_Obj){},
};
OcGpio_Port fe_ch1_lna_io = {
.fn_table = &GpioPCA9557_fnTable,
.cfg = &(PCA9557_Cfg) {
.i2c_dev = { OC_CONNECT1_I2C2, RFFE_CHANNEL1_IO_RX_ATTEN_ADDR },
},
.cfg =
&(PCA9557_Cfg){
.i2c_dev = { OC_CONNECT1_I2C2,
RFFE_CHANNEL1_IO_RX_ATTEN_ADDR },
},
.object_data = &(PCA9557_Obj){},
};
OcGpio_Port fe_ch2_lna_io = {
.fn_table = &GpioPCA9557_fnTable,
.cfg = &(PCA9557_Cfg) {
.i2c_dev = { OC_CONNECT1_I2C2, RFFE_CHANNEL2_IO_RX_ATTEN_ADDR },
},
.cfg =
&(PCA9557_Cfg){
.i2c_dev = { OC_CONNECT1_I2C2,
RFFE_CHANNEL2_IO_RX_ATTEN_ADDR },
},
.object_data = &(PCA9557_Obj){},
};
OcGpio_Port fe_watchdog_io = {
.fn_table = &GpioPCA9557_fnTable,
.cfg = &(PCA9557_Cfg) {
.i2c_dev = { OC_CONNECT1_I2C2, RFFE_IO_REVPOWER_ALERT_ADDR },
},
.cfg =
&(PCA9557_Cfg){
.i2c_dev = { OC_CONNECT1_I2C2,
RFFE_IO_REVPOWER_ALERT_ADDR },
},
.object_data = &(PCA9557_Obj){},
};
OcGpio_Port sync_io = {
OcGpio_Port sync_io = {
.fn_table = &GpioSX1509_fnTable,
.cfg = &(SX1509_Cfg) {
.i2c_dev = { OC_CONNECT1_I2C7, SYNC_IO_DEVICE_ADDR },
.pin_irq = &(OcGpio_Pin){ &ec_io, OC_EC_SYNC_IOEXP_ALERT },
},
.cfg =
&(SX1509_Cfg){
.i2c_dev = { OC_CONNECT1_I2C7, SYNC_IO_DEVICE_ADDR },
.pin_irq = &(OcGpio_Pin){ &ec_io, OC_EC_SYNC_IOEXP_ALERT },
},
.object_data = &(SX1509_Obj){},
};
@@ -506,89 +509,57 @@ void OC_CONNECT1_initGPIO(void)
I2CTiva_Object i2cTivaObjects[OC_CONNECT1_I2CCOUNT];
const I2CTiva_HWAttrs i2cTivaHWAttrs[OC_CONNECT1_I2CCOUNT] = {
[OC_CONNECT1_I2C0] = {
.baseAddr = I2C0_BASE,
.intNum = INT_I2C0,
.intPriority = (~0)
},
[OC_CONNECT1_I2C1] = {
.baseAddr = I2C1_BASE,
.intNum = INT_I2C1,
.intPriority = (~0)
},
[OC_CONNECT1_I2C2] = {
.baseAddr = I2C2_BASE,
.intNum = INT_I2C2,
.intPriority = (~0)
},
[OC_CONNECT1_I2C3] = {
.baseAddr = I2C3_BASE,
.intNum = INT_I2C3,
.intPriority = (~0)
},
[OC_CONNECT1_I2C4] = {
.baseAddr = I2C4_BASE,
.intNum = INT_I2C4,
.intPriority = (~0)
},
[OC_CONNECT1_I2C6] = {
.baseAddr = I2C6_BASE,
.intNum = INT_I2C6,
.intPriority = (~0)
},
[OC_CONNECT1_I2C7] = {
.baseAddr = I2C7_BASE,
.intNum = INT_I2C7,
.intPriority = (~0)
},
[OC_CONNECT1_I2C8] = {
.baseAddr = I2C8_BASE,
.intNum = INT_I2C8,
.intPriority = (~0)
},
[OC_CONNECT1_I2C0] = { .baseAddr = I2C0_BASE,
.intNum = INT_I2C0,
.intPriority = (~0) },
[OC_CONNECT1_I2C1] = { .baseAddr = I2C1_BASE,
.intNum = INT_I2C1,
.intPriority = (~0) },
[OC_CONNECT1_I2C2] = { .baseAddr = I2C2_BASE,
.intNum = INT_I2C2,
.intPriority = (~0) },
[OC_CONNECT1_I2C3] = { .baseAddr = I2C3_BASE,
.intNum = INT_I2C3,
.intPriority = (~0) },
[OC_CONNECT1_I2C4] = { .baseAddr = I2C4_BASE,
.intNum = INT_I2C4,
.intPriority = (~0) },
[OC_CONNECT1_I2C6] = { .baseAddr = I2C6_BASE,
.intNum = INT_I2C6,
.intPriority = (~0) },
[OC_CONNECT1_I2C7] = { .baseAddr = I2C7_BASE,
.intNum = INT_I2C7,
.intPriority = (~0) },
[OC_CONNECT1_I2C8] = { .baseAddr = I2C8_BASE,
.intNum = INT_I2C8,
.intPriority = (~0) },
};
const I2C_Config I2C_config[] = {
[OC_CONNECT1_I2C0] = {
.fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C0],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C0]
},
[OC_CONNECT1_I2C1] = {
.fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C1],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C1]
},
[OC_CONNECT1_I2C2] = {
.fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C2],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C2]
},
[OC_CONNECT1_I2C3] = {
.fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C3],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C3]
},
[OC_CONNECT1_I2C4] = {
.fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C4],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C4]
},
[OC_CONNECT1_I2C6] = {
.fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C6],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C6]
},
[OC_CONNECT1_I2C7] = {
.fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C7],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C7]
},
[OC_CONNECT1_I2C8] = {
.fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C8],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C8]
},
[OC_CONNECT1_I2C0] = { .fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C0],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C0] },
[OC_CONNECT1_I2C1] = { .fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C1],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C1] },
[OC_CONNECT1_I2C2] = { .fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C2],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C2] },
[OC_CONNECT1_I2C3] = { .fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C3],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C3] },
[OC_CONNECT1_I2C4] = { .fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C4],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C4] },
[OC_CONNECT1_I2C6] = { .fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C6],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C6] },
[OC_CONNECT1_I2C7] = { .fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C7],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C7] },
[OC_CONNECT1_I2C8] = { .fxnTablePtr = &I2CTiva_fxnTable,
.object = &i2cTivaObjects[OC_CONNECT1_I2C8],
.hwAttrs = &i2cTivaHWAttrs[OC_CONNECT1_I2C8] },
{ NULL, NULL, NULL }
};
@@ -701,22 +672,19 @@ void OC_CONNECT1_initI2C(void)
UARTTivaDMA_Object uartTivaObjects[OC_CONNECT1_UARTCOUNT];
const UARTTivaDMA_HWAttrs uartTivaHWAttrs[OC_CONNECT1_UARTCOUNT] = {
[OC_CONNECT1_UART3] = {
.baseAddr = UART0_BASE,
.intNum = INT_UART0,
.intPriority = (~0),
.rxChannelIndex = UDMA_CH8_UART0RX,
.txChannelIndex = UDMA_CH9_UART0TX,
}
};
const UARTTivaDMA_HWAttrs uartTivaHWAttrs[OC_CONNECT1_UARTCOUNT] =
{ [OC_CONNECT1_UART3] = {
.baseAddr = UART0_BASE,
.intNum = INT_UART0,
.intPriority = (~0),
.rxChannelIndex = UDMA_CH8_UART0RX,
.txChannelIndex = UDMA_CH9_UART0TX,
} };
const UART_Config UART_config[] = {
[OC_CONNECT1_UART3] = {
.fxnTablePtr = &UARTTivaDMA_fxnTable,
.object = &uartTivaObjects[0],
.hwAttrs = &uartTivaHWAttrs[0]
},
[OC_CONNECT1_UART3] = { .fxnTablePtr = &UARTTivaDMA_fxnTable,
.object = &uartTivaObjects[0],
.hwAttrs = &uartTivaHWAttrs[0] },
{ NULL, NULL, NULL }
};
#else
@@ -732,30 +700,24 @@ unsigned char XR20M1170RingBuffer[1][64];
// TODO: probably more efficient to use DMA drivers
const UARTTiva_HWAttrs uartTivaHWAttrs[] = {
{
.baseAddr = UART0_BASE,
.intNum = INT_UART0,
.intPriority = (~0),
.flowControl = UART_FLOWCONTROL_NONE,
.ringBufPtr = uartTivaRingBuffer[0],
.ringBufSize = sizeof(uartTivaRingBuffer[0])
},
{
.baseAddr = UART3_BASE,
.intNum = INT_UART3,
.intPriority = (~0),
.flowControl = UART_FLOWCONTROL_NONE,
.ringBufPtr = uartTivaRingBuffer[1],
.ringBufSize = sizeof(uartTivaRingBuffer[1])
},
{
.baseAddr = UART4_BASE,
.intNum = INT_UART4,
.intPriority = (~0),
.flowControl = UART_FLOWCONTROL_RX | UART_FLOWCONTROL_TX,
.ringBufPtr = uartTivaRingBuffer[2],
.ringBufSize = sizeof(uartTivaRingBuffer[2])
},
{ .baseAddr = UART0_BASE,
.intNum = INT_UART0,
.intPriority = (~0),
.flowControl = UART_FLOWCONTROL_NONE,
.ringBufPtr = uartTivaRingBuffer[0],
.ringBufSize = sizeof(uartTivaRingBuffer[0]) },
{ .baseAddr = UART3_BASE,
.intNum = INT_UART3,
.intPriority = (~0),
.flowControl = UART_FLOWCONTROL_NONE,
.ringBufPtr = uartTivaRingBuffer[1],
.ringBufSize = sizeof(uartTivaRingBuffer[1]) },
{ .baseAddr = UART4_BASE,
.intNum = INT_UART4,
.intPriority = (~0),
.flowControl = UART_FLOWCONTROL_RX | UART_FLOWCONTROL_TX,
.ringBufPtr = uartTivaRingBuffer[2],
.ringBufSize = sizeof(uartTivaRingBuffer[2]) },
};
// TODO: flow control settings
@@ -768,11 +730,12 @@ const XR20M1170_HWAttrs XR20M1170HWAttrs = {
// i2c bit rate
// uart interrupt
.i2cIndex = OC_CONNECT1_I2C7,
.i2cSlaveAddress = 0x60 >> 1, // TODO: i2c driver uses 7-bit address...sort of annoying
.i2cSlaveAddress =
0x60 >> 1, // TODO: i2c driver uses 7-bit address...sort of annoying
.xtal1_freq = 14745600, // 14.7456 MHz
.pin_irq = &(OcGpio_Pin){ &gbc_io_0, 0, OCGPIO_CFG_IN_PU },
.flowControl = XR20M1170_FLOWCONTROL_TX | XR20M1170_FLOWCONTROL_RX,
.ringBufPtr = XR20M1170RingBuffer[0],
.ringBufPtr = XR20M1170RingBuffer[0],
.ringBufSize = sizeof(XR20M1170RingBuffer[0]),
};
@@ -783,31 +746,24 @@ const UartMon_Cfg uart_mon_cfg = {
};
const UART_Config UART_config[OC_CONNECT1_UARTCOUNT + 1] = {
[OC_CONNECT1_UART0] = {
.fxnTablePtr = &UARTTiva_fxnTable,
.object = &uartTivaObjects[0],
.hwAttrs = &uartTivaHWAttrs[0]
},
[OC_CONNECT1_UART3] = {
.fxnTablePtr = &UARTTiva_fxnTable,
.object = &uartTivaObjects[1],
.hwAttrs = &uartTivaHWAttrs[1]
},
[OC_CONNECT1_UART4] = {
.fxnTablePtr = &UARTTiva_fxnTable,
.object = &uartTivaObjects[2],
.hwAttrs = &uartTivaHWAttrs[2]
},
[OC_CONNECT1_UARTXR0] = {
.fxnTablePtr = &XR20M1170_fxnTable,
.object = &XR20M1170Objects,
.hwAttrs = &XR20M1170HWAttrs
},
[OC_CONNECT1_UARTMON] = {
.fxnTablePtr = &UartMon_fxnTable,
.object = &uart_mon_obj,
.hwAttrs = &uart_mon_cfg,
},
[OC_CONNECT1_UART0] = { .fxnTablePtr = &UARTTiva_fxnTable,
.object = &uartTivaObjects[0],
.hwAttrs = &uartTivaHWAttrs[0] },
[OC_CONNECT1_UART3] = { .fxnTablePtr = &UARTTiva_fxnTable,
.object = &uartTivaObjects[1],
.hwAttrs = &uartTivaHWAttrs[1] },
[OC_CONNECT1_UART4] = { .fxnTablePtr = &UARTTiva_fxnTable,
.object = &uartTivaObjects[2],
.hwAttrs = &uartTivaHWAttrs[2] },
[OC_CONNECT1_UARTXR0] = { .fxnTablePtr = &XR20M1170_fxnTable,
.object = &XR20M1170Objects,
.hwAttrs = &XR20M1170HWAttrs },
[OC_CONNECT1_UARTMON] =
{
.fxnTablePtr = &UartMon_fxnTable,
.object = &uart_mon_obj,
.hwAttrs = &uart_mon_cfg,
},
{ NULL, NULL, NULL }
};
@@ -837,8 +793,8 @@ void OC_CONNECT1_initUART(void)
GPIOPinConfigure(GPIO_PK1_U4TX);
GPIOPinConfigure(GPIO_PK2_U4RTS);
GPIOPinConfigure(GPIO_PK3_U4CTS);
GPIOPinTypeUART(GPIO_PORTK_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 |
GPIO_PIN_3);
GPIOPinTypeUART(GPIO_PORTK_BASE,
GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
/* Initialize the UART driver */
#if TI_DRIVERS_UART_DMA
@@ -896,8 +852,7 @@ void OC_CONNECT1_initUSB(OC_CONNECT1_USBMode usbMode)
* program. PQ4 is active low; set the pin as input with a weak
* pull-up.
*/
GPIOPadConfigSet(GPIO_PORTQ_BASE, GPIO_PIN_4,
GPIO_STRENGTH_2MA,
GPIOPadConfigSet(GPIO_PORTQ_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA,
GPIO_PIN_TYPE_STD_WPU);
GPIOIntTypeSet(GPIO_PORTQ_BASE, GPIO_PIN_4, GPIO_FALLING_EDGE);
GPIOIntClear(GPIO_PORTQ_BASE, GPIO_PIN_4);
@@ -928,20 +883,21 @@ void OC_CONNECT1_initUSB(OC_CONNECT1_USBMode usbMode)
WatchdogTiva_Object watchdogTivaObjects[OC_CONNECT1_WATCHDOGCOUNT];
const WatchdogTiva_HWAttrs watchdogTivaHWAttrs[OC_CONNECT1_WATCHDOGCOUNT] = {
[OC_CONNECT1_WATCHDOG0] = {
.baseAddr = WATCHDOG0_BASE,
.intNum = INT_WATCHDOG,
.intPriority = (~0),
.reloadValue = 80000000 // 1 second period at default CPU clock freq
},
[OC_CONNECT1_WATCHDOG0] =
{
.baseAddr = WATCHDOG0_BASE,
.intNum = INT_WATCHDOG,
.intPriority = (~0),
.reloadValue =
80000000 // 1 second period at default CPU clock freq
},
};
const Watchdog_Config Watchdog_config[] = {
[OC_CONNECT1_WATCHDOG0] = {
.fxnTablePtr = &WatchdogTiva_fxnTable,
.object = &watchdogTivaObjects[OC_CONNECT1_WATCHDOG0],
.hwAttrs = &watchdogTivaHWAttrs[OC_CONNECT1_WATCHDOG0]
},
[OC_CONNECT1_WATCHDOG0] =
{ .fxnTablePtr = &WatchdogTiva_fxnTable,
.object = &watchdogTivaObjects[OC_CONNECT1_WATCHDOG0],
.hwAttrs = &watchdogTivaHWAttrs[OC_CONNECT1_WATCHDOG0] },
{ NULL, NULL, NULL },
};

View File

@@ -42,27 +42,31 @@ Eeprom_Cfg eeprom_fe_inv = {
// FE Channel 1 Power sensor.
INA226_Dev fe_ch1_ps_5_7v = {
/* CH1 5.7V Sensor */
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_INA226_CH1_5_7V_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_RFFE_TEMP_INA_ALERT },
},
.cfg =
{
.dev =
{
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_INA226_CH1_5_7V_ADDR,
},
.pin_alert =
&(OcGpio_Pin){ &ec_io, OC_EC_RFFE_TEMP_INA_ALERT },
},
};
//FE Channel 2 Power sensor.
INA226_Dev fe_ch2_ps_5_7v = {
/* CH2 5.7V Sensor */
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_INA226_CH2_5_7V_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_RFFE_TEMP_INA_ALERT },
},
.cfg =
{
.dev =
{
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_INA226_CH2_5_7V_ADDR,
},
.pin_alert =
&(OcGpio_Pin){ &ec_io, OC_EC_RFFE_TEMP_INA_ALERT },
},
};
//FE Channel 1 temperature sensor.
@@ -73,23 +77,23 @@ I2C_Dev fe_ch1_ts = {
//FE Channel 2 temperature sensor.
I2C_Dev fe_ch2_ts = (I2C_Dev){
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_CH2_TEMP_SENSOR_ADDR,
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_CH2_TEMP_SENSOR_ADDR,
};
//FE EEPROM inventory
void* fe_eeprom_inventory = &eeprom_fe_inv;
void *fe_eeprom_inventory = &eeprom_fe_inv;
//FE Channel 1 ADC
I2C_Dev fe_ch1_ads7830 = {
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_CHANNEL1_ADC_ADDR,
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_CHANNEL1_ADC_ADDR,
};
//FE Channel 2 ADC
I2C_Dev fe_ch2_ads7830 = {
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_CHANNEL2_ADC_ADDR,
.bus = OC_CONNECT1_I2C4,
.slave_addr = RFFE_CHANNEL2_ADC_ADDR,
};
Fe_Gain_Cfg fe_ch1_gain = {
@@ -98,111 +102,111 @@ Fe_Gain_Cfg fe_ch1_gain = {
/* CH1_TX_ATTN_P5DB */
.pin_tx_attn_p5db = { &fe_ch1_gain_io, 2 },
/* CH1_TX_ATTN_1DB */
.pin_tx_attn_1db = { &fe_ch1_gain_io, 3 },
.pin_tx_attn_1db = { &fe_ch1_gain_io, 3 },
/* CH1_TX_ATTN_2DB */
.pin_tx_attn_2db = { &fe_ch1_gain_io, 4 },
.pin_tx_attn_2db = { &fe_ch1_gain_io, 4 },
/* CH1_TX_ATTN_4DB */
.pin_tx_attn_4db = { &fe_ch1_gain_io, 5 },
.pin_tx_attn_4db = { &fe_ch1_gain_io, 5 },
/* CH1_TX_ATTN_8DB */
.pin_tx_attn_8db = { &fe_ch1_gain_io, 6 },
.pin_tx_attn_8db = { &fe_ch1_gain_io, 6 },
/* CH1_TX_ATTN_ENB */
.pin_tx_attn_enb = { &fe_ch1_gain_io, 7 },
.pin_tx_attn_enb = { &fe_ch1_gain_io, 7 },
};
Fe_Gain_Cfg fe_ch2_gain = {
/* CH2_TX_ATTN_16DB */
.pin_tx_attn_16db = { &fe_ch2_gain_io, 1 },
/* CH2_TX_ATTN_P5DB */
.pin_tx_attn_p5db = { &fe_ch2_gain_io, 2 },
/* CH2_TX_ATTN_1DB */
.pin_tx_attn_1db = { &fe_ch2_gain_io, 3 },
/* CH2_TX_ATTN_2DB */
.pin_tx_attn_2db = { &fe_ch2_gain_io, 4 },
/* CH2_TX_ATTN_4DB */
.pin_tx_attn_4db = { &fe_ch2_gain_io, 5 },
/* CH2_TX_ATTN_8DB */
.pin_tx_attn_8db = { &fe_ch2_gain_io, 6 },
/* CH2_TX_ATTN_ENB */
.pin_tx_attn_enb = { &fe_ch2_gain_io, 7 },
/* CH2_TX_ATTN_16DB */
.pin_tx_attn_16db = { &fe_ch2_gain_io, 1 },
/* CH2_TX_ATTN_P5DB */
.pin_tx_attn_p5db = { &fe_ch2_gain_io, 2 },
/* CH2_TX_ATTN_1DB */
.pin_tx_attn_1db = { &fe_ch2_gain_io, 3 },
/* CH2_TX_ATTN_2DB */
.pin_tx_attn_2db = { &fe_ch2_gain_io, 4 },
/* CH2_TX_ATTN_4DB */
.pin_tx_attn_4db = { &fe_ch2_gain_io, 5 },
/* CH2_TX_ATTN_8DB */
.pin_tx_attn_8db = { &fe_ch2_gain_io, 6 },
/* CH2_TX_ATTN_ENB */
.pin_tx_attn_enb = { &fe_ch2_gain_io, 7 },
};
Fe_Lna_Cfg fe_ch1_lna = {
/* CH1_RX_ATTN_P5DB */
.pin_rx_attn_p5db = { &fe_ch1_lna_io, 2 },
/* CH1_RX_ATTN_1DB */
.pin_rx_attn_1db = { &fe_ch1_lna_io, 3 },
.pin_rx_attn_1db = { &fe_ch1_lna_io, 3 },
/* CH1_RX_ATTN_2DB */
.pin_rx_attn_2db = { &fe_ch1_lna_io, 4 },
.pin_rx_attn_2db = { &fe_ch1_lna_io, 4 },
/* CH1_RX_ATTN_4DB */
.pin_rx_attn_4db = { &fe_ch1_lna_io, 5 },
.pin_rx_attn_4db = { &fe_ch1_lna_io, 5 },
/* CH1_RX_ATTN_8DB */
.pin_rx_attn_8db = { &fe_ch1_lna_io, 6 },
.pin_rx_attn_8db = { &fe_ch1_lna_io, 6 },
/* CH1_RX_ATTN_ENB */
.pin_rx_attn_enb = { &fe_ch1_lna_io, 7 },
.pin_rx_attn_enb = { &fe_ch1_lna_io, 7 },
};
Fe_Lna_Cfg fe_ch2_lna = {
/* CH2_RX_ATTN_P5DB */
.pin_rx_attn_p5db = { &fe_ch2_lna_io, 2 },
/* CH2_RX_ATTN_1DB */
.pin_rx_attn_1db = { &fe_ch2_lna_io, 3 },
.pin_rx_attn_1db = { &fe_ch2_lna_io, 3 },
/* CH2_RX_ATTN_2DB */
.pin_rx_attn_2db = { &fe_ch2_lna_io, 4 },
.pin_rx_attn_2db = { &fe_ch2_lna_io, 4 },
/* CH2_RX_ATTN_4DB */
.pin_rx_attn_4db = { &fe_ch2_lna_io, 5 },
.pin_rx_attn_4db = { &fe_ch2_lna_io, 5 },
/* CH2_RX_ATTN_8DB */
.pin_rx_attn_8db = { &fe_ch2_lna_io, 6 },
.pin_rx_attn_8db = { &fe_ch2_lna_io, 6 },
/* CH2_RX_ATTN_ENB */
.pin_rx_attn_enb = { &fe_ch2_lna_io, 7 },
.pin_rx_attn_enb = { &fe_ch2_lna_io, 7 },
};
//FE watch dog
Fe_Watchdog_Cfg fe_watchdog_cfg = {
/* AOSEL_FPGA */
.pin_aosel_fpga = { &fe_watchdog_io, 0 },
.pin_aosel_fpga = { &fe_watchdog_io, 0 },
/* CH2_RF_PWR_OFF */
.pin_ch2_rf_pwr_off = { &fe_watchdog_io, 1 },
/* CO6_WD */
.pin_co6_wd = { &fe_watchdog_io, 2 },
.pin_co6_wd = { &fe_watchdog_io, 2 },
/* CO5_WD */
.pin_co5_wd = { &fe_watchdog_io, 3 },
.pin_co5_wd = { &fe_watchdog_io, 3 },
/* CO4_WD */
.pin_co4_wd = { &fe_watchdog_io, 4 },
.pin_co4_wd = { &fe_watchdog_io, 4 },
/* CO3_WD */
.pin_co3_wd = { &fe_watchdog_io, 5 },
.pin_co3_wd = { &fe_watchdog_io, 5 },
/* CO2_WD */
.pin_co2_wd = { &fe_watchdog_io, 6 },
.pin_co2_wd = { &fe_watchdog_io, 6 },
/* COPOL_FPGA */
.pin_copol_fpga = { &fe_watchdog_io, 7 },
.pin_copol_fpga = { &fe_watchdog_io, 7 },
};
Fe_gpioCfg fe_gpiocfg = {
/* EC_TRXFECONN_GPIO3/RF_PGOOD_LDO */
.pin_rf_pgood_ldo = { &ec_io, OC_EC_FE_PWR_GD },
/* FE_12V_CTRL */
.pin_fe_12v_ctrl = { &ec_io, OC_EC_FE_CONTROL },
.pin_trxfe_conn_reset = { &ec_io, OC_EC_FE_TRXFE_CONN_RESET },
/* EC_TRXFECONN_GPIO3/RF_PGOOD_LDO */
.pin_rf_pgood_ldo = { &ec_io, OC_EC_FE_PWR_GD },
/* FE_12V_CTRL */
.pin_fe_12v_ctrl = { &ec_io, OC_EC_FE_CONTROL },
.pin_trxfe_conn_reset = { &ec_io, OC_EC_FE_TRXFE_CONN_RESET },
};
//FE Ch1 TX Gain control
Fe_Ch1_Gain_Cfg fe_ch1_tx_gain_cfg = (Fe_Ch1_Gain_Cfg) {
Fe_Ch1_Gain_Cfg fe_ch1_tx_gain_cfg = (Fe_Ch1_Gain_Cfg){
.fe_gain_cfg = &fe_ch1_gain,
};
//FE Ch2 TX Gain control
Fe_Ch2_Gain_Cfg fe_ch2_tx_gain_cfg = (Fe_Ch2_Gain_Cfg) {
Fe_Ch2_Gain_Cfg fe_ch2_tx_gain_cfg = (Fe_Ch2_Gain_Cfg){
/* CH1_2G_LB_BAND_SEL_L */
.pin_ch1_2g_lb_band_sel_l = { &fe_ch2_gain_io, 0 },
.fe_gain_cfg = &fe_ch2_gain,
};
//FE Ch1 LNA config
Fe_Ch1_Lna_Cfg fe_ch1_rx_gain_cfg = (Fe_Ch1_Lna_Cfg) {
Fe_Ch1_Lna_Cfg fe_ch1_rx_gain_cfg = (Fe_Ch1_Lna_Cfg){
.fe_lna_cfg = &fe_ch1_lna,
};
//FE Ch2 LNA config
Fe_Ch2_Lna_Cfg fe_ch2_rx_gain_cfg = (Fe_Ch2_Lna_Cfg) {
Fe_Ch2_Lna_Cfg fe_ch2_rx_gain_cfg = (Fe_Ch2_Lna_Cfg){
/* CH1_RF_PWR_OFF */
.pin_ch1_rf_pwr_off = { &fe_ch2_lna_io, 1 },
.fe_lna_cfg = &fe_ch2_lna,
@@ -225,11 +229,11 @@ RfWatchdog_Cfg fe_ch2_watchdog = {
/* FE GPIO's */
Fe_Cfg fe_rffecfg = {
.fe_gpio_cfg = &fe_gpiocfg,
.fe_ch1_gain_cfg = (Fe_Ch1_Gain_Cfg*)&fe_ch1_tx_gain_cfg,
.fe_ch2_gain_cfg = (Fe_Ch2_Gain_Cfg*)&fe_ch2_tx_gain_cfg,
.fe_ch1_lna_cfg = (Fe_Ch1_Lna_Cfg*)&fe_ch1_rx_gain_cfg,
.fe_ch2_lna_cfg = (Fe_Ch2_Lna_Cfg*)&fe_ch2_rx_gain_cfg,
.fe_watchdog_cfg = (Fe_Watchdog_Cfg*)&fe_watchdog_cfg,
.fe_ch1_gain_cfg = (Fe_Ch1_Gain_Cfg *)&fe_ch1_tx_gain_cfg,
.fe_ch2_gain_cfg = (Fe_Ch2_Gain_Cfg *)&fe_ch2_tx_gain_cfg,
.fe_ch1_lna_cfg = (Fe_Ch1_Lna_Cfg *)&fe_ch1_rx_gain_cfg,
.fe_ch2_lna_cfg = (Fe_Ch2_Lna_Cfg *)&fe_ch2_rx_gain_cfg,
.fe_watchdog_cfg = (Fe_Watchdog_Cfg *)&fe_watchdog_cfg,
};
FE_Ch_Band_cfg fe_ch1_bandcfg = {
@@ -240,30 +244,27 @@ FE_Ch_Band_cfg fe_ch2_bandcfg = {
.channel = RFFE_CHANNEL2,
};
Fe_Ch_Pwr_Cfg fe_ch1_pwrcfg = {
.channel = RFFE_CHANNEL1,
.fe_Rffecfg = (Fe_Cfg*)&fe_rffecfg
};
Fe_Ch_Pwr_Cfg fe_ch1_pwrcfg = { .channel = RFFE_CHANNEL1,
.fe_Rffecfg = (Fe_Cfg *)&fe_rffecfg };
Fe_Ch_Pwr_Cfg fe_ch2_pwrcfg = {
.channel = RFFE_CHANNEL2,
.fe_Rffecfg = (Fe_Cfg*)&fe_rffecfg
};
Fe_Ch_Pwr_Cfg fe_ch2_pwrcfg = { .channel = RFFE_CHANNEL2,
.fe_Rffecfg = (Fe_Cfg *)&fe_rffecfg };
// TestModule
// TestModule
TestMod_Cfg testModuleCfg = (TestMod_Cfg){
.g510_cfg = {
.uart = OC_CONNECT1_UART4,
/* 2G_SIM_PRESENCE */
.pin_sim_present = { &gbc_io_1, 0, OCGPIO_CFG_IN_PU },
.g510_cfg =
{
.uart = OC_CONNECT1_UART4,
/* 2G_SIM_PRESENCE */
.pin_sim_present = { &gbc_io_1, 0, OCGPIO_CFG_IN_PU },
/* NOTE: enable & power go through MOSFETs, inverting them */
/* 2GMODULE_POWEROFF */
.pin_enable = { &gbc_io_1, 2, OCGPIO_CFG_INVERT },
/* EC_2GMODULE_PWR_ON */
.pin_pwr_en = { &gbc_io_1, 1, OCGPIO_CFG_INVERT },
},
.pin_ant_sw = {},
/* NOTE: enable & power go through MOSFETs, inverting them */
/* 2GMODULE_POWEROFF */
.pin_enable = { &gbc_io_1, 2, OCGPIO_CFG_INVERT },
/* EC_2GMODULE_PWR_ON */
.pin_pwr_en = { &gbc_io_1, 1, OCGPIO_CFG_INVERT },
},
.pin_ant_sw = {},
};
// RFFE IO EXPANDERS

View File

@@ -34,14 +34,14 @@ SCHEMA_IMPORT OcGpio_Port gbc_io_1;
SCHEMA_IMPORT const Driver_fxnTable LTC4274_fxnTable;
/* These are terrible pin names, but they match the net names... */
OcGpio_Pin pin_inven_eeprom_wp = { &gbc_io_0, 1, OCGPIO_CFG_OUT_OD_NOPULL };
OcGpio_Pin pin_s_id_eeprom_wp = { &gbc_io_0, 2, OCGPIO_CFG_OUT_OD_NOPULL };
OcGpio_Pin pin_tempsen_evt1 = { &gbc_io_0, 4 };
OcGpio_Pin pin_tempsen_evt2 = { &gbc_io_0, 5 };
OcGpio_Pin pin_tempsen_evt3 = { &gbc_io_0, 6 };
OcGpio_Pin pin_tempsen_evt4 = { &gbc_io_0, 7 };
OcGpio_Pin pin_tempsen_evt5 = { &gbc_io_0, 8 };
OcGpio_Pin eth_sw_tiva_intn = { &gbc_io_0, 11 };
OcGpio_Pin pin_inven_eeprom_wp = { &gbc_io_0, 1, OCGPIO_CFG_OUT_OD_NOPULL };
OcGpio_Pin pin_s_id_eeprom_wp = { &gbc_io_0, 2, OCGPIO_CFG_OUT_OD_NOPULL };
OcGpio_Pin pin_tempsen_evt1 = { &gbc_io_0, 4 };
OcGpio_Pin pin_tempsen_evt2 = { &gbc_io_0, 5 };
OcGpio_Pin pin_tempsen_evt3 = { &gbc_io_0, 6 };
OcGpio_Pin pin_tempsen_evt4 = { &gbc_io_0, 7 };
OcGpio_Pin pin_tempsen_evt5 = { &gbc_io_0, 8 };
OcGpio_Pin eth_sw_tiva_intn = { &gbc_io_0, 11 };
/*****************************************************************************
* EEPROM CONFIG
@@ -66,128 +66,142 @@ Eeprom_Cfg eeprom_gbc_inv = {
/* Power SubSystem Config */
//Lead Acid Temperature sensor.
SE98A_Dev gbc_pwr_lead_acid_ts = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C1,
.slave_addr = PWR_LEAD_ACID_BATT_DEV_TEMP_SENS_ADDR
},
.pin_evt = &pin_tempsen_evt1,
},
.cfg =
{
.dev = { .bus = OC_CONNECT1_I2C1,
.slave_addr =
PWR_LEAD_ACID_BATT_DEV_TEMP_SENS_ADDR },
.pin_evt = &pin_tempsen_evt1,
},
.obj = {},
};
//Lead acid battery charge controller.
LTC4015_Dev gbc_pwr_ext_bat_charger = {
.cfg = {
.i2c_dev = {
.bus = OC_CONNECT1_I2C0,
.slave_addr = 0x68, /* LTC4015 I2C address in 7-bit format */
.cfg =
{
.i2c_dev =
{
.bus = OC_CONNECT1_I2C0,
.slave_addr =
0x68, /* LTC4015 I2C address in 7-bit format */
},
.chem = LTC4015_CHEM_LEAD_ACID,
.r_snsb = PWR_EXT_BATT_RSNSB,
.r_snsi = PWR_EXT_BATT_RSNSI,
.cellcount = 6,
.pin_lt4015_i2c_sel = { &gbc_io_1, 4,
OCGPIO_CFG_OUT_OD_NOPULL },
.pin_alert = &(OcGpio_Pin){ &ec_io, OC_EC_PWR_LACID_ALERT },
},
.chem = LTC4015_CHEM_LEAD_ACID,
.r_snsb = PWR_EXT_BATT_RSNSB,
.r_snsi = PWR_EXT_BATT_RSNSI,
.cellcount = 6,
.pin_lt4015_i2c_sel = { &gbc_io_1, 4, OCGPIO_CFG_OUT_OD_NOPULL },
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_PWR_LACID_ALERT },
},
.obj = {},
};
.obj = {},
};
//Lithium ion battery charge controller.
LTC4015_Dev gbc_pwr_int_bat_charger = {
.cfg = {
.i2c_dev = {
.bus = OC_CONNECT1_I2C0,
.slave_addr = 0x68, /* LTC4015 I2C address in 7-bit format */
},
.chem = LTC4015_CHEM_LI_ION,
.r_snsb = PWR_INT_BATT_RSNSB,
.r_snsi = PWR_INT_BATT_RSNSI,
.cellcount = 3,
.pin_lt4015_i2c_sel = { &gbc_io_1, 4, OCGPIO_CFG_OUT_OD_NOPULL },
.pin_alert = &(OcGpio_Pin){ &ec_io, OC_EC_PWR_LION_ALERT },
},
.obj = {},
.cfg =
{
.i2c_dev =
{
.bus = OC_CONNECT1_I2C0,
.slave_addr =
0x68, /* LTC4015 I2C address in 7-bit format */
},
.chem = LTC4015_CHEM_LI_ION,
.r_snsb = PWR_INT_BATT_RSNSB,
.r_snsi = PWR_INT_BATT_RSNSI,
.cellcount = 3,
.pin_lt4015_i2c_sel = { &gbc_io_1, 4,
OCGPIO_CFG_OUT_OD_NOPULL },
.pin_alert = &(OcGpio_Pin){ &ec_io, OC_EC_PWR_LION_ALERT },
},
.obj = {},
};
//Power Source Equipment
LTC4274_Dev gbc_pwr_pse = {
.cfg = {
.i2c_dev = {
.bus = OC_CONNECT1_I2C8,
.slave_addr = 0x2F, /* LTC4274 I2C address in 7-bit format */
},
.pin_evt = &(OcGpio_Pin){ &ec_io,
OC_EC_GBC_PSE_ALERT },
.reset_pin ={ &ec_io, OC_EC_PWR_PSE_RESET },
},
.cfg =
{
.i2c_dev =
{
.bus = OC_CONNECT1_I2C8,
.slave_addr =
0x2F, /* LTC4274 I2C address in 7-bit format */
},
.pin_evt = &(OcGpio_Pin){ &ec_io, OC_EC_GBC_PSE_ALERT },
.reset_pin = { &ec_io, OC_EC_PWR_PSE_RESET },
},
.obj = {},
};
//Power Device
LTC4275_Dev gbc_pwr_pd = {
.cfg = {
.pin_evt = &(OcGpio_Pin){ &ec_io,
OC_EC_PD_PWRGD_ALERT },
.pin_detect = &(OcGpio_Pin){ &ec_io,
OC_EC_PWR_PD_NT2P },
.cfg =
{
.pin_evt = &(OcGpio_Pin){ &ec_io, OC_EC_PD_PWRGD_ALERT },
.pin_detect = &(OcGpio_Pin){ &ec_io, OC_EC_PWR_PD_NT2P },
},
.obj = {},
};
},
.obj = {},
};
//Power Source
PWRSRC_Dev gbc_pwr_powerSource = { /*Added as a place holder for now.*/
.cfg = {
/* SOLAR_AUX_PRSNT_N */
.pin_solar_aux_prsnt_n = { &ec_io, OC_EC_PWR_PRSNT_SOLAR_AUX },
/* POE_PRSNT_N */
.pin_poe_prsnt_n = { &ec_io, OC_EC_PWR_PRSNT_POE },
/* INT_BAT_PRSNT */
.pin_int_bat_prsnt = { &gbc_io_0, 11 },
/* EXT_BAT_PRSNT */
.pin_ext_bat_prsnt = { &gbc_io_0, 12 },
},
.obj = {},
PWRSRC_Dev gbc_pwr_powerSource = {
/*Added as a place holder for now.*/
.cfg =
{
/* SOLAR_AUX_PRSNT_N */
.pin_solar_aux_prsnt_n = { &ec_io,
OC_EC_PWR_PRSNT_SOLAR_AUX },
/* POE_PRSNT_N */
.pin_poe_prsnt_n = { &ec_io, OC_EC_PWR_PRSNT_POE },
/* INT_BAT_PRSNT */
.pin_int_bat_prsnt = { &gbc_io_0, 11 },
/* EXT_BAT_PRSNT */
.pin_ext_bat_prsnt = { &gbc_io_0, 12 },
},
.obj = {},
};
/* BMS SubSystem Config */
//EC Power sensor for 12V rail.
INA226_Dev gbc_bms_ec_ps_12v = {
/* 12V Power Sensor */
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C6,
.slave_addr = BMS_EC_CURRENT_SENSOR_12V_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_GBC_INA_ALERT },
},
.cfg =
{
.dev =
{
.bus = OC_CONNECT1_I2C6,
.slave_addr =
BMS_EC_CURRENT_SENSOR_12V_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io, OC_EC_GBC_INA_ALERT },
},
};
//EC Power sensor for 3.3V rail.
INA226_Dev gbc_bms_ec_ps_3p3v = {
/* 3.3V Power Sensor */
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C7,
.slave_addr = BMS_EC_CURRENT_SENSOR_3P3V_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_GBC_INA_ALERT },
},
.cfg =
{
.dev =
{
.bus = OC_CONNECT1_I2C7,
.slave_addr =
BMS_EC_CURRENT_SENSOR_3P3V_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io, OC_EC_GBC_INA_ALERT },
},
};
// EC Temperature sensor.
SE98A_Dev gbc_bms_ec_ts = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C1,
.slave_addr = BMS_EC_TEMP_SENSOR_ADDR
.cfg =
{
.dev = { .bus = OC_CONNECT1_I2C1,
.slave_addr = BMS_EC_TEMP_SENSOR_ADDR },
.pin_evt = &pin_tempsen_evt2,
},
.pin_evt = &pin_tempsen_evt2,
},
.obj = {},
};
@@ -237,77 +251,78 @@ Eth_cfg gbc_eth_port4 = {
/* GPP Subsystem Config*/
//EC Power sensor for 12V rail.
INA226_Dev gbc_gpp_ap_ps = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C6,
.slave_addr = GPP_AP_CURRENT_SENSOR_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_GBC_AP_INA_ALERT },
},
.cfg =
{
.dev =
{
.bus = OC_CONNECT1_I2C6,
.slave_addr = GPP_AP_CURRENT_SENSOR_ADDR,
},
.pin_alert =
&(OcGpio_Pin){ &ec_io, OC_EC_GBC_AP_INA_ALERT },
},
};
// AP Temperature sensor
SE98A_Dev gbc_gpp_ap_ts1 = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C1,
.slave_addr = GPP_AP_TEMPSENS1_ADDR
},
.pin_evt = &pin_tempsen_evt3,
},
.obj = {},
.cfg =
{
.dev = { .bus = OC_CONNECT1_I2C1,
.slave_addr = GPP_AP_TEMPSENS1_ADDR },
.pin_evt = &pin_tempsen_evt3,
},
.obj = {},
};
SE98A_Dev gbc_gpp_ap_ts2 = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C1,
.slave_addr = GPP_AP_TEMPSENS2_ADDR
.cfg =
{
.dev = { .bus = OC_CONNECT1_I2C1,
.slave_addr = GPP_AP_TEMPSENS2_ADDR },
.pin_evt = &pin_tempsen_evt5,
},
.pin_evt = &pin_tempsen_evt5,
},
.obj = {},
};
SE98A_Dev gbc_gpp_ap_ts3 = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C1,
.slave_addr = GPP_AP_TEMPSENS3_ADDR
},
.pin_evt = &pin_tempsen_evt4,
},
.obj = {},
.cfg =
{
.dev = { .bus = OC_CONNECT1_I2C1,
.slave_addr = GPP_AP_TEMPSENS3_ADDR },
.pin_evt = &pin_tempsen_evt4,
},
.obj = {},
};
//mSATA power sensor
INA226_Dev gbc_gpp_msata_ps = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C6,
.slave_addr = GPP_MSATA_CURRENT_SENSOR_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_GBC_AP_INA_ALERT },
},
.cfg =
{
.dev =
{
.bus = OC_CONNECT1_I2C6,
.slave_addr = GPP_MSATA_CURRENT_SENSOR_ADDR,
},
.pin_alert =
&(OcGpio_Pin){ &ec_io, OC_EC_GBC_AP_INA_ALERT },
},
};
Gpp_gpioCfg gbc_gpp_gpioCfg = (Gpp_gpioCfg){
/* SOC_PLTRST_N */
.pin_soc_pltrst_n = { &ec_io, OC_EC_GPP_SOC_PLTRST },
.pin_soc_pltrst_n = { &ec_io, OC_EC_GPP_SOC_PLTRST },
/* TIVA_SOC_GPIO2 */
.pin_ap_boot_alert1 = { &ec_io, OC_EC_GPP_AP_BM_1 },
.pin_ap_boot_alert1 = { &ec_io, OC_EC_GPP_AP_BM_1 },
/* TIVA_SOC_GPIO3 */
.pin_ap_boot_alert2 = { &ec_io, OC_EC_GPP_AP_BM_2 },
.pin_ap_boot_alert2 = { &ec_io, OC_EC_GPP_AP_BM_2 },
/* SOC_COREPWROK */
.pin_soc_corepwr_ok = { &ec_io, OC_EC_GPP_PMIC_CORE_PWR },
.pin_soc_corepwr_ok = { &ec_io, OC_EC_GPP_PMIC_CORE_PWR },
/* MSATA_EC_DAS */
.pin_msata_ec_das = { &ec_io, OC_EC_GPP_MSATA_DAS },
.pin_msata_ec_das = { &ec_io, OC_EC_GPP_MSATA_DAS },
/* LT4256_EC_PWRGD */
.pin_lt4256_ec_pwrgd = { &ec_io, OC_EC_GPP_PWRGD_PROTECTION },
.pin_lt4256_ec_pwrgd = { &ec_io, OC_EC_GPP_PWRGD_PROTECTION },
/* AP_12V_ONOFF */
.pin_ap_12v_onoff = { &ec_io, OC_EC_GPP_PMIC_CTRL },
.pin_ap_12v_onoff = { &ec_io, OC_EC_GPP_PMIC_CTRL },
/* EC_RESET_TO_PROC */
.pin_ec_reset_to_proc = { &ec_io, OC_EC_GPP_RST_TO_PROC },
};
@@ -488,7 +503,6 @@ S_OCGPIO_Cfg debug_gbc_ioexpanderx71 = {
.port = &gbc_io_0,
};
/* Factory Configuration for the Devices*/
//Power Factory Config.
const SE98A_Config fact_bc_se98a = {

View File

@@ -17,26 +17,27 @@ SCHEMA_IMPORT OcGpio_Port sync_io;
*****************************************************************************/
//LED Temperature sensor
SE98A_Dev led_hci_ts = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C8,
.slave_addr = HCI_LED_TEMP_SENSOR_ADDR
},
.pin_evt = NULL,
},
.cfg =
{
.dev = { .bus = OC_CONNECT1_I2C8,
.slave_addr = HCI_LED_TEMP_SENSOR_ADDR },
.pin_evt = NULL,
},
.obj = {},
};
//LED IO Expander
HciLedCfg led_hci_ioexp ={
.sx1509_dev[HCI_LED_DRIVER_LEFT] = {
.bus = OC_CONNECT1_I2C8,
.slave_addr = LED_SX1509_LEFT_ADDRESS,
},
.sx1509_dev[HCI_LED_DRIVER_RIGHT] = {
.bus = OC_CONNECT1_I2C8,
.slave_addr = LED_SX1509_RIGHT_ADDRESS,
},
HciLedCfg led_hci_ioexp = {
.sx1509_dev[HCI_LED_DRIVER_LEFT] =
{
.bus = OC_CONNECT1_I2C8,
.slave_addr = LED_SX1509_LEFT_ADDRESS,
},
.sx1509_dev[HCI_LED_DRIVER_RIGHT] =
{
.bus = OC_CONNECT1_I2C8,
.slave_addr = LED_SX1509_RIGHT_ADDRESS,
},
/* EC_GPIO */
.pin_ec_gpio = { &ec_io, OC_EC_HCI_LED_RESET },
};

View File

@@ -30,14 +30,16 @@ Eeprom_Cfg eeprom_sdr_inv = {
/* SDR Subsystem Config.*/
// SDR FPGA power sensor.
INA226_Dev sdr_fpga_ps = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C3,
.slave_addr = SDR_FPGA_CURRENT_SENSOR_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_SDR_FPGA_TEMP_INA_ALERT },
},
.cfg =
{
.dev =
{
.bus = OC_CONNECT1_I2C3,
.slave_addr = SDR_FPGA_CURRENT_SENSOR_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_SDR_FPGA_TEMP_INA_ALERT },
},
};
//SDR FPGA temperature sensor
@@ -47,18 +49,19 @@ I2C_Dev sdr_fpga_ts = {
};
//SDR EEPROM
void* sdr_eeprom_inventory = &eeprom_sdr_inv;
void *sdr_eeprom_inventory = &eeprom_sdr_inv;
//SDR Power sensor
INA226_Dev sdr_ps = {
.cfg = {
.dev = {
.bus = OC_CONNECT1_I2C6,
.slave_addr = SDR_CURRENT_SENSOR_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io,
OC_EC_SDR_INA_ALERT },
},
.cfg =
{
.dev =
{
.bus = OC_CONNECT1_I2C6,
.slave_addr = SDR_CURRENT_SENSOR_ADDR,
},
.pin_alert = &(OcGpio_Pin){ &ec_io, OC_EC_SDR_INA_ALERT },
},
};
// SDR IO EXPANDERS
@@ -81,17 +84,17 @@ const INA226_Config fact_sdr_fpga_ps_cfg = {
.current_lim = 500,
};
Sdr_gpioCfg sdr_gpioCfg = (Sdr_gpioCfg) {
Sdr_gpioCfg sdr_gpioCfg = (Sdr_gpioCfg){
/* EC_TRXFECONN_GPIO2/SDR_REG_LDO_PGOOD */
.pin_sdr_reg_ldo_pgood = { &ec_io, OC_EC_SDR_PWR_GD },
.pin_sdr_reg_ldo_pgood = { &ec_io, OC_EC_SDR_PWR_GD },
/* TRXFE_12V_ONOFF */
.pin_trxfe_12v_onoff = { &ec_io, OC_EC_SDR_PWR_CNTRL },
.pin_trxfe_12v_onoff = { &ec_io, OC_EC_SDR_PWR_CNTRL },
/* EC_FE_RESET_OUT/RF_FE_IO_RESET */
.pin_rf_fe_io_reset = { &ec_io, OC_EC_SDR_FE_IO_RESET_CTRL },
.pin_rf_fe_io_reset = { &ec_io, OC_EC_SDR_FE_IO_RESET_CTRL },
/* EC_TRXFECONN_GPIO1/SDR_RESET_IN */
.pin_sdr_reset_in = { &ec_io, OC_EC_SDR_DEVICE_CONTROL },
.pin_sdr_reset_in = { &ec_io, OC_EC_SDR_DEVICE_CONTROL },
/* EC_TRXFE_RESET */
.pin_ec_trxfe_reset = { &ec_io, OC_EC_RFFE_RESET },
.pin_ec_trxfe_reset = { &ec_io, OC_EC_RFFE_RESET },
/* FX3_RESET */
.pin_fx3_reset = { &sdr_fx3_io, 0 },
.pin_fx3_reset = { &sdr_fx3_io, 0 },
};

View File

@@ -22,9 +22,9 @@ SCHEMA_IMPORT OcGpio_Port sync_io;
Iridium_Cfg obc_irridium = {
.uart = OC_CONNECT1_UARTXR0,
/* IRIDIUM_RSTIOEXP */
.pin_enable = { &sync_io, 2, OCGPIO_CFG_OUT_STD },
.pin_enable = { &sync_io, 2, OCGPIO_CFG_OUT_STD },
/* R_NW_AVAIL */
.pin_nw_avail = { &sync_io, 3, OCGPIO_CFG_IN_PU },
.pin_nw_avail = { &sync_io, 3, OCGPIO_CFG_IN_PU },
};
/* Sync Subsystem Config.*/
@@ -53,25 +53,25 @@ const ADT7481_Config fact_sync_ts_cfg = {
Sync_gpioCfg sync_gpiocfg = (Sync_gpioCfg){
/* SPDT_CNTRL_LVL */
.pin_spdt_cntrl_lvl = { &sync_io, 0, OCGPIO_CFG_OUT_OD_NOPULL },
.pin_spdt_cntrl_lvl = { &sync_io, 0, OCGPIO_CFG_OUT_OD_NOPULL },
/* WARMUP_SURVEY_INIT_SEL */
.pin_warmup_survey_init_sel = { &sync_io, 1, OCGPIO_CFG_OUT_OD_NOPULL },
.pin_warmup_survey_init_sel = { &sync_io, 1, OCGPIO_CFG_OUT_OD_NOPULL },
/* R_PHASE_LOCK_IOEXP */
.pin_r_phase_lock_ioexp = { &sync_io, 4, OCGPIO_CFG_IN_PU },
.pin_r_phase_lock_ioexp = { &sync_io, 4, OCGPIO_CFG_IN_PU },
/* R_LOCK_OK_IOEXP */
.pin_r_lock_ok_ioexp = { &sync_io, 5, OCGPIO_CFG_IN_PU },
.pin_r_lock_ok_ioexp = { &sync_io, 5, OCGPIO_CFG_IN_PU },
/* R_ALARM_IOEXP */
.pin_r_alarm_ioexp = { &sync_io, 6, OCGPIO_CFG_IN_PU },
.pin_r_alarm_ioexp = { &sync_io, 6, OCGPIO_CFG_IN_PU },
/* 12V_REG_ENB */
.pin_12v_reg_enb = { &sync_io, 7, OCGPIO_CFG_OUT_STD },
.pin_12v_reg_enb = { &sync_io, 7, OCGPIO_CFG_OUT_STD },
/* TEMP_ALERT */
.pin_temp_alert = { &sync_io, 8, OCGPIO_CFG_IN_PU },
.pin_temp_alert = { &sync_io, 8, OCGPIO_CFG_IN_PU },
/* SPDT_CNTRL_LTE_CPU_GPS_LVL */
.pin_spdt_cntrl_lte_cpu_gps_lvl = { &sync_io, 9, OCGPIO_CFG_OUT_OD_NOPULL },
/* INIT_SURVEY_SEL */
.pin_init_survey_sel = { &sync_io, 10, OCGPIO_CFG_OUT_OD_NOPULL },
.pin_init_survey_sel = { &sync_io, 10, OCGPIO_CFG_OUT_OD_NOPULL },
/* EC_SYNC_RESET */
.pin_ec_sync_reset = { &ec_io, OC_EC_SYNC_RESET },
.pin_ec_sync_reset = { &ec_io, OC_EC_SYNC_RESET },
};
Obc_gpioCfg sync_obc_gpiocfg = {

File diff suppressed because it is too large Load Diff

View File

@@ -44,46 +44,46 @@ extern "C" {
#include "common/inc/global/OC_CONNECT1.h"
#define Board_initEMAC OC_CONNECT1_initEMAC
#define Board_initGeneral OC_CONNECT1_initGeneral
#define Board_initGPIO OC_CONNECT1_initGPIO
#define Board_initI2C OC_CONNECT1_initI2C
#define Board_initUART OC_CONNECT1_initUART
#define Board_initUSB OC_CONNECT1_initUSB
#define Board_initWatchdog OC_CONNECT1_initWatchdog
#define Board_initEMAC OC_CONNECT1_initEMAC
#define Board_initGeneral OC_CONNECT1_initGeneral
#define Board_initGPIO OC_CONNECT1_initGPIO
#define Board_initI2C OC_CONNECT1_initI2C
#define Board_initUART OC_CONNECT1_initUART
#define Board_initUSB OC_CONNECT1_initUSB
#define Board_initWatchdog OC_CONNECT1_initWatchdog
#define Board_IOEXP_ALERT OC_EC_GBC_IOEXP71_ALERT
#define Board_ECINA_ALERT OC_EC_GBC_INA_ALERT
#define Board_APINA_ALERT OC_EC_GBC_AP_INA_ALERT
#define Board_IOEXP_ALERT OC_EC_GBC_IOEXP71_ALERT
#define Board_ECINA_ALERT OC_EC_GBC_INA_ALERT
#define Board_APINA_ALERT OC_EC_GBC_AP_INA_ALERT
#define Board_SDRFPGA_TEMPINA_ALERT OC_EC_SDR_FPGA_TEMP_INA_ALERT
#define Board_SDR_INA_ALERT OC_EC_SDR_INA_ALERT
#define Board_RFFE_TEMP_INA_ALERT OC_EC_RFFE_TEMP_INA_ALERT
#define Board_SYNC_IOEXP_ALERT OC_EC_SYNC_IOEXP_ALERT
#define Board_LeadAcidAlert OC_EC_PWR_LACID_ALERT
#define Board_LithiumIonAlert OC_EC_PWR_LION_ALERT
#define Board_PSEALERT OC_EC_GBC_PSE_ALERT
#define Board_PD_PWRGDAlert OC_EC_PD_PWRGD_ALERT
#define Board_SOC_UART3_TX OC_EC_SOC_UART3_TX
#define Board_SDR_INA_ALERT OC_EC_SDR_INA_ALERT
#define Board_RFFE_TEMP_INA_ALERT OC_EC_RFFE_TEMP_INA_ALERT
#define Board_SYNC_IOEXP_ALERT OC_EC_SYNC_IOEXP_ALERT
#define Board_LeadAcidAlert OC_EC_PWR_LACID_ALERT
#define Board_LithiumIonAlert OC_EC_PWR_LION_ALERT
#define Board_PSEALERT OC_EC_GBC_PSE_ALERT
#define Board_PD_PWRGDAlert OC_EC_PD_PWRGD_ALERT
#define Board_SOC_UART3_TX OC_EC_SOC_UART3_TX
#define Board_I2C0 OC_CONNECT1_I2C0
#define Board_I2C1 OC_CONNECT1_I2C1
#define Board_I2C2 OC_CONNECT1_I2C2
#define Board_I2C3 OC_CONNECT1_I2C3
#define Board_I2C4 OC_CONNECT1_I2C4
#define Board_I2C6 OC_CONNECT1_I2C6
#define Board_I2C7 OC_CONNECT1_I2C7
#define Board_I2C8 OC_CONNECT1_I2C8
#define Board_I2CCOUNT OC_CONNECT1_I2CCOUNT
#define Board_I2C0 OC_CONNECT1_I2C0
#define Board_I2C1 OC_CONNECT1_I2C1
#define Board_I2C2 OC_CONNECT1_I2C2
#define Board_I2C3 OC_CONNECT1_I2C3
#define Board_I2C4 OC_CONNECT1_I2C4
#define Board_I2C6 OC_CONNECT1_I2C6
#define Board_I2C7 OC_CONNECT1_I2C7
#define Board_I2C8 OC_CONNECT1_I2C8
#define Board_I2CCOUNT OC_CONNECT1_I2CCOUNT
#define Board_USBHOST OC_CONNECT1_USBHOST
#define Board_USBDEVICE OC_CONNECT1_USBDEVICE
#define Board_USBHOST OC_CONNECT1_USBHOST
#define Board_USBDEVICE OC_CONNECT1_USBDEVICE
// TODO: maybe rename to "UART_GSM" and stuff to be more abstracted from HW
#define Board_UART0 OC_CONNECT1_UART0
#define Board_UART3 OC_CONNECT1_UART3
#define Board_UART4 OC_CONNECT1_UART4
#define Board_UARTXR0 OC_CONNECT1_UARTXR0
#define Board_WATCHDOG0 OC_CONNECT1_WATCHDOG0
#define Board_UART0 OC_CONNECT1_UART0
#define Board_UART3 OC_CONNECT1_UART3
#define Board_UART4 OC_CONNECT1_UART4
#define Board_UARTXR0 OC_CONNECT1_UARTXR0
#define Board_WATCHDOG0 OC_CONNECT1_WATCHDOG0
#ifdef __cplusplus
}

View File

@@ -73,7 +73,8 @@ extern void usb_tx_createtask(void);
extern void uartdma_rx_createtask(void);
extern void uartdma_tx_createtask(void);
extern void ebmp_create_task(void);
extern void watchdog_create_task(void);;
extern void watchdog_create_task(void);
;
/*****************************************************************************
** FUNCTION NAME : bigbrother_process_tx_msg
@@ -90,7 +91,7 @@ static ReturnStatus bigbrother_process_tx_msg(uint8_t *pMsg)
ReturnStatus status = RETURN_OK;
LOGGER_DEBUG("BIGBROTHER:INFO:: Processing Big Brother TX Message.\n");
if (pMsg != NULL) {
Util_enqueueMsg(gossiperTxMsgQueue, semGossiperMsg, (uint8_t*) pMsg);
Util_enqueueMsg(gossiperTxMsgQueue, semGossiperMsg, (uint8_t *)pMsg);
} else {
LOGGER_ERROR("BIGBROTHER::ERROR::No Valid Pointer.\n");
}
@@ -131,10 +132,10 @@ static ReturnStatus bigbrother_process_rx_msg(uint8_t *pMsg)
{
ReturnStatus status = RETURN_OK;
LOGGER_DEBUG("BIGBROTHER:INFO:: Processing Big Brother RX Message.\n");
OCMPMessageFrame * pOCMPMessageFrame = (OCMPMessageFrame *) pMsg;
OCMPMessageFrame *pOCMPMessageFrame = (OCMPMessageFrame *)pMsg;
if (pOCMPMessageFrame != NULL) {
LOGGER_DEBUG("BIGBROTHER:INFO:: RX Msg recieved with Length: 0x%x,"
"Interface: 0x%x, Seq.No: 0x%x, TimeStamp: 0x%x.\n",
"Interface: 0x%x, Seq.No: 0x%x, TimeStamp: 0x%x.\n",
pOCMPMessageFrame->header.ocmpFrameLen,
pOCMPMessageFrame->header.ocmpInterface,
pOCMPMessageFrame->header.ocmpSeqNumber,
@@ -189,7 +190,7 @@ extern OcGpio_Port gbc_io_0;
//OcGpio_Pin pin_r_irq_intrpt = { &gbc_io_0, 0, OCGPIO_CFG_IN_PU };
//OcGpio_Pin pin_inven_eeprom_wp = { &gbc_io_0, 1, OCGPIO_CFG_OUT_OD_NOPULL };
//OcGpio_Pin pin_s_id_eeprom_wp = { &gbc_io_0, 2, OCGPIO_CFG_OUT_OD_NOPULL };
OcGpio_Pin pin_uart_sel = { &gbc_io_0, 3, OCGPIO_CFG_OUT_OD_NOPULL };
OcGpio_Pin pin_uart_sel = { &gbc_io_0, 3, OCGPIO_CFG_OUT_OD_NOPULL };
//OcGpio_Pin pin_tempsen_evt1 = { &gbc_io_0, 4 };
//OcGpio_Pin pin_tempsen_evt2 = { &gbc_io_0, 5 };
//OcGpio_Pin pin_tempsen_evt3 = { &gbc_io_0, 6 };
@@ -198,10 +199,10 @@ OcGpio_Pin pin_uart_sel = { &gbc_io_0, 3, OCGPIO_CFG_OUT_OD_NOPULL }
//OcGpio_Pin pin_buzzer_on = { &gbc_io_0, 10, OCGPIO_CFG_OUT_OD_NOPULL };
//OcGpio_Pin pin_int_bat_prsnt = { &gbc_io_0, 11 };
//OcGpio_Pin pin_ext_bat_prsnt = { &gbc_io_0, 12 };
OcGpio_Pin pin_ec_syncconn_gpio1 = { &gbc_io_0, 13, OCGPIO_CFG_OUT_OD_NOPULL };
OcGpio_Pin pin_eth_sw_ec_intn = { &gbc_io_0, 14 };
OcGpio_Pin pin_ec_syncconn_gpio1 = { &gbc_io_0, 13, OCGPIO_CFG_OUT_OD_NOPULL };
OcGpio_Pin pin_eth_sw_ec_intn = { &gbc_io_0, 14 };
OcGpio_Pin pin_v5_a_pgood = { &gbc_io_1, 3, OCGPIO_CFG_IN_PU };
OcGpio_Pin pin_v5_a_pgood = { &gbc_io_1, 3, OCGPIO_CFG_IN_PU };
extern OcGpio_Port sync_io;
extern OcGpio_Port sdr_fx3_io;
@@ -306,9 +307,9 @@ static void bigborther_spwan_task(void)
/* Check the list for possible devices connected. */
/* Launches other tasks */
usb_rx_createtask(); // P - 05
usb_tx_createtask(); // P - 04
gossiper_createtask(); // P - 06
usb_rx_createtask(); // P - 05
usb_tx_createtask(); // P - 04
gossiper_createtask(); // P - 06
ebmp_create_task();
watchdog_create_task();
@@ -332,17 +333,20 @@ static void bigbrother_init(void)
/*Creating Semaphore for RX Message Queue*/
semBigBrotherMsg = Semaphore_create(0, NULL, NULL);
if (semBigBrotherMsg == NULL) {
LOGGER_ERROR("BIGBROTHER:ERROR::BIGBROTHER RX Semaphore creation failed.\n");
LOGGER_ERROR(
"BIGBROTHER:ERROR::BIGBROTHER RX Semaphore creation failed.\n");
}
/*Creating RX Message Queue*/
bigBrotherRxMsgQueue = Util_constructQueue(&bigBrotherRxMsg);
LOGGER_DEBUG("BIGBROTHER:INFO::Constructing message Queue for 0x%x Big Brother RX Messages.\n",
bigBrotherRxMsgQueue);
LOGGER_DEBUG(
"BIGBROTHER:INFO::Constructing message Queue for 0x%x Big Brother RX Messages.\n",
bigBrotherRxMsgQueue);
/*Creating TX Message Queue*/
bigBrotherTxMsgQueue = Util_constructQueue(&bigBrotherTxMsg);
LOGGER_DEBUG("BIGBROTHER:INFO::Constructing message Queue for 0x%x Big Brother RX Messages.\n",
bigBrotherTxMsgQueue);
LOGGER_DEBUG(
"BIGBROTHER:INFO::Constructing message Queue for 0x%x Big Brother RX Messages.\n",
bigBrotherTxMsgQueue);
}
/*****************************************************************************
@@ -370,15 +374,15 @@ static void bigbrother_taskfxn(UArg a0, UArg a1)
while (true) {
if (Semaphore_pend(semBigBrotherMsg, BIOS_WAIT_FOREVER)) {
while (!Queue_empty(bigBrotherRxMsgQueue)) {
uint8_t *pWrite = (uint8_t *) Util_dequeueMsg(
bigBrotherRxMsgQueue);
uint8_t *pWrite =
(uint8_t *)Util_dequeueMsg(bigBrotherRxMsgQueue);
if (pWrite) {
bigbrother_process_rx_msg(pWrite);
}
}
while (!Queue_empty(bigBrotherTxMsgQueue)) {
uint8_t *pWrite = (uint8_t *) Util_dequeueMsg(
bigBrotherTxMsgQueue);
uint8_t *pWrite =
(uint8_t *)Util_dequeueMsg(bigBrotherTxMsgQueue);
if (pWrite) {
bigbrother_process_tx_msg(pWrite);
}

View File

@@ -111,18 +111,21 @@ static void gossiper_init(void)
/*Creating Semaphore for RX Message Queue*/
semGossiperMsg = Semaphore_create(0, NULL, NULL);
if (semGossiperMsg == NULL) {
LOGGER_ERROR("GOSSIPER:ERROR::GOSSIPER RX Semaphore creation failed.\n");
LOGGER_ERROR(
"GOSSIPER:ERROR::GOSSIPER RX Semaphore creation failed.\n");
}
/*Creating RX Message Queue*/
gossiperRxMsgQueue = Util_constructQueue(&gossiperRxMsg);
LOGGER_DEBUG("GOSSIPER:INFO::Constructing message Queue 0x%x for RX Gossiper Messages.\n",
gossiperRxMsgQueue);
LOGGER_DEBUG(
"GOSSIPER:INFO::Constructing message Queue 0x%x for RX Gossiper Messages.\n",
gossiperRxMsgQueue);
/*Creating TX Message Queue*/
gossiperTxMsgQueue = Util_constructQueue(&gossiperTxMsg);
LOGGER_DEBUG("GOSSIPER:INFO::Constructing message Queue 0x%x for TX Gossiper Messages.\n",
gossiperTxMsgQueue);
LOGGER_DEBUG(
"GOSSIPER:INFO::Constructing message Queue 0x%x for TX Gossiper Messages.\n",
gossiperTxMsgQueue);
}
/*****************************************************************************
@@ -142,8 +145,8 @@ static void gossiper_taskfxn(UArg a0, UArg a1)
if (Semaphore_pend(semGossiperMsg, BIOS_WAIT_FOREVER)) {
/* Gossiper RX Messgaes */
while (!Queue_empty(gossiperRxMsgQueue)) {
uint8_t *pWrite = (uint8_t *) Util_dequeueMsg(
gossiperRxMsgQueue);
uint8_t *pWrite =
(uint8_t *)Util_dequeueMsg(gossiperRxMsgQueue);
if (pWrite) {
gossiper_process_rx_msg(pWrite);
} else {
@@ -153,8 +156,8 @@ static void gossiper_taskfxn(UArg a0, UArg a1)
/* Gossiper TX Messgaes */
while (!Queue_empty(gossiperTxMsgQueue)) {
uint8_t *pWrite = (uint8_t *) Util_dequeueMsg(
gossiperTxMsgQueue);
uint8_t *pWrite =
(uint8_t *)Util_dequeueMsg(gossiperTxMsgQueue);
if (pWrite) {
gossiper_process_tx_msg(pWrite);
} else {
@@ -180,13 +183,14 @@ static ReturnStatus gossiper_process_rx_msg(uint8_t *pMsg)
ReturnStatus status = RETURN_OK;
LOGGER_DEBUG("GOSSIPER:INFO:: Processing Gossiper RX Message.\n");
OCMPMessageFrame * pOCMPMessageFrame = (OCMPMessageFrame *) pMsg;
OCMPMessageFrame *pOCMPMessageFrame = (OCMPMessageFrame *)pMsg;
if (pOCMPMessageFrame != NULL) {
LOGGER_DEBUG("GOSSIPER:INFO:: RX Msg recieved with Length: 0x%x, Interface: 0x%x, Seq.No: 0x%x, TimeStamp: 0x%x.\n",
pOCMPMessageFrame->header.ocmpFrameLen,
pOCMPMessageFrame->header.ocmpInterface,
pOCMPMessageFrame->header.ocmpSeqNumber,
pOCMPMessageFrame->header.ocmpTimestamp);
LOGGER_DEBUG(
"GOSSIPER:INFO:: RX Msg recieved with Length: 0x%x, Interface: 0x%x, Seq.No: 0x%x, TimeStamp: 0x%x.\n",
pOCMPMessageFrame->header.ocmpFrameLen,
pOCMPMessageFrame->header.ocmpInterface,
pOCMPMessageFrame->header.ocmpSeqNumber,
pOCMPMessageFrame->header.ocmpTimestamp);
/*Update the Debug info required based on the debug jumper connected*/
//status = CheckDebugEnabled()
if (pOCMPMessageFrame->message.msgtype == OCMP_MSG_TYPE_DEBUG) {
@@ -199,7 +203,8 @@ static ReturnStatus gossiper_process_rx_msg(uint8_t *pMsg)
}
#endif
}
Util_enqueueMsg(bigBrotherRxMsgQueue, semBigBrotherMsg, (uint8_t*) pMsg);
Util_enqueueMsg(bigBrotherRxMsgQueue, semBigBrotherMsg,
(uint8_t *)pMsg);
} else {
LOGGER_ERROR("GOSSIPER:ERROR:: Not valid pointer.\n");
}
@@ -220,18 +225,18 @@ static ReturnStatus gossiper_process_tx_msg(uint8_t *pMsg)
{
ReturnStatus status = RETURN_OK;
LOGGER_DEBUG("GOSSIPER:INFO:: Processing Gossiper TX Message.\n");
OCMPMessageFrame * pOCMPMessageFrame = (OCMPMessageFrame *) pMsg;
OCMPMessageFrame *pOCMPMessageFrame = (OCMPMessageFrame *)pMsg;
if (pOCMPMessageFrame != NULL) {
if (pOCMPMessageFrame->header.ocmpInterface == OCMP_COMM_IFACE_UART) {
status = gossiper_uart_send_msg(pMsg);
} else if (pOCMPMessageFrame->header.ocmpInterface
== OCMP_COMM_IFACE_ETHERNET) {
} else if (pOCMPMessageFrame->header.ocmpInterface ==
OCMP_COMM_IFACE_ETHERNET) {
status = gossiper_ethernet_send_msg(pMsg);
} else if (pOCMPMessageFrame->header.ocmpInterface
== OCMP_COMM_IFACE_SBD) {
// Will be added later.
} else if (pOCMPMessageFrame->header.ocmpInterface
== OCMP_COMM_IFACE_USB) {
} else if (pOCMPMessageFrame->header.ocmpInterface ==
OCMP_COMM_IFACE_SBD) {
// Will be added later.
} else if (pOCMPMessageFrame->header.ocmpInterface ==
OCMP_COMM_IFACE_USB) {
status = gossiper_usb_send_msg(pMsg);
}
} else {
@@ -253,9 +258,10 @@ static ReturnStatus gossiper_process_tx_msg(uint8_t *pMsg)
static ReturnStatus gossiper_ethernet_send_msg(uint8_t *pMsg)
{
ReturnStatus status = RETURN_OK;
LOGGER_DEBUG("GOSSIPER:INFO:: Forwarding TX message to the ETH Interface.\n");
LOGGER_DEBUG(
"GOSSIPER:INFO:: Forwarding TX message to the ETH Interface.\n");
if (pMsg != NULL) {
Util_enqueueMsg(ethTxMsgQueue, ethTxsem, (uint8_t*) pMsg);
Util_enqueueMsg(ethTxMsgQueue, ethTxsem, (uint8_t *)pMsg);
} else {
LOGGER_ERROR("GOSSIPER::ERROR::No Valid Pointer.\n");
}
@@ -275,9 +281,10 @@ static ReturnStatus gossiper_ethernet_send_msg(uint8_t *pMsg)
static ReturnStatus gossiper_uart_send_msg(uint8_t *pMsg)
{
ReturnStatus status = RETURN_OK;
LOGGER_DEBUG("GOSSIPER:INFO:: Forwarding TX message to the UART Interface.\n");
LOGGER_DEBUG(
"GOSSIPER:INFO:: Forwarding TX message to the UART Interface.\n");
if (pMsg != NULL) {
Util_enqueueMsg(uartTxMsgQueue, semUARTTX, (uint8_t*) pMsg);
Util_enqueueMsg(uartTxMsgQueue, semUARTTX, (uint8_t *)pMsg);
} else {
LOGGER_ERROR("GOSSIPER::ERROR::No Valid Pointer.\n");
}
@@ -297,9 +304,10 @@ static ReturnStatus gossiper_uart_send_msg(uint8_t *pMsg)
static ReturnStatus gossiper_usb_send_msg(uint8_t *pMsg)
{
ReturnStatus status = RETURN_OK;
LOGGER_DEBUG("GOSSIPER:INFO:: Forwarding TX message to the USB Interface.\n");
LOGGER_DEBUG(
"GOSSIPER:INFO:: Forwarding TX message to the USB Interface.\n");
if (pMsg != NULL) {
Util_enqueueMsg(usbTxMsgQueue, semUSBTX, (uint8_t*) pMsg);
Util_enqueueMsg(usbTxMsgQueue, semUSBTX, (uint8_t *)pMsg);
} else {
LOGGER_ERROR("GOSSIPER::ERROR::No Valid Pointer.\n");
}

View File

@@ -18,11 +18,11 @@
/*****************************************************************************
* MACRO DEFINITIONS
*****************************************************************************/
#define GOSSIPER_TASK_PRIORITY 6
#define GOSSIPER_TASK_STACK_SIZE 2048
#define GOSSIPER_TASK_PRIORITY 6
#define GOSSIPER_TASK_STACK_SIZE 2048
#define SET_DEBEUG_MODE(debugMode) ((debugMode | 0x00))
#define UNSET_DEBUG_MODE(debugMode) ((debugMode & 0x0f))
#define SET_DEBEUG_MODE(debugMode) ((debugMode | 0x00))
#define UNSET_DEBUG_MODE(debugMode) ((debugMode & 0x0f))
/*****************************************************************************
* HANDLE DEFINITIONS

View File

@@ -18,60 +18,90 @@
/*****************************************************************************
* REGISTER DEFINITIONS
*****************************************************************************/
#define ADT7481_REG_R_LOCAL_TEMP 0x00 /* Local Temperature Value */
#define ADT7481_REG_R_REMOTE1_TEMP_H 0x01 /* Remote 1 Temperature Value High Byte */
#define ADT7481_REG_R_STATUS1 0x02 /* Status Register 1 */
#define ADT7481_REG_R_CONFIG1 0x03 /* Configuration Register 1 */
#define ADT7481_REG_R_CONVERSION_RATE 0x04 /* Conversion Rate/Channel Selector */
#define ADT7481_REG_R_LOCAL_HIGHLIMIT 0x05 /* Local Temperature High Limit */
#define ADT7481_REG_R_LOCAL_LOWLIMIT 0x06 /* Local Temperature Low Limit */
#define ADT7481_REG_R_REMOTE1_HIGHLIMIT_H 0x07 /* Remote 1 Temp High Limit High Byte */
#define ADT7481_REG_R_REMOTE1_LOWLIMIT_H 0x08 /* Remote 1 Temp Low Limit High Byte */
#define ADT7481_REG_W_CONFIG1 0x09 /* Configuration Register */
#define ADT7481_REG_W_CONVERSION_RATE 0x0A /* Conversion Rate/Channel Selector */
#define ADT7481_REG_W_LOCAL_HIGHLIMIT 0x0B /* Local Temperature High Limit */
#define ADT7481_REG_W_LOCAL_LOWLIMIT 0x0C /* Local Temperature Low Limit */
#define ADT7481_REG_W_REMOTE1_HIGHLIMIT_H 0x0D /* Remote 1 Temp High Limit High Byte */
#define ADT7481_REG_W_REMOTE1_LOWLIMIT_H 0x0E /* Remote 1 Temp Low Limit High Byte */
#define ADT7481_REG_W_ONE_SHOT 0x0F /* One-Shot */
#define ADT7481_REG_R_REMOTE1_TEMP_L 0x10 /* Remote 1 Temperature Value Low Byte */
#define ADT7481_REG_R_REMOTE1_OFFSET_H 0x11 /* Remote 1 Temperature Offset High Byte */
#define ADT7481_REG_W_REMOTE1_OFFSET_H 0x11 /* Remote 1 Temperature Offset High Byte */
#define ADT7481_REG_R_REMOTE1_OFFSET_L 0x12 /* Remote 1 Temperature Offset Low Byte */
#define ADT7481_REG_W_REMOTE1_OFFSET_L 0x12 /* Remote 1 Temperature Offset Low Byte */
#define ADT7481_REG_R_REMOTE1_HIGHLIMIT_L 0x13 /* Remote 1 Temp High Limit Low Byte */
#define ADT7481_REG_W_REMOTE1_HIGHLIMIT_L 0x13 /* Remote 1 Temp High Limit Low Byte */
#define ADT7481_REG_R_REMOTE1_LOWLIMIT_L 0x14 /* Remote 1 Temp Low Limit Low Byte */
#define ADT7481_REG_W_REMOTE1_LOWLIMIT_L 0x14 /* Remote 1 Temp Low Limit Low Byte */
#define ADT7481_REG_R_REMOTE1_THERMLIMIT 0x19 /* Remote 1 THERM Limit */
#define ADT7481_REG_W_REMOTE1_THERMLIMIT 0x19 /* Remote 1 THERM Limit */
#define ADT7481_REG_R_LOCAL_THERMLIMIT 0x20 /* Local THERM Limit */
#define ADT7481_REG_W_LOCAL_THERMLIMIT 0x20 /* Local THERM Limit */
#define ADT7481_REG_R_THERM_HYST 0x21 /* THERM Hysteresis */
#define ADT7481_REG_W_THERM_HYST 0x21 /* THERM Hysteresis */
#define ADT7481_REG_R_CONECUTIVE_ALERT 0x22 /* Consecutive ALERT */
#define ADT7481_REG_W_CONECUTIVE_ALERT 0x22 /* Consecutive ALERT */
#define ADT7481_REG_R_STATUS2 0x23 /* Status Register 2 */
#define ADT7481_REG_R_CONFIG2 0x24 /* Configuration 2 Register */
#define ADT7481_REG_W_CONFIG2 0x24 /* Configuration 2 Register */
#define ADT7481_REG_R_REMOTE2_TEMP_H 0x30 /* Remote 2 Temperature Value High Byte */
#define ADT7481_REG_R_REMOTE2_HIGHLIMIT_H 0x31 /* Remote 2 Temp High Limit High Byte */
#define ADT7481_REG_W_REMOTE2_HIGHLIMIT_H 0x31 /* Remote 2 Temp High Limit High Byte */
#define ADT7481_REG_R_REMOTE2_LOWLIMIT_H 0x32 /* Remote 2 Temp Low Limit High Byte */
#define ADT7481_REG_W_REMOTE2_LOWLIMIT_H 0x32 /* Remote 2 Temp Low Limit High Byte */
#define ADT7481_REG_R_REMOTE2_TEMP_L 0x33 /* Remote 2 Temperature Value Low Byte */
#define ADT7481_REG_R_REMOTE2_OFFSET_H 0x34 /* Remote 2 Temperature Offset High Byte */
#define ADT7481_REG_W_REMOTE2_OFFSET_H 0x34 /* Remote 2 Temperature Offset High Byte */
#define ADT7481_REG_R_REMOTE2_OFFSET_L 0x35 /* Remote 2 Temperature Offset Low Byte */
#define ADT7481_REG_W_REMOTE2_OFFSET_L 0x35 /* Remote 2 Temperature Offset Low Byte */
#define ADT7481_REG_R_REMOTE2_HIGHLIMIT_L 0x36 /* Remote 2 Temp High Limit Low Byte */
#define ADT7481_REG_W_REMOTE2_HIGHLIMIT_L 0x36 /* Remote 2 Temp High Limit Low Byte */
#define ADT7481_REG_R_REMOTE2_LOWLIMIT_L 0x37 /* Remote 2 Temp Low Limit Low Byte */
#define ADT7481_REG_W_REMOTE2_LOWLIMIT_L 0x37 /* Remote 2 Temp Low Limit Low Byte */
#define ADT7481_REG_R_REMOTE2_THERMLIMIT 0x39 /* Remote 2 THERM Limit */
#define ADT7481_REG_W_REMOTE2_THERMLIMIT 0x39 /* Remote 2 THERM Limit */
#define ADT7481_REG_R_CHIP_ID 0x3D /* Device ID */
#define ADT7481_REG_R_MAN_ID 0x3E /* Manufacturer ID */
#define ADT7481_REG_R_LOCAL_TEMP 0x00 /* Local Temperature Value */
#define ADT7481_REG_R_REMOTE1_TEMP_H \
0x01 /* Remote 1 Temperature Value High Byte */
#define ADT7481_REG_R_STATUS1 0x02 /* Status Register 1 */
#define ADT7481_REG_R_CONFIG1 0x03 /* Configuration Register 1 */
#define ADT7481_REG_R_CONVERSION_RATE \
0x04 /* Conversion Rate/Channel Selector */
#define ADT7481_REG_R_LOCAL_HIGHLIMIT 0x05 /* Local Temperature High Limit */
#define ADT7481_REG_R_LOCAL_LOWLIMIT 0x06 /* Local Temperature Low Limit */
#define ADT7481_REG_R_REMOTE1_HIGHLIMIT_H \
0x07 /* Remote 1 Temp High Limit High Byte */
#define ADT7481_REG_R_REMOTE1_LOWLIMIT_H \
0x08 /* Remote 1 Temp Low Limit High Byte */
#define ADT7481_REG_W_CONFIG1 0x09 /* Configuration Register */
#define ADT7481_REG_W_CONVERSION_RATE \
0x0A /* Conversion Rate/Channel Selector */
#define ADT7481_REG_W_LOCAL_HIGHLIMIT 0x0B /* Local Temperature High Limit */
#define ADT7481_REG_W_LOCAL_LOWLIMIT 0x0C /* Local Temperature Low Limit */
#define ADT7481_REG_W_REMOTE1_HIGHLIMIT_H \
0x0D /* Remote 1 Temp High Limit High Byte */
#define ADT7481_REG_W_REMOTE1_LOWLIMIT_H \
0x0E /* Remote 1 Temp Low Limit High Byte */
#define ADT7481_REG_W_ONE_SHOT 0x0F /* One-Shot */
#define ADT7481_REG_R_REMOTE1_TEMP_L \
0x10 /* Remote 1 Temperature Value Low Byte */
#define ADT7481_REG_R_REMOTE1_OFFSET_H \
0x11 /* Remote 1 Temperature Offset High Byte */
#define ADT7481_REG_W_REMOTE1_OFFSET_H \
0x11 /* Remote 1 Temperature Offset High Byte */
#define ADT7481_REG_R_REMOTE1_OFFSET_L \
0x12 /* Remote 1 Temperature Offset Low Byte */
#define ADT7481_REG_W_REMOTE1_OFFSET_L \
0x12 /* Remote 1 Temperature Offset Low Byte */
#define ADT7481_REG_R_REMOTE1_HIGHLIMIT_L \
0x13 /* Remote 1 Temp High Limit Low Byte */
#define ADT7481_REG_W_REMOTE1_HIGHLIMIT_L \
0x13 /* Remote 1 Temp High Limit Low Byte */
#define ADT7481_REG_R_REMOTE1_LOWLIMIT_L \
0x14 /* Remote 1 Temp Low Limit Low Byte */
#define ADT7481_REG_W_REMOTE1_LOWLIMIT_L \
0x14 /* Remote 1 Temp Low Limit Low Byte */
#define ADT7481_REG_R_REMOTE1_THERMLIMIT 0x19 /* Remote 1 THERM Limit */
#define ADT7481_REG_W_REMOTE1_THERMLIMIT 0x19 /* Remote 1 THERM Limit */
#define ADT7481_REG_R_LOCAL_THERMLIMIT 0x20 /* Local THERM Limit */
#define ADT7481_REG_W_LOCAL_THERMLIMIT 0x20 /* Local THERM Limit */
#define ADT7481_REG_R_THERM_HYST 0x21 /* THERM Hysteresis */
#define ADT7481_REG_W_THERM_HYST 0x21 /* THERM Hysteresis */
#define ADT7481_REG_R_CONECUTIVE_ALERT 0x22 /* Consecutive ALERT */
#define ADT7481_REG_W_CONECUTIVE_ALERT 0x22 /* Consecutive ALERT */
#define ADT7481_REG_R_STATUS2 0x23 /* Status Register 2 */
#define ADT7481_REG_R_CONFIG2 0x24 /* Configuration 2 Register */
#define ADT7481_REG_W_CONFIG2 0x24 /* Configuration 2 Register */
#define ADT7481_REG_R_REMOTE2_TEMP_H \
0x30 /* Remote 2 Temperature Value High Byte */
#define ADT7481_REG_R_REMOTE2_HIGHLIMIT_H \
0x31 /* Remote 2 Temp High Limit High Byte */
#define ADT7481_REG_W_REMOTE2_HIGHLIMIT_H \
0x31 /* Remote 2 Temp High Limit High Byte */
#define ADT7481_REG_R_REMOTE2_LOWLIMIT_H \
0x32 /* Remote 2 Temp Low Limit High Byte */
#define ADT7481_REG_W_REMOTE2_LOWLIMIT_H \
0x32 /* Remote 2 Temp Low Limit High Byte */
#define ADT7481_REG_R_REMOTE2_TEMP_L \
0x33 /* Remote 2 Temperature Value Low Byte */
#define ADT7481_REG_R_REMOTE2_OFFSET_H \
0x34 /* Remote 2 Temperature Offset High Byte */
#define ADT7481_REG_W_REMOTE2_OFFSET_H \
0x34 /* Remote 2 Temperature Offset High Byte */
#define ADT7481_REG_R_REMOTE2_OFFSET_L \
0x35 /* Remote 2 Temperature Offset Low Byte */
#define ADT7481_REG_W_REMOTE2_OFFSET_L \
0x35 /* Remote 2 Temperature Offset Low Byte */
#define ADT7481_REG_R_REMOTE2_HIGHLIMIT_L \
0x36 /* Remote 2 Temp High Limit Low Byte */
#define ADT7481_REG_W_REMOTE2_HIGHLIMIT_L \
0x36 /* Remote 2 Temp High Limit Low Byte */
#define ADT7481_REG_R_REMOTE2_LOWLIMIT_L \
0x37 /* Remote 2 Temp Low Limit Low Byte */
#define ADT7481_REG_W_REMOTE2_LOWLIMIT_L \
0x37 /* Remote 2 Temp Low Limit Low Byte */
#define ADT7481_REG_R_REMOTE2_THERMLIMIT 0x39 /* Remote 2 THERM Limit */
#define ADT7481_REG_W_REMOTE2_THERMLIMIT 0x39 /* Remote 2 THERM Limit */
#define ADT7481_REG_R_CHIP_ID 0x3D /* Device ID */
#define ADT7481_REG_R_MAN_ID 0x3E /* Manufacturer ID */
/*
* Macros to convert temperature values to register values and vice versa.
@@ -80,15 +110,15 @@
* binary data format are offset by +64.
*/
#ifdef ADT7481_EXTENDED_FLAG
#define TEMP_TO_REG_U8(x) (x + 64)
#define TEMP_TO_REG_U16(x) ((x + 64) << 8)
#define REG_U8_TO_TEMP(y) (y - 64)
#define REG_U16_TO_TEMP(y) (y - 64)
#define TEMP_TO_REG_U8(x) (x + 64)
#define TEMP_TO_REG_U16(x) ((x + 64) << 8)
#define REG_U8_TO_TEMP(y) (y - 64)
#define REG_U16_TO_TEMP(y) (y - 64)
#else
#define TEMP_TO_REG_U8(x) (x)
#define TEMP_TO_REG_U16(x) (x << 8)
#define REG_U8_TO_TEMP(y) (y)
#define REG_U16_TO_TEMP(y) (y)
#define TEMP_TO_REG_U8(x) (x)
#define TEMP_TO_REG_U16(x) (x << 8)
#define REG_U8_TO_TEMP(y) (y)
#define REG_U16_TO_TEMP(y) (y)
#endif
/*****************************************************************************
@@ -102,18 +132,18 @@
** RETURN TYPE : Success or failure
**
*****************************************************************************/
static ReturnStatus adt7481_raw_read(const I2C_Dev *i2c_dev,
uint8_t regAddress,
static ReturnStatus adt7481_raw_read(const I2C_Dev *i2c_dev, uint8_t regAddress,
uint8_t *regValue)
{
ReturnStatus status = RETURN_NOTOK;
I2C_Handle adt7481_handle = i2c_get_handle(i2c_dev->bus);
if (!adt7481_handle) {
LOGGER_ERROR("ADT7481:ERROR:: Failed to get I2C Bus for Thermal sensor "
"0x%x on bus 0x%x.\n", i2c_dev->slave_addr, i2c_dev->bus);
"0x%x on bus 0x%x.\n",
i2c_dev->slave_addr, i2c_dev->bus);
} else {
status = i2c_reg_read(adt7481_handle, i2c_dev->slave_addr, regAddress,
(uint16_t *) regValue, 1);
(uint16_t *)regValue, 1);
}
return status;
}
@@ -130,14 +160,14 @@ static ReturnStatus adt7481_raw_read(const I2C_Dev *i2c_dev,
**
*****************************************************************************/
static ReturnStatus adt7481_raw_write(const I2C_Dev *i2c_dev,
uint8_t regAddress,
uint8_t regValue)
uint8_t regAddress, uint8_t regValue)
{
ReturnStatus status = RETURN_NOTOK;
I2C_Handle adt7481_handle = i2c_get_handle(i2c_dev->bus);
if (!adt7481_handle) {
LOGGER_ERROR("ADT7481:ERROR:: Failed to get I2C Bus for Thermal sensor "
"0x%x on bus 0x%x.\n", i2c_dev->slave_addr, i2c_dev->bus);
"0x%x on bus 0x%x.\n",
i2c_dev->slave_addr, i2c_dev->bus);
} else {
status = i2c_reg_write(adt7481_handle, i2c_dev->slave_addr, regAddress,
regValue, 1);
@@ -155,8 +185,7 @@ static ReturnStatus adt7481_raw_write(const I2C_Dev *i2c_dev,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus adt7481_get_dev_id(const I2C_Dev *i2c_dev,
uint8_t *devID)
ReturnStatus adt7481_get_dev_id(const I2C_Dev *i2c_dev, uint8_t *devID)
{
ReturnStatus status = RETURN_OK;
@@ -178,8 +207,7 @@ ReturnStatus adt7481_get_dev_id(const I2C_Dev *i2c_dev,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus adt7481_get_mfg_id(const I2C_Dev *i2c_dev,
uint8_t *mfgID)
ReturnStatus adt7481_get_mfg_id(const I2C_Dev *i2c_dev, uint8_t *mfgID)
{
ReturnStatus status = RETURN_OK;
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_MAN_ID, mfgID);
@@ -200,8 +228,7 @@ ReturnStatus adt7481_get_mfg_id(const I2C_Dev *i2c_dev,
** RETURN TYPE : ePostCode
**
*****************************************************************************/
ePostCode adt7481_probe(const I2C_Dev *i2c_dev,
POSTData *postData)
ePostCode adt7481_probe(const I2C_Dev *i2c_dev, POSTData *postData)
{
ePostCode postcode = POST_DEV_MISSING;
ReturnStatus status = RETURN_OK;
@@ -211,13 +238,14 @@ ePostCode adt7481_probe(const I2C_Dev *i2c_dev,
status = adt7481_get_mfg_id(i2c_dev, &manfId);
if (status != RETURN_OK) {
postcode = POST_DEV_MISSING;
} else if ((devId == TEMP_ADT7481_DEV_ID)
&& (manfId == TEMP_ADT7481_MANF_ID)) {
} else if ((devId == TEMP_ADT7481_DEV_ID) &&
(manfId == TEMP_ADT7481_MANF_ID)) {
postcode = POST_DEV_FOUND;
} else {
postcode = POST_DEV_ID_MISMATCH;
}
post_update_POSTData(postData, i2c_dev->bus, i2c_dev->slave_addr,manfId, devId);
post_update_POSTData(postData, i2c_dev->bus, i2c_dev->slave_addr, manfId,
devId);
return postcode;
}
@@ -230,8 +258,7 @@ ePostCode adt7481_probe(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_config1(const I2C_Dev *i2c_dev,
uint8_t *configValue)
ReturnStatus adt7481_get_config1(const I2C_Dev *i2c_dev, uint8_t *configValue)
{
ReturnStatus status = RETURN_OK;
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_CONFIG1, configValue);
@@ -250,8 +277,7 @@ ReturnStatus adt7481_get_config1(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_set_config1(const I2C_Dev *i2c_dev,
uint8_t configValue)
ReturnStatus adt7481_set_config1(const I2C_Dev *i2c_dev, uint8_t configValue)
{
ReturnStatus status = RETURN_OK;
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_CONFIG1, configValue);
@@ -295,8 +321,7 @@ ReturnStatus adt7481_set_conv_rate(const I2C_Dev *i2c_dev,
uint8_t convRateValue)
{
ReturnStatus status = RETURN_OK;
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_CONVERSION_RATE,
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_CONVERSION_RATE,
convRateValue);
return status;
}
@@ -310,13 +335,10 @@ ReturnStatus adt7481_set_conv_rate(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_status1(const I2C_Dev *i2c_dev,
uint8_t *statusValue)
ReturnStatus adt7481_get_status1(const I2C_Dev *i2c_dev, uint8_t *statusValue)
{
ReturnStatus status = RETURN_OK;
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_STATUS1,
statusValue);
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_STATUS1, statusValue);
if (status != RETURN_OK) {
statusValue = NULL;
}
@@ -332,13 +354,10 @@ ReturnStatus adt7481_get_status1(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_status2(const I2C_Dev *i2c_dev,
uint8_t *statusValue)
ReturnStatus adt7481_get_status2(const I2C_Dev *i2c_dev, uint8_t *statusValue)
{
ReturnStatus status = RETURN_OK;
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_STATUS2,
statusValue);
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_STATUS2, statusValue);
if (status != RETURN_OK) {
statusValue = NULL;
}
@@ -359,13 +378,11 @@ ReturnStatus adt7481_get_local_temp_val(const I2C_Dev *i2c_dev,
{
ReturnStatus status = RETURN_OK;
uint8_t regValue = 0x00;
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_LOCAL_TEMP,
&regValue);
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_LOCAL_TEMP, &regValue);
if (status != RETURN_OK) {
tempValue = NULL;
} else {
*tempValue = (int8_t) REG_U8_TO_TEMP(regValue);
*tempValue = (int8_t)REG_U8_TO_TEMP(regValue);
}
return status;
}
@@ -385,19 +402,17 @@ ReturnStatus adt7481_get_remote1_temp_val(const I2C_Dev *i2c_dev,
ReturnStatus status = RETURN_OK;
uint8_t lRegValue = 0x00;
uint8_t hRegValue = 0x00;
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE1_TEMP_L,
&lRegValue);
status =
adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE1_TEMP_L, &lRegValue);
if (status != RETURN_OK) {
tempValue = NULL;
} else {
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE1_TEMP_H,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE1_TEMP_H,
&hRegValue);
if (status != RETURN_OK) {
tempValue = NULL;
} else {
*tempValue = (int16_t) REG_U16_TO_TEMP(hRegValue);
*tempValue = (int16_t)REG_U16_TO_TEMP(hRegValue);
}
}
return status;
@@ -418,19 +433,17 @@ ReturnStatus adt7481_get_remote2_temp_val(const I2C_Dev *i2c_dev,
ReturnStatus status = RETURN_OK;
uint8_t lRegValue = 0x00;
uint8_t hRegValue = 0x00;
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE2_TEMP_L,
&lRegValue);
status =
adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE2_TEMP_L, &lRegValue);
if (status != RETURN_OK) {
tempValue = NULL;
} else {
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE2_TEMP_H,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE2_TEMP_H,
&hRegValue);
if (status != RETURN_OK) {
tempValue = NULL;
} else {
*tempValue = (int8_t) REG_U16_TO_TEMP(hRegValue);
*tempValue = (int8_t)REG_U16_TO_TEMP(hRegValue);
}
}
return status;
@@ -447,32 +460,29 @@ ReturnStatus adt7481_get_remote2_temp_val(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_local_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int16_t* tempLimitValue)
ReturnStatus
adt7481_get_local_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int16_t *tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t regValue = 0x00;
uint8_t regAddress = 0x0000;
switch (limitToConfig) {
case CONF_TEMP_ADT7481_LOW_LIMIT_REG:
{
case CONF_TEMP_ADT7481_LOW_LIMIT_REG: {
regAddress = ADT7481_REG_R_LOCAL_LOWLIMIT;
break;
}
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG:
{
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG: {
regAddress = ADT7481_REG_R_LOCAL_HIGHLIMIT;
break;
}
case CONF_TEMP_ADT7481_THERM_LIMIT_REG:
{
case CONF_TEMP_ADT7481_THERM_LIMIT_REG: {
regAddress = ADT7481_REG_R_LOCAL_THERMLIMIT;
break;
}
default:
{
default: {
return status;
}
}
@@ -481,7 +491,7 @@ ReturnStatus adt7481_get_local_temp_limit(const I2C_Dev *i2c_dev,
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
*tempLimitValue = (int8_t) REG_U8_TO_TEMP(regValue);
*tempLimitValue = (int8_t)REG_U8_TO_TEMP(regValue);
}
return status;
}
@@ -496,32 +506,29 @@ ReturnStatus adt7481_get_local_temp_limit(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_set_local_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int16_t tempLimitValue)
ReturnStatus
adt7481_set_local_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int16_t tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t regAddress = 0x00;
uint8_t regValue = 0x0000;
switch (limitToConfig) {
case CONF_TEMP_ADT7481_LOW_LIMIT_REG:
{
case CONF_TEMP_ADT7481_LOW_LIMIT_REG: {
regAddress = ADT7481_REG_W_LOCAL_LOWLIMIT;
break;
}
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG:
{
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG: {
regAddress = ADT7481_REG_W_LOCAL_HIGHLIMIT;
break;
}
case CONF_TEMP_ADT7481_THERM_LIMIT_REG:
{
case CONF_TEMP_ADT7481_THERM_LIMIT_REG: {
regAddress = ADT7481_REG_W_LOCAL_THERMLIMIT;
break;
}
default:
{
default: {
return status;
}
}
@@ -544,27 +551,25 @@ ReturnStatus adt7481_set_local_temp_limit(const I2C_Dev *i2c_dev,
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote1_temp_low_limit(const I2C_Dev *i2c_dev,
int8_t* tempLimitValue)
int8_t *tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t lRegValue = 0x00;
uint8_t hRegValue = 0x00;
/* Read LSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE1_LOWLIMIT_L,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE1_LOWLIMIT_L,
&lRegValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
/* Read MSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE1_LOWLIMIT_H,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE1_LOWLIMIT_H,
&hRegValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
*tempLimitValue = (int8_t) REG_U16_TO_TEMP(hRegValue);
*tempLimitValue = (int8_t)REG_U16_TO_TEMP(hRegValue);
}
}
return status;
@@ -581,27 +586,25 @@ ReturnStatus adt7481_get_remote1_temp_low_limit(const I2C_Dev *i2c_dev,
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote1_temp_high_limit(const I2C_Dev *i2c_dev,
int8_t* tempLimitValue)
int8_t *tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t lRegValue = 0x00;
uint8_t hRegValue = 0x00;
/* Read LSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE1_HIGHLIMIT_L,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE1_HIGHLIMIT_L,
&lRegValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
/* Read MSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE1_HIGHLIMIT_H,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE1_HIGHLIMIT_H,
&hRegValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
*tempLimitValue = (int8_t) REG_U16_TO_TEMP(hRegValue);
*tempLimitValue = (int8_t)REG_U16_TO_TEMP(hRegValue);
}
}
return status;
@@ -618,18 +621,17 @@ ReturnStatus adt7481_get_remote1_temp_high_limit(const I2C_Dev *i2c_dev,
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote1_temp_therm_limit(const I2C_Dev *i2c_dev,
int8_t* tempLimitValue)
int8_t *tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t regValue = 0x00;
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE1_THERMLIMIT,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE1_THERMLIMIT,
&regValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
*tempLimitValue = (int8_t) REG_U8_TO_TEMP(regValue);
*tempLimitValue = (int8_t)REG_U8_TO_TEMP(regValue);
}
return status;
@@ -646,33 +648,30 @@ ReturnStatus adt7481_get_remote1_temp_therm_limit(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote1_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t* tempLimitValue)
ReturnStatus
adt7481_get_remote1_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t *tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
switch (limitToConfig) {
case CONF_TEMP_ADT7481_LOW_LIMIT_REG:
{
status = adt7481_get_remote1_temp_low_limit(i2c_dev,
tempLimitValue);
case CONF_TEMP_ADT7481_LOW_LIMIT_REG: {
status =
adt7481_get_remote1_temp_low_limit(i2c_dev, tempLimitValue);
break;
}
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG:
{
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG: {
status = adt7481_get_remote1_temp_high_limit(i2c_dev,
tempLimitValue);
break;
}
case CONF_TEMP_ADT7481_THERM_LIMIT_REG:
{
case CONF_TEMP_ADT7481_THERM_LIMIT_REG: {
status = adt7481_get_remote1_temp_therm_limit(i2c_dev,
tempLimitValue);
break;
}
default:
{
default: {
return status;
}
}
@@ -699,14 +698,12 @@ ReturnStatus adt7481_set_remote1_temp_low_limit(const I2C_Dev *i2c_dev,
regValue = TEMP_TO_REG_U16(tempLimitValue);
/* Write LSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE1_LOWLIMIT_L,
(uint8_t) regValue);
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE1_LOWLIMIT_L,
(uint8_t)regValue);
if (status == RETURN_OK) {
/* Write MSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE1_LOWLIMIT_H,
(uint8_t) (regValue >> 8));
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE1_LOWLIMIT_H,
(uint8_t)(regValue >> 8));
}
return status;
}
@@ -731,14 +728,12 @@ ReturnStatus adt7481_set_remote1_temp_high_limit(const I2C_Dev *i2c_dev,
regValue = TEMP_TO_REG_U16(tempLimitValue);
/* Write LSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE1_HIGHLIMIT_L,
(uint8_t) regValue);
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE1_HIGHLIMIT_L,
(uint8_t)regValue);
if (status == RETURN_OK) {
/* Write MSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE1_HIGHLIMIT_H,
(uint8_t) (regValue >> 8));
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE1_HIGHLIMIT_H,
(uint8_t)(regValue >> 8));
}
return status;
}
@@ -762,8 +757,7 @@ ReturnStatus adt7481_set_remote1_temp_therm_limit(const I2C_Dev *i2c_dev,
/* Converting Temp limit into the register value */
regValue = TEMP_TO_REG_U8(tempLimitValue);
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE1_THERMLIMIT,
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE1_THERMLIMIT,
regValue);
return status;
}
@@ -778,33 +772,30 @@ ReturnStatus adt7481_set_remote1_temp_therm_limit(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_set_remote1_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t tempLimitValue)
ReturnStatus
adt7481_set_remote1_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
switch (limitToConfig) {
case CONF_TEMP_ADT7481_LOW_LIMIT_REG:
{
status = adt7481_set_remote1_temp_low_limit(i2c_dev,
tempLimitValue);
case CONF_TEMP_ADT7481_LOW_LIMIT_REG: {
status =
adt7481_set_remote1_temp_low_limit(i2c_dev, tempLimitValue);
break;
}
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG:
{
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG: {
status = adt7481_set_remote1_temp_high_limit(i2c_dev,
tempLimitValue);
break;
}
case CONF_TEMP_ADT7481_THERM_LIMIT_REG:
{
case CONF_TEMP_ADT7481_THERM_LIMIT_REG: {
status = adt7481_set_remote1_temp_therm_limit(i2c_dev,
tempLimitValue);
break;
}
default:
{
default: {
return status;
}
}
@@ -822,27 +813,25 @@ ReturnStatus adt7481_set_remote1_temp_limit(const I2C_Dev *i2c_dev,
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote2_temp_low_limit(const I2C_Dev *i2c_dev,
int8_t* tempLimitValue)
int8_t *tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t lRegValue = 0x00;
uint8_t hRegValue = 0x00;
/* Read LSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE2_LOWLIMIT_L,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE2_LOWLIMIT_L,
&lRegValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
/* Read MSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE2_LOWLIMIT_H,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE2_LOWLIMIT_H,
&hRegValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
*tempLimitValue = (int8_t) REG_U16_TO_TEMP(hRegValue);
*tempLimitValue = (int8_t)REG_U16_TO_TEMP(hRegValue);
}
}
return status;
@@ -859,27 +848,25 @@ ReturnStatus adt7481_get_remote2_temp_low_limit(const I2C_Dev *i2c_dev,
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote2_temp_high_limit(const I2C_Dev *i2c_dev,
int8_t* tempLimitValue)
int8_t *tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t lRegValue = 0x00;
uint8_t hRegValue = 0x00;
/* Read LSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE2_HIGHLIMIT_L,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE2_HIGHLIMIT_L,
&lRegValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
/* Read MSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE2_HIGHLIMIT_H,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE2_HIGHLIMIT_H,
&hRegValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
*tempLimitValue = (int8_t) REG_U16_TO_TEMP(hRegValue);
*tempLimitValue = (int8_t)REG_U16_TO_TEMP(hRegValue);
}
}
return status;
@@ -896,18 +883,17 @@ ReturnStatus adt7481_get_remote2_temp_high_limit(const I2C_Dev *i2c_dev,
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote2_temp_therm_limit(const I2C_Dev *i2c_dev,
int8_t* tempLimitValue)
int8_t *tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t regValue = 0x00;
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE2_THERMLIMIT,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE2_THERMLIMIT,
&regValue);
if (status != RETURN_OK) {
tempLimitValue = NULL;
} else {
*tempLimitValue = (int8_t) REG_U8_TO_TEMP(regValue);
*tempLimitValue = (int8_t)REG_U8_TO_TEMP(regValue);
}
return status;
@@ -924,33 +910,30 @@ ReturnStatus adt7481_get_remote2_temp_therm_limit(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote2_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t* tempLimitValue)
ReturnStatus
adt7481_get_remote2_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t *tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
switch (limitToConfig) {
case CONF_TEMP_ADT7481_LOW_LIMIT_REG:
{
status = adt7481_get_remote2_temp_low_limit(i2c_dev,
tempLimitValue);
case CONF_TEMP_ADT7481_LOW_LIMIT_REG: {
status =
adt7481_get_remote2_temp_low_limit(i2c_dev, tempLimitValue);
break;
}
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG:
{
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG: {
status = adt7481_get_remote2_temp_high_limit(i2c_dev,
tempLimitValue);
break;
}
case CONF_TEMP_ADT7481_THERM_LIMIT_REG:
{
case CONF_TEMP_ADT7481_THERM_LIMIT_REG: {
status = adt7481_get_remote2_temp_therm_limit(i2c_dev,
tempLimitValue);
break;
}
default:
{
default: {
return status;
}
}
@@ -977,14 +960,12 @@ ReturnStatus adt7481_set_remote2_temp_low_limit(const I2C_Dev *i2c_dev,
regValue = TEMP_TO_REG_U16(tempLimitValue);
/* Write LSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE2_LOWLIMIT_L,
(uint8_t) regValue);
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE2_LOWLIMIT_L,
(uint8_t)regValue);
if (status == RETURN_OK) {
/* Write MSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE2_LOWLIMIT_H,
(uint8_t) (regValue >> 8));
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE2_LOWLIMIT_H,
(uint8_t)(regValue >> 8));
}
return status;
}
@@ -1009,14 +990,12 @@ ReturnStatus adt7481_set_remote2_temp_high_limit(const I2C_Dev *i2c_dev,
regValue = TEMP_TO_REG_U16(tempLimitValue);
/* Write LSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE2_HIGHLIMIT_L,
(uint8_t) regValue);
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE2_HIGHLIMIT_L,
(uint8_t)regValue);
if (status == RETURN_OK) {
/* Write MSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE2_HIGHLIMIT_H,
(uint8_t) (regValue >> 8));
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE2_HIGHLIMIT_H,
(uint8_t)(regValue >> 8));
}
return status;
}
@@ -1040,8 +1019,7 @@ ReturnStatus adt7481_set_remote2_temp_therm_limit(const I2C_Dev *i2c_dev,
/* Converting Temp limit into the register value */
regValue = TEMP_TO_REG_U8(tempLimitValue);
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE2_THERMLIMIT,
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE2_THERMLIMIT,
regValue);
return status;
}
@@ -1056,33 +1034,30 @@ ReturnStatus adt7481_set_remote2_temp_therm_limit(const I2C_Dev *i2c_dev,
*
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_set_remote2_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t tempLimitValue)
ReturnStatus
adt7481_set_remote2_temp_limit(const I2C_Dev *i2c_dev,
eTempSensorADT7481ConfigParamsId limitToConfig,
int8_t tempLimitValue)
{
ReturnStatus status = RETURN_NOTOK;
switch (limitToConfig) {
case CONF_TEMP_ADT7481_LOW_LIMIT_REG:
{
status = adt7481_set_remote2_temp_low_limit(i2c_dev,
tempLimitValue);
case CONF_TEMP_ADT7481_LOW_LIMIT_REG: {
status =
adt7481_set_remote2_temp_low_limit(i2c_dev, tempLimitValue);
break;
}
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG:
{
case CONF_TEMP_ADT7481_HIGH_LIMIT_REG: {
status = adt7481_set_remote2_temp_high_limit(i2c_dev,
tempLimitValue);
break;
}
case CONF_TEMP_ADT7481_THERM_LIMIT_REG:
{
case CONF_TEMP_ADT7481_THERM_LIMIT_REG: {
status = adt7481_set_remote2_temp_therm_limit(i2c_dev,
tempLimitValue);
break;
}
default:
{
default: {
return status;
}
}
@@ -1100,27 +1075,25 @@ ReturnStatus adt7481_set_remote2_temp_limit(const I2C_Dev *i2c_dev,
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote1_temp_offset(const I2C_Dev *i2c_dev,
int16_t* tempOffsetValue)
int16_t *tempOffsetValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t lRegValue = 0x00;
uint8_t hRegValue = 0x00;
/* Read LSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE1_OFFSET_L,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE1_OFFSET_L,
&lRegValue);
if (status != RETURN_OK) {
tempOffsetValue = NULL;
} else {
/* Read MSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE1_OFFSET_H,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE1_OFFSET_H,
&hRegValue);
if (status != RETURN_OK) {
tempOffsetValue = NULL;
} else {
*tempOffsetValue = (int8_t) REG_U16_TO_TEMP(hRegValue);
*tempOffsetValue = (int8_t)REG_U16_TO_TEMP(hRegValue);
}
}
return status;
@@ -1146,14 +1119,12 @@ ReturnStatus adt7481_set_remote1_temp_offset(const I2C_Dev *i2c_dev,
regValue = TEMP_TO_REG_U16(tempOffsetValue);
/* Write LSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE1_OFFSET_L,
(uint8_t) regValue);
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE1_OFFSET_L,
(uint8_t)regValue);
if (status == RETURN_OK) {
/* Write MSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE1_OFFSET_L,
(uint8_t) (regValue >> 8));
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE1_OFFSET_L,
(uint8_t)(regValue >> 8));
}
return status;
}
@@ -1169,27 +1140,25 @@ ReturnStatus adt7481_set_remote1_temp_offset(const I2C_Dev *i2c_dev,
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_remote2_temp_offset(const I2C_Dev *i2c_dev,
int16_t* tempOffsetValue)
int16_t *tempOffsetValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t lRegValue = 0x00;
uint8_t hRegValue = 0x00;
/* Read LSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE2_OFFSET_L,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE2_OFFSET_L,
&lRegValue);
if (status != RETURN_OK) {
tempOffsetValue = NULL;
} else {
/* Read MSB data */
status = adt7481_raw_read(i2c_dev,
ADT7481_REG_R_REMOTE2_OFFSET_L,
status = adt7481_raw_read(i2c_dev, ADT7481_REG_R_REMOTE2_OFFSET_L,
&hRegValue);
if (status != RETURN_OK) {
tempOffsetValue = NULL;
} else {
*tempOffsetValue = (int8_t) REG_U16_TO_TEMP(hRegValue);
*tempOffsetValue = (int8_t)REG_U16_TO_TEMP(hRegValue);
}
}
@@ -1216,14 +1185,12 @@ ReturnStatus adt7481_set_remote2_temp_offset(const I2C_Dev *i2c_dev,
regValue = TEMP_TO_REG_U16(tempOffsetValue);
/* Write LSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE2_OFFSET_L,
(uint8_t) regValue);
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE2_OFFSET_L,
(uint8_t)regValue);
if (status == RETURN_OK) {
/* Write MSB data */
status = adt7481_raw_write(i2c_dev,
ADT7481_REG_W_REMOTE2_OFFSET_H,
(uint8_t) (regValue >> 8));
status = adt7481_raw_write(i2c_dev, ADT7481_REG_W_REMOTE2_OFFSET_H,
(uint8_t)(regValue >> 8));
}
return status;
}
@@ -1239,7 +1206,7 @@ ReturnStatus adt7481_set_remote2_temp_offset(const I2C_Dev *i2c_dev,
* @return ReturnStatus
*****************************************************************************/
ReturnStatus adt7481_get_therm_hysteresis(const I2C_Dev *i2c_dev,
int8_t* tempHysteresisValue)
int8_t *tempHysteresisValue)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t regValue = 0x00;
@@ -1248,7 +1215,7 @@ ReturnStatus adt7481_get_therm_hysteresis(const I2C_Dev *i2c_dev,
if (status != RETURN_OK) {
tempHysteresisValue = NULL;
} else {
*tempHysteresisValue = (int8_t) REG_U8_TO_TEMP(regValue);
*tempHysteresisValue = (int8_t)REG_U8_TO_TEMP(regValue);
}
return status;
}

View File

@@ -22,7 +22,7 @@
#endif
#include <string.h>
#define WP_ASSERT 1
#define WP_ASSERT 1
#define WP_DEASSERT 0
extern Eeprom_Cfg eeprom_gbc_sid;
@@ -31,16 +31,12 @@ extern Eeprom_Cfg eeprom_sdr_inv;
extern Eeprom_Cfg eeprom_fe_inv;
static ReturnStatus i2c_eeprom_write(I2C_Handle i2cHandle,
uint8_t deviceAddress,
uint16_t regAddress,
const void *value,
size_t numofBytes);
uint8_t deviceAddress, uint16_t regAddress,
const void *value, size_t numofBytes);
static ReturnStatus i2c_eeprom_read(I2C_Handle i2cHandle,
uint16_t deviceAddress,
uint16_t regAddress,
void *value,
size_t numofbytes);
uint16_t deviceAddress, uint16_t regAddress,
void *value, size_t numofbytes);
/*****************************************************************************
** FUNCTION NAME : eeprom_init
@@ -52,11 +48,11 @@ static ReturnStatus i2c_eeprom_read(I2C_Handle i2cHandle,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
bool eeprom_init(Eeprom_Cfg *cfg) {
bool eeprom_init(Eeprom_Cfg *cfg)
{
/* Configure our WP pin (if any) and set to be low (protected) by default */
if (cfg->pin_wp) {
OcGpio_configure(cfg->pin_wp,
OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_HIGH);
OcGpio_configure(cfg->pin_wp, OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_HIGH);
}
/* Test communication to the EEPROM */
@@ -79,16 +75,15 @@ bool eeprom_init(Eeprom_Cfg *cfg) {
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus eeprom_read(const Eeprom_Cfg *cfg,
uint16_t address,
void *buffer,
ReturnStatus eeprom_read(const Eeprom_Cfg *cfg, uint16_t address, void *buffer,
size_t size)
{
ReturnStatus status = RETURN_OK;
I2C_Handle eepromHandle = i2c_get_handle(cfg->i2c_dev.bus);
if (!eepromHandle) {
LOGGER_ERROR("EEPROM:ERROR:: Failed to get I2C Bus for "
"EEPROM device 0x%x.\n", cfg->i2c_dev.slave_addr);
"EEPROM device 0x%x.\n",
cfg->i2c_dev.slave_addr);
} else {
/* TODO: if we're concerned about hogging the bus, we could always
* page reads, but this doesn't seem necessary right now
@@ -96,8 +91,8 @@ ReturnStatus eeprom_read(const Eeprom_Cfg *cfg,
/* TODO: check for out-of-bounds addresses (some EEPROM wrap around
* when reading after the end, so this could lead to confusion)
*/
status = i2c_eeprom_read(eepromHandle, cfg->i2c_dev.slave_addr,
address, buffer, size);
status = i2c_eeprom_read(eepromHandle, cfg->i2c_dev.slave_addr, address,
buffer, size);
}
return status;
}
@@ -113,16 +108,15 @@ ReturnStatus eeprom_read(const Eeprom_Cfg *cfg,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus eeprom_write(const Eeprom_Cfg *cfg,
uint16_t address,
const void *buffer,
size_t size)
ReturnStatus eeprom_write(const Eeprom_Cfg *cfg, uint16_t address,
const void *buffer, size_t size)
{
ReturnStatus status = RETURN_OK;
I2C_Handle eepromHandle = i2c_get_handle(cfg->i2c_dev.bus);
if (!eepromHandle) {
LOGGER_ERROR("EEPROM:ERROR:: Failed to get I2C Bus for "
"EEPROM device 0x%x.\n", cfg->i2c_dev.slave_addr);
"EEPROM device 0x%x.\n",
cfg->i2c_dev.slave_addr);
} else {
/* Respect EEPROM page size */
const size_t page_size = cfg->type.page_size;
@@ -152,10 +146,8 @@ ReturnStatus eeprom_write(const Eeprom_Cfg *cfg,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
static ReturnStatus i2c_eeprom_write(I2C_Handle i2cHandle,
uint8_t slaveAddress,
uint16_t memAddress,
const void *value,
static ReturnStatus i2c_eeprom_write(I2C_Handle i2cHandle, uint8_t slaveAddress,
uint16_t memAddress, const void *value,
size_t numofBytes)
{
ReturnStatus status = RETURN_OK;
@@ -171,12 +163,14 @@ static ReturnStatus i2c_eeprom_write(I2C_Handle i2cHandle,
i2cTransaction.readBuf = NULL;
i2cTransaction.readCount = 0;
if (I2C_transfer(i2cHandle, &i2cTransaction)) {
LOGGER_DEBUG("EEPROM:INFO:: I2C write success for device: 0x%x reg Addr: 0x%x\n",
slaveAddress, memAddress);
LOGGER_DEBUG(
"EEPROM:INFO:: I2C write success for device: 0x%x reg Addr: 0x%x\n",
slaveAddress, memAddress);
status = RETURN_OK;
} else {
LOGGER_ERROR("EEPROM:ERROR:: I2C write failed for for device: 0x%x reg Addr: 0x%x\n",
slaveAddress, memAddress);
LOGGER_ERROR(
"EEPROM:ERROR:: I2C write failed for for device: 0x%x reg Addr: 0x%x\n",
slaveAddress, memAddress);
status = RETURN_NOTOK;
}
return status;
@@ -192,10 +186,8 @@ static ReturnStatus i2c_eeprom_write(I2C_Handle i2cHandle,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
static ReturnStatus i2c_eeprom_read(I2C_Handle i2cHandle,
uint16_t slaveAddress,
uint16_t memAddress,
void *value,
static ReturnStatus i2c_eeprom_read(I2C_Handle i2cHandle, uint16_t slaveAddress,
uint16_t memAddress, void *value,
size_t numofbytes)
{
ReturnStatus status = RETURN_OK;
@@ -208,12 +200,14 @@ static ReturnStatus i2c_eeprom_read(I2C_Handle i2cHandle,
i2cTransaction.readBuf = value;
i2cTransaction.readCount = numofbytes;
if (I2C_transfer(i2cHandle, &i2cTransaction)) {
LOGGER_DEBUG("EEPROM:INFO:: I2C read success for device: 0x%x reg Addr: 0x%x\n",
slaveAddress, memAddress);
LOGGER_DEBUG(
"EEPROM:INFO:: I2C read success for device: 0x%x reg Addr: 0x%x\n",
slaveAddress, memAddress);
status = RETURN_OK;
} else {
LOGGER_ERROR("EEPROM:ERROR:: I2C write failed for for device: 0x%x reg Addr: 0x%x\n",
slaveAddress, memAddress);
LOGGER_ERROR(
"EEPROM:ERROR:: I2C write failed for for device: 0x%x reg Addr: 0x%x\n",
slaveAddress, memAddress);
status = RETURN_NOTOK;
}
return status;
@@ -270,13 +264,14 @@ ReturnStatus eeprom_enable_write(Eeprom_Cfg *cfg)
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus eeprom_read_oc_info(uint8_t * oc_serial)
ReturnStatus eeprom_read_oc_info(uint8_t *oc_serial)
{
ReturnStatus status = RETURN_NOTOK;
status = eeprom_read(&eeprom_gbc_sid, OC_CONNECT1_SERIAL_INFO,
oc_serial, OC_CONNECT1_SERIAL_SIZE);
status = eeprom_read(&eeprom_gbc_sid, OC_CONNECT1_SERIAL_INFO, oc_serial,
OC_CONNECT1_SERIAL_SIZE);
if (status != RETURN_OK) {
LOGGER_ERROR("EEPROM:ERROR:: Failed to get I2C Bus for GBC serial ID EEPROM.\n");
LOGGER_ERROR(
"EEPROM:ERROR:: Failed to get I2C Bus for GBC serial ID EEPROM.\n");
} else {
LOGGER_ERROR("EEPROM:Info:: OC Connect1 %d.\n", *oc_serial);
}
@@ -294,39 +289,36 @@ ReturnStatus eeprom_read_oc_info(uint8_t * oc_serial)
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus eeprom_read_board_info(const Eeprom_Cfg *cfg, uint8_t * rom_info)
ReturnStatus eeprom_read_board_info(const Eeprom_Cfg *cfg, uint8_t *rom_info)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t info_size = 0x00;
uint16_t eepromOffset = 0x0000;
switch (cfg->ss) {
case OC_SS_SYS:
{
case OC_SS_SYS: {
info_size = OC_GBC_BOARD_INFO_SIZE;
eepromOffset = OC_GBC_BOARD_INFO;
break;
}
case OC_SS_SDR:
{
case OC_SS_SDR: {
info_size = OC_SDR_BOARD_INFO_SIZE;
eepromOffset = OC_SDR_BOARD_INFO;
break;
}
case OC_SS_RF:
{
case OC_SS_RF: {
info_size = OC_RFFE_BOARD_INFO_SIZE;
eepromOffset = OC_RFFE_BOARD_INFO;
break;
}
default:
{
default: {
return status;
}
}
status = eeprom_read(cfg, eepromOffset, rom_info, info_size);
if (status != RETURN_OK) {
LOGGER_ERROR("EEPROM:ERROR:: Failed to get I2C Bus for EEPROM device 0x%x.\n",
cfg->i2c_dev.slave_addr);
LOGGER_ERROR(
"EEPROM:ERROR:: Failed to get I2C Bus for EEPROM device 0x%x.\n",
cfg->i2c_dev.slave_addr);
} else {
LOGGER_ERROR("EEPROM:Info:: OC Connect1 %s.\n", rom_info);
}
@@ -346,37 +338,33 @@ ReturnStatus eeprom_read_board_info(const Eeprom_Cfg *cfg, uint8_t * rom_info)
**
*****************************************************************************/
ReturnStatus eeprom_read_device_info_record(const Eeprom_Cfg *cfg,
uint8_t recordNo,
char * device_info)
uint8_t recordNo, char *device_info)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t info_size = OC_DEVICE_INFO_SIZE;
uint16_t eepromOffset = 0x0000;
switch (cfg->ss) {
case OC_SS_SYS:
{
case OC_SS_SYS: {
eepromOffset = OC_GBC_DEVICE_INFO + (recordNo * info_size);
break;
}
case OC_SS_SDR:
{
case OC_SS_SDR: {
eepromOffset = OC_SDR_DEVICE_INFO + (recordNo * info_size);
break;
}
case OC_SS_RF:
{
case OC_SS_RF: {
eepromOffset = OC_RFFE_DEVICE_INFO + (recordNo * info_size);
break;
}
default:
{
default: {
return status;
}
}
status = eeprom_read(cfg, eepromOffset, device_info, info_size);
if (status != RETURN_OK) {
LOGGER_ERROR("EEPROM:ERROR:: Failed to get I2C Bus for EEPROM device 0x%x.\n",
cfg->i2c_dev.slave_addr);
LOGGER_ERROR(
"EEPROM:ERROR:: Failed to get I2C Bus for EEPROM device 0x%x.\n",
cfg->i2c_dev.slave_addr);
} else {
LOGGER_ERROR("EEPROM:Info:: Record read for 0x%x.\n",
cfg->i2c_dev.slave_addr);
@@ -396,38 +384,34 @@ ReturnStatus eeprom_read_device_info_record(const Eeprom_Cfg *cfg,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus eeprom_write_device_info_record(Eeprom_Cfg *cfg,
uint8_t recordNo,
char * device_info)
ReturnStatus eeprom_write_device_info_record(Eeprom_Cfg *cfg, uint8_t recordNo,
char *device_info)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t info_size = OC_DEVICE_INFO_SIZE;
uint16_t eepromOffset = 0x0000;
switch (cfg->ss) {
case OC_SS_SYS:
{
case OC_SS_SYS: {
eepromOffset = OC_GBC_DEVICE_INFO + (recordNo * info_size);
break;
}
case OC_SS_SDR:
{
case OC_SS_SDR: {
eepromOffset = OC_SDR_DEVICE_INFO + (recordNo * info_size);
break;
}
case OC_SS_RF:
{
case OC_SS_RF: {
eepromOffset = OC_RFFE_DEVICE_INFO + (recordNo * info_size);
break;
}
default:
{
default: {
return status;
}
}
status = eeprom_write(cfg, eepromOffset, device_info, info_size);
if (status != RETURN_OK) {
LOGGER_ERROR("EEPROM:ERROR:: Failed to get I2C Bus for EEPROM device 0x%x.\n",
cfg->i2c_dev.slave_addr);
LOGGER_ERROR(
"EEPROM:ERROR:: Failed to get I2C Bus for EEPROM device 0x%x.\n",
cfg->i2c_dev.slave_addr);
} else {
LOGGER_ERROR("EEPROM:Info:: Record written for 0x%x.\n",
cfg->i2c_dev.slave_addr);

View File

@@ -21,7 +21,7 @@
#include <ti/sysbios/knl/Task.h>
#include <xdc/runtime/Error.h>
#define CLEAR_BIT(x, y) (y = (~x) & y)
#define CLEAR_BIT(x, y) (y = (~x) & y)
#define SET_BIT(x, y) (y = x | y)
#define MACLOOPBACK 0
#define LINELOOPBACK 1
@@ -37,14 +37,15 @@ const char *destIp;
uint8_t numRepeat;
char convStr[IPSTRING_LENGTH];
char temp[IPSTRING_LENGTH];
char *tempBuf=temp;
char *tempBuf = temp;
void eth_sw_configure(Eth_cfg* ethCfg)
void eth_sw_configure(Eth_cfg *ethCfg)
{
uint8_t link_up;
uint16_t read_val = 0;
if (!s_eth_sw_linkup) {
OcGpio_configure(&ethCfg->eth_sw_cfg->pin_ec_ethsw_reset, OCGPIO_CFG_OUTPUT| OCGPIO_CFG_OUT_HIGH);
OcGpio_configure(&ethCfg->eth_sw_cfg->pin_ec_ethsw_reset,
OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_HIGH);
SysCtlDelay(16000000); //400ms delay
}
read_val = mdiobb_read_by_paging(PHY_PORT_0, REG_PHY_SPEC_STATUS);
@@ -57,18 +58,18 @@ void eth_sw_configure(Eth_cfg* ethCfg)
}
}
ePostCode eth_sw_probe( POSTData *postData)
ePostCode eth_sw_probe(POSTData *postData)
{
ePostCode eth_sw_found = POST_DEV_MISSING;
uint16_t switch_pid = 0;
uint16_t devId = 0x00;
/*Switch idenifier*/
switch_pid = mdiobb_read(0x8, 3);
switch_pid = (switch_pid >>4);
switch_pid = mdiobb_read(0x8, 3);
switch_pid = (switch_pid >> 4);
if (switch_pid == ETH_SW_PRODUCT_ID) {
/* Phy Identifier */
devId = mdiobb_read_by_paging(0, REG_PHY_ID_1);
if ( devId == PHY_IDENTIFIER) {
if (devId == PHY_IDENTIFIER) {
eth_sw_found = POST_DEV_FOUND;
}
}
@@ -97,8 +98,9 @@ uint16_t get_interrupt_status(uint8_t port)
/*****************************************************************************
* Internal IRQ handler - reads in triggered interrupts and dispatches CBs
*****************************************************************************/
static void _ethernet_sw_isr(void *context) {
Eth_cfg *ethCfg= context;
static void _ethernet_sw_isr(void *context)
{
Eth_cfg *ethCfg = context;
uint8_t port = 0;
uint8_t value;
if (!ethCfg->eth_sw_cfg->eth_switch.obj.alert_cb) {
@@ -107,94 +109,93 @@ static void _ethernet_sw_isr(void *context) {
/* Confirm the interrupt*/
uint16_t read_val = mdiobb_read(GLOBAL_2, REG_INTERRUPT_MASK);
read_val = mdiobb_read(GLOBAL_2, REG_INTERRUPT_SOURCE);
LOGGER_DEBUG("ETHSW::INFO:: Ethernet switch Interrupt mask register shows 0x%x.\n",read_val);
LOGGER_DEBUG(
"ETHSW::INFO:: Ethernet switch Interrupt mask register shows 0x%x.\n",
read_val);
if (read_val & 0x1F) {
while (!((read_val >> port) & 1)) {
port++;
}
}
LOGGER_DEBUG("ETHSW::INFO:: Ethernet switch context report interrupt from 0x%x.\n",ethCfg->eth_sw_port);
LOGGER_DEBUG(
"ETHSW::INFO:: Ethernet switch context report interrupt from 0x%x.\n",
ethCfg->eth_sw_port);
uint16_t interrupt_status = 0;
uint16_t i = 0;
Eth_Sw_Events eth_Evt;
if (interrupt_status = get_interrupt_status(port)) {
for (i = 0; (1 << i) != 0x10000; i++) {
switch (interrupt_status & (1 << i)) {
case SPEED_INT_STATUS:
{
if (mdiobb_read_by_paging(port, REG_PHY_CONTROL) & AUTONEG_EN) {
value = (RES_SPEED & mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS)) ?
SPEED_100M : SPEED_10M;
case SPEED_INT_STATUS: {
if (mdiobb_read_by_paging(port, REG_PHY_CONTROL) &
AUTONEG_EN) {
value = (RES_SPEED &
mdiobb_read_by_paging(port,
REG_PHY_SPEC_STATUS)) ?
SPEED_100M :
SPEED_10M;
} else {
value = (SPEED & mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ?
SPEED_100M : SPEED_10M;
value = (SPEED &
mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ?
SPEED_100M :
SPEED_10M;
}
eth_Evt = ETH_EVT_SPEED;
}
break;
case DUPLEX_INT_STATUS:
{
if (mdiobb_read_by_paging(port, REG_PHY_CONTROL) & AUTONEG_EN) {
value = (RES_DUPLEX & mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS)) ?
FULL_DUPLEX : HALF_DUPLEX;
} break;
case DUPLEX_INT_STATUS: {
if (mdiobb_read_by_paging(port, REG_PHY_CONTROL) &
AUTONEG_EN) {
value = (RES_DUPLEX &
mdiobb_read_by_paging(port,
REG_PHY_SPEC_STATUS)) ?
FULL_DUPLEX :
HALF_DUPLEX;
} else {
value = (DUPLEX & mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ?
FULL_DUPLEX : HALF_DUPLEX;
value = (DUPLEX &
mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ?
FULL_DUPLEX :
HALF_DUPLEX;
}
eth_Evt = ETH_EVT_DUPLEX;
}
break;
case AUTONEG_COMPLETE_INT_STATUS:
{
} break;
case AUTONEG_COMPLETE_INT_STATUS: {
read_val = mdiobb_read_by_paging(port, REG_PHY_STATUS);
value = (AUTONEG_DONE & read_val) ? 1 : 0;
eth_Evt = ETH_EVT_AUTONEG;
}
break;
case LINK_CHANGE_INT_STATUS:
{
} break;
case LINK_CHANGE_INT_STATUS: {
read_val = mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS);
value = (RT_LINK & read_val) ? 1 : 0;
eth_Evt = ETH_EVT_LINK;
}
break;
case MDI_CROSSOVER_INT_STATUS:
{
} break;
case MDI_CROSSOVER_INT_STATUS: {
read_val = mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS);
value = (MDI_CROSSOVER_STATUS & read_val) ? 1 : 0;
eth_Evt = ETH_EVT_CROSSOVER;
}
break;
case ENERGY_DET_INT_STATUS:
{
} break;
case ENERGY_DET_INT_STATUS: {
read_val = mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS);
value = (SLEEP_MODE & read_val) ? 1 : 0;
eth_Evt = ETH_EVT_ENERGY;
}
break;
case POLARITY_INT_STATUS:
{
} break;
case POLARITY_INT_STATUS: {
read_val = mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS);
value = (POLARITY & read_val) ? 1 : 0;
eth_Evt = ETH_EVT_POLARITY;
break;
}
case JABBER_INT_STATUS:
{
case JABBER_INT_STATUS: {
read_val = mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS);
value = (JABBER_DET & read_val) ? 1 : 0;
eth_Evt = ETH_EVT_JABBER;
}
break;
default:
{
} break;
default: {
LOGGER_ERROR("ETHSW:Unknown event type\n");
return;
}
}
ethCfg->eth_sw_cfg->eth_switch.obj.alert_cb(
eth_Evt,
value,
eth_Evt, value,
ethCfg->eth_sw_cfg->eth_switch.obj.cb_context);
}
}
@@ -203,7 +204,8 @@ static void _ethernet_sw_isr(void *context) {
/*****************************************************************************
*****************************************************************************/
void eth_sw_setAlertHandler(Eth_cfg *ethCfg, Eth_Sw_CallbackFn alert_cb,
void *cb_context) {
void *cb_context)
{
ethCfg->eth_sw_cfg->eth_switch.obj.alert_cb = alert_cb;
ethCfg->eth_sw_cfg->eth_switch.obj.cb_context = cb_context;
}
@@ -230,11 +232,14 @@ ReturnStatus eth_sw_get_status_speed(uint8_t port, port_speed *speed)
{
ReturnStatus ret = RETURN_OK;
if (mdiobb_read_by_paging(port, REG_PHY_CONTROL) & AUTONEG_EN)
*speed = (RES_SPEED & mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS)) ?
SPEED_100M : SPEED_10M;
*speed =
(RES_SPEED & mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS)) ?
SPEED_100M :
SPEED_10M;
else
*speed = (SPEED & mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ?
SPEED_100M : SPEED_10M;
SPEED_100M :
SPEED_10M;
return ret;
}
@@ -242,35 +247,42 @@ ReturnStatus eth_sw_get_status_duplex(uint8_t port, port_duplex *duplex)
{
ReturnStatus ret = RETURN_OK;
if (mdiobb_read_by_paging(port, REG_PHY_CONTROL) & AUTONEG_EN)
*duplex = (RES_DUPLEX & mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS)) ?
FULL_DUPLEX : HALF_DUPLEX;
*duplex = (RES_DUPLEX &
mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS)) ?
FULL_DUPLEX :
HALF_DUPLEX;
else
*duplex = (DUPLEX & mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ?
FULL_DUPLEX : HALF_DUPLEX;
FULL_DUPLEX :
HALF_DUPLEX;
return ret;
}
ReturnStatus eth_sw_get_status_auto_neg(uint8_t port, uint8_t *autoneg_on)
{
ReturnStatus ret = RETURN_OK;
*autoneg_on = (AUTONEG_EN & mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ?
1 : 0;
*autoneg_on =
(AUTONEG_EN & mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ? 1 : 0;
return ret;
}
ReturnStatus eth_sw_get_status_sleep_mode(uint8_t port, uint8_t *sleep_mode_en)
{
ReturnStatus ret = RETURN_OK;
*sleep_mode_en = (SLEEP_MODE & mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS)) ?
1 : 0;
*sleep_mode_en =
(SLEEP_MODE & mdiobb_read_by_paging(port, REG_PHY_SPEC_STATUS)) ?
1 :
0;
return ret;
}
ReturnStatus eth_sw_get_status_auto_neg_complete(uint8_t port, uint8_t *autoneg_complete)
ReturnStatus eth_sw_get_status_auto_neg_complete(uint8_t port,
uint8_t *autoneg_complete)
{
ReturnStatus ret = RETURN_OK;
*autoneg_complete = (AUTONEG_DONE & mdiobb_read_by_paging(port, REG_PHY_STATUS)) ?
1 : 0;
*autoneg_complete =
(AUTONEG_DONE & mdiobb_read_by_paging(port, REG_PHY_STATUS)) ? 1 :
0;
return ret;
}
@@ -296,26 +308,26 @@ ReturnStatus restart_autoneg(uint8_t port)
ReturnStatus eth_sw_set_config_speed(uint8_t port, port_speed speed)
{
ReturnStatus ret = RETURN_OK;
uint16_t read_val =0x0000;
uint16_t read_val = 0x0000;
switch (speed) {
case SPEED_10M:
read_val = mdiobb_read_by_paging(port, REG_PHY_CONTROL);
CLEAR_BIT((AUTONEG_EN | SPEED), read_val);
SET_BIT(SOFT_RESET, read_val);
mdiobb_write_by_paging(port, REG_PHY_CONTROL, read_val);
break;
case SPEED_100M:
read_val = mdiobb_read_by_paging(port, REG_PHY_CONTROL);
CLEAR_BIT(AUTONEG_EN, read_val);
SET_BIT((SOFT_RESET | SPEED), read_val);
mdiobb_write_by_paging(port, REG_PHY_CONTROL, read_val);
break;
case SPEED_AUTONEG:
restart_autoneg(port);
break;
default:
DEBUG("Invalid Ethernet speed set option");
return RETURN_NOTOK;
case SPEED_10M:
read_val = mdiobb_read_by_paging(port, REG_PHY_CONTROL);
CLEAR_BIT((AUTONEG_EN | SPEED), read_val);
SET_BIT(SOFT_RESET, read_val);
mdiobb_write_by_paging(port, REG_PHY_CONTROL, read_val);
break;
case SPEED_100M:
read_val = mdiobb_read_by_paging(port, REG_PHY_CONTROL);
CLEAR_BIT(AUTONEG_EN, read_val);
SET_BIT((SOFT_RESET | SPEED), read_val);
mdiobb_write_by_paging(port, REG_PHY_CONTROL, read_val);
break;
case SPEED_AUTONEG:
restart_autoneg(port);
break;
default:
DEBUG("Invalid Ethernet speed set option");
return RETURN_NOTOK;
}
return ret;
}
@@ -323,31 +335,31 @@ ReturnStatus eth_sw_set_config_speed(uint8_t port, port_speed speed)
ReturnStatus eth_sw_set_config_duplex(uint8_t port, port_duplex duplex)
{
ReturnStatus ret = RETURN_OK;
uint16_t read_val =0x0000;
uint16_t read_val = 0x0000;
switch (duplex) {
case SPEED_10M:
read_val = mdiobb_read_by_paging(port, REG_PHY_CONTROL);
CLEAR_BIT((AUTONEG_EN | DUPLEX), read_val);
SET_BIT(SOFT_RESET, read_val);
mdiobb_write_by_paging(port, REG_PHY_CONTROL, read_val);
break;
case SPEED_100M:
read_val = mdiobb_read_by_paging(port, REG_PHY_CONTROL);
CLEAR_BIT(AUTONEG_EN, read_val);
SET_BIT((SOFT_RESET | DUPLEX), read_val);
mdiobb_write_by_paging(port, REG_PHY_CONTROL, read_val);
break;
case SPEED_AUTONEG:
restart_autoneg(port);
break;
default:
DEBUG("Invalid Ethernet speed set option");
return RETURN_NOTOK;
case SPEED_10M:
read_val = mdiobb_read_by_paging(port, REG_PHY_CONTROL);
CLEAR_BIT((AUTONEG_EN | DUPLEX), read_val);
SET_BIT(SOFT_RESET, read_val);
mdiobb_write_by_paging(port, REG_PHY_CONTROL, read_val);
break;
case SPEED_100M:
read_val = mdiobb_read_by_paging(port, REG_PHY_CONTROL);
CLEAR_BIT(AUTONEG_EN, read_val);
SET_BIT((SOFT_RESET | DUPLEX), read_val);
mdiobb_write_by_paging(port, REG_PHY_CONTROL, read_val);
break;
case SPEED_AUTONEG:
restart_autoneg(port);
break;
default:
DEBUG("Invalid Ethernet speed set option");
return RETURN_NOTOK;
}
return ret;
}
ReturnStatus eth_sw_set_config_power_down(uint8_t port,uint8_t power_down)
ReturnStatus eth_sw_set_config_power_down(uint8_t port, uint8_t power_down)
{
ReturnStatus ret = RETURN_OK;
if (power_down)
@@ -357,8 +369,8 @@ ReturnStatus eth_sw_set_config_power_down(uint8_t port,uint8_t power_down)
return ret;
}
ReturnStatus eth_sw_set_config_sleep_mode_enable(uint8_t port,uint8_t sleep_mode_en)
ReturnStatus eth_sw_set_config_sleep_mode_enable(uint8_t port,
uint8_t sleep_mode_en)
{
ReturnStatus ret = RETURN_OK;
if (sleep_mode_en)
@@ -374,53 +386,56 @@ ReturnStatus get_interrupt(uint8_t port)
return mdiobb_read_by_paging(port, REG_PHY_INTERRUPT_EN);
}
ReturnStatus eth_sw_set_config_interrupt_enable(uint8_t port, uint8_t *interrupt_mask)
ReturnStatus eth_sw_set_config_interrupt_enable(uint8_t port,
uint8_t *interrupt_mask)
{
ReturnStatus ret = RETURN_OK;
uint16_t i = 0;
uint16_t write_val = get_interrupt(port);
for (i = 0; (1 << i) != 0x10; i++) {
switch ((1 << i)) {
case ETH_ALERT_SPEED_CHANGE:
(*interrupt_mask & ETH_ALERT_SPEED_CHANGE) ?
(write_val |= SPEED_INT_EN) : (write_val &= ~SPEED_INT_EN);
break;
case ETH_ALERT_DUPLEX_CHANGE:
(*interrupt_mask & ETH_ALERT_DUPLEX_CHANGE) ?
(write_val |= DUPLEX_INT_EN) : (write_val &= ~DUPLEX_INT_EN);
break;
case ETH_ALERT_AUTONEG_DONE:
(*interrupt_mask & ETH_ALERT_AUTONEG_DONE) ?
(write_val |= AUTONEG_COMPLETE_INT_EN) :
(write_val &= ~AUTONEG_COMPLETE_INT_EN);
break;
case ETH_ALERT_LINK_CHANGE:
(*interrupt_mask & ETH_ALERT_LINK_CHANGE) ?
(write_val |= LINK_CHANGE_INT_EN) :
(write_val &= ~LINK_CHANGE_INT_EN);
break;
case ETH_ALERT_CROSSOVER_DET:
(*interrupt_mask & ETH_ALERT_CROSSOVER_DET) ?
(write_val |= MDI_CROSSOVER_INT_EN) :
(write_val &= ~MDI_CROSSOVER_INT_EN);
break;
case ETH_ALERT_ENERGY_DET:
(*interrupt_mask & ETH_ALERT_ENERGY_DET) ?
(write_val |= ENERGY_DET_INT_EN) :
(write_val &= ~ENERGY_DET_INT_EN);
break;
case ETH_ALERT_POLARITY_DET:
(*interrupt_mask & ETH_ALERT_POLARITY_DET) ?
(write_val |= POLARITY_INT_EN) :
(write_val &= ~POLARITY_INT_EN);
break;
case ETH_ALERT_JABBER_DET:
(*interrupt_mask & ETH_ALERT_JABBER_DET) ?
(write_val |= JABBER_INT_EN) :
(write_val &= ~JABBER_INT_EN);
default:
DEBUG("Interrupt not supported");
return RETURN_NOTOK;
case ETH_ALERT_SPEED_CHANGE:
(*interrupt_mask & ETH_ALERT_SPEED_CHANGE) ?
(write_val |= SPEED_INT_EN) :
(write_val &= ~SPEED_INT_EN);
break;
case ETH_ALERT_DUPLEX_CHANGE:
(*interrupt_mask & ETH_ALERT_DUPLEX_CHANGE) ?
(write_val |= DUPLEX_INT_EN) :
(write_val &= ~DUPLEX_INT_EN);
break;
case ETH_ALERT_AUTONEG_DONE:
(*interrupt_mask & ETH_ALERT_AUTONEG_DONE) ?
(write_val |= AUTONEG_COMPLETE_INT_EN) :
(write_val &= ~AUTONEG_COMPLETE_INT_EN);
break;
case ETH_ALERT_LINK_CHANGE:
(*interrupt_mask & ETH_ALERT_LINK_CHANGE) ?
(write_val |= LINK_CHANGE_INT_EN) :
(write_val &= ~LINK_CHANGE_INT_EN);
break;
case ETH_ALERT_CROSSOVER_DET:
(*interrupt_mask & ETH_ALERT_CROSSOVER_DET) ?
(write_val |= MDI_CROSSOVER_INT_EN) :
(write_val &= ~MDI_CROSSOVER_INT_EN);
break;
case ETH_ALERT_ENERGY_DET:
(*interrupt_mask & ETH_ALERT_ENERGY_DET) ?
(write_val |= ENERGY_DET_INT_EN) :
(write_val &= ~ENERGY_DET_INT_EN);
break;
case ETH_ALERT_POLARITY_DET:
(*interrupt_mask & ETH_ALERT_POLARITY_DET) ?
(write_val |= POLARITY_INT_EN) :
(write_val &= ~POLARITY_INT_EN);
break;
case ETH_ALERT_JABBER_DET:
(*interrupt_mask & ETH_ALERT_JABBER_DET) ?
(write_val |= JABBER_INT_EN) :
(write_val &= ~JABBER_INT_EN);
default:
DEBUG("Interrupt not supported");
return RETURN_NOTOK;
}
}
mdiobb_write_by_paging(port, REG_PHY_INTERRUPT_EN, write_val);
@@ -431,42 +446,42 @@ ReturnStatus eth_sw_set_config_soft_reset(uint8_t port)
{
ReturnStatus ret = RETURN_OK;
/* write into REG_PHY_CONTROL bit# 15 */
mdiobb_set_bits(port, REG_PHY_CONTROL, SOFT_RESET);
return ret;
mdiobb_set_bits(port, REG_PHY_CONTROL, SOFT_RESET);
return ret;
}
ReturnStatus eth_sw_enable_loopback(void *driver, void *params){
ReturnStatus eth_sw_enable_loopback(void *driver, void *params)
{
ReturnStatus status = RETURN_OK;
Eth_cfg* s_eth_cfg = (Eth_cfg*)driver;
Eth_LoopBack_Params* s_eth_lpback = (Eth_LoopBack_Params*)params;
switch (s_eth_lpback->loopBackType)
{
case MACLOOPBACK:
status = eth_sw_enable_macloopback(s_eth_cfg->eth_sw_port);
break;
/*TODO: Implementation to be done for Line and External Loopback*/
case LINELOOPBACK:
case EXTLOOPBACK:
default:
break;
Eth_cfg *s_eth_cfg = (Eth_cfg *)driver;
Eth_LoopBack_Params *s_eth_lpback = (Eth_LoopBack_Params *)params;
switch (s_eth_lpback->loopBackType) {
case MACLOOPBACK:
status = eth_sw_enable_macloopback(s_eth_cfg->eth_sw_port);
break;
/*TODO: Implementation to be done for Line and External Loopback*/
case LINELOOPBACK:
case EXTLOOPBACK:
default:
break;
}
return status;
}
ReturnStatus eth_sw_disable_loopback(void *driver, void *params){
ReturnStatus eth_sw_disable_loopback(void *driver, void *params)
{
ReturnStatus status = RETURN_OK;
Eth_cfg* s_eth_cfg = (Eth_cfg*)driver;
Eth_LoopBack_Params* s_eth_lpback = (Eth_LoopBack_Params*)params;
switch (s_eth_lpback->loopBackType)
{
case MACLOOPBACK:
status = eth_sw_disable_macloopback(s_eth_cfg->eth_sw_port);
break;
/*TODO: Implementation to be done for Line and External Loopback*/
case LINELOOPBACK:
case EXTLOOPBACK:
default:
break;
Eth_cfg *s_eth_cfg = (Eth_cfg *)driver;
Eth_LoopBack_Params *s_eth_lpback = (Eth_LoopBack_Params *)params;
switch (s_eth_lpback->loopBackType) {
case MACLOOPBACK:
status = eth_sw_disable_macloopback(s_eth_cfg->eth_sw_port);
break;
/*TODO: Implementation to be done for Line and External Loopback*/
case LINELOOPBACK:
case EXTLOOPBACK:
default:
break;
}
return status;
}
@@ -491,32 +506,35 @@ ReturnStatus eth_sw_disable_macloopback(uint8_t port)
ReturnStatus eth_sw_enable_packet_gen(void *driver, void *params)
{
ReturnStatus ret = RETURN_OK;
Eth_cfg* s_eth_cfg = (Eth_cfg*)driver;
Eth_PacketGen_Params* s_eth_packetParams = (Eth_PacketGen_Params*)params;
Eth_cfg *s_eth_cfg = (Eth_cfg *)driver;
Eth_PacketGen_Params *s_eth_packetParams = (Eth_PacketGen_Params *)params;
/*Packet generator params such as packet length, payload type, frame count etc are set in REG_C45_PACKET_GEN*/
mdiobb_write_by_paging_c45(s_eth_cfg->eth_sw_port, REG_C45_PACKET_GEN, s_eth_packetParams->reg_value);
mdiobb_write_by_paging_c45(s_eth_cfg->eth_sw_port, REG_C45_PACKET_GEN,
s_eth_packetParams->reg_value);
return ret;
}
ReturnStatus eth_sw_disable_packet_gen(void *driver)
{
ReturnStatus ret = RETURN_OK;
Eth_cfg* s_eth_cfg = (Eth_cfg*)driver;
mdiobb_clear_bits_C45(s_eth_cfg->eth_sw_port, REG_C45_PACKET_GEN, PACKET_GEN_EN);
Eth_cfg *s_eth_cfg = (Eth_cfg *)driver;
mdiobb_clear_bits_C45(s_eth_cfg->eth_sw_port, REG_C45_PACKET_GEN,
PACKET_GEN_EN);
return ret;
}
char *convString(int i, char *result)
{
sprintf(result,"%d",i);
sprintf(result, "%d", i);
return result;
}
ReturnStatus eth_sw_config_tiva_client(void *driver, void *params) {
ReturnStatus eth_sw_config_tiva_client(void *driver, void *params)
{
ReturnStatus ret = RETURN_OK;
int count = 0;
Eth_cfg* s_eth_cfg = (Eth_cfg*)driver;
Eth_TcpClient_Params *s_eth_tcpParams = (Eth_TcpClient_Params*)params;
Eth_cfg *s_eth_cfg = (Eth_cfg *)driver;
Eth_TcpClient_Params *s_eth_tcpParams = (Eth_TcpClient_Params *)params;
Task_Handle taskHandle_client;
Task_Params taskParams;
@@ -530,7 +548,7 @@ ReturnStatus eth_sw_config_tiva_client(void *driver, void *params) {
do {
convString(s_eth_tcpParams->ipAddress[count], tempBuf);
strcat(convStr, tempBuf);
if((MAX - 1) != count) {
if ((MAX - 1) != count) {
strcat(convStr, ".");
}
count++;
@@ -547,7 +565,8 @@ ReturnStatus eth_sw_config_tiva_client(void *driver, void *params) {
taskParams.priority = ETHTIVACLEINT_TASK_PRIORITY;
taskParams.arg0 = s_eth_tcpParams->tcpPort;
taskHandle_client = Task_create((Task_FuncPtr) tcpHandler_client, &taskParams, &eb);
taskHandle_client =
Task_create((Task_FuncPtr)tcpHandler_client, &taskParams, &eb);
if (taskHandle_client == NULL) {
System_printf("Failed to create taskHandle_client Task\n");
}
@@ -560,49 +579,54 @@ ReturnStatus eth_sw_set_config_restart_neg(uint8_t port)
ReturnStatus ret = RETURN_OK;
/* write into PHY control register & in autoneg enable bit */
mdiobb_set_bits(port, REG_PHY_CONTROL,
(RESTART_AUTONEG | AUTONEG_EN | SOFT_RESET));
(RESTART_AUTONEG | AUTONEG_EN | SOFT_RESET));
return ret;
}
ReturnStatus eth_sw_get_config_speed(uint8_t port, port_speed* speed)
ReturnStatus eth_sw_get_config_speed(uint8_t port, port_speed *speed)
{
ReturnStatus ret = RETURN_OK;
if (AUTONEG_EN & mdiobb_read_by_paging(port, REG_PHY_CONTROL))
if (AUTONEG_EN & mdiobb_read_by_paging(port, REG_PHY_CONTROL))
*speed = SPEED_AUTONEG;
else
*speed = SPEED & mdiobb_read_by_paging(port, REG_PHY_CONTROL) ?
SPEED_100M : SPEED_10M;
SPEED_100M :
SPEED_10M;
return ret;
}
ReturnStatus eth_sw_get_config_duplex(uint8_t port, port_duplex* duplex)
ReturnStatus eth_sw_get_config_duplex(uint8_t port, port_duplex *duplex)
{
ReturnStatus ret = RETURN_OK;
if (AUTONEG_EN & mdiobb_read_by_paging(port, REG_PHY_CONTROL))
if (AUTONEG_EN & mdiobb_read_by_paging(port, REG_PHY_CONTROL))
*duplex = DUPLEX_AUTONEG;
else
*duplex = (DUPLEX & mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ?
FULL_DUPLEX : HALF_DUPLEX;
FULL_DUPLEX :
HALF_DUPLEX;
return ret;
}
ReturnStatus eth_sw_get_config_power_down(uint8_t port, uint8_t* power_dwn)
ReturnStatus eth_sw_get_config_power_down(uint8_t port, uint8_t *power_dwn)
{
ReturnStatus ret = RETURN_OK;
*power_dwn = (PWR_DOWN & mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ?
1 : 0;
*power_dwn =
(PWR_DOWN & mdiobb_read_by_paging(port, REG_PHY_CONTROL)) ? 1 : 0;
return ret;
}
ReturnStatus eth_sw_get_config_sleep_mode(uint8_t port, uint8_t* sleep_mode)
ReturnStatus eth_sw_get_config_sleep_mode(uint8_t port, uint8_t *sleep_mode)
{
ReturnStatus ret = RETURN_OK;
*sleep_mode = (ENERGY_DET & mdiobb_read_by_paging(port, REG_PHY_SPEC_CONTROL)) ?
1 : 0;
*sleep_mode =
(ENERGY_DET & mdiobb_read_by_paging(port, REG_PHY_SPEC_CONTROL)) ?
1 :
0;
return ret;
}
ReturnStatus eth_sw_get_config_interrupt_enable(uint8_t port, uint8_t* interrupt_enb)
ReturnStatus eth_sw_get_config_interrupt_enable(uint8_t port,
uint8_t *interrupt_enb)
{
ReturnStatus ret = RETURN_OK;
/* read the register REG_PHY_INTERRUPT_EN */

View File

@@ -25,45 +25,45 @@
/* TODO: move to helper? */
#define STATIC_STRLEN(s) (ARRAY_SIZE(s) - 1)
#define TESTMOD_TASK_PRIORITY 2
#define TESTMOD_TASK_STACK_SIZE 2048
#define TESTMOD_TASK_PRIORITY 2
#define TESTMOD_TASK_STACK_SIZE 2048
#define G510_WRITE_TIMEOUT 500
#define G510_READ_TIMEOUT 5000
/* G510 enable line is active-low */
#define GSM_EN_ASSERT (0)
#define GSM_EN_ASSERT (0)
#define GSM_EN_DEASSERT (1)
#define GSM_PWR_EN_ASSERT (1)
#define GSM_PWR_EN_ASSERT (1)
#define GSM_PWR_EN_DEASSERT (0)
#define GSM_SHUTDOWN_TIME 200
#define GSM_COOLDOWN_TIME 50
typedef enum {
TWOG_SIM_CALLSTATE_CHANGE = 0,
TWOG_SIM_INCOMING_MSG = 1,
TWOG_SIM_ALERT_PARAMS_MAX /* Limiter */
TWOG_SIM_CALLSTATE_CHANGE = 0,
TWOG_SIM_INCOMING_MSG = 1,
TWOG_SIM_ALERT_PARAMS_MAX /* Limiter */
} eTEST_MOD_ALERTParam;
typedef enum {
TWOG_CALL_EVT_RING = 0,
typedef enum {
TWOG_CALL_EVT_RING = 0,
TWOG_CALL_EVT_CALL_END = 1,
} eTEST_MODE_CallEvent;
typedef enum {
TWOG_IMEI = 0,
TWOG_IMSI = 1,
TWOG_GETMFG = 2,
TWOG_GETMODEL = 3,
TWOG_RSSI = 4,
TWOG_BER = 5,
TWOG_REGSTATUS = 6,
TWOG_NETWORK_OP_INFO = 7,
TWOG_CELLID = 8,
TWOG_BSIC = 9,
TWOG_LASTERR = 10,
TWOG_PARAM_MAX /* Limiter */
TWOG_IMEI = 0,
TWOG_IMSI = 1,
TWOG_GETMFG = 2,
TWOG_GETMODEL = 3,
TWOG_RSSI = 4,
TWOG_BER = 5,
TWOG_REGSTATUS = 6,
TWOG_NETWORK_OP_INFO = 7,
TWOG_CELLID = 8,
TWOG_BSIC = 9,
TWOG_LASTERR = 10,
TWOG_PARAM_MAX /* Limiter */
} eTestModule_StatusParam;
static UART_Handle uartGsm;
@@ -89,7 +89,7 @@ static void cmti_cb(const GsmCmtiInfo *info, void *context)
static void call_state_cb(const GsmClccInfo *info, void *context)
{
LOGGER("CLCC %u\n", info->call_state);
LOGGER("CLCC %u\n", info->call_state);
switch (info->call_state) {
case GSM_CALL_STATE_INCOMING: {
eTEST_MODE_CallEvent callState = TWOG_CALL_EVT_RING;
@@ -105,20 +105,19 @@ static void call_state_cb(const GsmClccInfo *info, void *context)
}
/* Configures the various IO pins associated with this subsystem */
static bool configure_io(TestMod_Cfg *testmod_cfg) {
static bool configure_io(TestMod_Cfg *testmod_cfg)
{
//const TestMod_Cfg *testmod_cfg = (TestMod_Cfg *)testModuleCfg;
G510_Cfg *cfg = &testmod_cfg->g510_cfg;
G510_Cfg *cfg = &testmod_cfg->g510_cfg;
OcGpio_configure(&cfg->pin_sim_present, OCGPIO_CFG_INPUT);
OcGpio_configure(&cfg->pin_enable, OCGPIO_CFG_OUTPUT |
OCGPIO_CFG_OUT_LOW);
OcGpio_configure(&cfg->pin_pwr_en, OCGPIO_CFG_OUTPUT |
OCGPIO_CFG_OUT_LOW);
OcGpio_configure(&cfg->pin_enable, OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_LOW);
OcGpio_configure(&cfg->pin_pwr_en, OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_LOW);
return true;
}
static UART_Handle open_comm(TestMod_Cfg * testmod_cfg)
static UART_Handle open_comm(TestMod_Cfg *testmod_cfg)
{
//const TestMod_Cfg *testmod_cfg = (TestMod_Cfg *)testModuleCfg;
@@ -138,7 +137,7 @@ static UART_Handle open_comm(TestMod_Cfg * testmod_cfg)
return UART_open(testmod_cfg->g510_cfg.uart, &uartParams);
}
static bool g510_reset(TestMod_Cfg * testmod_cfg)
static bool g510_reset(TestMod_Cfg *testmod_cfg)
{
//const TestMod_Cfg *testmod_cfg = (TestMod_Cfg *)testModuleCfg;
const G510_Cfg *cfg = &testmod_cfg->g510_cfg;
@@ -184,8 +183,7 @@ static bool g510_reset(TestMod_Cfg * testmod_cfg)
return true;
}
ReturnStatus g510_init(TestMod_Cfg* testModuleCfg, const void *alert_token)
ReturnStatus g510_init(TestMod_Cfg *testModuleCfg, const void *alert_token)
{
if (!configure_io(testModuleCfg)) {
return RETURN_NOTOK;
@@ -243,7 +241,7 @@ static void testModule_task(UArg a0, UArg a1)
GSM_cimi(s_hGsm, &imsi);
/* TODO: hack because System_printf is crappy and doesn't support %llu */
char imsiStr[16];
snprintf(imsiStr, sizeof(imsiStr), "%"PRIu64, imsi);
snprintf(imsiStr, sizeof(imsiStr), "%" PRIu64, imsi);
LOGGER("IMSI: %s\n", imsiStr);
/* NOTE: if the message storage fills up, the G510 will just
@@ -255,10 +253,10 @@ static void testModule_task(UArg a0, UArg a1)
GSM_clccSet(s_hGsm, true); /* Enable clcc (call state) msg */
/* Finish device configuration */
if (!GSM_cnmi(s_hGsm, 2, 1, 0, 0 , 0) || /* enable sms arrival notif */
if (!GSM_cnmi(s_hGsm, 2, 1, 0, 0, 0) || /* enable sms arrival notif */
!GSM_cmgf(s_hGsm, GSM_MSG_FMT_TEXT) || /* set to text mode */
!GSM_csmp(s_hGsm, 17, 167, 0, 0) || /* text mode parameters */
!GSM_csdh(s_hGsm, true)) { /* display extra info for cgmr */
!GSM_csmp(s_hGsm, 17, 167, 0, 0) || /* text mode parameters */
!GSM_csdh(s_hGsm, true)) { /* display extra info for cgmr */
s_hGsm = NULL; /* TODO: proper teardown of handle */
}
@@ -267,7 +265,8 @@ static void testModule_task(UArg a0, UArg a1)
GSM_cnma(s_hGsm);
static char sms[160];
if (GSM_cmgr(s_hGsm, sms_idx, sms, NULL)) {
LOGGER("SMS: %.*s\n", 50, sms); // System_printf has a limited buffer
LOGGER("SMS: %.*s\n", 50,
sms); // System_printf has a limited buffer
OCMP_GenerateAlert(alert_token, TWOG_SIM_INCOMING_MSG, sms);
} else {
LOGGER_ERROR("TESTMOD:Failed to read SMS\n");
@@ -306,130 +305,128 @@ ePostCode g510_task_init(void *driver, const void **config,
taskParams.arg0 = (intptr_t)alert_token;
Task_Handle task = Task_create(testModule_task, &taskParams, NULL);
if (!task) {
LOGGER("TESTMOD::FATAL: Unable to start G510 task\n");
LOGGER("TESTMOD::FATAL: Unable to start G510 task\n");
Semaphore_delete(&sem_simReady);
Semaphore_delete(&sem_sms);
return POST_DEV_CFG_FAIL;
}
if (g510_init(driver,alert_token) != RETURN_OK) {
if (g510_init(driver, alert_token) != RETURN_OK) {
return POST_DEV_CFG_FAIL;
}
return POST_DEV_CFG_DONE;
}
bool g510_get_imei( TestMod_2G_Status_Data *p2gStatusData)
bool g510_get_imei(TestMod_2G_Status_Data *p2gStatusData)
{
GsmCgsnInfo cgsnInfo;
if (!GSM_cgsn(s_hGsm, &cgsnInfo)) {
return false;
}
p2gStatusData->imei = strtoull(cgsnInfo.imei, NULL, 10);
return true;
GsmCgsnInfo cgsnInfo;
if (!GSM_cgsn(s_hGsm, &cgsnInfo)) {
return false;
}
p2gStatusData->imei = strtoull(cgsnInfo.imei, NULL, 10);
return true;
}
bool g510_get_imsi( TestMod_2G_Status_Data *p2gStatusData)
bool g510_get_imsi(TestMod_2G_Status_Data *p2gStatusData)
{
uint64_t imsi;
if (!GSM_cimi(s_hGsm, &imsi)) {
return false;
}
p2gStatusData->imsi = imsi;
return true;
uint64_t imsi;
if (!GSM_cimi(s_hGsm, &imsi)) {
return false;
}
p2gStatusData->imsi = imsi;
return true;
}
bool g510_get_mfg( TestMod_2G_Status_Data *p2gStatusData)
bool g510_get_mfg(TestMod_2G_Status_Data *p2gStatusData)
{
GsmCgmiInfo cgmiInfo;
if (!GSM_cgmi(s_hGsm, &cgmiInfo)) {
return false;
}
/* TODO: idea - make safe strncpy that always terminates str */
strncpy(p2gStatusData->mfg, cgmiInfo.mfgId,
sizeof(p2gStatusData->mfg));
return true;
GsmCgmiInfo cgmiInfo;
if (!GSM_cgmi(s_hGsm, &cgmiInfo)) {
return false;
}
/* TODO: idea - make safe strncpy that always terminates str */
strncpy(p2gStatusData->mfg, cgmiInfo.mfgId, sizeof(p2gStatusData->mfg));
return true;
}
bool g510_get_model( TestMod_2G_Status_Data *p2gStatusData)
bool g510_get_model(TestMod_2G_Status_Data *p2gStatusData)
{
GsmCgmmInfo cgmmInfo;
if (!GSM_cgmm(s_hGsm, &cgmmInfo)) {
return false;
}
strncpy(p2gStatusData->model, cgmmInfo.model,
sizeof(p2gStatusData->model));
return true;
GsmCgmmInfo cgmmInfo;
if (!GSM_cgmm(s_hGsm, &cgmmInfo)) {
return false;
}
strncpy(p2gStatusData->model, cgmmInfo.model, sizeof(p2gStatusData->model));
return true;
}
bool g510_get_rssi( TestMod_2G_Status_Data *p2gStatusData)
bool g510_get_rssi(TestMod_2G_Status_Data *p2gStatusData)
{
GsmCsqInfo csqInfo;
if (!GSM_csq(s_hGsm, &csqInfo)) {
return false;
}
p2gStatusData->rssi = csqInfo.rssi;
return true;
GsmCsqInfo csqInfo;
if (!GSM_csq(s_hGsm, &csqInfo)) {
return false;
}
p2gStatusData->rssi = csqInfo.rssi;
return true;
}
bool g510_get_ber( TestMod_2G_Status_Data *p2gStatusData)
bool g510_get_ber(TestMod_2G_Status_Data *p2gStatusData)
{
GsmCsqInfo csqInfo;
if (!GSM_csq(s_hGsm, &csqInfo)) {
return false;
}
p2gStatusData->ber = csqInfo.ber;
return true;
GsmCsqInfo csqInfo;
if (!GSM_csq(s_hGsm, &csqInfo)) {
return false;
}
p2gStatusData->ber = csqInfo.ber;
return true;
}
bool g510_get_regStatus( TestMod_2G_Status_Data *p2gStatusData)
bool g510_get_regStatus(TestMod_2G_Status_Data *p2gStatusData)
{
GsmCregInfo cregInfo;
if (!GSM_cregRead(s_hGsm, &cregInfo)) {
return false;
}
p2gStatusData->regStat = cregInfo.stat;
return true;
GsmCregInfo cregInfo;
if (!GSM_cregRead(s_hGsm, &cregInfo)) {
return false;
}
p2gStatusData->regStat = cregInfo.stat;
return true;
}
bool g510_get_cellId( TestMod_2G_Status_Data *p2gStatusData)
bool g510_get_cellId(TestMod_2G_Status_Data *p2gStatusData)
{
/* NOTE: requires CREG mode 2 (unsolicited + location info) */
GsmCregInfo cregInfo;
if (!GSM_cregRead(s_hGsm, &cregInfo)) {
return false;
}
p2gStatusData->cid = cregInfo.cid;
return true;
/* NOTE: requires CREG mode 2 (unsolicited + location info) */
GsmCregInfo cregInfo;
if (!GSM_cregRead(s_hGsm, &cregInfo)) {
return false;
}
p2gStatusData->cid = cregInfo.cid;
return true;
}
/* Command handling */
bool TestMod_cmdEnable(void *driver, void *params)
{
LOGGER("TESTMOD 2G Enable\n");
LOGGER("TESTMOD 2G Enable\n");
return GSM_cfun(s_hGsm, GSM_CFUN_FULL);
}
bool TestMod_cmdDisable(void *driver, void *params)
{
LOGGER("TESTMOD 2G Disable\n");
LOGGER("TESTMOD 2G Disable\n");
return GSM_cfun(s_hGsm, GSM_CFUN_AIRPLANE);
}
bool TestMod_cmdDisconnect(void *driver, void *params)
{
LOGGER("TESTMOD 2G Disconnect\n");
LOGGER("TESTMOD 2G Disconnect\n");
return GSM_cops(s_hGsm, GSM_COPS_MODE_DEREG, GSM_COPS_FMT_NUMERIC, "");
}
bool TestMod_cmdConnect(void *driver, void *params)
{
LOGGER("TESTMOD 2G Connect\n");
LOGGER("TESTMOD 2G Connect\n");
return GSM_cops(s_hGsm, GSM_COPS_MODE_AUTO, GSM_COPS_FMT_NUMERIC, "");
}
bool TestMod_cmdSendSms(void *driver, void *params)
{
LOGGER("TESTMOD 2G SMS\n");
LOGGER("TESTMOD 2G SMS\n");
/* TODO: we assume number is null terminated, should have check */
TestModule_sms *sms = params;
return GSM_cmgs(s_hGsm, sms->number, sms->msg);
@@ -446,19 +443,18 @@ bool TestMod_cmdDial(void *driver, void *params)
bool TestMod_cmdAnswer(void *driver, void *params)
{
LOGGER("TESTMOD 2G answer\n");
LOGGER("TESTMOD 2G answer\n");
return GSM_a(s_hGsm);
}
bool TestMod_cmdHangup(void *driver, void *params)
{
LOGGER("TESTMOD 2G hangup\n");
LOGGER("TESTMOD 2G hangup\n");
return GSM_h(s_hGsm);
}
bool TestMod_cmdReset(void *driver, void *params)
{
LOGGER("TESTMOD Reset\n");
LOGGER("TESTMOD Reset\n");
return false; /* Not yet implemented */
}

View File

@@ -47,11 +47,9 @@ static const XrStopBit XR_STOP_BIT_MAP[] = {
};
static const XrParity XR_PARITY_MAP[] = {
[UART_PAR_NONE] = XR_PARITY_NONE,
[UART_PAR_EVEN] = XR_PARITY_EVEN,
[UART_PAR_ODD] = XR_PARITY_ODD,
[UART_PAR_ZERO] = XR_PARITY_ZERO,
[UART_PAR_ONE] = XR_PARITY_ONE,
[UART_PAR_NONE] = XR_PARITY_NONE, [UART_PAR_EVEN] = XR_PARITY_EVEN,
[UART_PAR_ODD] = XR_PARITY_ODD, [UART_PAR_ZERO] = XR_PARITY_ZERO,
[UART_PAR_ONE] = XR_PARITY_ONE,
};
// TXLVL IRQ will automatically fire after reset & give us the actual level
@@ -59,7 +57,7 @@ static XrRegTxlvl s_txEmptyBytes = 0;
// UART function table for XR20M1170 implementation
void XR20M1170_close(UART_Handle handle);
int XR20M1170_control(UART_Handle handle, unsigned int cmd, void *arg);
int XR20M1170_control(UART_Handle handle, unsigned int cmd, void *arg);
void XR20M1170_init(UART_Handle handle);
UART_Handle XR20M1170_open(UART_Handle handle, UART_Params *params);
int XR20M1170_read(UART_Handle handle, void *buffer, size_t size);
@@ -70,26 +68,23 @@ int XR20M1170_writePolling(UART_Handle handle, const void *buffer, size_t size);
void XR20M1170_writeCancel(UART_Handle handle);
const UART_FxnTable XR20M1170_fxnTable = {
XR20M1170_close,
XR20M1170_control,
XR20M1170_init,
XR20M1170_open,
XR20M1170_read,
XR20M1170_readPolling,
XR20M1170_readCancel,
XR20M1170_write,
XR20M1170_writePolling,
XR20M1170_close, XR20M1170_control, XR20M1170_init,
XR20M1170_open, XR20M1170_read, XR20M1170_readPolling,
XR20M1170_readCancel, XR20M1170_write, XR20M1170_writePolling,
XR20M1170_writeCancel
};
static XrSubAddress getSubAddress(XrRegister reg) {
return (XrSubAddress) {
static XrSubAddress getSubAddress(XrRegister reg)
{
return (XrSubAddress){
.channel = XR_CHANNEL_A, // The only supported option
.reg = reg,
};
}
static bool writeData(UART_Handle handle, XrRegister reg, const void *buffer, size_t size) {
static bool writeData(UART_Handle handle, XrRegister reg, const void *buffer,
size_t size)
{
XR20M1170_Object *object = handle->object;
const XR20M1170_HWAttrs *hwAttrs = handle->hwAttrs;
@@ -101,7 +96,9 @@ static bool writeData(UART_Handle handle, XrRegister reg, const void *buffer, si
return true;
}
static void readData(UART_Handle handle, XrRegister reg, void *buffer, size_t size) {
static void readData(UART_Handle handle, XrRegister reg, void *buffer,
size_t size)
{
XR20M1170_Object *object = handle->object;
const XR20M1170_HWAttrs *hwAttrs = handle->hwAttrs;
@@ -111,10 +108,12 @@ static void readData(UART_Handle handle, XrRegister reg, void *buffer, size_t si
}
}
void XR20M1170_close(UART_Handle handle) {
void XR20M1170_close(UART_Handle handle)
{
}
int XR20M1170_control(UART_Handle handle, unsigned int cmd, void *arg) {
int XR20M1170_control(UART_Handle handle, unsigned int cmd, void *arg)
{
XR20M1170_Object *object = handle->object;
// Most of the commands require this info, might as well dedupe
@@ -126,21 +125,18 @@ int XR20M1170_control(UART_Handle handle, unsigned int cmd, void *arg) {
}
GateMutex_leave(object->ringBufMutex, mutexKey);
switch(cmd) {
case UART_CMD_ISAVAILABLE:
{
switch (cmd) {
case UART_CMD_ISAVAILABLE: {
bool *available = arg;
*available = (rxLvl > 0);
return (UART_STATUS_SUCCESS);
}
case UART_CMD_GETRXCOUNT:
{
case UART_CMD_GETRXCOUNT: {
int *count = arg;
*count = rxLvl;
return (UART_STATUS_SUCCESS);
}
case UART_CMD_PEEK:
{
case UART_CMD_PEEK: {
int *byte = (int *)arg;
if (!rxLvl) {
*byte = UART_ERROR;
@@ -159,15 +155,17 @@ int XR20M1170_control(UART_Handle handle, unsigned int cmd, void *arg) {
}
// XR20M1170_init
void XR20M1170_init(UART_Handle handle) {
void XR20M1170_init(UART_Handle handle)
{
XR20M1170_Object *object = handle->object;
*object = (XR20M1170_Object) {
*object = (XR20M1170_Object){
.state.opened = false,
};
}
static void processIrq(void *context) {
static void processIrq(void *context)
{
UART_Handle handle = context;
XR20M1170_Object *object = handle->object;
@@ -176,10 +174,9 @@ static void processIrq(void *context) {
XrRegIsr isr;
readData(handle, XR_REG_ISR, &isr, sizeof(isr));
switch(isr.source) {
switch (isr.source) {
case ISR_SRC_RXRDY_TMOUT:
case ISR_SRC_RXRDY:
{
case ISR_SRC_RXRDY: {
// See how much data is available
XrRegRxlvl rxLvl;
readData(handle, XR_REG_RXLVL, &rxLvl, sizeof(rxLvl));
@@ -211,14 +208,16 @@ static void processIrq(void *context) {
// copy and maybe auto-locking
for (int i = 0; i < bytesToRead; ++i) {
RingBuf_put(&object->ringBuffer, buf[i]);
Semaphore_post(object->readSem); // TODO: move out of mutex lock?
Semaphore_post(
object->readSem); // TODO: move out of mutex lock?
}
}
GateMutex_leave(object->ringBufMutex, mutexKey);
break;
}
case ISR_SRC_TXRDY:
readData(handle, XR_REG_TXLVL, &s_txEmptyBytes, sizeof(s_txEmptyBytes));
readData(handle, XR_REG_TXLVL, &s_txEmptyBytes,
sizeof(s_txEmptyBytes));
Semaphore_post(object->writeSem);
break;
case ISR_SRC_LSR:
@@ -235,11 +234,13 @@ static void processIrq(void *context) {
}
static double calc_divisor(double xtal_freq, double prescaler, double baudRate,
double sampling_mode) {
double sampling_mode)
{
return (xtal_freq / prescaler) / (baudRate * sampling_mode);
}
static bool reset_ic(UART_Handle handle) {
static bool reset_ic(UART_Handle handle)
{
XrRegIOCtrl ioCtrl = {
.uartReset = true,
};
@@ -251,7 +252,8 @@ static bool reset_ic(UART_Handle handle) {
}
// Sets up the XR20M1170 registers to match desired settings
static bool register_config(UART_Handle handle, UART_Params *params) {
static bool register_config(UART_Handle handle, UART_Params *params)
{
const XR20M1170_HWAttrs *hwAttrs = handle->hwAttrs;
// TODO: Idea: have a function for setting registers to make sure everything
@@ -289,8 +291,8 @@ static bool register_config(UART_Handle handle, UART_Params *params) {
// If the divisor is too big, introduce the prescaler
if (divisor > UINT16_MAX) {
prescaler = 4;
divisor = calc_divisor(hwAttrs->xtal1_freq, prescaler,
params->baudRate, samplingMode);
divisor = calc_divisor(hwAttrs->xtal1_freq, prescaler, params->baudRate,
samplingMode);
}
// Split the divisor into its integer and fractional parts
@@ -311,14 +313,14 @@ static bool register_config(UART_Handle handle, UART_Params *params) {
// Calculate data error rate
double realDivisor = (dld.fracDivisor / 16.0) + trunc(divisor);
double dataErrorRate = ((divisor - realDivisor)/divisor) * 100.0;
double dataErrorRate = ((divisor - realDivisor) / divisor) * 100.0;
if (dataErrorRate > 0.001) {
Log_warning2("XR20M1170: Data error rate of %d%% for baud rate %d",
dataErrorRate, params->baudRate);
}
// Set up LCR
lcr = (XrRegLcr) {
lcr = (XrRegLcr){
.wordLen = XR_WORD_LEN_MAP[params->dataLength],
.stopBits = XR_STOP_BIT_MAP[params->stopBits],
.parity = XR_PARITY_MAP[params->parityType],
@@ -345,16 +347,16 @@ static bool register_config(UART_Handle handle, UART_Params *params) {
writeData(handle, XR_REG_FCR, &fcr, sizeof(fcr));
/* Set trigger levels - these override the levels set by FCR if nonzero */
XrRegTlr tlr = {
.rxTrigger = 32 / 4, /* 4-60, multiple of 4 */
.txTrigger = 32 / 4, /* 4-60, multiple of 4 */
};
writeData(handle, XR_REG_TLR, &tlr, sizeof(tlr));
XrRegTlr tlr = {
.rxTrigger = 32 / 4, /* 4-60, multiple of 4 */
.txTrigger = 32 / 4, /* 4-60, multiple of 4 */
};
writeData(handle, XR_REG_TLR, &tlr, sizeof(tlr));
/* Set halt/resume levels - these can be relatively low since data should
* normally be cleared quite quickly */
XrRegTcr tcr = {
.rxHaltLvl = 40 / 4, /* 0-60, multiple of 4 */
.rxHaltLvl = 40 / 4, /* 0-60, multiple of 4 */
.rxResumeLvl = 12 / 4, /* 0-60, multiple of 4 */
};
writeData(handle, XR_REG_TCR, &tcr, sizeof(tcr));
@@ -382,7 +384,8 @@ static bool register_config(UART_Handle handle, UART_Params *params) {
}
// XR20M1170_open
UART_Handle XR20M1170_open(UART_Handle handle, UART_Params *params) {
UART_Handle XR20M1170_open(UART_Handle handle, UART_Params *params)
{
XR20M1170_Object *object = handle->object;
const XR20M1170_HWAttrs *hwAttrs = handle->hwAttrs;
@@ -429,8 +432,8 @@ UART_Handle XR20M1170_open(UART_Handle handle, UART_Params *params) {
DEBUG("XR20M1170:ERROR::Can't ring buffer mutex\n");
}
OcGpio_configure(hwAttrs->pin_irq, OCGPIO_CFG_INPUT |
OCGPIO_CFG_INT_FALLING);
OcGpio_configure(hwAttrs->pin_irq,
OCGPIO_CFG_INPUT | OCGPIO_CFG_INT_FALLING);
// Set up our threaded interrupt handler
ThreadedInt_Init(hwAttrs->pin_irq, processIrq, handle);
@@ -447,8 +450,8 @@ UART_Handle XR20M1170_open(UART_Handle handle, UART_Params *params) {
// object->state.readDataMode = params->readDataMode;
// object->state.writeDataMode = params->writeDataMode;
// object->state.readEcho = params->readEcho;
object->readTimeout = params->readTimeout;
object->writeTimeout = params->writeTimeout;
object->readTimeout = params->readTimeout;
object->writeTimeout = params->writeTimeout;
// object->readCallback = params->readCallback;
// object->writeCallback = params->writeCallback;
@@ -457,7 +460,8 @@ UART_Handle XR20M1170_open(UART_Handle handle, UART_Params *params) {
return (handle);
}
int XR20M1170_read(UART_Handle handle, void *buffer, size_t size) {
int XR20M1170_read(UART_Handle handle, void *buffer, size_t size)
{
XR20M1170_Object *object = handle->object;
uint8_t *char_buf = buffer;
@@ -483,11 +487,12 @@ int XR20M1170_read(UART_Handle handle, void *buffer, size_t size) {
return bytesRead;
}
int XR20M1170_write(UART_Handle handle, const void *buffer, size_t size) {
int XR20M1170_write(UART_Handle handle, const void *buffer, size_t size)
{
XR20M1170_Object *object = handle->object;
int bytes_written = 0;
while(size) {
while (size) {
if (!Semaphore_pend(object->writeSem, object->writeTimeout)) {
return bytes_written;
}
@@ -501,20 +506,24 @@ int XR20M1170_write(UART_Handle handle, const void *buffer, size_t size) {
return bytes_written;
}
int XR20M1170_readPolling(UART_Handle handle, void *buffer, size_t size) {
int XR20M1170_readPolling(UART_Handle handle, void *buffer, size_t size)
{
DEBUG("XR20M1170::readPolling not yet implemented");
return 0;
}
void XR20M1170_readCancel(UART_Handle handle) {
void XR20M1170_readCancel(UART_Handle handle)
{
DEBUG("XR20M1170::readCancel not yet implemented");
}
int XR20M1170_writePolling(UART_Handle handle, const void *buffer, size_t size) {
int XR20M1170_writePolling(UART_Handle handle, const void *buffer, size_t size)
{
DEBUG("XR20M1170::writePolling not yet implemented");
return 0;
}
void XR20M1170_writeCancel(UART_Handle handle) {
void XR20M1170_writeCancel(UART_Handle handle)
{
DEBUG("XR20M1170::writeCancel not yet implemented");
}

View File

@@ -24,8 +24,8 @@
#include <stdbool.h>
typedef enum XR20M1170_FlowControl {
XR20M1170_FLOWCONTROL_TX = 0x01, // Enable auto CTS
XR20M1170_FLOWCONTROL_RX = 0x02, // Enable auto RTS
XR20M1170_FLOWCONTROL_TX = 0x01, // Enable auto CTS
XR20M1170_FLOWCONTROL_RX = 0x02, // Enable auto RTS
XR20M1170_FLOWCONTROL_NONE = 0x00,
} XR20M1170_FlowControl;
@@ -41,14 +41,14 @@ typedef struct XR20M1170_HWAttrs {
OcGpio_Pin *pin_irq; /*!< XR20M IRQ# pin */
/*! UART Peripheral's interrupt priority */
// TODO: might be able to do something with this
unsigned int intPriority;
unsigned int intPriority;
/*! Hardware flow control setting defined by driverlib */
XR20M1170_FlowControl flowControl;
/*! Pointer to a application ring buffer */
unsigned char *ringBufPtr;
unsigned char *ringBufPtr;
/*! Size of ringBufPtr */
size_t ringBufSize;
size_t ringBufSize;
} XR20M1170_HWAttrs;
/*!
@@ -59,63 +59,63 @@ typedef struct XR20M1170_HWAttrs {
typedef struct XR20M1170_Object {
/* UART state variable */
struct {
bool opened:1; /* Has the obj been opened */
UART_Mode readMode:1; /* Mode for all read calls */
UART_Mode writeMode:1; /* Mode for all write calls */
UART_DataMode readDataMode:1; /* Type of data being read */
UART_DataMode writeDataMode:1; /* Type of data being written */
UART_ReturnMode readReturnMode:1; /* Receive return mode */
UART_Echo readEcho:1; /* Echo received data back */
bool opened : 1; /* Has the obj been opened */
UART_Mode readMode : 1; /* Mode for all read calls */
UART_Mode writeMode : 1; /* Mode for all write calls */
UART_DataMode readDataMode : 1; /* Type of data being read */
UART_DataMode writeDataMode : 1; /* Type of data being written */
UART_ReturnMode readReturnMode : 1; /* Receive return mode */
UART_Echo readEcho : 1; /* Echo received data back */
/*
* Flag to determine if a timeout has occurred when the user called
* UART_read(). This flag is set by the timeoutClk clock object.
*/
bool bufTimeout:1;
bool bufTimeout : 1;
/*
* Flag to determine when an ISR needs to perform a callback; in both
* UART_MODE_BLOCKING or UART_MODE_CALLBACK
*/
bool callCallback:1;
bool callCallback : 1;
/*
* Flag to determine if the ISR is in control draining the ring buffer
* when in UART_MODE_CALLBACK
*/
bool drainByISR:1;
bool drainByISR : 1;
/* Flag to keep the state of the read ring buffer */
bool rxEnabled:1;
bool rxEnabled : 1;
} state;
I2C_Handle i2cHandle;
// TODO: these are from UART_Tiva - need to revise the struct members
// Clock_Struct timeoutClk; /* Clock object to for timeouts */
// uint32_t baudRate; /* Baud rate for UART */
// UART_LEN dataLength; /* Data length for UART */
// UART_STOP stopBits; /* Stop bits for UART */
// UART_PAR parityType; /* Parity bit type for UART */
//
// /* UART read variables */
RingBuf_Object ringBuffer; /* local circular buffer object */
GateMutex_Handle ringBufMutex; // Mutex for accessing ring buffer
// /* A complement pair of read functions for both the ISR and UART_read() */
// UARTTiva_FxnSet readFxns;
// unsigned char *readBuf; /* Buffer data pointer */
// size_t readSize; /* Desired number of bytes to read */
// size_t readCount; /* Number of bytes left to read */
// TODO: these are from UART_Tiva - need to revise the struct members
// Clock_Struct timeoutClk; /* Clock object to for timeouts */
// uint32_t baudRate; /* Baud rate for UART */
// UART_LEN dataLength; /* Data length for UART */
// UART_STOP stopBits; /* Stop bits for UART */
// UART_PAR parityType; /* Parity bit type for UART */
//
// /* UART read variables */
RingBuf_Object ringBuffer; /* local circular buffer object */
GateMutex_Handle ringBufMutex; // Mutex for accessing ring buffer
// /* A complement pair of read functions for both the ISR and UART_read() */
// UARTTiva_FxnSet readFxns;
// unsigned char *readBuf; /* Buffer data pointer */
// size_t readSize; /* Desired number of bytes to read */
// size_t readCount; /* Number of bytes left to read */
Semaphore_Handle readSem; /* UART read semaphore */
unsigned int readTimeout; /* Timeout for read semaphore */
// UART_Callback readCallback; /* Pointer to read callback */
//
// /* UART write variables */
// const unsigned char *writeBuf; /* Buffer data pointer */
// size_t writeSize; /* Desired number of bytes to write*/
// size_t writeCount; /* Number of bytes left to write */
Semaphore_Handle writeSem; /* UART write semaphore*/
unsigned int writeTimeout; /* Timeout for write semaphore */
// UART_Callback writeCallback; /* Pointer to write callback */
//
// ti_sysbios_family_arm_m3_Hwi_Struct hwi; /* Hwi object */
Semaphore_Handle readSem; /* UART read semaphore */
unsigned int readTimeout; /* Timeout for read semaphore */
// UART_Callback readCallback; /* Pointer to read callback */
//
// /* UART write variables */
// const unsigned char *writeBuf; /* Buffer data pointer */
// size_t writeSize; /* Desired number of bytes to write*/
// size_t writeCount; /* Number of bytes left to write */
Semaphore_Handle writeSem; /* UART write semaphore*/
unsigned int writeTimeout; /* Timeout for write semaphore */
// UART_Callback writeCallback; /* Pointer to write callback */
//
// ti_sysbios_family_arm_m3_Hwi_Struct hwi; /* Hwi object */
} XR20M1170_Object, *XR20M1170_Handle;
#endif

View File

@@ -45,17 +45,17 @@ typedef enum XrRegister {
XR_REG_TCR = 0x06, /* EFR[4] == 1 && MCR[2] == 1 */
XR_REG_TLR = 0x07, /* EFR[4] == 1 && MCR[2] == 1 */
XR_REG_TXLVL = 0x08, // LCR[7] = 0
XR_REG_RXLVL = 0x09, // LCR[7] = 0
XR_REG_IODIR = 0x0A, // LCR[7] = 0
XR_REG_IOSTATE = 0x0B, // LCR[7] = 0
XR_REG_TXLVL = 0x08, // LCR[7] = 0
XR_REG_RXLVL = 0x09, // LCR[7] = 0
XR_REG_IODIR = 0x0A, // LCR[7] = 0
XR_REG_IOSTATE = 0x0B, // LCR[7] = 0
XR_REG_IOINTENA = 0x0C, // LCR[7] = 0
XR_REG_IOCTRL = 0x0E, // LCR[7] = 0
XR_REG_EFCR = 0x0F, // LCR[7] = 0
XR_REG_IOCTRL = 0x0E, // LCR[7] = 0
XR_REG_EFCR = 0x0F, // LCR[7] = 0
XR_REG_EFR = 0x02, // LCR = 0xBF
XR_REG_XON1 = 0x04, // LCR = 0xBF
XR_REG_XON2 = 0x05, // LCR = 0xBF
XR_REG_EFR = 0x02, // LCR = 0xBF
XR_REG_XON1 = 0x04, // LCR = 0xBF
XR_REG_XON2 = 0x05, // LCR = 0xBF
XR_REG_XOFF1 = 0x06, // LCR = 0xBF
XR_REG_XOFF2 = 0x07, // LCR = 0xBF
} XrRegister;
@@ -78,10 +78,10 @@ typedef enum XrChannel {
typedef struct PACKED XrSubAddress {
union PACKED {
struct PACKED {
uint8_t reserve1:1;
XrChannel channel:2;
uint8_t reg:4;
uint8_t reserve2:1;
uint8_t reserve1 : 1;
XrChannel channel : 2;
uint8_t reg : 4;
uint8_t reserve2 : 1;
};
uint8_t byte;
};
@@ -91,47 +91,47 @@ typedef uint8_t XrRegTxlvl;
typedef uint8_t XrRegRxlvl;
typedef enum XrWordLen {
XR_WORD_LEN_5 = 0x0, //!< Data length is 5 bits
XR_WORD_LEN_6 = 0x1, //!< Data length is 6 bits
XR_WORD_LEN_7 = 0x2, //!< Data length is 7 bits
XR_WORD_LEN_8 = 0x3, //!< Data length is 8 bits
XR_WORD_LEN_5 = 0x0, //!< Data length is 5 bits
XR_WORD_LEN_6 = 0x1, //!< Data length is 6 bits
XR_WORD_LEN_7 = 0x2, //!< Data length is 7 bits
XR_WORD_LEN_8 = 0x3, //!< Data length is 8 bits
} XrWordLen;
typedef enum XrStopBit {
XR_STOP_BIT_ONE = 0x0, //!< One stop bit
XR_STOP_BIT_TWO = 0x1, //!< Two stop bits
XR_STOP_BIT_ONE = 0x0, //!< One stop bit
XR_STOP_BIT_TWO = 0x1, //!< Two stop bits
} XrStopBit;
typedef enum XrParity {
XR_PARITY_NONE = 0x0, //!< No parity
XR_PARITY_ODD = 0x1, //!< Parity bit is odd
XR_PARITY_EVEN = 0x3, //!< Parity bit is even
XR_PARITY_ONE = 0x5, //!< Parity bit is always one
XR_PARITY_ZERO = 0x7, //!< Parity bit is always zero
XR_PARITY_NONE = 0x0, //!< No parity
XR_PARITY_ODD = 0x1, //!< Parity bit is odd
XR_PARITY_EVEN = 0x3, //!< Parity bit is even
XR_PARITY_ONE = 0x5, //!< Parity bit is always one
XR_PARITY_ZERO = 0x7, //!< Parity bit is always zero
} XrParity;
// TODO: a lot of these should be enums
typedef struct PACKED XrRegLcr {
XrWordLen wordLen:2; // Word length to be transmitted or received
XrStopBit stopBits:1; // Length of stop bit
XrParity parity:3; // Parity format
bool txBreak:1; // Causes a break condition to be transmitted
bool divisorEn:1; // Baud rate generator divisor (DLL, DLM and DLD)
XrWordLen wordLen : 2; // Word length to be transmitted or received
XrStopBit stopBits : 1; // Length of stop bit
XrParity parity : 3; // Parity format
bool txBreak : 1; // Causes a break condition to be transmitted
bool divisorEn : 1; // Baud rate generator divisor (DLL, DLM and DLD)
} XrRegLcr;
typedef struct PACKED XrRegDld {
uint8_t fracDivisor:4;
bool mode8x:1;
bool mode4x:1;
uint8_t reserved:2;
uint8_t fracDivisor : 4;
bool mode8x : 1;
bool mode4x : 1;
uint8_t reserved : 2;
} XrRegDld;
typedef struct PACKED XrRegEfr {
uint8_t swFlowCtl:4;
bool enhancedFunc:1;
bool specialCharDetect:1;
bool autoRts:1;
bool autoCts:1;
uint8_t swFlowCtl : 4;
bool enhancedFunc : 1;
bool specialCharDetect : 1;
bool autoRts : 1;
bool autoCts : 1;
} XrRegEfr;
typedef uint8_t XrRegDlm;
@@ -143,69 +143,69 @@ typedef enum XrClkPrescaler {
} XrClkPrescaler;
typedef struct PACKED XrRegMcr {
bool dtr:1;
bool rts:1;
bool op1:1;
bool op2:1;
bool loopbackEn:1;
bool xonAnyEn:1;
bool irModeEn:1;
XrClkPrescaler clkPrescaler:1;
bool dtr : 1;
bool rts : 1;
bool op1 : 1;
bool op2 : 1;
bool loopbackEn : 1;
bool xonAnyEn : 1;
bool irModeEn : 1;
XrClkPrescaler clkPrescaler : 1;
} XrRegMcr;
typedef enum RxTriggerLevel {
RX_TRIGGER_LEVEL_8 = 0x00,
RX_TRIGGER_LEVEL_8 = 0x00,
RX_TRIGGER_LEVEL_16 = 0x01,
RX_TRIGGER_LEVEL_56 = 0x02,
RX_TRIGGER_LEVEL_60 = 0x03,
} RxTriggerLevel;
typedef enum TxTriggerLevel {
TX_TRIGGER_LEVEL_8 = 0x00,
TX_TRIGGER_LEVEL_8 = 0x00,
TX_TRIGGER_LEVEL_16 = 0x01,
TX_TRIGGER_LEVEL_32 = 0x02,
TX_TRIGGER_LEVEL_56 = 0x03,
} TxTriggerLevel;
typedef struct PACKED XrRegFcr {
bool fifoEn:1;
bool rxRst:1;
bool txRst:1;
bool reserved:1;
TxTriggerLevel txTrigger:2; /*!< Overwridden if TLR value set */
RxTriggerLevel rxTrigger:2; /*!< Overwridden if TLR value set */
bool fifoEn : 1;
bool rxRst : 1;
bool txRst : 1;
bool reserved : 1;
TxTriggerLevel txTrigger : 2; /*!< Overwridden if TLR value set */
RxTriggerLevel rxTrigger : 2; /*!< Overwridden if TLR value set */
} XrRegFcr;
/* Transmission Control Register (TCR) */
typedef struct PACKED XrRegTcr {
uint8_t rxHaltLvl:4; /*!< x4, 0-60 - RTS goes high after this level */
uint8_t rxResumeLvl:4; /*!< x4, 0-60 - RTS returns low below this level */
uint8_t rxHaltLvl : 4; /*!< x4, 0-60 - RTS goes high after this level */
uint8_t rxResumeLvl : 4; /*!< x4, 0-60 - RTS returns low below this level */
} XrRegTcr;
/* Trigger Level Register (TLR) */
typedef struct PACKED XrRegTlr {
uint8_t txTrigger:4; /*!< x4, 4-60, If 0 (default), FCR value used */
uint8_t rxTrigger:4; /*!< x4, 4-60, If 0 (default), FCR value used */
uint8_t txTrigger : 4; /*!< x4, 4-60, If 0 (default), FCR value used */
uint8_t rxTrigger : 4; /*!< x4, 4-60, If 0 (default), FCR value used */
} XrRegTlr;
typedef struct PACKED XrRegIOCtrl {
bool ioLatch:1;
bool modemIf:1;
uint8_t res1:1;
bool uartReset:1;
uint8_t res2:4;
bool ioLatch : 1;
bool modemIf : 1;
uint8_t res1 : 1;
bool uartReset : 1;
uint8_t res2 : 4;
} XrRegIOCtrl;
// LCR[7] = 0
typedef struct PACKED XrRegIer {
bool rhrIntEn:1;
bool thrIntEn:1;
bool lsrIntEn:1;
bool msrIntEn:1;
bool sleepModeEn:1; //!< EFR[4] = 1 to modify
bool xoffIntEn:1; //!< EFR[4] = 1 to modify
bool rtsIntEn:1; //!< EFR[4] = 1 to modify
bool ctsIntEn:1; //!< EFR[4] = 1 to modify
bool rhrIntEn : 1;
bool thrIntEn : 1;
bool lsrIntEn : 1;
bool msrIntEn : 1;
bool sleepModeEn : 1; //!< EFR[4] = 1 to modify
bool xoffIntEn : 1; //!< EFR[4] = 1 to modify
bool rtsIntEn : 1; //!< EFR[4] = 1 to modify
bool ctsIntEn : 1; //!< EFR[4] = 1 to modify
} XrRegIer;
// Note: in order of priority
@@ -223,31 +223,31 @@ typedef enum ISR_SRC {
} ISR_SRC;
typedef struct PACKED XrRegIsr {
ISR_SRC source:6;
uint8_t fifo_en:2; // TODO: not sure why there's 2...datasheet doesn't elaborate - possibly TX vs RX, but it doesn't say
ISR_SRC source : 6;
uint8_t fifo_en : 2; // TODO: not sure why there's 2...datasheet doesn't elaborate - possibly TX vs RX, but it doesn't say
} XrRegIsr;
// General struct for configuring gpio pins
typedef struct PACKED XrGpioPins {
union {
struct PACKED {
bool p0:1;
bool p2:1;
bool p3:1;
bool p0 : 1;
bool p2 : 1;
bool p3 : 1;
bool p4:1;
bool p5:1;
bool p6:1;
bool p7:1;
bool p4 : 1;
bool p5 : 1;
bool p6 : 1;
bool p7 : 1;
} gpio;
struct PACKED {
char res:4;
char res : 4;
bool dsr:1;
bool dtr:1;
bool cd:1;
bool ri:1;
bool dsr : 1;
bool dtr : 1;
bool cd : 1;
bool ri : 1;
} modem;
};
} XrGpioPins;

View File

@@ -16,8 +16,8 @@
#include <ti/sysbios/knl/Task.h>
// Threaded interrupt info
#define TI_TASKSTACKSIZE 1024
#define TI_TASKPRIORITY 6
#define TI_TASKSTACKSIZE 1024
#define TI_TASKPRIORITY 6
// This number is fairly superficial - just used to keep track of the
// various tasks, it can be increased without much overhead
@@ -25,14 +25,15 @@
// Config simply to map context to our GPIO interrupts
typedef struct InterruptConfig {
Semaphore_Handle sem; //!< Semaphore to wake up INT thread
ThreadedInt_Callback cb; //!< Callback to run when interrupt occurs
void *context; //!< Pointer to pass to cb function
Semaphore_Handle sem; //!< Semaphore to wake up INT thread
ThreadedInt_Callback cb; //!< Callback to run when interrupt occurs
void *context; //!< Pointer to pass to cb function
} InterruptConfig;
static InterruptConfig s_intConfigs[MAX_DEVICES] = {};
static int s_numDevices = 0;
static void gpioIntFxn(const OcGpio_Pin *pin, void *context) {
static void gpioIntFxn(const OcGpio_Pin *pin, void *context)
{
Semaphore_Handle sem = context;
// TODO: this should probably be an assert
@@ -44,7 +45,8 @@ static void gpioIntFxn(const OcGpio_Pin *pin, void *context) {
Semaphore_post(sem);
}
static void ThreadedInt_Task(UArg arg0, UArg arg1) {
static void ThreadedInt_Task(UArg arg0, UArg arg1)
{
InterruptConfig *cfg = (InterruptConfig *)arg0;
if (!cfg) {
DEBUG("Threaded Int started without configuration???\n");
@@ -60,7 +62,8 @@ static void ThreadedInt_Task(UArg arg0, UArg arg1) {
// TODO: this function isn't thread safe at the moment
void ThreadedInt_Init(OcGpio_Pin *irqPin, ThreadedInt_Callback cb,
void *context) {
void *context)
{
// Build up table of all devices for interrupt handling. This is an ok
// workaround for TI RTOS GPIO interrupts for now (only using one device)
if (s_numDevices >= MAX_DEVICES) {
@@ -75,7 +78,7 @@ void ThreadedInt_Init(OcGpio_Pin *irqPin, ThreadedInt_Callback cb,
return;
}
s_intConfigs[devNum] = (InterruptConfig) {
s_intConfigs[devNum] = (InterruptConfig){
.sem = sem,
.cb = cb,
.context = context,
@@ -103,4 +106,3 @@ void ThreadedInt_Init(OcGpio_Pin *irqPin, ThreadedInt_Callback cb,
OcGpio_setCallback(irqPin, gpioIntFxn, sem);
OcGpio_enableInt(irqPin);
}

View File

@@ -67,7 +67,7 @@ I2C_Handle i2c_open_bus(unsigned int index)
** RETURN TYPE : None
**
*****************************************************************************/
void i2c_close_bus(I2C_Handle* i2cHandle)
void i2c_close_bus(I2C_Handle *i2cHandle)
{
I2C_close(*i2cHandle);
i2cHandle = NULL;
@@ -83,17 +83,15 @@ void i2c_close_bus(I2C_Handle* i2cHandle)
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus i2c_reg_write( I2C_Handle i2cHandle,
uint8_t deviceAddress,
uint8_t regAddress,
uint16_t value,
uint8_t numofBytes)
ReturnStatus i2c_reg_write(I2C_Handle i2cHandle, uint8_t deviceAddress,
uint8_t regAddress, uint16_t value,
uint8_t numofBytes)
{
ReturnStatus status = RETURN_OK;
uint8_t txBuffer[3];
I2C_Transaction i2cTransaction;
txBuffer[0] = regAddress;
memcpy(&txBuffer[1],&value,numofBytes);
memcpy(&txBuffer[1], &value, numofBytes);
i2cTransaction.slaveAddress = deviceAddress;
i2cTransaction.writeBuf = txBuffer;
i2cTransaction.writeCount = numofBytes + 1;
@@ -104,8 +102,9 @@ ReturnStatus i2c_reg_write( I2C_Handle i2cHandle,
// deviceAddress, regAddress, value);
status = RETURN_OK;
} else {
LOGGER_ERROR("I2CBUS:ERROR:: I2C write failed for for device: 0x%x reg Addr: 0x%x value: 0x%x.\n",
deviceAddress, regAddress, value);
LOGGER_ERROR(
"I2CBUS:ERROR:: I2C write failed for for device: 0x%x reg Addr: 0x%x value: 0x%x.\n",
deviceAddress, regAddress, value);
status = RETURN_NOTOK;
}
return status;
@@ -121,11 +120,9 @@ ReturnStatus i2c_reg_write( I2C_Handle i2cHandle,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus i2c_reg_read( I2C_Handle i2cHandle,
uint8_t deviceAddress,
uint8_t regAddress,
uint16_t *value,
uint8_t numofBytes)
ReturnStatus i2c_reg_read(I2C_Handle i2cHandle, uint8_t deviceAddress,
uint8_t regAddress, uint16_t *value,
uint8_t numofBytes)
{
ReturnStatus status = RETURN_OK;
uint8_t txBuffer[1] = { 0 };
@@ -138,13 +135,14 @@ ReturnStatus i2c_reg_read( I2C_Handle i2cHandle,
i2cTransaction.readBuf = rxBuffer;
i2cTransaction.readCount = numofBytes;
if (I2C_transfer(i2cHandle, &i2cTransaction)) {
memcpy(value,rxBuffer,numofBytes);
memcpy(value, rxBuffer, numofBytes);
//LOGGER_DEBUG("I2CBUS:INFO:: I2C read success for device: 0x%x reg Addr: 0x%x value : 0x%x.\n",
// deviceAddress, regAddress, *value);
status = RETURN_OK;
} else {
LOGGER_ERROR("I2CBUS:ERROR:: I2C read failed for for device: 0x%x reg Addr: 0x%x.\n",
deviceAddress, regAddress);
LOGGER_ERROR(
"I2CBUS:ERROR:: I2C read failed for for device: 0x%x reg Addr: 0x%x.\n",
deviceAddress, regAddress);
status = RETURN_NOTOK;
}
return status;

View File

@@ -20,21 +20,21 @@
/*****************************************************************************
* REGISTER DEFINITIONS
*****************************************************************************/
#define INA_CONFIGURATION_REG 0x00
#define INA_SHUNTVOLTAGE_REG 0x01
#define INA_BUSVOLTAGE_REG 0x02
#define INA_POWER_REG 0x03
#define INA_CURRENT_REG 0x04
#define INA_CALIBRATION_REG 0x05
#define INA_MASKENABLE_REG 0x06
#define INA_ALERTLIMIT_REG 0x07
#define INA_MANUFACTUREID_REG 0xFE
#define INA_DIEID_REG 0xFF
#define INA_CONFIGURATION_REG 0x00
#define INA_SHUNTVOLTAGE_REG 0x01
#define INA_BUSVOLTAGE_REG 0x02
#define INA_POWER_REG 0x03
#define INA_CURRENT_REG 0x04
#define INA_CALIBRATION_REG 0x05
#define INA_MASKENABLE_REG 0x06
#define INA_ALERTLIMIT_REG 0x07
#define INA_MANUFACTUREID_REG 0xFE
#define INA_DIEID_REG 0xFF
/*INA226 Device Info */
#define INA226_MANFACTURE_ID 0x5449
#define INA226_DEVICE_ID 0x2260
#define INA226_DEV_VERSION 0x00
#define INA226_MANFACTURE_ID 0x5449
#define INA226_DEVICE_ID 0x2260
#define INA226_DEV_VERSION 0x00
/* Configuration Register Bits */
#define INA_CFG_RESET (1 << 15)
@@ -47,23 +47,25 @@
* Calculate Shunt Voltage Alert Limit Register Value
* ui16rfINARegValue = (ui16rfINARegValue * 2048)/INA226_CALIBRATION_REG_VALUE;
*/
#define CURRENT_TO_REG(x) ((2048 *(x/INA226_CURRENT_LSB)/INA226_CAL_REG_VALUE))
#define REG_TO_CURRENT(y) ((y * INA226_CURRENT_LSB * INA226_CAL_REG_VALUE)/2048)
#define CURRENT_TO_REG(x) \
((2048 * (x / INA226_CURRENT_LSB) / INA226_CAL_REG_VALUE))
#define REG_TO_CURRENT(y) \
((y * INA226_CURRENT_LSB * INA226_CAL_REG_VALUE) / 2048)
/*****************************************************************************
* CONSTANTS DEFINITIONS
*****************************************************************************/
/* INA226 LSB Values */
#define INA226_VSHUNT_LSB 2.5 /* 2.5uV or 2500nV (uV default) */
#define INA226_VBUS_LSB 1.25 /* 1.25mV or 1250uV (mV default) */
#define INA226_CURRENT_LSB 0.1 /* 0.100mA 0r 100uA (mA default) */
#define INA226_POWER_LSB 2.5 /* 2.5mW or 2500uW (mW default) */
#define INA226_VSHUNT_LSB 2.5 /* 2.5uV or 2500nV (uV default) */
#define INA226_VBUS_LSB 1.25 /* 1.25mV or 1250uV (mV default) */
#define INA226_CURRENT_LSB 0.1 /* 0.100mA 0r 100uA (mA default) */
#define INA226_POWER_LSB 2.5 /* 2.5mW or 2500uW (mW default) */
/* Configure the Configuration register with Number of Samples and Conversion
* Time for Shunt and Bus Voltage.
* Min(Default):0x4127; Max: 0x4FFF; Average: 0x476F
*/
#define INA226_CONFIG_REG_VALUE 0x476F
#define INA226_CONFIG_REG_VALUE 0x476F
/* Configure Calibration register with shunt resistor value and current LSB.
Current_LSB = Maximum Expected Current/2^15
@@ -71,9 +73,9 @@
Calibration Register(CAL) = 0.00512/(Current_LSB*RSHUNT)
CAL = 0.00512/(100uA*2mOhm) = = 25600 = 0x6400.(RSHUNT = 2mohm)
*/
#define INA226_CAL_REG_VALUE 0x6400
#define INA226_CAL_REG_VALUE 0x6400
#define INA226_MASKEN_REG_VALUE 0x8001
#define INA226_MASKEN_REG_VALUE 0x8001
/*****************************************************************************
** FUNCTION NAME : read_ina_reg
@@ -86,16 +88,15 @@
** RETURN TYPE : Success or failure
**
*****************************************************************************/
static ReturnStatus read_ina_reg(const INA226_Dev *dev,
uint8_t regAddress,
static ReturnStatus read_ina_reg(const INA226_Dev *dev, uint8_t regAddress,
uint16_t *regValue)
{
ReturnStatus status = RETURN_NOTOK;
I2C_Handle inaHandle = i2c_get_handle(dev->cfg.dev.bus);
if (!inaHandle) {
LOGGER_ERROR("INASENSOR:ERROR:: Failed to get I2C Bus for INA sensor "
"0x%x on bus 0x%x.\n", dev->cfg.dev.slave_addr,
dev->cfg.dev.bus);
"0x%x on bus 0x%x.\n",
dev->cfg.dev.slave_addr, dev->cfg.dev.bus);
} else {
status = i2c_reg_read(inaHandle, dev->cfg.dev.slave_addr, regAddress,
regValue, 2);
@@ -115,16 +116,15 @@ static ReturnStatus read_ina_reg(const INA226_Dev *dev,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
static ReturnStatus write_ina_reg(const INA226_Dev *dev,
uint8_t regAddress,
static ReturnStatus write_ina_reg(const INA226_Dev *dev, uint8_t regAddress,
uint16_t regValue)
{
ReturnStatus status = RETURN_NOTOK;
I2C_Handle inaHandle = i2c_get_handle(dev->cfg.dev.bus);
if (!inaHandle) {
LOGGER_ERROR("INASENSOR:ERROR:: Failed to get I2C Bus for INA sensor "
"0x%x on bus 0x%x.\n", dev->cfg.dev.slave_addr,
dev->cfg.dev.bus);
"0x%x on bus 0x%x.\n",
dev->cfg.dev.slave_addr, dev->cfg.dev.bus);
} else {
regValue = htobe16(regValue);
status = i2c_reg_write(inaHandle, dev->cfg.dev.slave_addr, regAddress,
@@ -204,7 +204,7 @@ static ReturnStatus _set_cal_reg(INA226_Dev *dev, uint16_t regValue)
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus ina226_readCurrentLim(INA226_Dev *dev, uint16_t* currLimit)
ReturnStatus ina226_readCurrentLim(INA226_Dev *dev, uint16_t *currLimit)
{
uint16_t regValue = 0x0000;
ReturnStatus status = read_ina_reg(dev, INA_ALERTLIMIT_REG, &regValue);
@@ -243,7 +243,7 @@ ReturnStatus ina226_setCurrentLim(INA226_Dev *dev, uint16_t currLimit)
** RETURN TYPE : Success or failure
**
*****************************************************************************/
static ReturnStatus _read_alert_reg(INA226_Dev *dev, uint16_t* regValue)
static ReturnStatus _read_alert_reg(INA226_Dev *dev, uint16_t *regValue)
{
return read_ina_reg(dev, INA_MASKENABLE_REG, regValue);
}
@@ -273,8 +273,7 @@ static ReturnStatus _enable_alert(INA226_Dev *dev, uint16_t regValue)
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus ina226_readBusVoltage(INA226_Dev *dev,
uint16_t* busVoltValue)
ReturnStatus ina226_readBusVoltage(INA226_Dev *dev, uint16_t *busVoltValue)
{
uint16_t regValue;
ReturnStatus status = read_ina_reg(dev, INA_BUSVOLTAGE_REG, &regValue);
@@ -298,8 +297,7 @@ ReturnStatus ina226_readBusVoltage(INA226_Dev *dev,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus ina226_readShuntVoltage(INA226_Dev *dev,
uint16_t* shuntVoltValue)
ReturnStatus ina226_readShuntVoltage(INA226_Dev *dev, uint16_t *shuntVoltValue)
{
uint16_t regValue;
ReturnStatus status = read_ina_reg(dev, INA_SHUNTVOLTAGE_REG, &regValue);
@@ -308,7 +306,8 @@ ReturnStatus ina226_readShuntVoltage(INA226_Dev *dev,
*shuntVoltValue = regValue * INA226_VSHUNT_LSB;
LOGGER_DEBUG("INASENSOR:INFO:: INA sensor 0x%x on bus 0x%x is "
"reporting shunt voltage value of %d uV.\n",
dev->cfg.dev.slave_addr, dev->cfg.dev.bus, *shuntVoltValue);
dev->cfg.dev.slave_addr, dev->cfg.dev.bus,
*shuntVoltValue);
}
return status;
}
@@ -323,7 +322,7 @@ ReturnStatus ina226_readShuntVoltage(INA226_Dev *dev,
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus ina226_readCurrent(INA226_Dev *dev, uint16_t* currValue)
ReturnStatus ina226_readCurrent(INA226_Dev *dev, uint16_t *currValue)
{
uint16_t regValue;
ReturnStatus status = read_ina_reg(dev, INA_CURRENT_REG, &regValue);
@@ -347,7 +346,7 @@ ReturnStatus ina226_readCurrent(INA226_Dev *dev, uint16_t* currValue)
** RETURN TYPE : Success or failure
**
*****************************************************************************/
ReturnStatus ina226_readPower(INA226_Dev *dev, uint16_t* powValue)
ReturnStatus ina226_readPower(INA226_Dev *dev, uint16_t *powValue)
{
uint16_t regValue;
ReturnStatus status = read_ina_reg(dev, INA_POWER_REG, &regValue);
@@ -363,7 +362,8 @@ ReturnStatus ina226_readPower(INA226_Dev *dev, uint16_t* powValue)
/*****************************************************************************
* Internal IRQ handler - reads in triggered interrupts and dispatches CBs
*****************************************************************************/
static void _ina226_isr(void *context) {
static void _ina226_isr(void *context)
{
INA226_Dev *dev = context;
/* Read the alert mask register (will clear the alert bit if set) */
@@ -404,7 +404,7 @@ static void _ina226_isr(void *context) {
if (alert_mask & INA_MSK_SOL) {
if (dev->obj.evt_to_monitor == INA226_EVT_COL ||
dev->obj.evt_to_monitor == INA226_EVT_CUL) {
dev->obj.evt_to_monitor == INA226_EVT_CUL) {
if (ina226_readCurrent(dev, &value) != RETURN_OK) {
value = UINT16_MAX;
}
@@ -419,7 +419,7 @@ static void _ina226_isr(void *context) {
new_mask |= INA_MSK_SUL;
} else if (alert_mask & INA_MSK_SUL) {
if (dev->obj.evt_to_monitor == INA226_EVT_CUL ||
dev->obj.evt_to_monitor == INA226_EVT_COL) {
dev->obj.evt_to_monitor == INA226_EVT_COL) {
if (ina226_readCurrent(dev, &value) != RETURN_OK) {
value = UINT16_MAX;
}
@@ -502,13 +502,14 @@ ReturnStatus ina226_init(INA226_Dev *dev)
}
/* Make sure we're talking to the right device */
// if (ina226_probe(dev) != POST_DEV_FOUND) {
// return RETURN_NOTOK;
// }
// if (ina226_probe(dev) != POST_DEV_FOUND) {
// return RETURN_NOTOK;
// }
if (dev->cfg.pin_alert) {
const uint32_t pin_evt_cfg = OCGPIO_CFG_INPUT | OCGPIO_CFG_INT_FALLING;
if (OcGpio_configure(dev->cfg.pin_alert, pin_evt_cfg) < OCGPIO_SUCCESS) {
if (OcGpio_configure(dev->cfg.pin_alert, pin_evt_cfg) <
OCGPIO_SUCCESS) {
return RETURN_NOTOK;
}
@@ -521,7 +522,8 @@ ReturnStatus ina226_init(INA226_Dev *dev)
/*****************************************************************************
*****************************************************************************/
void ina226_setAlertHandler(INA226_Dev *dev, INA226_CallbackFn alert_cb,
void *cb_context) {
void *cb_context)
{
dev->obj.alert_cb = alert_cb;
dev->obj.cb_context = cb_context;
}
@@ -575,6 +577,7 @@ ePostCode ina226_probe(INA226_Dev *dev, POSTData *postData)
if (manfId != INA226_MANFACTURE_ID) {
return POST_DEV_ID_MISMATCH;
}
post_update_POSTData(postData, dev->cfg.dev.bus, dev->cfg.dev.slave_addr,manfId, devId);
post_update_POSTData(postData, dev->cfg.dev.bus, dev->cfg.dev.slave_addr,
manfId, devId);
return POST_DEV_FOUND;
}

View File

@@ -63,106 +63,118 @@
IO14 & IO15 = 1(Not connected IOs; Reg Data should be 11xxxxxx).
*/
static const hciLedData ledData[HCI_LED_TOTAL_NOS] = {
[HCI_LED_1] = {
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_5, // IO5
.ledRed = ~SX1509_IO_PIN_4, // IO4
.ledOff = SX1509_IO_PIN_5 | SX1509_IO_PIN_4,
},
[HCI_LED_2] = {
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_3, // IO3
.ledRed = ~SX1509_IO_PIN_2, // IO2
.ledOff = SX1509_IO_PIN_3 | SX1509_IO_PIN_2,
},
[HCI_LED_3] = {
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_13, // IO13
.ledRed = ~SX1509_IO_PIN_12, // IO12
.ledOff = SX1509_IO_PIN_13 | SX1509_IO_PIN_12,
},
[HCI_LED_4] = {
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_1, // IO1
.ledRed = ~SX1509_IO_PIN_0, // IO0
.ledOff = SX1509_IO_PIN_1 | SX1509_IO_PIN_0,
},
[HCI_LED_5] = {
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_7, // IO7
.ledRed = ~SX1509_IO_PIN_6, // IO6
.ledOff = SX1509_IO_PIN_7 | SX1509_IO_PIN_6,
},
[HCI_LED_6] = {
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_9, // IO9
.ledRed = ~SX1509_IO_PIN_8, // IO8
.ledOff = SX1509_IO_PIN_9 | SX1509_IO_PIN_8,
},
[HCI_LED_7] = {
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_11, // IO11
.ledRed = ~SX1509_IO_PIN_10, // I010
.ledOff = SX1509_IO_PIN_11 | SX1509_IO_PIN_10,
},
[HCI_LED_8] = {
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_5, // IO5
.ledRed = ~SX1509_IO_PIN_4, // IO4
.ledOff = SX1509_IO_PIN_5 | SX1509_IO_PIN_4,
},
[HCI_LED_9] = {
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_3, // IO3
.ledRed = ~SX1509_IO_PIN_2, // IO2
.ledOff = SX1509_IO_PIN_3 | SX1509_IO_PIN_2,
},
[HCI_LED_10] = {
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_1, // IO1
.ledRed = ~SX1509_IO_PIN_0, // IO0
.ledOff = SX1509_IO_PIN_1 | SX1509_IO_PIN_0,
},
[HCI_LED_11] = {
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_7, // IO7
.ledRed = ~SX1509_IO_PIN_6, // IO6
.ledOff = SX1509_IO_PIN_7 | SX1509_IO_PIN_6,
},
[HCI_LED_12] = {
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_9, // IO9
.ledRed = ~SX1509_IO_PIN_8, // IO8
.ledOff = SX1509_IO_PIN_9 | SX1509_IO_PIN_8,
},
[HCI_LED_13] = {
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_11, // IO11
.ledRed = ~SX1509_IO_PIN_10, // IO10
.ledOff = SX1509_IO_PIN_11 | SX1509_IO_PIN_10,
},
[HCI_LED_14] = {
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_13, // IO13
.ledRed = ~SX1509_IO_PIN_12, // IO12
.ledOff = SX1509_IO_PIN_13 | SX1509_IO_PIN_12,
}
};
static const hciLedData ledData[HCI_LED_TOTAL_NOS] =
{ [HCI_LED_1] =
{
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_5, // IO5
.ledRed = ~SX1509_IO_PIN_4, // IO4
.ledOff = SX1509_IO_PIN_5 | SX1509_IO_PIN_4,
},
[HCI_LED_2] =
{
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_3, // IO3
.ledRed = ~SX1509_IO_PIN_2, // IO2
.ledOff = SX1509_IO_PIN_3 | SX1509_IO_PIN_2,
},
[HCI_LED_3] =
{
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_13, // IO13
.ledRed = ~SX1509_IO_PIN_12, // IO12
.ledOff = SX1509_IO_PIN_13 | SX1509_IO_PIN_12,
},
[HCI_LED_4] =
{
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_1, // IO1
.ledRed = ~SX1509_IO_PIN_0, // IO0
.ledOff = SX1509_IO_PIN_1 | SX1509_IO_PIN_0,
},
[HCI_LED_5] =
{
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_7, // IO7
.ledRed = ~SX1509_IO_PIN_6, // IO6
.ledOff = SX1509_IO_PIN_7 | SX1509_IO_PIN_6,
},
[HCI_LED_6] =
{
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_9, // IO9
.ledRed = ~SX1509_IO_PIN_8, // IO8
.ledOff = SX1509_IO_PIN_9 | SX1509_IO_PIN_8,
},
[HCI_LED_7] =
{
.ioexpDev = HCI_LED_DRIVER_LEFT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_11, // IO11
.ledRed = ~SX1509_IO_PIN_10, // I010
.ledOff = SX1509_IO_PIN_11 | SX1509_IO_PIN_10,
},
[HCI_LED_8] =
{
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_5, // IO5
.ledRed = ~SX1509_IO_PIN_4, // IO4
.ledOff = SX1509_IO_PIN_5 | SX1509_IO_PIN_4,
},
[HCI_LED_9] =
{
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_3, // IO3
.ledRed = ~SX1509_IO_PIN_2, // IO2
.ledOff = SX1509_IO_PIN_3 | SX1509_IO_PIN_2,
},
[HCI_LED_10] =
{
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_1, // IO1
.ledRed = ~SX1509_IO_PIN_0, // IO0
.ledOff = SX1509_IO_PIN_1 | SX1509_IO_PIN_0,
},
[HCI_LED_11] =
{
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_A,
.ledGreen = ~SX1509_IO_PIN_7, // IO7
.ledRed = ~SX1509_IO_PIN_6, // IO6
.ledOff = SX1509_IO_PIN_7 | SX1509_IO_PIN_6,
},
[HCI_LED_12] =
{
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_9, // IO9
.ledRed = ~SX1509_IO_PIN_8, // IO8
.ledOff = SX1509_IO_PIN_9 | SX1509_IO_PIN_8,
},
[HCI_LED_13] =
{
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_11, // IO11
.ledRed = ~SX1509_IO_PIN_10, // IO10
.ledOff = SX1509_IO_PIN_11 | SX1509_IO_PIN_10,
},
[HCI_LED_14] = {
.ioexpDev = HCI_LED_DRIVER_RIGHT,
.ledReg = SX1509_REG_B,
.ledGreen = ~SX1509_IO_PIN_13, // IO13
.ledRed = ~SX1509_IO_PIN_12, // IO12
.ledOff = SX1509_IO_PIN_13 | SX1509_IO_PIN_12,
} };
/*****************************************************************************
** FUNCTION NAME : hci_led_turnon_green
@@ -319,17 +331,15 @@ ReturnStatus hci_led_system_boot(const HciLedCfg *driver)
}
/* Turn on the LEDs one by one from Left to Right of LED Board */
for (index = 0; index < HCI_LED_TOTAL_NOS; index++) {
status = ioexp_led_get_data(
&driver->sx1509_dev[ledData[index].ioexpDev],
ledData[index].ledReg,
&regValue);
status =
ioexp_led_get_data(&driver->sx1509_dev[ledData[index].ioexpDev],
ledData[index].ledReg, &regValue);
regValue &= ledData[index].ledGreen;
status = ioexp_led_set_data(
&driver->sx1509_dev[ledData[index].ioexpDev],
ledData[index].ledReg, regValue,
0);
status =
ioexp_led_set_data(&driver->sx1509_dev[ledData[index].ioexpDev],
ledData[index].ledReg, regValue, 0);
if (status != RETURN_OK) {
break;
}
@@ -424,7 +434,8 @@ ReturnStatus hci_led_radio_failure(const HciLedCfg *driver)
status = hci_led_turnoff_all(driver);
if (status == RETURN_OK) {
/* Turn On Left side Red LEDs */
status = ioexp_led_set_data(HCI_LED_DRIVER_LEFT, SX1509_REG_AB, 0xAA, 0xAA);
status = ioexp_led_set_data(HCI_LED_DRIVER_LEFT, SX1509_REG_AB, 0xAA,
0xAA);
}
return status;
@@ -485,7 +496,7 @@ ReturnStatus led_init(const HciLedCfg *driver)
/* Initilaize Left and Right LED driver SX1509 to turn on LED */
for (index = 0; index < HCI_LED_DRIVER_COUNT; index++) {
DEBUG("HCILED:INFO:: Initilaizing LED driver SX1509 0x%x.\n",\
DEBUG("HCILED:INFO:: Initilaizing LED driver SX1509 0x%x.\n",
driver->sx1509_dev[index].slave_addr);
/* Do software reset for LED driver */
@@ -551,10 +562,11 @@ ReturnStatus led_init(const HciLedCfg *driver)
return status;
}
void led_configure(HciLedCfg* driver) {
void led_configure(HciLedCfg *driver)
{
/* Initialize IO pins */
OcGpio_configure(&driver->pin_ec_gpio, OCGPIO_CFG_OUTPUT |
OCGPIO_CFG_OUT_HIGH);
OcGpio_configure(&driver->pin_ec_gpio,
OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_HIGH);
}
/*****************************************************************************
** FUNCTION NAME : led_probe
@@ -567,7 +579,7 @@ void led_configure(HciLedCfg* driver) {
** RETURN TYPE : Success or Failure
**
*****************************************************************************/
ePostCode led_probe(const HciLedCfg *driver, POSTData* postData)
ePostCode led_probe(const HciLedCfg *driver, POSTData *postData)
{
ReturnStatus status = RETURN_NOTOK;
uint8_t regValue = 0x00;
@@ -585,6 +597,8 @@ ePostCode led_probe(const HciLedCfg *driver, POSTData* postData)
if (status != RETURN_OK) {
return POST_DEV_MISSING;
}
post_update_POSTData(postData, &driver->sx1509_dev[HCI_LED_DRIVER_LEFT].bus, &driver->sx1509_dev[HCI_LED_DRIVER_LEFT].slave_addr,0xFF, 0xFF);
post_update_POSTData(postData, &driver->sx1509_dev[HCI_LED_DRIVER_LEFT].bus,
&driver->sx1509_dev[HCI_LED_DRIVER_LEFT].slave_addr,
0xFF, 0xFF);
return POST_DEV_FOUND;
}

View File

@@ -24,14 +24,14 @@
#define WTF abort()
static ReturnStatus LTC4015_reg_write(const LTC4015_Dev *dev,
uint8_t regAddress,
uint16_t regValue)
uint8_t regAddress, uint16_t regValue)
{
ReturnStatus status = RETURN_NOTOK;
I2C_Handle battHandle = i2c_get_handle(dev->cfg.i2c_dev.bus);
if (!battHandle) {
LOGGER_ERROR("LTC4015:ERROR:: Failed to open I2C bus for battery "
"charge controller 0x%x.\n", dev->cfg.i2c_dev.slave_addr);
"charge controller 0x%x.\n",
dev->cfg.i2c_dev.slave_addr);
} else {
regValue = htole16(regValue);
status = i2c_reg_write(battHandle, dev->cfg.i2c_dev.slave_addr,
@@ -40,15 +40,15 @@ static ReturnStatus LTC4015_reg_write(const LTC4015_Dev *dev,
return status;
}
static ReturnStatus LTC4015_reg_read(const LTC4015_Dev *dev,
uint8_t regAddress,
static ReturnStatus LTC4015_reg_read(const LTC4015_Dev *dev, uint8_t regAddress,
uint16_t *regValue)
{
ReturnStatus status = RETURN_NOTOK;
I2C_Handle battHandle = i2c_get_handle(dev->cfg.i2c_dev.bus);
if (!battHandle) {
LOGGER_ERROR("LTC4015:ERROR:: Failed to open I2C bus for battery "
"charge controller 0x%x.\n", dev->cfg.i2c_dev.slave_addr);
"charge controller 0x%x.\n",
dev->cfg.i2c_dev.slave_addr);
} else {
status = i2c_reg_read(battHandle, dev->cfg.i2c_dev.slave_addr,
regAddress, regValue, 2);
@@ -62,8 +62,8 @@ ReturnStatus LTC4015_cfg_icharge(LTC4015_Dev *dev,
{
/* Maximum charge current target = (ICHARGE_TARGET + 1) * 1mV/RSNSB
=> ICHARGE_TARGET = (target*RSNSB/1mV)-1 */
int icharge_target = round((max_chargeCurrent * dev->cfg.r_snsb) / 1000.0)
- 1;
int icharge_target =
round((max_chargeCurrent * dev->cfg.r_snsb) / 1000.0) - 1;
icharge_target = MAX(0, icharge_target);
return LTC4015_reg_write(dev, LTC4015_ICHARGE_TARGET_SUBADDR,
icharge_target);
@@ -74,15 +74,14 @@ ReturnStatus LTC4015_get_cfg_icharge(LTC4015_Dev *dev,
{
/* Maximum charge current target = (ICHARGE_TARGET + 1) * 1mV/RSNSB */
uint16_t ichargeCurrent = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev,
LTC4015_ICHARGE_TARGET_SUBADDR,
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_ICHARGE_TARGET_SUBADDR,
&ichargeCurrent);
*max_chargeCurrent = (ichargeCurrent + 1) * 1000 / dev->cfg.r_snsb;
return status;
}
ReturnStatus LTC4015_cfg_vcharge(LTC4015_Dev *dev,
uint16_t charge_voltageLevel) // millivolts
uint16_t charge_voltageLevel) // millivolts
{
/* See datasheet, page 61:VCHARGE_SETTING */
const double target_v = charge_voltageLevel / (1000.0 * dev->cfg.cellcount);
@@ -106,29 +105,26 @@ ReturnStatus LTC4015_cfg_vcharge(LTC4015_Dev *dev,
vchargeSetting);
}
ReturnStatus LTC4015_get_cfg_vcharge(LTC4015_Dev *dev,
uint16_t *charge_voltageLevel) // millivolts
ReturnStatus
LTC4015_get_cfg_vcharge(LTC4015_Dev *dev,
uint16_t *charge_voltageLevel) // millivolts
{
/* See datasheet, page 61:VCHARGE_SETTING */
uint16_t vchargeSetting = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev,
LTC4015_VCHARGE_SETTING_SUBADDR,
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_VCHARGE_SETTING_SUBADDR,
&vchargeSetting);
switch (dev->cfg.chem) {
case LTC4015_CHEM_LEAD_ACID:
*charge_voltageLevel =
round(((vchargeSetting / 105.0) + 2.0) *
dev->cfg.cellcount * 1000.0);
*charge_voltageLevel = round(((vchargeSetting / 105.0) + 2.0) *
dev->cfg.cellcount * 1000.0);
break;
case LTC4015_CHEM_LI_FE_PO4:
*charge_voltageLevel =
round(((vchargeSetting / 80.0) + 3.4125) *
dev->cfg.cellcount * 1000.0);
*charge_voltageLevel = round(((vchargeSetting / 80.0) + 3.4125) *
dev->cfg.cellcount * 1000.0);
break;
case LTC4015_CHEM_LI_ION:
*charge_voltageLevel =
round(((vchargeSetting / 80.0) + 3.8125) *
dev->cfg.cellcount * 1000.0);
*charge_voltageLevel = round(((vchargeSetting / 80.0) + 3.8125) *
dev->cfg.cellcount * 1000.0);
break;
default:
WTF;
@@ -140,8 +136,7 @@ ReturnStatus LTC4015_get_cfg_vcharge(LTC4015_Dev *dev,
}
/* Convert a voltage to a valid vbat register value */
static uint16_t voltage_to_vbat_reg(LTC4015_Dev *dev,
int16_t voltage)
static uint16_t voltage_to_vbat_reg(LTC4015_Dev *dev, int16_t voltage)
{
switch (dev->cfg.chem) {
case LTC4015_CHEM_LEAD_ACID:
@@ -166,15 +161,16 @@ ReturnStatus LTC4015_cfg_battery_voltage_low(LTC4015_Dev *dev,
}
/* Convert a voltage to a valid vbat register value */
static int16_t vbat_reg_to_voltage(LTC4015_Dev *dev,
uint16_t vbat_reg)
static int16_t vbat_reg_to_voltage(LTC4015_Dev *dev, uint16_t vbat_reg)
{
switch (dev->cfg.chem) {
case LTC4015_CHEM_LEAD_ACID:
return ((int16_t) vbat_reg / 1000.0) * (128.176 * dev->cfg.cellcount);
return ((int16_t)vbat_reg / 1000.0) *
(128.176 * dev->cfg.cellcount);
case LTC4015_CHEM_LI_FE_PO4:
case LTC4015_CHEM_LI_ION:
return ((int16_t) vbat_reg / 1000.0) * (192.264 * dev->cfg.cellcount);
return ((int16_t)vbat_reg / 1000.0) *
(192.264 * dev->cfg.cellcount);
default:
WTF;
break;
@@ -182,14 +178,14 @@ static int16_t vbat_reg_to_voltage(LTC4015_Dev *dev,
return 0; /* Should never get here, but keeps compiler happy */
}
ReturnStatus LTC4015_get_cfg_battery_voltage_low(LTC4015_Dev *dev,
int16_t *underVolatage) //millivolts
ReturnStatus
LTC4015_get_cfg_battery_voltage_low(LTC4015_Dev *dev,
int16_t *underVolatage) //millivolts
{
/* See datasheet, page 56 */
uint16_t vbatLoLimit = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev,
LTC4015_VBAT_LO_ALERT_LIMIT_SUBADDR,
&vbatLoLimit);
ReturnStatus status = LTC4015_reg_read(
dev, LTC4015_VBAT_LO_ALERT_LIMIT_SUBADDR, &vbatLoLimit);
*underVolatage = vbat_reg_to_voltage(dev, vbatLoLimit);
return status;
}
@@ -203,21 +199,21 @@ ReturnStatus LTC4015_cfg_battery_voltage_high(LTC4015_Dev *dev,
voltage_to_vbat_reg(dev, overVoltage));
}
ReturnStatus LTC4015_get_cfg_battery_voltage_high(LTC4015_Dev *dev,
int16_t *overVoltage) //millivolts
ReturnStatus
LTC4015_get_cfg_battery_voltage_high(LTC4015_Dev *dev,
int16_t *overVoltage) //millivolts
{
/* See datasheet, page 56 */
uint16_t vbatHiLimit = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev,
LTC4015_VBAT_HI_ALERT_LIMIT_SUBADDR,
&vbatHiLimit);
ReturnStatus status = LTC4015_reg_read(
dev, LTC4015_VBAT_HI_ALERT_LIMIT_SUBADDR, &vbatHiLimit);
*overVoltage = vbat_reg_to_voltage(dev, vbatHiLimit);
return status;
}
ReturnStatus LTC4015_cfg_input_voltage_low(LTC4015_Dev *dev,
int16_t inputUnderVoltage) // millivolts
ReturnStatus
LTC4015_cfg_input_voltage_low(LTC4015_Dev *dev,
int16_t inputUnderVoltage) // millivolts
{
/* See datasheet, page 56:VIN_LO_ALERT_LIMIT
VIN_LO_ALERT_LIMIT = limit/1.648mV */
@@ -226,21 +222,22 @@ ReturnStatus LTC4015_cfg_input_voltage_low(LTC4015_Dev *dev,
vinLoLimit);
}
ReturnStatus LTC4015_get_cfg_input_voltage_low(LTC4015_Dev *dev,
int16_t *inpUnderVoltage) //millivolts
ReturnStatus
LTC4015_get_cfg_input_voltage_low(LTC4015_Dev *dev,
int16_t *inpUnderVoltage) //millivolts
{
/* See datasheet, page 56
* VIN_LO_ALERT_LIMIT = (inpUnderVoltage/(1.648)) */
uint16_t vInLoAlertLimit = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev,
LTC4015_VIN_LO_ALERT_LIMIT_SUBADDR,
&vInLoAlertLimit);
*inpUnderVoltage = (int16_t) vInLoAlertLimit * 1.648;
ReturnStatus status = LTC4015_reg_read(
dev, LTC4015_VIN_LO_ALERT_LIMIT_SUBADDR, &vInLoAlertLimit);
*inpUnderVoltage = (int16_t)vInLoAlertLimit * 1.648;
return status;
}
ReturnStatus LTC4015_cfg_input_current_high(LTC4015_Dev *dev,
int16_t inputOvercurrent) // milliAmps
ReturnStatus
LTC4015_cfg_input_current_high(LTC4015_Dev *dev,
int16_t inputOvercurrent) // milliAmps
{
/* See datasheet, page 56:IIN_HI_ALERT_LIMIT
IIN_HI_ALERT_LIMIT = (limit*RSNSI)/1.46487uV */
@@ -255,10 +252,9 @@ ReturnStatus LTC4015_get_cfg_input_current_high(LTC4015_Dev *dev,
/* See datasheet, page 56
* IIN_HI_ALERT_LIMIT = ((inpOverCurrent*PWR_INT_BATT_RSNSI)/(1.46487)) */
uint16_t iInHiALertLimit = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev,
LTC4015_IIN_HI_ALERT_LIMIT_SUBADDR,
&iInHiALertLimit);
*inpOverCurrent = ((int16_t) iInHiALertLimit * 1.46487) / dev->cfg.r_snsi;
ReturnStatus status = LTC4015_reg_read(
dev, LTC4015_IIN_HI_ALERT_LIMIT_SUBADDR, &iInHiALertLimit);
*inpOverCurrent = ((int16_t)iInHiALertLimit * 1.46487) / dev->cfg.r_snsi;
return status;
}
@@ -278,15 +274,14 @@ ReturnStatus LTC4015_get_cfg_battery_current_low(LTC4015_Dev *dev,
/* See datasheet, page 56
* IBAT_LO_ALERT_LIMIT = ((current*PWR_INT_BATT_RSNSB)/(1.46487)) */
uint16_t iBatLoAlertLimit = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev,
LTC4015_IBAT_LO_ALERT_LIMIT_SUBADDR,
&iBatLoAlertLimit);
*lowbattCurrent = ((int16_t) iBatLoAlertLimit * 1.46487) / dev->cfg.r_snsb;
ReturnStatus status = LTC4015_reg_read(
dev, LTC4015_IBAT_LO_ALERT_LIMIT_SUBADDR, &iBatLoAlertLimit);
*lowbattCurrent = ((int16_t)iBatLoAlertLimit * 1.46487) / dev->cfg.r_snsb;
return status;
}
ReturnStatus LTC4015_cfg_die_temperature_high(LTC4015_Dev *dev,
int16_t dieTemp) // Degrees C
int16_t dieTemp) // Degrees C
{
/* See datasheet, page 57:DIE_TEMP_HI_ALERT_LIMIT
DIE_TEMP_HI_ALERT_LIMIT = (DIE_TEMP • 12010)/45.6°C */
@@ -296,38 +291,39 @@ ReturnStatus LTC4015_cfg_die_temperature_high(LTC4015_Dev *dev,
}
ReturnStatus LTC4015_get_cfg_die_temperature_high(LTC4015_Dev *dev,
int16_t *dieTemp) // Degrees C
int16_t *dieTemp) // Degrees C
{
/* See datasheet, page 57
* DIE_TEMP_HI_ALERT_LIMIT = (dieTemp • 12010)/45.6°C */
uint16_t dieTempAlertLimit = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev,
LTC4015_DIE_TEMP_HI_ALERT_LIMIT_SUBADDR,
&dieTempAlertLimit);
*dieTemp = (((int16_t) dieTempAlertLimit - 12010) / 45.6);
ReturnStatus status = LTC4015_reg_read(
dev, LTC4015_DIE_TEMP_HI_ALERT_LIMIT_SUBADDR, &dieTempAlertLimit);
*dieTemp = (((int16_t)dieTempAlertLimit - 12010) / 45.6);
return status;
}
ReturnStatus LTC4015_cfg_input_current_limit(LTC4015_Dev *dev,
uint16_t inputCurrentLimit) // milliAmps
ReturnStatus
LTC4015_cfg_input_current_limit(LTC4015_Dev *dev,
uint16_t inputCurrentLimit) // milliAmps
{
/* See datasheet, page 61:IIN_LIMIT_SETTING
IIN_LIMIT_SETTING = (limit * RSNSI / 500uV) - 1 */
/* TODO: range check? this is only a 6-bit register */
uint16_t iInLimitSetting = ((inputCurrentLimit * dev->cfg.r_snsi) / 500) - 1;
uint16_t iInLimitSetting =
((inputCurrentLimit * dev->cfg.r_snsi) / 500) - 1;
return LTC4015_reg_write(dev, LTC4015_IIN_LIMIT_SETTING_SUBADDR,
iInLimitSetting);
}
ReturnStatus LTC4015_get_cfg_input_current_limit(LTC4015_Dev *dev,
uint16_t *currentLimit) //milli Amps
ReturnStatus
LTC4015_get_cfg_input_current_limit(LTC4015_Dev *dev,
uint16_t *currentLimit) //milli Amps
{
/* See datasheet, page 56
* Input current limit setting = (IIN_LIMIT_SETTING + 1) • 500uV / RSNSI */
uint16_t iInlimitSetting = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev,
LTC4015_IIN_LIMIT_SETTING_SUBADDR,
&iInlimitSetting);
ReturnStatus status = LTC4015_reg_read(
dev, LTC4015_IIN_LIMIT_SETTING_SUBADDR, &iInlimitSetting);
*currentLimit = ((iInlimitSetting + 1) * 500.0) / dev->cfg.r_snsi;
return status;
}
@@ -337,9 +333,9 @@ ReturnStatus LTC4015_get_die_temperature(LTC4015_Dev *dev,
{
/* Datasheet page 71: temperature = (DIE_TEMP • 12010)/45.6°C */
uint16_t dieTemperature = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_DIE_TEMP_SUBADDR,
&dieTemperature);
*dieTemp = (((int16_t) dieTemperature - 12010) / 45.6);
ReturnStatus status =
LTC4015_reg_read(dev, LTC4015_DIE_TEMP_SUBADDR, &dieTemperature);
*dieTemp = (((int16_t)dieTemperature - 12010) / 45.6);
return status;
}
@@ -348,9 +344,9 @@ ReturnStatus LTC4015_get_battery_current(LTC4015_Dev *dev,
{
/* Page 70: Battery current = [IBAT] * 1.46487uV/Rsnsb */
uint16_t batteryCurrent = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_IBAT_SUBADDR,
&batteryCurrent);
*iBatt = ((float) ((int16_t) batteryCurrent * 1.46487)) / (dev->cfg.r_snsb);
ReturnStatus status =
LTC4015_reg_read(dev, LTC4015_IBAT_SUBADDR, &batteryCurrent);
*iBatt = ((float)((int16_t)batteryCurrent * 1.46487)) / (dev->cfg.r_snsb);
return status;
}
@@ -359,9 +355,9 @@ ReturnStatus LTC4015_get_input_current(LTC4015_Dev *dev,
{
/* Page 71: Input current = [IIN] • 1.46487uV/Rsnsi */
uint16_t inputCurrent = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_IIN_SUBADDR,
&inputCurrent);
*iIn = ((float) ((int16_t) inputCurrent * 1.46487)) / (dev->cfg.r_snsi);
ReturnStatus status =
LTC4015_reg_read(dev, LTC4015_IIN_SUBADDR, &inputCurrent);
*iIn = ((float)((int16_t)inputCurrent * 1.46487)) / (dev->cfg.r_snsi);
return status;
}
@@ -370,8 +366,8 @@ ReturnStatus LTC4015_get_battery_voltage(LTC4015_Dev *dev,
{
/* Page 71: 2's compliment VBATSENS/cellcount = [VBAT] • [x]uV */
uint16_t batteryVoltage = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_VBAT_SUBADDR,
&batteryVoltage);
ReturnStatus status =
LTC4015_reg_read(dev, LTC4015_VBAT_SUBADDR, &batteryVoltage);
*vbat = vbat_reg_to_voltage(dev, batteryVoltage);
return status;
}
@@ -381,9 +377,9 @@ ReturnStatus LTC4015_get_input_voltage(LTC4015_Dev *dev,
{
/* Page 71: 2's compliment Input voltage = [VIN] • 1.648mV */
uint16_t inputVoltage = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_VIN_SUBADDR,
&inputVoltage);
*vIn = (int16_t) inputVoltage * 1.648;
ReturnStatus status =
LTC4015_reg_read(dev, LTC4015_VIN_SUBADDR, &inputVoltage);
*vIn = (int16_t)inputVoltage * 1.648;
return status;
}
@@ -392,19 +388,19 @@ ReturnStatus LTC4015_get_system_voltage(LTC4015_Dev *dev,
{
/* Page 71: 2's compliment system voltage = [VSYS] • 1.648mV */
uint16_t sysVoltage = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_VSYS_SUBADDR,
&sysVoltage);
*vSys = (int16_t) sysVoltage * 1.648;
ReturnStatus status =
LTC4015_reg_read(dev, LTC4015_VSYS_SUBADDR, &sysVoltage);
*vSys = (int16_t)sysVoltage * 1.648;
return status;
}
ReturnStatus LTC4015_get_icharge_dac(LTC4015_Dev *dev,
int16_t *icharge) //milliAmps
int16_t *icharge) //milliAmps
{
/* Page 72: (ICHARGE_DAC + 1) • 1mV/RSNSB */
uint16_t ichargeDAC = 0x0000;
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_ICHARGE_DAC_SUBADDR,
&ichargeDAC);
ReturnStatus status =
LTC4015_reg_read(dev, LTC4015_ICHARGE_DAC_SUBADDR, &ichargeDAC);
*icharge = (int16_t)((ichargeDAC + 1) / dev->cfg.r_snsb);
return status;
}
@@ -414,12 +410,13 @@ static ReturnStatus _enable_limit_alerts(LTC4015_Dev *dev, uint16_t alertConfig)
return LTC4015_reg_write(dev, LTC4015_EN_LIMIT_ALERTS_SUBADDR, alertConfig);
}
static ReturnStatus _read_enable_limit_alerts(LTC4015_Dev *dev, uint16_t* regValue)
static ReturnStatus _read_enable_limit_alerts(LTC4015_Dev *dev,
uint16_t *regValue)
{
return LTC4015_reg_read(dev, LTC4015_EN_LIMIT_ALERTS_SUBADDR, regValue);
}
static ReturnStatus _read_limit_alerts(LTC4015_Dev *dev, uint16_t* regValue)
static ReturnStatus _read_limit_alerts(LTC4015_Dev *dev, uint16_t *regValue)
{
return LTC4015_reg_read(dev, LTC4015_LIMIT_ALERTS_SUBADDR, regValue);
}
@@ -432,7 +429,7 @@ static ReturnStatus _enable_charger_state_alerts(LTC4015_Dev *dev,
}
static ReturnStatus _read_enable_charger_state_alerts(LTC4015_Dev *dev,
uint16_t* regValue)
uint16_t *regValue)
{
return LTC4015_reg_read(dev, LTC4015_EN_CHARGER_STATE_ALERTS_SUBADDR,
regValue);
@@ -447,8 +444,8 @@ static ReturnStatus _read_charger_state_alerts(LTC4015_Dev *dev,
static ReturnStatus _read_system_status(LTC4015_Dev *dev, uint16_t *regValue)
{
ReturnStatus status = LTC4015_reg_read(dev, LTC4015_SYSTEM_STATUS_SUBADDR,
regValue);
ReturnStatus status =
LTC4015_reg_read(dev, LTC4015_SYSTEM_STATUS_SUBADDR, regValue);
return status;
}
@@ -461,7 +458,8 @@ ReturnStatus LTC4015_get_bat_presence(LTC4015_Dev *dev, bool *present)
return status;
}
static void _ltc4015_isr(void *context) {
static void _ltc4015_isr(void *context)
{
LTC4015_Dev *dev = context;
ReturnStatus status = RETURN_OK;
uint16_t alert_status = 0;
@@ -525,7 +523,8 @@ ReturnStatus LTC4015_init(LTC4015_Dev *dev)
if (dev->cfg.pin_alert) {
const uint32_t pin_evt_cfg = OCGPIO_CFG_INPUT | OCGPIO_CFG_INT_FALLING;
if (OcGpio_configure(dev->cfg.pin_alert, pin_evt_cfg) < OCGPIO_SUCCESS) {
if (OcGpio_configure(dev->cfg.pin_alert, pin_evt_cfg) <
OCGPIO_SUCCESS) {
return RETURN_NOTOK;
}
@@ -536,7 +535,8 @@ ReturnStatus LTC4015_init(LTC4015_Dev *dev)
}
void LTC4015_setAlertHandler(LTC4015_Dev *dev, LTC4015_CallbackFn alert_cb,
void *cb_context) {
void *cb_context)
{
dev->obj.alert_cb = alert_cb;
dev->obj.cb_context = cb_context;
}
@@ -600,6 +600,7 @@ ePostCode LTC4015_probe(LTC4015_Dev *dev, POSTData *postData)
if (!(ltcStatusReg & LTC4015_CHARGER_ENABLED)) {
return POST_DEV_MISSING;
}
post_update_POSTData(postData, dev->cfg.i2c_dev.bus, dev->cfg.i2c_dev.slave_addr,0xFF, 0xFF);
post_update_POSTData(postData, dev->cfg.i2c_dev.bus,
dev->cfg.i2c_dev.slave_addr, 0xFF, 0xFF);
return POST_DEV_FOUND;
}

View File

@@ -14,29 +14,29 @@
* REGISTER DEFINITIONS
*****************************************************************************/
// Battery voltage low alert limit - BITS[15:0] 0x0000
#define LTC4015_VBAT_LO_ALERT_LIMIT_SUBADDR 0x01
#define LTC4015_VBAT_LO_ALERT_LIMIT_SUBADDR 0x01
// Battery voltage high alert limit - BITS[15:0] 0x0000
#define LTC4015_VBAT_HI_ALERT_LIMIT_SUBADDR 0x02
#define LTC4015_VBAT_HI_ALERT_LIMIT_SUBADDR 0x02
// Input voltage low alert limit - BITS[15:0] 0x0000
#define LTC4015_VIN_LO_ALERT_LIMIT_SUBADDR 0x03
#define LTC4015_VIN_LO_ALERT_LIMIT_SUBADDR 0x03
// Input voltage high alert limit - BITS[15:0] 0x0000
#define LTC4015_VIN_HI_ALERT_LIMIT_SUBADDR 0x04
#define LTC4015_VIN_HI_ALERT_LIMIT_SUBADDR 0x04
// Output voltage low alert limit - BITS[15:0] 0x0000
#define LTC4015_VSYS_LO_ALERT_LIMIT_SUBADDR 0x05
#define LTC4015_VSYS_LO_ALERT_LIMIT_SUBADDR 0x05
// Output voltage high alert limit - BITS[15:0] 0x0000
#define LTC4015_VSYS_HI_ALERT_LIMIT_SUBADDR 0x06
#define LTC4015_VSYS_HI_ALERT_LIMIT_SUBADDR 0x06
// Input current high alert limit - BITS[15:0] 0x0000
#define LTC4015_IIN_HI_ALERT_LIMIT_SUBADDR 0x07
#define LTC4015_IIN_HI_ALERT_LIMIT_SUBADDR 0x07
// Charge current low alert limit - BITS[15:0] 0x0000
#define LTC4015_IBAT_LO_ALERT_LIMIT_SUBADDR 0x08
#define LTC4015_IBAT_LO_ALERT_LIMIT_SUBADDR 0x08
// Die temperature high alert limit, - BITS[15:0] 0x0000
#define LTC4015_DIE_TEMP_HI_ALERT_LIMIT_SUBADDR 0x09
#define LTC4015_DIE_TEMP_HI_ALERT_LIMIT_SUBADDR 0x09
// Battery series resistance high alert limit - BITS[15:0] 0x0000
#define LTC4015_BSR_HI_ALERT_LIMIT_SUBADDR 0x0A
#define LTC4015_BSR_HI_ALERT_LIMIT_SUBADDR 0x0A
// Thermistor ratio high (cold battery) alert limit - BITS[15:0] 0x0000
#define LTC4015_NTC_RATIO_HI_ALERT_LIMIT_SUBADDR 0x0B
#define LTC4015_NTC_RATIO_HI_ALERT_LIMIT_SUBADDR 0x0B
// Thermistor ratio low (hot battery) alert limit - BITS[15:0] 0x0000
#define LTC4015_NTC_RATIO_LO_ALERT_LIMIT_SUBADDR 0x0C
#define LTC4015_NTC_RATIO_LO_ALERT_LIMIT_SUBADDR 0x0C
/* Bit fields:
*
@@ -58,7 +58,7 @@
* 0 : Enable thermistor ratio low (hot battery) alert
*/
// Enable limit monitoring and alert notification via SMBALERT - BITS[15:0] 0x0000
#define LTC4015_EN_LIMIT_ALERTS_SUBADDR 0x0D
#define LTC4015_EN_LIMIT_ALERTS_SUBADDR 0x0D
/* Bit fields:
*
@@ -76,7 +76,7 @@
* 0 : Enable alert for shorted battery fault state
*/
// Enable charger state alert notification via SMBALERT - BITS[15:0] 0x0000
#define LTC4015_EN_CHARGER_STATE_ALERTS_SUBADDR 0x0E
#define LTC4015_EN_CHARGER_STATE_ALERTS_SUBADDR 0x0E
/* Bit fields:
*
@@ -87,16 +87,16 @@
* 0 : Enable alert for constant voltage status
*/
// Enable charge status alert notification via SMBALERT - BITS[15:0] 0x0000
#define LTC4015_EN_CHARGE_STATUS_ALERTS_SUBADDR 0x0F
#define LTC4015_EN_CHARGE_STATUS_ALERTS_SUBADDR 0x0F
// Coulomb counter QCOUNT low alert limit, same format as QCOUNT (0x13) - BITS[15:0] : 0x0000
#define LTC4015_QCOUNT_LO_ALERT_LIMIT_SUBADDR 0x10
#define LTC4015_QCOUNT_LO_ALERT_LIMIT_SUBADDR 0x10
// Coulomb counter QCOUNT high alert limit, same format as QCOUNT (0x13) - BITS[15:0] : 0x0000
#define LTC4015_QCOUNT_HI_ALERT_LIMIT_SUBADDR 0x11
#define LTC4015_QCOUNT_HI_ALERT_LIMIT_SUBADDR 0x11
// Coulomb counter prescale factor - BITS[15:0] : 0x0200
#define LTC4015_QCOUNT_PRESCALE_FACTOR_SUBADDR 0x12
#define LTC4015_QCOUNT_PRESCALE_FACTOR_SUBADDR 0x12
// Coulomb counter value - BITS[15:0] : 0x8000
#define LTC4015_QCOUNT_SUBADDR 0x13
#define LTC4015_QCOUNT_SUBADDR 0x13
/* Bit fields:
*
@@ -110,40 +110,40 @@
* 1:0 : N/A
*/
// Configuration Settings - BITS[15:0] : 0x0000
#define LTC4015_CONFIG_BITS_SUBADDR 0x14
#define LTC4015_CONFIG_BITS_SUBADDR 0x14
// Input current limit setting = (IIN_LIMIT_SETTING + 1) • 500uV / RSNSI - BITS[5:0] : 0x3F
#define LTC4015_IIN_LIMIT_SETTING_SUBADDR 0x15
#define LTC4015_IIN_LIMIT_SETTING_SUBADDR 0x15
// UVCLFB input undervoltage limit = (VIN_UVCL_SETTING + 1) • 4.6875mV - BITS[7:0] : 0xFF
#define LTC4015_VIN_UVCL_SETTING_SUBADDR 0x16
#define LTC4015_RESERVED_0X17_SUBADDR 0x17
#define LTC4015_RESERVED_0X18_SUBADDR 0x18
#define LTC4015_VIN_UVCL_SETTING_SUBADDR 0x16
#define LTC4015_RESERVED_0X17_SUBADDR 0x17
#define LTC4015_RESERVED_0X18_SUBADDR 0x18
// Write 0x534D to arm ship mode. Once armed, ship mode cannot be disarmed.
#define LTC4015_ARM_SHIP_MODE_SUBADDR 0x19
#define LTC4015_ARM_SHIP_MODE_SUBADDR 0x19
// Maximum charge current target = (ICHARGE_TARGET + 1) • 1mV/RSNSB - BITS[4:0]
#define LTC4015_ICHARGE_TARGET_SUBADDR 0x1A
#define LTC4015_ICHARGE_TARGET_SUBADDR 0x1A
// Charge voltage target - BITS[5:0]
#define LTC4015_VCHARGE_SETTING_SUBADDR 0x1B
#define LTC4015_VCHARGE_SETTING_SUBADDR 0x1B
// Twos complement Low IBAT threshold for C/x termination - BITS[15:0]
#define LTC4015_C_OVER_X_THRESHOLD_SUBADDR 0x1C
#define LTC4015_C_OVER_X_THRESHOLD_SUBADDR 0x1C
// Time in seconds with battery charger in the CV state before timer termination
// occurs (lithium chemistries only)
#define LTC4015_MAX_CV_TIME_SUBADDR 0x1D
#define LTC4015_MAX_CV_TIME_SUBADDR 0x1D
// Time in seconds before a max_charge_time fault is declared. Set to zero to
// disable max_charge_time fault
#define LTC4015_MAX_CHARGE_TIME_SUBADDR 0x1E
#define LTC4015_MAX_CHARGE_TIME_SUBADDR 0x1E
// Value of NTC_RATIO for transition between JEITA regions 2 and 1 (off) - BITS[15:0] : 0x3F00
#define LTC4015_JEITA_T1_SUBADDR 0x1F
#define LTC4015_JEITA_T1_SUBADDR 0x1F
// Value of NTC_RATIO for transition between JEITA regions 3 and 2 - BITS[15:0] : 0x372A
#define LTC4015_JEITA_T2_SUBADDR 0x20
#define LTC4015_JEITA_T2_SUBADDR 0x20
// Value of NTC_RATIO for transition between JEITA regions 4 and 3 - BITS[15:0] : 0x1F27
#define LTC4015_JEITA_T3_SUBADDR 0x21
#define LTC4015_JEITA_T3_SUBADDR 0x21
// Value of NTC_RATIO for transition between JEITA regions 5 and 4 - BITS[15:0] : 0x1BCC
#define LTC4015_JEITA_T4_SUBADDR 0x22
#define LTC4015_JEITA_T4_SUBADDR 0x22
// Value of NTC_RATIO for transition between JEITA regions 6 and 5 - BITS[15:0] : 0x18B9
#define LTC4015_JEITA_T5_SUBADDR 0x23
#define LTC4015_JEITA_T5_SUBADDR 0x23
// Value of NTC_RATIO for transition between JEITA regions 7 (off) and 6 - BITS[15:0] : 0x136D
#define LTC4015_JEITA_T6_SUBADDR 0x24
#define LTC4015_JEITA_T6_SUBADDR 0x24
/* Bit Fields:
*
@@ -152,7 +152,7 @@
* 4:0 : vcharge_jeita_5
*/
// VCHARGE values for JEITA temperature regions 6 and 5
#define LTC4015_VCHARGE_JEITA_6_5_SUBADDR 0x25
#define LTC4015_VCHARGE_JEITA_6_5_SUBADDR 0x25
/* Bit Fields:
*
@@ -162,7 +162,7 @@
* 4:0 : vcharge_jeita_4
*/
// VCHARGE values for JEITA temperature regions 4, 3, and 2
#define LTC4015_VCHARGE_JEITA_4_3_2_SUBADDR 0x26
#define LTC4015_VCHARGE_JEITA_4_3_2_SUBADDR 0x26
/* Bit Fields:
*
@@ -171,7 +171,7 @@
* 4:0 : icharge_jeita_5
*/
// ICHARGE_TARGET values for JEITA temperature regions 6 and 5 - BITS[15:0] : 0x01EF
#define LTC4015_ICHARGE_JEITA_6_5_SUBADDR 0x27
#define LTC4015_ICHARGE_JEITA_6_5_SUBADDR 0x27
/* Bit Fields:
*
@@ -181,7 +181,7 @@
* 4:0 : icharge_jeita_4
*/
// ICHARGE_TARGET value for JEITA temperature regions 4, 3, and 2 - BITS[15:0] : 0x7FEF
#define LTC4015_ICHARGE_JEITA_4_3_2_SUBADDR 0x28
#define LTC4015_ICHARGE_JEITA_4_3_2_SUBADDR 0x28
/* Bit Fields:
*
@@ -191,31 +191,31 @@
* 0 : Enable JEITA temperature profile
*/
// Battery charger configuration settings
#define LTC4015_CHARGER_CONFIG_BITS_SUBADDR 0x29
#define LTC4015_CHARGER_CONFIG_BITS_SUBADDR 0x29
// LiFePO4/lead-acid absorb voltage adder, bits 15:6 are reserved
#define LTC4015_VABSORB_DELTA_SUBADDR 0x2A
#define LTC4015_VABSORB_DELTA_SUBADDR 0x2A
// Maximum time for LiFePO4/lead-acid absorb charge
#define LTC4015_MAX_ABSORB_TIME_SUBADDR 0x2B
#define LTC4015_MAX_ABSORB_TIME_SUBADDR 0x2B
// Lead-acid equalize charge voltage adder, bits 15:6 are reserved - BITS[15:0] : 0x002A
#define LTC4015_VEQUALIZE_DELTA_SUBADDR 0x2C
#define LTC4015_VEQUALIZE_DELTA_SUBADDR 0x2C
// Lead-acid equalization time - BITS[15:0] : 0x0E10
#define LTC4015_EQUALIZE_TIME_SUBADDR 0x2D
#define LTC4015_EQUALIZE_TIME_SUBADDR 0x2D
// LiFeP04 recharge threshold - BITS[15:0] : 0x4410
#define LTC4015_LIFEPO4_RECHARGE_THRESHOLD_SUBADDR 0x2E
#define LTC4015_RESERVED_0X2F_SUBADDR 0x2F
#define LTC4015_LIFEPO4_RECHARGE_THRESHOLD_SUBADDR 0x2E
#define LTC4015_RESERVED_0X2F_SUBADDR 0x2F
// For lithium chemistries, indicates the time (in sec) that the battery has
// been charging
#define LTC4015_MAX_CHARGE_TIMER_SUBADDR 0x30
#define LTC4015_MAX_CHARGE_TIMER_SUBADDR 0x30
// For lithium chemistries, indicates the time (in sec) that the battery has
// been in constant-voltage regulation
#define LTC4015_CV_TIMER_SUBADDR 0x31
#define LTC4015_CV_TIMER_SUBADDR 0x31
// For LiFePO4 and lead-acid batteries, indicates the time (in sec) that the
// battery has been in absorb phase
#define LTC4015_ABSORB_TIMER_SUBADDR 0x32
#define LTC4015_ABSORB_TIMER_SUBADDR 0x32
// For lead-acid batteries, indicates the time (in sec) that the battery has
// been in EQUALIZE phase
#define LTC4015_EQUALIZE_TIMER_SUBADDR 0x33
#define LTC4015_EQUALIZE_TIMER_SUBADDR 0x33
/* Bit Fields:
*
@@ -234,7 +234,7 @@
*/
// Real time battery charger state indicator. Individual bits are mutually
// exclusive. Bits 15:11 are reserved.
#define LTC4015_CHARGER_STATE_SUBADDR 0x34
#define LTC4015_CHARGER_STATE_SUBADDR 0x34
/* Bit Fields:
*
@@ -250,7 +250,7 @@
*/
// Charge status indicator. Individual bits are mutually exclusive. Only active
// in charging states.
#define LTC4015_CHARGE_STATUS_SUBADDR 0x35
#define LTC4015_CHARGE_STATUS_SUBADDR 0x35
/* Bit Fields:
*
@@ -274,7 +274,7 @@
// Limit alert register.Individual bits are enabled by EN_LIMIT_ALERTS (0x0D).
// Writing 0 to any bit clears that alert. Once set, alert bits remain high
// until cleared or disabled.
#define LTC4015_LIMIT_ALERTS_SUBADDR 0x36
#define LTC4015_LIMIT_ALERTS_SUBADDR 0x36
/* Bit Fields:
*
@@ -292,7 +292,7 @@
* 0 : Alert indicates battery short fault has occurred
*/
// Charger state alert register. Individual bits are enabled by EN_CHARGER_STATE_ALERTS (0x0E).
#define LTC4015_CHARGER_STATE_ALERTS_SUBADDR 0x37
#define LTC4015_CHARGER_STATE_ALERTS_SUBADDR 0x37
/* Bit Fields:
*
@@ -304,7 +304,7 @@
*/
// Alerts that CHARGE_STATUS indicators have occurred.
// Individual bits are enabled by EN_CHARGE_STATUS_ALERTS (0x0F)
#define LTC4015_CHARGE_STATUS_ALERTS_SUBADDR 0x38
#define LTC4015_CHARGE_STATUS_ALERTS_SUBADDR 0x38
/* Bit Fields:
*
@@ -333,46 +333,46 @@
* level (2.8V typical)
*/
// Real time system status indicator bits
#define LTC4015_SYSTEM_STATUS_SUBADDR 0x39
#define LTC4015_SYSTEM_STATUS_SUBADDR 0x39
// Twos complement ADC measurement result for the BATSENS pin.
// VBATSENS/cellcount = [VBAT] • 192.264uV for lithium chemistries.
// VBATSENS/cellcount = [VBAT] • 128.176uV for lead-acid.
#define LTC4015_VBAT_SUBADDR 0x3A
#define LTC4015_VBAT_SUBADDR 0x3A
// Twos complement ADC measurement result for VIN.
// VVIN = [VIN] • 1.648mV
#define LTC4015_VIN_SUBADDR 0x3B
#define LTC4015_VIN_SUBADDR 0x3B
// Twos complement ADC measurement result for VSYS.
// VSYS = [VSYS] • 1.648mV
#define LTC4015_VSYS_SUBADDR 0x3C
#define LTC4015_VSYS_SUBADDR 0x3C
// Twos complement ADC measurement result for (VCSP VCSN).
// Charge current (into the battery) is represented as a positive number.
// Battery current = [IBAT] • 1.46487uV/RSNSB
#define LTC4015_IBAT_SUBADDR 0x3D
#define LTC4015_IBAT_SUBADDR 0x3D
// Twos complement ADC measurement result for (VCLP VCLN).
// Input current = [IIN] • 1.46487uV/RSNSI
#define LTC4015_IIN_SUBADDR 0x3E
#define LTC4015_IIN_SUBADDR 0x3E
// Twos complement ADC measurement result for die temperature.
// Temperature = (DIE_TEMP 12010)/45.6°C
#define LTC4015_DIE_TEMP_SUBADDR 0x3F
#define LTC4015_DIE_TEMP_SUBADDR 0x3F
// Twos complement ADC measurement result for NTC thermistor ratio.
// RNTC = NTC_RATIO • RNTCBIAS/(21845.0 NTC_RATIO)
#define LTC4015_NTC_RATIO_SUBADDR 0x40
#define LTC4015_NTC_RATIO_SUBADDR 0x40
// Calculated battery series resistance.
// For lithium chemistries, series resistance/cellcount = BSR • RSNSB/500.0
// For lead-acid chemistries, series resistance/cellcount = BSR • RSNSB/750.0
#define LTC4015_BSR_SUBADDR 0x41
#define LTC4015_BSR_SUBADDR 0x41
// JEITA temperature region of the NTC thermistor (Li Only).
// Active only when EN_JEITA=1 (Only Bits[2:0] used)
#define LTC4015_JEITA_REGION_SUBADDR 0x42
#define LTC4015_JEITA_REGION_SUBADDR 0x42
/* Bit Fields:
*
@@ -382,19 +382,19 @@
* 3:0 : Cell count as set by CELLS pins
*/
// Readout of CHEM and CELLS pin settings
#define LTC4015_CHEM_CELLS_SUBADDR 0x43
#define LTC4015_CHEM_CELLS_SUBADDR 0x43
// Charge current control DAC control bits (Only Bits[4:0] used)
#define LTC4015_ICHARGE_DAC_SUBADDR 0x44
#define LTC4015_ICHARGE_DAC_SUBADDR 0x44
// Charge voltage control DAC control bits (Only Bits[5:0] used)
#define LTC4015_VCHARGE_DAC_SUBADDR 0x45
#define LTC4015_VCHARGE_DAC_SUBADDR 0x45
// Input current limit control DAC control word (Only Bits[5:0] used)
#define LTC4015_IIN_LIMIT_DAC_SUBADDR 0x46
#define LTC4015_IIN_LIMIT_DAC_SUBADDR 0x46
// Digitally filtered twos complement ADC measurement result for battery voltage
#define LTC4015_VBAT_FILT_SUBADDR 0x47
#define LTC4015_VBAT_FILT_SUBADDR 0x47
// This 16-bit two's complement word is the value of IBAT (0x3D) used in calculating BSR.
#define LTC4015_ICHARGE_BSR_SUBADDR 0x48
#define LTC4015_RESERVED_0X49_SUBADDR 0x49
#define LTC4015_ICHARGE_BSR_SUBADDR 0x48
#define LTC4015_RESERVED_0X49_SUBADDR 0x49
// Measurement valid bit, bit 0 is a 1 when the telemetry(ADC) system is ready
#define LTC4015_MEAS_SYS_VALID_SUBADDR 0x4A
#define LTC4015_MEAS_SYS_VALID_SUBADDR 0x4A
#endif /* CHARGECTRL_LTC4015_H_ */

File diff suppressed because it is too large Load Diff

View File

@@ -24,7 +24,6 @@
tPower_PDStatus_Info PDStatus_Info;
/******************************************************************************
* @fn ltc4275_handle_irq
*
@@ -34,12 +33,15 @@ tPower_PDStatus_Info PDStatus_Info;
*
* @return None
*/
static void ltc4275_handle_irq(void *context) {
static void ltc4275_handle_irq(void *context)
{
LTC4275_Dev *dev = context;
const IArg mutexKey = GateMutex_enter(dev->obj.mutex); {
const IArg mutexKey = GateMutex_enter(dev->obj.mutex);
{
ltc4275_update_status(dev);
} GateMutex_leave(dev->obj.mutex, mutexKey);
}
GateMutex_leave(dev->obj.mutex, mutexKey);
/* See if we have a callback assigned to handle alerts */
if (!dev->obj.alert_cb) {
@@ -90,7 +92,7 @@ ePostCode ltc4275_probe(const LTC4275_Dev *dev, POSTData *postData)
LOGGER("LTC4275::ERROR: Power good signal read failed.\n");
return postCode;
}
if (pdStatus == LTC4275_POWERGOOD ) {
if (pdStatus == LTC4275_POWERGOOD) {
PDStatus_Info.pdStatus.classStatus = LTC4275_CLASSTYPE_UNKOWN;
PDStatus_Info.pdStatus.powerGoodStatus = LTC4275_POWERGOOD;
PDStatus_Info.state = LTC4275_STATE_NOTOK;
@@ -102,7 +104,7 @@ ePostCode ltc4275_probe(const LTC4275_Dev *dev, POSTData *postData)
PDStatus_Info.state = LTC4275_STATE_NOTOK;
PDStatus_Info.pdalert = LTC4275_DISCONNECT_ALERT;
}
post_update_POSTData(postData, 0xFF,0xFF,0xFF,0xFF);
post_update_POSTData(postData, 0xFF, 0xFF, 0xFF, 0xFF);
return postCode;
}
@@ -142,7 +144,8 @@ ReturnStatus ltc4275_init(LTC4275_Dev *dev)
}
if (dev->cfg.pin_evt) {
const uint32_t pin_evt_cfg = OCGPIO_CFG_INPUT | OCGPIO_CFG_INT_BOTH_EDGES ;
const uint32_t pin_evt_cfg =
OCGPIO_CFG_INPUT | OCGPIO_CFG_INT_BOTH_EDGES;
if (OcGpio_configure(dev->cfg.pin_evt, pin_evt_cfg) < OCGPIO_SUCCESS) {
return RETURN_NOTOK;
}
@@ -163,7 +166,7 @@ ReturnStatus ltc4275_init(LTC4275_Dev *dev)
* @return None
*/
void ltc4275_set_alert_handler(LTC4275_Dev *dev, LTC4275_CallbackFn alert_cb,
void *cb_context)
void *cb_context)
{
dev->obj.alert_cb = alert_cb;
dev->obj.cb_context = cb_context;
@@ -185,9 +188,8 @@ ReturnStatus ltc4275_get_power_good(const LTC4275_Dev *dev, ePDPowerState *val)
*val = LTC4275_POWERGOOD_NOTOK;
/* Check Power Good */
*val = (ePDPowerState) OcGpio_read(dev->cfg.pin_evt);
if(*val == 0)
{
*val = (ePDPowerState)OcGpio_read(dev->cfg.pin_evt);
if (*val == 0) {
*val = LTC4275_POWERGOOD;
}
DEBUG("LTC4275:INFO:: PD power good is %d.\n", *val);
@@ -245,7 +247,7 @@ ReturnStatus ltc4275_get_class(const LTC4275_Dev *dev, ePDClassType *val)
void ltc4275_update_status(const LTC4275_Dev *dev)
{
ReturnStatus ret = RETURN_NOTOK;
ret = ltc4275_get_power_good(dev,&PDStatus_Info.pdStatus.powerGoodStatus);
ret = ltc4275_get_power_good(dev, &PDStatus_Info.pdStatus.powerGoodStatus);
if (ret != RETURN_OK) {
LOGGER("LTC4275::ERROR: Power good signal read failed.\n");
return;

View File

@@ -27,8 +27,8 @@ typedef enum Adt7481SAlert {
ADT7481_ALERT_CRITICAL
} Adt7481SAlert;
static bool _get_status(void *driver, unsigned int param_id,
void *return_buf) {
static bool _get_status(void *driver, unsigned int param_id, void *return_buf)
{
switch (param_id) {
case ADT7481_STATUS_TEMPERATURE: {
int8_t *res = return_buf;
@@ -44,15 +44,15 @@ static bool _get_status(void *driver, unsigned int param_id,
return false;
}
static bool _get_config(void *driver, unsigned int param_id,
void *return_buf) {
static bool _get_config(void *driver, unsigned int param_id, void *return_buf)
{
switch (param_id) {
case ADT7481_CONFIG_LIM_LOW:
case ADT7481_CONFIG_LIM_HIGH:
case ADT7481_CONFIG_LIM_CRIT: {
int8_t *res = return_buf;
if (adt7481_get_remote2_temp_limit(driver, param_id + 1, res)
== RETURN_OK) {
if (adt7481_get_remote2_temp_limit(driver, param_id + 1, res) ==
RETURN_OK) {
return true;
}
break;
@@ -64,15 +64,15 @@ static bool _get_config(void *driver, unsigned int param_id,
return false;
}
static bool _set_config(void *driver, unsigned int param_id,
const void *data) {
static bool _set_config(void *driver, unsigned int param_id, const void *data)
{
switch (param_id) {
case ADT7481_CONFIG_LIM_LOW:
case ADT7481_CONFIG_LIM_HIGH:
case ADT7481_CONFIG_LIM_CRIT: {
const int8_t *limit = data;
if (adt7481_set_remote2_temp_limit(driver, param_id + 1, *limit)
== RETURN_OK) {
if (adt7481_set_remote2_temp_limit(driver, param_id + 1, *limit) ==
RETURN_OK) {
return true;
}
break;
@@ -86,7 +86,7 @@ static bool _set_config(void *driver, unsigned int param_id,
static ePostCode _probe(void *driver, POSTData *postData)
{
return adt7481_probe(driver,postData);
return adt7481_probe(driver, postData);
}
// alert_token currently intentionally unused, so disabling unused-parameter
@@ -102,22 +102,22 @@ static ePostCode _init(void *driver, const void *config,
}
for (size_t i = 0; i < ARRAY_SIZE(adt7481_config->limits); ++i) {
if (adt7481_set_local_temp_limit(
driver, i + 1, adt7481_config->limits[i]) != RETURN_OK ||
driver, i + 1, adt7481_config->limits[i]) != RETURN_OK ||
adt7481_set_remote1_temp_limit(
driver, i + 1, adt7481_config->limits[i]) != RETURN_OK ||
driver, i + 1, adt7481_config->limits[i]) != RETURN_OK ||
adt7481_set_remote2_temp_limit(
driver, i + 1, adt7481_config->limits[i]) != RETURN_OK) {
driver, i + 1, adt7481_config->limits[i]) != RETURN_OK) {
return POST_DEV_CFG_FAIL;
}
}
if (adt7481_set_config1(driver, ADT7481_CONFIGURATION_REG_VALUE)
!= RETURN_OK) {
if (adt7481_set_config1(driver, ADT7481_CONFIGURATION_REG_VALUE) !=
RETURN_OK) {
return POST_DEV_CFG_FAIL;
}
if (adt7481_set_conv_rate(driver, ADT7481_CONVERSION_RATE_REG_VALUE)
!= RETURN_OK) {
if (adt7481_set_conv_rate(driver, ADT7481_CONVERSION_RATE_REG_VALUE) !=
RETURN_OK) {
return POST_DEV_CFG_FAIL;
}
@@ -129,9 +129,7 @@ static ePostCode _init(void *driver, const void *config,
/* TODO: enable alerts (requires major ADT driver changes) */
const Driver_fxnTable ADT7481_fxnTable = {
/* Message handlers */
.cb_probe = _probe,
.cb_init = _init,
.cb_get_status = _get_status,
.cb_get_config = _get_config,
.cb_probe = _probe, .cb_init = _init,
.cb_get_status = _get_status, .cb_get_config = _get_config,
.cb_set_config = _set_config,
};

View File

@@ -14,8 +14,7 @@
#include <string.h>
static bool _sid_get_status_parameters_data(void *driver,
unsigned int param,
static bool _sid_get_status_parameters_data(void *driver, unsigned int param,
void *data);
/*****************************************************************************
** FUNCTION NAME : _sid_get_status_parameters_data
@@ -27,32 +26,26 @@ static bool _sid_get_status_parameters_data(void *driver,
** RETURN TYPE : Success or Failure
**
*****************************************************************************/
static bool _sid_get_status_parameters_data(void *driver,
unsigned int param,
static bool _sid_get_status_parameters_data(void *driver, unsigned int param,
void *data)
{
const eOCStatusParamId paramIndex = (eOCStatusParamId)param;
const Eeprom_Cfg *cfg = ( Eeprom_Cfg*)driver;
const Eeprom_Cfg *cfg = (Eeprom_Cfg *)driver;
ReturnStatus status = RETURN_OK;
switch (paramIndex) {
case OC_STAT_SYS_SERIAL_ID:
{
case OC_STAT_SYS_SERIAL_ID: {
memset(data, '\0', OC_CONNECT1_SERIAL_SIZE + 1);
status = eeprom_read_oc_info(data);
LOGGER_DEBUG("SYS:INFO:::: OC Connect1 serial id %s.\n",
data);
LOGGER_DEBUG("SYS:INFO:::: OC Connect1 serial id %s.\n", data);
break;
}
case OC_STAT_SYS_GBC_BOARD_ID:
{
case OC_STAT_SYS_GBC_BOARD_ID: {
memset(data, '\0', OC_GBC_BOARD_INFO_SIZE + 1);
status = eeprom_read_board_info(cfg, data);
LOGGER_DEBUG("SYS:INFO:::: OC Connect1 GBC board is %s.\n",
data);
LOGGER_DEBUG("SYS:INFO:::: OC Connect1 GBC board is %s.\n", data);
break;
}
default:
{
default: {
status = RETURN_NOTOK;
}
}
@@ -70,11 +63,12 @@ static bool _sid_get_status_parameters_data(void *driver,
**
*****************************************************************************/
bool Sdr_InventoryGetStatus(void *driver, unsigned int param_id,
void *return_buf) {
const Eeprom_Cfg *cfg = ( Eeprom_Cfg*)driver;
void *return_buf)
{
const Eeprom_Cfg *cfg = (Eeprom_Cfg *)driver;
switch (param_id) {
case 0: /* TODO: gross magic number */
memset(return_buf,'\0', OC_SDR_BOARD_INFO_SIZE + 1);
memset(return_buf, '\0', OC_SDR_BOARD_INFO_SIZE + 1);
if (eeprom_read_board_info(cfg, return_buf) == RETURN_OK) {
return true;
}
@@ -97,13 +91,13 @@ bool Sdr_InventoryGetStatus(void *driver, unsigned int param_id,
**
*****************************************************************************/
bool RFFE_InventoryGetStatus(void *driver, unsigned int param_id,
void *return_buf) {
void *return_buf)
{
const Eeprom_Cfg *cfg = (Eeprom_Cfg *)driver;
switch (param_id) {
case 0: /* TODO: gross magic number */
memset(return_buf, '\0', OC_RFFE_BOARD_INFO_SIZE + 1);
if (eeprom_read_board_info(cfg, return_buf)
== RETURN_OK) {
if (eeprom_read_board_info(cfg, return_buf) == RETURN_OK) {
return true;
}
LOGGER_DEBUG("RFFE:INFO:: Board id: %s\n", return_buf);
@@ -137,23 +131,22 @@ static ePostCode _init_eeprom(void *driver, const void **config,
const Driver_fxnTable CAT24C04_gbc_sid_fxnTable = {
/* Message handlers */
.cb_init = _init_eeprom,
.cb_get_status = _sid_get_status_parameters_data,
.cb_init = _init_eeprom,
.cb_get_status = _sid_get_status_parameters_data,
};
const Driver_fxnTable CAT24C04_gbc_inv_fxnTable= {
const Driver_fxnTable CAT24C04_gbc_inv_fxnTable = {
.cb_init = _init_eeprom,
};
const Driver_fxnTable CAT24C04_sdr_inv_fxnTable = {
/* Message handlers */
.cb_init = _init_eeprom,
.cb_get_status = Sdr_InventoryGetStatus,
.cb_init = _init_eeprom,
.cb_get_status = Sdr_InventoryGetStatus,
};
const Driver_fxnTable CAT24C04_fe_inv_fxnTable = {
/* Message handlers */
.cb_init = _init_eeprom,
.cb_get_status = RFFE_InventoryGetStatus,
.cb_init = _init_eeprom,
.cb_get_status = RFFE_InventoryGetStatus,
};

View File

@@ -21,17 +21,15 @@ typedef enum DatConfig {
DAT_CONFIG_ATTENUATION = 0,
} DatConfig;
static bool _get_config(void *driver, unsigned int param_id,
void *return_buf) {
static bool _get_config(void *driver, unsigned int param_id, void *return_buf)
{
bool ret = false;
switch (param_id) {
case DAT_CONFIG_ATTENUATION: {
DATR5APP_Cfg *cfg = driver;
uint8_t atten;
const PinGroup pin_group = {
.num_pin = DATR5APP_PIN_COUNT,
.pins = cfg->pin_group
};
const PinGroup pin_group = { .num_pin = DATR5APP_PIN_COUNT,
.pins = cfg->pin_group };
if (PinGroup_read(&pin_group, &atten) != RETURN_OK) {
ret = false;
} else {
@@ -64,17 +62,15 @@ static bool _set_attenuation(void *driver, int16_t atten)
/* Disable input latch */
OcGpio_write(&cfg->pin_le, false);
/* Attenuation enable */
// OcGpio_write(&cfg->pin_tx_attn_enb, true);
// OcGpio_write(&cfg->pin_tx_attn_enb, true);
/* Set the attenuation value */
/* TODO: value is provided as x2, so 0.5 value is bit 0, consider
* changing, at least on CLI to more intuitive interface */
const PinGroup pin_group = {
.num_pin = DATR5APP_PIN_COUNT,
.pins = cfg->pin_group
};
const PinGroup pin_group = { .num_pin = DATR5APP_PIN_COUNT,
.pins = cfg->pin_group };
if (PinGroup_write(&pin_group, atten) != RETURN_OK) {
if (PinGroup_write(&pin_group, atten) != RETURN_OK) {
return false;
}
@@ -88,8 +84,8 @@ static bool _set_attenuation(void *driver, int16_t atten)
return true;
}
static bool _set_config(void *driver, unsigned int param_id,
const void *data) {
static bool _set_config(void *driver, unsigned int param_id, const void *data)
{
switch (param_id) {
case DAT_CONFIG_ATTENUATION: {
return _set_attenuation(driver, *(int16_t *)data);
@@ -106,10 +102,8 @@ static ePostCode _probe(void *driver)
* assume that reading from the pin will tell us if the pin is working */
DATR5APP_Cfg *cfg = driver;
uint8_t atten;
const PinGroup pin_group = {
.num_pin = DATR5APP_PIN_COUNT,
.pins = cfg->pin_group
};
const PinGroup pin_group = { .num_pin = DATR5APP_PIN_COUNT,
.pins = cfg->pin_group };
if (PinGroup_read(&pin_group, &atten) != RETURN_OK) {
return POST_DEV_MISSING;
}
@@ -122,15 +116,14 @@ static ePostCode _init(void *driver, const void *config,
{
DATR5APP_Cfg *cfg = (DATR5APP_Cfg *)driver;
DATR5APP_Config *cfg_atten = (DATR5APP_Config *)config;
PinGroup pin_group = {
.num_pin = DATR5APP_PIN_COUNT,
.pins = cfg->pin_group
};
PinGroup pin_group = { .num_pin = DATR5APP_PIN_COUNT,
.pins = cfg->pin_group };
if (OcGpio_configure(&cfg->pin_le, OCGPIO_CFG_OUTPUT) < OCGPIO_SUCCESS) {
return POST_DEV_CFG_FAIL;
}
if (PinGroup_configure(&pin_group, OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_HIGH)
!= RETURN_OK) {
if (PinGroup_configure(&pin_group,
OCGPIO_CFG_OUTPUT | OCGPIO_CFG_OUT_HIGH) !=
RETURN_OK) {
return POST_DEV_CFG_FAIL;
}
@@ -139,11 +132,9 @@ static ePostCode _init(void *driver, const void *config,
return POST_DEV_CFG_DONE;
}
const Driver_fxnTable DATXXR5APP_fxnTable = {
const Driver_fxnTable DATXXR5APP_fxnTable = {
/* Message handlers */
.cb_probe = _probe,
.cb_init = _init,
.cb_get_status = NULL,
.cb_get_config = _get_config,
.cb_probe = _probe, .cb_init = _init,
.cb_get_status = NULL, .cb_get_config = _get_config,
.cb_set_config = _set_config,
};

View File

@@ -12,26 +12,27 @@
#include "common/inc/global/Framework.h"
#include "inc/common/global_header.h"
#include "inc/common/i2cbus.h"
#include "inc/devices/debug_oci2c.h"
#include "inc/devices/debug_oci2c.h"
/* TI-RTOS driver files */
#include <ti/drivers/I2C.h>
bool i2c_read(void* i2c_cfg, void *oci2c )
bool i2c_read(void *i2c_cfg, void *oci2c)
{
S_I2C_Cfg* s_oc_i2c_cfg = (S_I2C_Cfg*)i2c_cfg;
S_OCI2C* s_oci2c = (S_OCI2C*)oci2c;
S_I2C_Cfg *s_oc_i2c_cfg = (S_I2C_Cfg *)i2c_cfg;
S_OCI2C *s_oci2c = (S_OCI2C *)oci2c;
I2C_Handle i2cHandle = i2c_open_bus(s_oc_i2c_cfg->bus);
return (i2c_reg_read(i2cHandle, s_oci2c->slaveAddress, s_oci2c->reg_address, &s_oci2c->reg_value, s_oci2c->number_of_bytes) == RETURN_OK);
return (i2c_reg_read(i2cHandle, s_oci2c->slaveAddress, s_oci2c->reg_address,
&s_oci2c->reg_value,
s_oci2c->number_of_bytes) == RETURN_OK);
}
bool i2c_write(void* i2c_cfg, void *oci2c )
bool i2c_write(void *i2c_cfg, void *oci2c)
{
S_I2C_Cfg* s_oc_i2c_cfg = (S_I2C_Cfg*)i2c_cfg;
S_OCI2C* s_oci2c = (S_OCI2C*)oci2c;
I2C_Handle i2cHandle = i2c_open_bus(s_oc_i2c_cfg->bus);
return (i2c_reg_write(i2cHandle, s_oci2c->slaveAddress, s_oci2c->reg_address, s_oci2c->reg_value, s_oci2c->number_of_bytes) == RETURN_OK);
S_I2C_Cfg *s_oc_i2c_cfg = (S_I2C_Cfg *)i2c_cfg;
S_OCI2C *s_oci2c = (S_OCI2C *)oci2c;
I2C_Handle i2cHandle = i2c_open_bus(s_oc_i2c_cfg->bus);
return (i2c_reg_write(i2cHandle, s_oci2c->slaveAddress,
s_oci2c->reg_address, s_oci2c->reg_value,
s_oci2c->number_of_bytes) == RETURN_OK);
}

View File

@@ -20,57 +20,66 @@
#define PORT_REG_REQUEST(port) check_clause_22(s_oc_mdio_cfg->port)
#define PHY_PORT_MAX 5
bool check_clause_45(uint16_t regAddr) {
bool check_clause_45(uint16_t regAddr)
{
bool status = false;
if (REG_C45_PACKET_GEN == regAddr || REG_C45_CRC_ERROR_COUNTER == regAddr)
status = true;
return status;
}
bool check_clause_22(uint8_t port) {
bool check_clause_22(uint8_t port)
{
bool status = false;
if (port < PHY_PORT_MAX)
status = true;
return status;
}
bool mdio_read(void* mdio_cfg, void *ocmdio )
bool mdio_read(void *mdio_cfg, void *ocmdio)
{
S_MDIO_Cfg* s_oc_mdio_cfg = (S_MDIO_Cfg*)mdio_cfg;
S_OCMDIO* s_ocmdio = (S_OCMDIO*)ocmdio;
s_ocmdio->reg_value= 0xf00f;
S_MDIO_Cfg *s_oc_mdio_cfg = (S_MDIO_Cfg *)mdio_cfg;
S_OCMDIO *s_ocmdio = (S_OCMDIO *)ocmdio;
s_ocmdio->reg_value = 0xf00f;
if (CLAUSE_45_REQUEST(reg_address))
/*PHY registers use Reg 13 and Reg 14 as paging mechanism to access Clause 45 registers*/
s_ocmdio->reg_value = mdiobb_read_by_paging_c45(s_oc_mdio_cfg->port, s_ocmdio->reg_address);
s_ocmdio->reg_value = mdiobb_read_by_paging_c45(s_oc_mdio_cfg->port,
s_ocmdio->reg_address);
else if (PORT_REG_REQUEST(port))
/*PHY registers use Reg 13 and Reg 14 as paging mechanism to access Clause 22 registers*/
s_ocmdio->reg_value = mdiobb_read_by_paging(s_oc_mdio_cfg->port, s_ocmdio->reg_address);
s_ocmdio->reg_value = mdiobb_read_by_paging(s_oc_mdio_cfg->port,
s_ocmdio->reg_address);
else
/*GLOBAL and SWITCH registers can be accessed directly*/
s_ocmdio->reg_value = mdiobb_read(s_oc_mdio_cfg->port, s_ocmdio->reg_address);
s_ocmdio->reg_value =
mdiobb_read(s_oc_mdio_cfg->port, s_ocmdio->reg_address);
return 0;
}
bool mdio_write(void* mdio_cfg, void *ocmdio )
bool mdio_write(void *mdio_cfg, void *ocmdio)
{
S_MDIO_Cfg* s_oc_mdio_cfg = (S_MDIO_Cfg*)mdio_cfg;
S_OCMDIO* s_ocmdio = (S_OCMDIO*)ocmdio;
S_MDIO_Cfg *s_oc_mdio_cfg = (S_MDIO_Cfg *)mdio_cfg;
S_OCMDIO *s_ocmdio = (S_OCMDIO *)ocmdio;
if (CLAUSE_45_REQUEST(reg_address)) {
/*PHY registers use Reg 13 and Reg 14 as paging mechanism to access Clause 45 registers*/
mdiobb_write_by_paging_c45(s_oc_mdio_cfg->port, s_ocmdio->reg_address, s_ocmdio->reg_value);
s_ocmdio->reg_value = mdiobb_read_by_paging_c45(s_oc_mdio_cfg->port, s_ocmdio->reg_address);
}
else if (PORT_REG_REQUEST(port)) {
mdiobb_write_by_paging_c45(s_oc_mdio_cfg->port, s_ocmdio->reg_address,
s_ocmdio->reg_value);
s_ocmdio->reg_value = mdiobb_read_by_paging_c45(s_oc_mdio_cfg->port,
s_ocmdio->reg_address);
} else if (PORT_REG_REQUEST(port)) {
/*PHY registers use Reg 13 and Reg 14 as paging mechanism to access Clause 22 registers*/
mdiobb_write_by_paging(s_oc_mdio_cfg->port, s_ocmdio->reg_address, s_ocmdio->reg_value);
s_ocmdio->reg_value = mdiobb_read_by_paging(s_oc_mdio_cfg->port, s_ocmdio->reg_address);
}
else {
mdiobb_write_by_paging(s_oc_mdio_cfg->port, s_ocmdio->reg_address,
s_ocmdio->reg_value);
s_ocmdio->reg_value = mdiobb_read_by_paging(s_oc_mdio_cfg->port,
s_ocmdio->reg_address);
} else {
/*GLOBAL and SWITCH registers can be accessed directly*/
mdiobb_write(s_oc_mdio_cfg->port, s_ocmdio->reg_address, s_ocmdio->reg_value);
s_ocmdio->reg_value = mdiobb_read(s_oc_mdio_cfg->port, s_ocmdio->reg_address);
mdiobb_write(s_oc_mdio_cfg->port, s_ocmdio->reg_address,
s_ocmdio->reg_value);
s_ocmdio->reg_value =
mdiobb_read(s_oc_mdio_cfg->port, s_ocmdio->reg_address);
}
return 0;
}

View File

@@ -13,43 +13,54 @@
#include "inc/common/global_header.h"
#include "inc/devices/debug_ocgpio.h"
#include <ti/drivers/GPIO.h>
#define NO_GPIO_PINS_IN_GROUP 8
#define NO_GPIO_PINS_IN_GROUP 8
extern GPIO_PinConfig gpioPinConfigs[];
bool ocgpio_set(void* gpio_cfg, void* oc_gpio )
bool ocgpio_set(void *gpio_cfg, void *oc_gpio)
{
S_OCGPIO_Cfg* oc_gpio_cfg = (S_OCGPIO_Cfg*)gpio_cfg;
S_OCGPIO* s_oc_gpio = (S_OCGPIO*)oc_gpio;
S_OCGPIO_Cfg *oc_gpio_cfg = (S_OCGPIO_Cfg *)gpio_cfg;
S_OCGPIO *s_oc_gpio = (S_OCGPIO *)oc_gpio;
int ret = 0;
uint8_t idx = ((oc_gpio_cfg->group != 0)?(((oc_gpio_cfg->group-1) * NO_GPIO_PINS_IN_GROUP) + s_oc_gpio->pin):s_oc_gpio->pin);
OcGpio_Pin ocgpio = { (oc_gpio_cfg->port), idx, ((oc_gpio_cfg->group != 0)?(gpioPinConfigs[idx]>>16):OCGPIO_CFG_OUT_STD)};
uint8_t idx = ((oc_gpio_cfg->group != 0) ?
(((oc_gpio_cfg->group - 1) * NO_GPIO_PINS_IN_GROUP) +
s_oc_gpio->pin) :
s_oc_gpio->pin);
OcGpio_Pin ocgpio = { (oc_gpio_cfg->port), idx,
((oc_gpio_cfg->group != 0) ?
(gpioPinConfigs[idx] >> 16) :
OCGPIO_CFG_OUT_STD) };
ret = OcGpio_configure(&ocgpio, OCGPIO_CFG_OUTPUT);
ret = OcGpio_write(&ocgpio,s_oc_gpio->value);
ret = OcGpio_write(&ocgpio, s_oc_gpio->value);
return (ret == 0);
}
bool ocgpio_get(void* gpio_cfg, void* oc_gpio )
bool ocgpio_get(void *gpio_cfg, void *oc_gpio)
{
S_OCGPIO_Cfg* oc_gpio_cfg = (S_OCGPIO_Cfg*)gpio_cfg;
S_OCGPIO* s_oc_gpio = (S_OCGPIO*)oc_gpio;
S_OCGPIO_Cfg *oc_gpio_cfg = (S_OCGPIO_Cfg *)gpio_cfg;
S_OCGPIO *s_oc_gpio = (S_OCGPIO *)oc_gpio;
int ret = 0;
uint8_t idx = ((oc_gpio_cfg->group != 0)?(((oc_gpio_cfg->group-1) * NO_GPIO_PINS_IN_GROUP) + s_oc_gpio->pin):s_oc_gpio->pin);
OcGpio_Pin ocgpio = { (oc_gpio_cfg->port), idx, ((oc_gpio_cfg->group!= 0)?(gpioPinConfigs[idx]>>16):OCGPIO_CFG_IN_PU)};
uint8_t idx = ((oc_gpio_cfg->group != 0) ?
(((oc_gpio_cfg->group - 1) * NO_GPIO_PINS_IN_GROUP) +
s_oc_gpio->pin) :
s_oc_gpio->pin);
OcGpio_Pin ocgpio = { (oc_gpio_cfg->port), idx,
((oc_gpio_cfg->group != 0) ?
(gpioPinConfigs[idx] >> 16) :
OCGPIO_CFG_IN_PU) };
ret = OcGpio_configure(&ocgpio, OCGPIO_CFG_INPUT);
s_oc_gpio->value = OcGpio_read(&ocgpio);
if ( s_oc_gpio->value < 0) {
if (s_oc_gpio->value < 0) {
ret = -1;
}
return (ret == 0);
}
static ePostCode _probe(S_OCGPIO_Cfg* oc_gpio_cfg)
static ePostCode _probe(S_OCGPIO_Cfg *oc_gpio_cfg)
{
if (OcGpio_probe(oc_gpio_cfg->port) != 0) {
return POST_DEV_MISSING;
return POST_DEV_MISSING;
} else {
return POST_DEV_FOUND;
}

View File

@@ -53,34 +53,39 @@ bool ETHERNET_tivaClient(void *driver, void *params)
return status;
}
static bool _get_status(void *driver, unsigned int param_id,
void *return_buf)
static bool _get_status(void *driver, unsigned int param_id, void *return_buf)
{
Eth_cfg *cfg = (Eth_cfg*)driver;
Eth_cfg *cfg = (Eth_cfg *)driver;
switch (param_id) {
case ETH_SW_STATUS_SPEED: {
uint8_t *res = return_buf;
return (eth_sw_get_status_speed(cfg->eth_sw_port, res) == RETURN_OK);
return (eth_sw_get_status_speed(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_STATUS_DUPLEX: {
uint8_t *res = return_buf;
return (eth_sw_get_status_duplex(cfg->eth_sw_port, res) == RETURN_OK);
return (eth_sw_get_status_duplex(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_STATUS_AUTONEG_ON: {
uint8_t *res = return_buf;
return (eth_sw_get_status_auto_neg(cfg->eth_sw_port, res) == RETURN_OK);
return (eth_sw_get_status_auto_neg(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_STATUS_SLEEP_MODE_EN: {
uint8_t *res = return_buf;
return (eth_sw_get_status_sleep_mode(cfg->eth_sw_port, res) == RETURN_OK);
return (eth_sw_get_status_sleep_mode(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_STATUS_AUTONEG_COMPLETE: {
uint8_t *res = return_buf;
return (eth_sw_get_status_auto_neg_complete(cfg->eth_sw_port, res) == RETURN_OK);
return (eth_sw_get_status_auto_neg_complete(cfg->eth_sw_port,
res) == RETURN_OK);
}
case ETH_SW_STATUS_LINK: {
uint8_t *res = return_buf;
return (eth_sw_get_status_link_up(cfg->eth_sw_port, res) == RETURN_OK);
return (eth_sw_get_status_link_up(cfg->eth_sw_port, res) ==
RETURN_OK);
}
default:
LOGGER_ERROR("ETH_SW::Unknown status param %d\n", param_id);
@@ -88,41 +93,39 @@ static bool _get_status(void *driver, unsigned int param_id,
}
}
static bool _get_config(void *driver, unsigned int param_id,
void *return_buf)
static bool _get_config(void *driver, unsigned int param_id, void *return_buf)
{
Eth_cfg *cfg = (Eth_cfg*)driver;
Eth_cfg *cfg = (Eth_cfg *)driver;
switch (param_id) {
case ETH_SW_CONFIG_SPEED: {
uint8_t *res = return_buf;
return (eth_sw_get_config_speed(cfg->eth_sw_port, res)
== RETURN_OK);
return (eth_sw_get_config_speed(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_CONFIG_DUPLEX: {
uint8_t *res = return_buf;
return (eth_sw_get_config_duplex(cfg->eth_sw_port, res)
== RETURN_OK);
return (eth_sw_get_config_duplex(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_CONFIG_POWER_DOWN: {
uint8_t *res = return_buf;
return (eth_sw_get_config_power_down(cfg->eth_sw_port, res)
== RETURN_OK);
return (eth_sw_get_config_power_down(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_CONFIG_SLEEPMODE_EN: {
uint8_t *res = return_buf;
return (eth_sw_get_config_sleep_mode(cfg->eth_sw_port, res)
== RETURN_OK);
return (eth_sw_get_config_sleep_mode(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_CONFIG_INTERRUPT_EN: {
uint8_t *res = return_buf;
return (eth_sw_get_config_interrupt_enable(cfg->eth_sw_port, res)
== RETURN_OK);
return (eth_sw_get_config_interrupt_enable(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_CONFIG_SW_RESET: {
uint8_t *res = return_buf;
*res = 0;
return false;
}
case ETH_SW_CONFIG_RESTART_AUTONEG: {
uint8_t *res = return_buf;
@@ -135,47 +138,47 @@ static bool _get_config(void *driver, unsigned int param_id,
}
}
static bool _set_config(void *driver, unsigned int param_id,
const void *data)
static bool _set_config(void *driver, unsigned int param_id, const void *data)
{
Eth_cfg *cfg = (Eth_cfg*)driver;
Eth_cfg *cfg = (Eth_cfg *)driver;
switch (param_id) {
case ETH_SW_CONFIG_SPEED: {
uint8_t *res = (uint8_t*)data;
return (eth_sw_set_config_speed(cfg->eth_sw_port, *res)
== RETURN_OK);
}
case ETH_SW_CONFIG_DUPLEX: {
uint8_t *res = (uint8_t*)data;
return (eth_sw_set_config_duplex(cfg->eth_sw_port, *res)
== RETURN_OK);
}
case ETH_SW_CONFIG_POWER_DOWN: {
uint8_t *res = (uint8_t*)data;
return (eth_sw_set_config_power_down(cfg->eth_sw_port, *res)
== RETURN_OK);
}
case ETH_SW_CONFIG_SLEEPMODE_EN: {
uint8_t *res = (uint8_t*)data;
return (eth_sw_set_config_sleep_mode_enable(cfg->eth_sw_port, *res)
== RETURN_OK);
}
case ETH_SW_CONFIG_INTERRUPT_EN: {
uint8_t *res = (uint8_t*)data;
return (eth_sw_set_config_interrupt_enable(cfg->eth_sw_port, res)
== RETURN_OK);
}
case ETH_SW_CONFIG_SW_RESET: {
return (eth_sw_set_config_soft_reset(cfg->eth_sw_port)
== RETURN_OK);
}
case ETH_SW_CONFIG_RESTART_AUTONEG: {
return (eth_sw_set_config_restart_neg(cfg->eth_sw_port) == RETURN_OK);
}
default:
LOGGER_ERROR("ETH_SW::Unknown config param %d\n", param_id);
return false;
}
case ETH_SW_CONFIG_SPEED: {
uint8_t *res = (uint8_t *)data;
return (eth_sw_set_config_speed(cfg->eth_sw_port, *res) ==
RETURN_OK);
}
case ETH_SW_CONFIG_DUPLEX: {
uint8_t *res = (uint8_t *)data;
return (eth_sw_set_config_duplex(cfg->eth_sw_port, *res) ==
RETURN_OK);
}
case ETH_SW_CONFIG_POWER_DOWN: {
uint8_t *res = (uint8_t *)data;
return (eth_sw_set_config_power_down(cfg->eth_sw_port, *res) ==
RETURN_OK);
}
case ETH_SW_CONFIG_SLEEPMODE_EN: {
uint8_t *res = (uint8_t *)data;
return (eth_sw_set_config_sleep_mode_enable(cfg->eth_sw_port,
*res) == RETURN_OK);
}
case ETH_SW_CONFIG_INTERRUPT_EN: {
uint8_t *res = (uint8_t *)data;
return (eth_sw_set_config_interrupt_enable(cfg->eth_sw_port, res) ==
RETURN_OK);
}
case ETH_SW_CONFIG_SW_RESET: {
return (eth_sw_set_config_soft_reset(cfg->eth_sw_port) ==
RETURN_OK);
}
case ETH_SW_CONFIG_RESTART_AUTONEG: {
return (eth_sw_set_config_restart_neg(cfg->eth_sw_port) ==
RETURN_OK);
}
default:
LOGGER_ERROR("ETH_SW::Unknown config param %d\n", param_id);
return false;
}
}
static ePostCode _probe(void *driver, POSTData *postData)
@@ -206,9 +209,9 @@ static void _alert_handler(Eth_Sw_Events evt, int16_t value, void *alert_data)
case ETH_EVT_ENERGY:
alert = ETH_ALERT_ENERGY_DET;
case ETH_EVT_POLARITY:
alert = ETH_ALERT_POLARITY_DET;
alert = ETH_ALERT_POLARITY_DET;
case ETH_EVT_JABBER:
alert = ETH_ALERT_JABBER_DET;
alert = ETH_ALERT_JABBER_DET;
break;
default:
LOGGER_ERROR("ETH_SW::Unknown Ethernet Switch evt: %d\n", evt);
@@ -233,9 +236,7 @@ static ePostCode _init(void *driver, const void *config,
const Driver_fxnTable eth_fxnTable = {
/* Message handlers */
.cb_probe = _probe,
.cb_init = _init,
.cb_get_status = _get_status,
.cb_get_config = _get_config,
.cb_probe = _probe, .cb_init = _init,
.cb_get_status = _get_status, .cb_get_config = _get_config,
.cb_set_config = _set_config,
};

View File

@@ -55,44 +55,38 @@ bool rffe_ctrl_get_band(rffeChannel channel, rffeBand *band)
return true;
}
bool static _get_config(void *driver, unsigned int param_id,
void *return_buf)
{
bool static _get_config(void *driver, unsigned int param_id, void *return_buf)
{
bool ret = false;
FE_Ch_Band_cfg *driverCfg = driver;
switch (param_id) {
case FE_CFG_BAND:
{
ret = rffe_ctrl_get_band(driverCfg->channel,return_buf);
break;
}
default:
{
LOGGER_ERROR("FE_PARAM::Unknown config param %d\n", param_id);
ret = false;
}
case FE_CFG_BAND: {
ret = rffe_ctrl_get_band(driverCfg->channel, return_buf);
break;
}
default: {
LOGGER_ERROR("FE_PARAM::Unknown config param %d\n", param_id);
ret = false;
}
}
return ret;
}
bool static _set_config(void *driver, unsigned int param_id,
void *return_buf)
bool static _set_config(void *driver, unsigned int param_id, void *return_buf)
{
bool ret = false;
FE_Ch_Band_cfg *driverCfg = driver;
rffeBand *band = (rffeBand*)return_buf;
rffeBand *band = (rffeBand *)return_buf;
switch (param_id) {
case FE_CFG_BAND:
{
rffeChannel *cfg = driver;
ret = rffe_ctrl_set_band(driverCfg->channel,*band);
break;
}
default:
{
LOGGER_ERROR("FE_PARAM::Unknown config param %d\n", param_id);
ret = false;
}
case FE_CFG_BAND: {
rffeChannel *cfg = driver;
ret = rffe_ctrl_set_band(driverCfg->channel, *band);
break;
}
default: {
LOGGER_ERROR("FE_PARAM::Unknown config param %d\n", param_id);
ret = false;
}
}
return ret;
}

Some files were not shown because too many files have changed in this diff Show More