30 #include "issdk_hal.h"    31 #include "gpio_driver.h"    38 #include "fsl_flashiap.h"    46 #define FXLS8471Q_SPI_CMD_LEN (2)    47 #define FXLS8471Q_SS_ACTIVE_VALUE SPI_SS_ACTIVE_LOW    52 #define FXLS8962_SPI_CMD_LEN (2)    53 #define FXLS8962_SS_ACTIVE_VALUE SPI_SS_ACTIVE_LOW    58 #define DIFF_P_SPI_CMD_LEN (1)    59 #define DIFF_P_SS_ACTIVE_VALUE SPI_SS_ACTIVE_LOW    60 #define ADS_NVM_SECTOR_NUM (ADS_NVM_ADDR / FSL_FEATURE_SYSCON_FLASH_SECTOR_SIZE_BYTES)    62 #define ADS_QUERY_NUM (sizeof(ADS_SensorQueryList) / sizeof(sensorAccess_t))    63 #define ADS_NUM_BOARDS (sizeof(gADS_QueryMap) / ADS_QUERY_NUM)    64 #define SPI_MAX_MSG_SIZE (64)   292     "FRDM-STBC-AGM01", 
"FRDM-STBC-SA9500", 
"FRDMSTBC-A8471",
   293                 "FRDMSTBC-P3115",   
"FRDMSTBI-DP300x",  
"FRDMSTBI-DP300x",  
"FRDMSTBC-B3115",
   294                 "FRDM-FXS-MULT2-B", 
"FRDM-STBC-AGMP03", 
"FRDM-STBC-AGMP03",     
"FRDM-STBC-AGM04",
   322     *(pWBuff) = offset & 0x7F; 
   323     *(pWBuff + 1) = offset & 0x80;
   339     *(pWBuff) = offset | 0x80; 
   340     *(pWBuff + 1) = offset & 0x80;
   343     memcpy(pWBuff + FXLS8471Q_SPI_CMD_LEN, pWritebuffer, size);
   380     if ((ARM_DRIVER_OK != status) || (whoAmi != reg))
   399     *(pWBuff) = offset | 0x80; 
   400     *(pWBuff + 1) = 0x00;
   416     *(pWBuff) = offset & 0x7F; 
   417     *(pWBuff + 1) = 0x00;
   420     memcpy(pWBuff + FXLS8962_SPI_CMD_LEN, pWritebuffer, size);
   457     if ((ARM_DRIVER_OK != status) || (whoAmi != reg))
   476     *(pWBuff) = offset & 0x7F; 
   492     *(pWBuff) = offset | 0x80; 
   495     memcpy(pWBuff + DIFF_P_SPI_CMD_LEN, pWritebuffer, size);
   532     if ((ARM_DRIVER_OK != status) || (whoAmi != reg))
   561     partNumber = (partNumber >> 8) | (partNumber << 8);
   588     if (ARM_DRIVER_OK != status || (cmdRespHdr[1] & 0x80) != 0x80 || cmdRespHdr[2] != 
ReadVersionInfo_MMA9553[3] ||
   605     if (ARM_DRIVER_OK != status)
   607         return ARM_DRIVER_ERROR;
   611     status = 
I2CextDrv->PowerControl(ARM_POWER_FULL);
   612     if (ARM_DRIVER_OK != status)
   614         return ARM_DRIVER_ERROR;
   618     status = 
I2CextDrv->Control(ARM_I2C_BUS_SPEED, ARM_I2C_BUS_SPEED_FAST);
   619     if (ARM_DRIVER_OK != status)
   621         return ARM_DRIVER_ERROR;
   633     if (ARM_DRIVER_OK != status)
   635         return ARM_DRIVER_ERROR;
   639     status = 
SPIdrv->PowerControl(ARM_POWER_FULL);
   640     if (ARM_DRIVER_OK != status)
   642         return ARM_DRIVER_ERROR;
   647     if (ARM_DRIVER_OK != status)
   649         return ARM_DRIVER_ERROR;
   661     if (ARM_DRIVER_OK != status)
   663         return ARM_DRIVER_ERROR;
   674     status = 
SPIdrv->Uninitialize();
   675     if (ARM_DRIVER_OK != status)
   677         return ARM_DRIVER_ERROR;
   701             if (
FXLS8962 == ADS_SensorQueryList[i].slaveAddr)
   705                     ADS_FXLS8962Query(ADS_SensorQueryList[i].whoAmIAddr, ADS_SensorQueryList[i].whoAmIValue);
   708             if (
FXLS8471 == ADS_SensorQueryList[i].slaveAddr)
   712                     ADS_FXLS8471Query(ADS_SensorQueryList[i].whoAmIAddr, ADS_SensorQueryList[i].whoAmIValue);
   715             if (
DIFF_P == ADS_SensorQueryList[i].slaveAddr)
   719                     ADS_DIFF_PQuery(ADS_SensorQueryList[i].whoAmIAddr, ADS_SensorQueryList[i].whoAmIValue);
   736             if (
FXLC95000 == ADS_SensorQueryList[i].slaveAddr)
   741             if (
MMA9553 == ADS_SensorQueryList[i].slaveAddr)
   747                                        ADS_SensorQueryList[i].whoAmIAddr, 1, ®);
   748             if ((ARM_DRIVER_OK != status) ||
   749                 ((ADS_SensorQueryList[i].whoAmIValue & ADS_SensorQueryList[i].whoAmIMask) !=
   750                  (reg & ADS_SensorQueryList[i].whoAmIMask)))
   791         status = ARM_DRIVER_OK;
   795         status = ARM_DRIVER_ERROR;
   809     if (pBoardString == NULL)
   811         return ARM_DRIVER_ERROR_PARAMETER;
   814     uint32_t command[5] = {0}, result[4] = {0};
   816     command[0] = kIapCmd_FLASHIAP_ReadPartId;
   817     iap_entry(command, result);
   825             MCUInfo.
