![]() |
ISF
1.1
Intelligent Sensing Framework
|
00001 /*! 00002 ******************************************************************************** 00003 * File: isf_comm.h 00004 * 00005 * Copyright (c) 2012, Freescale Semiconductor, Inc. 00006 * 00007 *******************************************************************************/ 00008 /*! 00009 * @file isf_comm.h 00010 * @brief \b isf_comm.h defines the common types for the Communications Service Family of the Intelligent Sensing Framework (ISF). 00011 * @details This common types used by components in the ISF 00012 * Communications Service Family, including the I2C and Device Messaging 00013 * Components. Since the Device Messaging Component abstracts various 00014 * communications interfaces (I2C, SPI, RGPIO), it is important to ensure that 00015 * all abstracted components use common data types and function prototypes. 00016 * These types and prototypes are defined in the header file rather than in the Device 00017 * Messaging header file to avoid creating a circular dependency. 00018 */ 00019 #ifndef COMM_H 00020 #define COMM_H 00021 00022 #include <isf.h> 00023 00024 /*! @brief This macro is used for creating sized read/write buffers. */ 00025 #define COMM_SIZED_BUFFER(bufSize) \ 00026 struct { uint16 size; uint8 buffer[(bufSize)]; } 00027 00028 /*! @brief This macro is used for creating concretely sized typedefs compatible with type comm_Command_t. */ 00029 #define COMM_CMD_DEFN(cmdLen) \ 00030 struct { uint16 nWrite; uint16 nRead; uint8 cmdWords[(cmdLen)]; } 00031 00032 /*! @brief This enum defines the possible communications channel states. */ 00033 enum comm_State_vals { 00034 COMM_STATE_NO_INIT = 0, /*!< Channel has not been initialized. */ 00035 COMM_STATE_INIT = 1, /*!< Channel is initialized, but not ready to use because channel is not started or configured.*/ 00036 COMM_STATE_OK = 2, /*!< Channel is ready to use without errors. */ 00037 COMM_STATE_STOPPED = 3, /*!< Channel is currently stopped. */ 00038 COMM_STATE_LOCKED = 4, /*!< Channel is locked (busy). */ 00039 COMM_STATE_ERROR = 5, /*!< A null pointer was provided as an argument. */ 00040 COMM_STATE_ARB_LOST = 6 /*!< Channel arbitration has been lost. */ 00041 }; 00042 00043 /*! @brief This enum defines the possible communications channel error codes. */ 00044 enum comm_Error_vals { 00045 COMM_ERROR_INIT = 1, /*!< A channel initialization error has occurred. */ 00046 COMM_ERROR_STOP = 2, /*!< A channel stop-related error has occurred. */ 00047 COMM_ERROR_LOCK = 3, /*!< A channel lock-related error has occurred. */ 00048 COMM_ERROR_TIME_OUT = 4, /*!< Channel has timed out. */ 00049 COMM_ERROR_NULL_PTR = 5, /*!< A null pointer was provided as an argument. */ 00050 COMM_ERROR_NOEXIST = 6, /*!< The referenced entity does not exist. */ 00051 COMM_ERROR_BUF_SIZE = 7, /*!< The provided buffer is too small. */ 00052 COMM_ERROR_NO_ACK = 8, /*!< An acknowledgement was not received. */ 00053 COMM_ERROR_DEV_CLOSED = 9, /*!< Attempted read/write to a closed device. */ 00054 COMM_ERROR_OTHER = 10 /*!< An unspecified channel error has occured. */ 00055 }; 00056 00057 /*! @brief This type is for a numeric channel identifier- index into an array of channels 00058 * in the system. */ 00059 typedef uint8 comm_Id_t; 00060 00061 /*! @brief This enum holds an enumerated value describing the state of a channel. */ 00062 typedef enum comm_State_vals comm_State_t; 00063 00064 /*! @brief This type is for a channel address for both 7-bit and 10-bit addresses. */ 00065 typedef uint16 comm_Address_t; 00066 00067 /*! @brief This is a bit array of flags governing device read/write behavior. */ 00068 typedef uint32 comm_Flags_t; 00069 00070 /* The design goal with these types is to reduce RAM usage requirement by allowing the static portions of the 00071 * messages to be usable from flash memory. */ 00072 00073 /*! @brief This structure defines a buffer to hold data read from or written to a 00074 * device. */ 00075 typedef struct comm_MessageBuffer_struct { 00076 uint16 size; /*!< The size of the buffer.*/ 00077 uint8 buffer[]; /*!< Buffer defined to hold data.*/ 00078 } comm_MessageBuffer_t; 00079 00080 /*! @brief This structure defines the command sent to a device. */ 00081 typedef struct comm_Command_struct { 00082 uint16 nWrite; /*!< Number of bytes to write.*/ 00083 uint16 nRead; /*!< Number of bytes to read. */ 00084 uint8 cmdWords[]; /*!< Command buffer associated with the data. */ 00085 } comm_Command_t; 00086 00087 #endif /* COMM_H */