Index: App/Services/FPGA.c =================================================================== diff -u -r1bd1ef307be5997209c42219d5be381bbeffabe4 -rf97f667f6147c200e47e46d50306a89ee57c19f3 --- App/Services/FPGA.c (.../FPGA.c) (revision 1bd1ef307be5997209c42219d5be381bbeffabe4) +++ App/Services/FPGA.c (.../FPGA.c) (revision f97f667f6147c200e47e46d50306a89ee57c19f3) @@ -158,6 +158,12 @@ memset( &fpgaSensorReadings, 0, sizeof(FPGA_SENSORS_T) ); memset( &fpgaActuatorSetPoints, 0, sizeof(FPGA_ACTUATORS_T) ); + // initialize fpga comm buffers + memset( &fpgaWriteCmdBuffer, 0, FPGA_WRITE_CMD_BUFFER_LEN ); + memset( &fpgaReadCmdBuffer, 0, FPGA_READ_CMD_BUFFER_LEN ); + memset( &fpgaWriteResponseBuffer, 0, FPGA_WRITE_RSP_BUFFER_LEN ); + memset( &fpgaReadResponseBuffer, 0, FPGA_READ_RSP_BUFFER_LEN ); + // enable interrupt notifications for FPGA serial port sciEnableNotification( scilinREG, SCI_OE_INT | SCI_FE_INT ); @@ -560,7 +566,7 @@ // does the FPGA response CRC check out? if ( 1 ) // TODO - check response CRC { // capture the read values - memcpy( &fpgaSensorReadings, fpgaReadResponseBuffer, sizeof(FPGA_SENSORS_T) ); + memcpy( &fpgaSensorReadings, &fpgaReadResponseBuffer[1], sizeof(FPGA_SENSORS_T) ); result = FPGA_STATE_WRITE_ALL_ACTUATORS; } } @@ -610,7 +616,15 @@ *************************************************************************/ static void setupDMAForWriteCmd( U32 bytes2Transmit ) { - fpgaDMAWriteControlRecord.FRCNT = bytes2Transmit; + // verify # of bytes does not exceed buffer length + if ( bytes2Transmit <= FPGA_WRITE_CMD_BUFFER_LEN ) + { + fpgaDMAWriteControlRecord.FRCNT = bytes2Transmit; + } + else + { + // TODO - s/w fault + } } /************************************************************************* @@ -642,7 +656,15 @@ *************************************************************************/ static void setupDMAForWriteResp( U32 bytes2Receive ) { - fpgaDMAWriteRespControlRecord.FRCNT = bytes2Receive; + // verify # of bytes does not exceed buffer length + if ( bytes2Receive <= FPGA_WRITE_RSP_BUFFER_LEN ) + { + fpgaDMAWriteRespControlRecord.FRCNT = bytes2Receive; + } + else + { + // TODO - s/w fault + } } /************************************************************************* @@ -674,7 +696,15 @@ *************************************************************************/ static void setupDMAForReadCmd( U32 bytes2Transmit ) { - fpgaDMAReadControlRecord.FRCNT = bytes2Transmit; + // verify # of bytes does not exceed buffer length + if ( bytes2Transmit <= FPGA_READ_CMD_BUFFER_LEN ) + { + fpgaDMAReadControlRecord.FRCNT = bytes2Transmit; + } + else + { + // TODO - s/w fault + } } /************************************************************************* @@ -706,7 +736,15 @@ *************************************************************************/ static void setupDMAForReadResp( U32 bytes2Receive ) { - fpgaDMAReadRespControlRecord.FRCNT = bytes2Receive; + // verify # of bytes does not exceed buffer length + if ( bytes2Receive <= FPGA_READ_RSP_BUFFER_LEN ) + { + fpgaDMAReadRespControlRecord.FRCNT = bytes2Receive; + } + else + { + // TODO - s/w fault + } } /*************************************************************************