board = ADS_ValidDEVIDValues[i].
board;
   830     status = ARM_DRIVER_OK;
   832     switch (MCUInfo.
board)
   835             strncpy(pBoardString, 
"LPCXPRESSO54113J128", bufferLength);
   838             strncpy(pBoardString, 
"LPCXPRESSO54113J256", bufferLength);
   841             strncpy(pBoardString, 
"LPCXPRESSO54114J256", bufferLength);
   844             status = ARM_DRIVER_ERROR;
   860     if (kStatus_FLASHIAP_Success != status)
   866         flashRecord.
length = strlen(pResultString);
   867         strcpy(flashRecord.
ADSString, pResultString);
   868         status = FLASHIAP_Compare(
ADS_NVM_ADDR, (uint32_t *)&flashRecord, 
sizeof(flashRecord));
   869         if (kStatus_FLASHIAP_Success != status)
   889     flashRecord.
length = strlen(pResultString);
   890     strcpy(flashRecord.
ADSString, pResultString);
   894     if (kStatus_FLASHIAP_Success == result)
   897         if (kStatus_FLASHIAP_Success == result)
   900             if (kStatus_FLASHIAP_Success == result)
   903                 result = FLASHIAP_CopyRamToFlash(
ADS_NVM_ADDR, (uint32_t *)&flashRecord,
   905                 if (kStatus_FLASHIAP_Success == result)
   923     if (ARM_DRIVER_ERROR == status)
   925         strncpy(boardString, 
"NotDetected", bufferLength);
   930     if (ARM_DRIVER_ERROR == status)
   932         strncpy(shieldString, 
"NotDetected", bufferLength);
   938     position = strlen(appName);
   940     finalString[position++] = 
':';
   943     position += strlen(shieldString);
   952         strcpy(finalString, shieldString);
   953         snprintf(shieldString, bufferLength, 
"Changed:%s", finalString);
 #define MMA9553_HDR_SIZE
Size of fixed header bytes in sensor commands. 
 
void(* set_pin)(pinID_t aPinId)
 
void ADS_FXLS8962_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size)
 
#define FXAS21002_WHO_AM_I_WHOAMI_PROD_VALUE
 
char ADSString[ADS_FLASH_STRING_LENGTH]
 
This structure defines the device specific info required by register I/O. 
 
#define ADS_NVM_SECTOR_NUM
 
void ADS_FXLS8962_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer)
 
The fxls8471q.h file contains the register definitions for fxls8471q sensor driver. 
 
GENERIC_DRIVER_GPIO * pGPIODriver
 
#define I2C_S1_DEVICE_INDEX
 
int32_t Register_I2C_Read(ARM_DRIVER_I2C *pCommDrv, registerDeviceInfo_t *devInfo, uint16_t slaveAddress, uint8_t offset, uint8_t length, uint8_t *pOutBuffer)
The interface function to read a sensor register. 
 
void ADS_FXLS8471Q_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer)
 
void BOARD_DELAY_ms(uint32_t delay_ms)
Function to insert delays. 
 
void ADS_InitSPI_DIFF_P()
 
ADS_Status_t ADS_FXLC95000Query()
 
#define FXOS8700_WHO_AM_I_PROD_VALUE
 
char shieldString[ADS_MAX_STRING_LENGTH]
 
The register_io_spi.h file declares low-level interface functions for reading and writing sensor regi...
 
uint8_t spiRead_DataBuffer[SPI_MAX_MSG_SIZE]
 
This structure defines the spi slave command format. 
 
#define FXLC95000_PART_NUMBER_OFFSET
Offset of 2-Byte SA95000 Part Number in Device Info Response. 
 
const uint8_t ReadVersionInfo_MMA9553[4]
The Read Version Info Command for FXLC95000. 
 
Access structure of the GPIO Driver. 
 
#define FXLC95000_I2C_ADDR
 
#define ADS_FLASH_STRING_LENGTH
 
ADS_Status_t ADS_FXLS8471Query(uint8_t whoAmiAddr, uint8_t whoAmi)
 
#define SPI_SS_ACTIVE_LOW
 
ADS_FlashStatus_t
This enumeration defines the ADS Flash storage status. 
 
This defines a record type to store ADS results string in Flash memory. 
 
int ADS_DetectShield(char *pShieldString, size_t bufferLength)
 
#define DIFF_P_SPI_CMD_LEN
These variables are specific to SPI access to the DIFF_P for ADS. 
 
uint8_t spiRead_CmdBuffer[SPI_MAX_MSG_SIZE]
 
#define FXLS8471Q_WHO_AM_I_WHOAMI_VALUE
 
void(* clr_pin)(pinID_t aPinId)
 
typedef int32_t(DATA_FORMAT_Append_t))(void *pData
The interface function to append the data on the formated stream. 
 
#define SPI_S_BAUDRATE
Transfer baudrate - 500k. 
 
uint8_t spiWrite_CmdDataBuffer[SPI_MAX_MSG_SIZE]
 
#define SPI_S_DEVICE_INDEX
 
void ADS_DIFF_P_SPI_WritePreprocess(void *pCmdOut, uint32_t offset, uint32_t size, void *pWritebuffer)
 
const ADS_Status_t gADS_QueryMap[][ADS_QUERY_NUM]
These are the expected query signatures for the shield boards. 
 
The register_io_i2c.h file declares low-level interface functions for reading and writing sensor regi...
 
#define DIFF_P_SS_ACTIVE_VALUE
 
ARM_DRIVER_SPI * SPIdrv
These values hold the ARM CMSIS Driver interface pointers. 
 
This defines a record type to store the communication channel info and WHO_AM_I address/value for var...
 
fpSpiReadPreprocessFn_t pReadPreprocessFN
 
The fxas21002.h contains the fxas21002 sensor register definitions and its bit mask. 
 
The SPI Slave Transfer Command Params SDK2.0 Driver. 
 
GENERIC_DRIVER_GPIO Driver_GPIO_KSDK
 
#define FXAS21002_I2C_ADDR
 
#define ADS_NVM_ADDR
start of the next to last 4K (sector size) of the 1M flash 
 
int ADS_DetectLPC(char *pBoardString, size_t bufferLength)
 
void BOARD_RunADS(const char *appName, char *boardString, char *shieldString, size_t bufferLength)
The function to register Application Name and initialte ADS. 
 
#define FXLS8471Q_SS_ACTIVE_VALUE
 
spiSlaveSpecificParams_t spiParams_8962
 
#define ADS_NO_SHIELD_DETECTED
 
ADS_SupportedBoards_t board
 
void ADS_InitSPI_FXLS8471()
 
ADS_Status_t ADS_DIFF_PQuery(uint8_t whoAmiAddr, uint8_t whoAmi)
 
#define FXLS8962_SPI_CMD_LEN
These variables are specific to SPI access to the FXLS8962 for ADS. 
 
#define I2C_S1_SIGNAL_EVENT
 
ADS_Status_t ADS_FlashUpdate(char *pResultString)
 
ADS_Status_t gADS_QueryResults[ADS_QUERY_NUM]
This global contains the results from the sensor query. 
 
int32_t Register_I2C_BlockWrite(ARM_DRIVER_I2C *pCommDrv, registerDeviceInfo_t *devInfo, uint16_t slaveAddress, uint8_t offset, const uint8_t *pBuffer, uint8_t bytesToWrite)
The interface function to write a sensor register. 
 
#define ADS_MAX_STRING_LENGTH
 
#define FXLC95000_PART_NUMBER_SIZE
The FXLC95000 Size of Part Number. 
 
void ADS_FXLS8471Q_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size)
 
#define FXPQ3115_WHOAMI_VALUE
 
spiSlaveSpecificParams_t spiParams_8471
 
#define MPL3115_WHOAMI_VALUE
 
char boardString[ADS_MAX_STRING_LENGTH]
 
ADS_Status_t ADS_MMA9553Query()
 
#define FXLC95000_PART_NUMBER
The FXLC95000 2-byte packed BCD encoded Part Number (BCD for Last 4 characters). 
 
fpSpiWritePreprocessFn_t pWritePreprocessFN
 
The auto_detection_shield.h file describes the definitions for Sensor I2C and SPI parameters required...
 
#define FXLS8471Q_SPI_CMD_LEN
These variables are specific to SPI access to the FXLS8471 for ADS. 
 
void(* pin_init)(pinID_t aPinId, gpio_direction_t dir, void *apPinConfig, gpio_isr_handler_t aIsrHandler, void *apUserData)
 
const sensorAccess_t ADS_SensorQueryList[]
This constant data structure contains the expected valid comm/sensor/who_am_i combinations. 
 
#define MAG3110_WHOAMI_VALUE
 
#define FXPQ3115_I2C_ADDR
 
ARM_DRIVER_I2C * I2CextDrv
 
void ADS_DIFF_P_SPI_ReadPreprocess(void *pCmdOut, uint32_t offset, uint32_t size)
 
spiSlaveSpecificParams_t spiParams_diff_p
 
enum ADS_Status ADS_Status_t
This defines the return status. 
 
#define SPI_S_SIGNAL_EVENT
 
This file contains the FXLS8962 Accelerometer register definitions, access macros, and device access functions. 
 
#define FXLS8962_I2C_ADDR
 
The fxos8700.h file contains the register definitions for FXOS8700 sensor driver. ...
 
#define FXLS8962_WHOAMI_VALUE
 
#define MMA8652_WHOAMI_VALUE
 
#define FXOS8700_I2C_ADDR
 
int32_t Register_SPI_Read(ARM_DRIVER_SPI *pCommDrv, registerDeviceInfo_t *devInfo, void *pReadParams, uint8_t offset, uint8_t length, uint8_t *pOutBuffer)
The interface function to read a sensor register. 
 
void ADS_InitSPI_FXLS8962()
 
const mcuDEVID_t ADS_ValidDEVIDValues[]
This constant data structure contains the expected valid MCU Device ID combinations. Refer : LPC5411x User manual - UM10914, Section: 33.5.12. 
 
ADS_Status_t ADS_FXLS8962Query(uint8_t whoAmiAddr, uint8_t whoAmi)
 
ADS_FlashStatus_t ADS_FlashCompare(char *pResultString)
 
#define FXLS8962_SS_ACTIVE_VALUE
 
This defines a record type to store the expected field values of the LPC device ID. 
 
char ADS_ShieldList[][ADS_MAX_STRING_LENGTH]