Index: firmware/App/Drivers/BarcodeReader.c =================================================================== diff -u --- firmware/App/Drivers/BarcodeReader.c (revision 0) +++ firmware/App/Drivers/BarcodeReader.c (revision f41df62e07626151238a2900eaac07ae3a405f5e) @@ -0,0 +1,456 @@ +/************************************************************************** +* +* Copyright (c) 2026-2026 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file BarcodeReader.c +* +* @author (last) Vijay Pamula +* @date (last) 19-August-2026 +* +* @author (original) Vijay Pamula +* @date (original) 19-August-2026 +* +***************************************************************************/ +#include "BarcodeReader.h" +#include "Common.h" +#include "FpgaTD.h" +#include "Timers.h" + +/** + * @addtogroup BarcodeReader + * @{ + */ + +// ********** private definitions ********** + +#define BARCODE_SCAN_TIMEOUT_MS 5000 ///< Maximum time allowed for a barcode scan to complete. +#define BARCODE_EXPECTED_DATA_LENGTH 36 ///< Expected blood tubing set barcode data length. +#define BARCODE_MAX_DATA_LENGTH 128 ///< Maximum number of barcode data bytes that can be stored. +#define BARCODE_COMMAND_READY_MASK 0x01 ///< Bit mask indicating the barcode interface is ready. +#define BARCODE_FIFO_READ_COUNT_MASK 0x0F80 ///< Bit mask for barcode response FIFO read word count. +#define BARCODE_FIFO_READ_COUNT_SHIFT 7 ///< Bit shift for barcode response FIFO read word count. +#define BARCODE_RESPONSE_START_CHAR '#' ///< Barcode response start character. +#define BARCODE_RESPONSE_END_CHAR '\r' ///< Barcode response termination character. +#define BARCODE_FIFO_READ_BYTE_COUNT 4 ///< Number of barcode response bytes read from the FPGA FIFO per read. + +/// Barcode reader state machine. +typedef enum barcodeReaderStates +{ + BARCODE_READER_IDLE_STATE = 0, ///< Waits for a barcode scan request. + BARCODE_READER_TRIGGER_STATE, ///< Triggers a barcode scan through the FPGA interface. + BARCODE_READER_WAIT_RESPONSE_STATE, ///< Waits for barcode response data or timeout/error condition. + BARCODE_READER_READ_FIFO_STATE ///< Reads barcode response data from the FPGA FIFO. +} BARCODE_READER_STATE_T; + +// ********** private data ********** + +static BARCODE_READER_STATE_T barcodeReaderState; +static BARCODE_SCAN_STATUS_T barcodeScanStatus; + +static BOOL pendingBarcodeScanRequest; + +static U08 barcodeData[ BARCODE_MAX_DATA_LENGTH ]; +static U16 barcodeDataLength; + +static U32 barcodeScanStartTime; +static U16 barcodeUartErrorStartCount; +static BOOL barcodeFifoReadPending; +static BOOL barcodeResponseComplete; + +// ********** private function prototypes ********** + +static BARCODE_READER_STATE_T handleBarcodeReaderIdleState( void ); +static BARCODE_READER_STATE_T handleBarcodeReaderTriggerState( void ); +static BARCODE_READER_STATE_T handleBarcodeReaderWaitResponseState( void ); +static BARCODE_READER_STATE_T handleBarcodeReaderReadFifoState( void ); +static BOOL isBarcodeResponseValid( void ); + +/*********************************************************************//** + * @brief + * The initBarcodeReaderDriver function initializes the barcode reader + * driver state and scan data. + * @details \b Inputs: none. + * @details \b Outputs: barcodeReaderState, barcodeScanStatus, + * pendingBarcodeScanRequest, barcodeData[], barcodeDataLength, + * barcodeScanStartTime, barcodeUartErrorStartCount, + * barcodeFifoReadPending, barcodeResponseComplete + * @return none + *************************************************************************/ +void initBarcodeReaderDriver( void ) +{ + U16 index; + + barcodeReaderState = BARCODE_READER_IDLE_STATE; + barcodeScanStatus = BARCODE_SCAN_STATUS_IDLE; + pendingBarcodeScanRequest = FALSE; + barcodeDataLength = 0; + barcodeScanStartTime = 0; + barcodeUartErrorStartCount = 0; + barcodeFifoReadPending = FALSE; + barcodeResponseComplete = FALSE; + + for ( index = 0; index < BARCODE_MAX_DATA_LENGTH; index++ ) + { + barcodeData[index] = 0; + } +} + +/*********************************************************************//** + * @brief + * The execBarcodeReaderDriver function executes the barcode reader + * state machine. + * @details \b Inputs: barcodeReaderState. + * @details \b Outputs: barcodeReaderState. + * @return none + *************************************************************************/ +void execBarcodeReaderDriver( void ) +{ + switch ( barcodeReaderState ) + { + case BARCODE_READER_IDLE_STATE: + barcodeReaderState = handleBarcodeReaderIdleState(); + break; + + case BARCODE_READER_TRIGGER_STATE: + barcodeReaderState = handleBarcodeReaderTriggerState(); + break; + + case BARCODE_READER_WAIT_RESPONSE_STATE: + barcodeReaderState = handleBarcodeReaderWaitResponseState(); + break; + + case BARCODE_READER_READ_FIFO_STATE: + barcodeReaderState = handleBarcodeReaderReadFifoState(); + break; + + default: + barcodeReaderState = BARCODE_READER_IDLE_STATE; + barcodeScanStatus = BARCODE_SCAN_STATUS_ERROR; + break; + } +} + +/*********************************************************************//** + * @brief + * The requestBarcodeScan function requests a new barcode scan. + * @details \b Inputs: barcodeReaderState, pendingBarcodeScanRequest. + * @details \b Outputs: pendingBarcodeScanRequest, barcodeScanStatus. + * @return TRUE if the barcode scan request is accepted, FALSE otherwise. + *************************************************************************/ +BOOL requestBarcodeScan( void ) +{ + BOOL result = FALSE; + + if ( ( BARCODE_READER_IDLE_STATE == barcodeReaderState ) && + ( FALSE == pendingBarcodeScanRequest ) ) + { + pendingBarcodeScanRequest = TRUE; + barcodeScanStatus = BARCODE_SCAN_STATUS_IN_PROGRESS; + result = TRUE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getBarcodeScanStatus function returns the current barcode scan + * status. + * @details \b Inputs: barcodeScanStatus. + * @details \b Outputs: none. + * @return Current barcode scan status. + *************************************************************************/ +BARCODE_SCAN_STATUS_T getBarcodeScanStatus( void ) +{ + return barcodeScanStatus; +} + +/*********************************************************************//** + * @brief + * The getBarcodeDataLength function returns the number of barcode data + * bytes received. + * @details \b Inputs: barcodeDataLength. + * @details \b Outputs: none. + * @return Number of valid barcode data bytes received. + *************************************************************************/ +U16 getBarcodeDataLength( void ) +{ + return barcodeDataLength; +} + +/*********************************************************************//** + * @brief + * The getBarcodeData function returns the received barcode data buffer. + * @details \b Inputs: barcodeData[]. + * @details \b Outputs: none. + * @return Pointer to the received barcode data buffer. + *************************************************************************/ +const U08 *getBarcodeData( void ) +{ + return barcodeData; +} + +/*********************************************************************//** + * @brief + * The handleBarcodeReaderIdleState function handles the barcode reader + * idle state. + * @details \b Inputs: pendingBarcodeScanRequest. + * @details \b Outputs: pendingBarcodeScanRequest, barcodeScanStatus, + * barcodeDataLength, barcodeScanStartTime, barcodeUartErrorStartCount, + * barcodeFifoReadPending, barcodeResponseComplete + * @return Next barcode reader state. + *************************************************************************/ +static BARCODE_READER_STATE_T handleBarcodeReaderIdleState( void ) +{ + BARCODE_READER_STATE_T nextState = BARCODE_READER_IDLE_STATE; + + if ( TRUE == pendingBarcodeScanRequest ) + { + pendingBarcodeScanRequest = FALSE; + barcodeScanStatus = BARCODE_SCAN_STATUS_IN_PROGRESS; + barcodeDataLength = 0; + barcodeFifoReadPending = FALSE; + barcodeResponseComplete = FALSE; + barcodeUartErrorStartCount = getFPGABarcodeUartError(); + barcodeScanStartTime = getMSTimerCount(); + + nextState = BARCODE_READER_TRIGGER_STATE; + } + + return nextState; +} + +/*********************************************************************//** + * @brief + * The handleBarcodeReaderTriggerState function waits for the barcode + * interface to become ready and triggers a barcode scan. + * @details \b Inputs: barcodeScanStartTime, FPGA barcode command status. + * @details \b Outputs: barcodeScanStatus, FPGA barcode trigger control. + * @return Next barcode reader state. + *************************************************************************/ +static BARCODE_READER_STATE_T handleBarcodeReaderTriggerState( void ) +{ + BARCODE_READER_STATE_T nextState = BARCODE_READER_TRIGGER_STATE; + + if ( 0 != ( getFPGABarcodeCommandStatus() & BARCODE_COMMAND_READY_MASK ) ) + { + setFPGABarcodeTriggerControl( 1 ); + + nextState = BARCODE_READER_WAIT_RESPONSE_STATE; + } + else if ( TRUE == didTimeout( barcodeScanStartTime, BARCODE_SCAN_TIMEOUT_MS ) ) + { + barcodeScanStatus = BARCODE_SCAN_STATUS_TIMEOUT; + + nextState = BARCODE_READER_IDLE_STATE; + } + + return nextState; +} + +/*********************************************************************//** + * @brief + * The handleBarcodeReaderWaitResponseState function waits for barcode + * response data from the FPGA. + * @details \b Inputs: barcodeScanStartTime, barcodeUartErrorStartCount, + * FPGA barcode UART error count, FPGA barcode FIFO status. + * @details \b Outputs: barcodeScanStatus. + * @return Next barcode reader state. + *************************************************************************/ +static BARCODE_READER_STATE_T handleBarcodeReaderWaitResponseState( void ) +{ + BARCODE_READER_STATE_T nextState = BARCODE_READER_WAIT_RESPONSE_STATE; + U16 fifoStatus = getFPGABarcodeFIFOStatus(); + U16 fifoCount = ( fifoStatus & BARCODE_FIFO_READ_COUNT_MASK ) >> + BARCODE_FIFO_READ_COUNT_SHIFT; + + if ( getFPGABarcodeUartError() != barcodeUartErrorStartCount ) + { + barcodeScanStatus = BARCODE_SCAN_STATUS_ERROR; + + nextState = BARCODE_READER_IDLE_STATE; + } + else if ( fifoCount > 0 ) + { + nextState = BARCODE_READER_READ_FIFO_STATE; + } + else if ( TRUE == didTimeout( barcodeScanStartTime, BARCODE_SCAN_TIMEOUT_MS ) ) + { + barcodeScanStatus = BARCODE_SCAN_STATUS_TIMEOUT; + + nextState = BARCODE_READER_IDLE_STATE; + } + + return nextState; +} + +/*********************************************************************//** + * @brief + * The handleBarcodeReaderReadFifoState function reads barcode response + * data from the FPGA FIFO. + * @details \b Inputs: barcodeFifoReadPending, barcodeResponseComplete, + * barcodeDataLength, barcodeScanStartTime, barcodeUartErrorStartCount, + * FPGA barcode UART error count, FPGA barcode FIFO status, + * FPGA barcode FIFO data. + * @details \b Outputs: barcodeFifoReadPending, barcodeResponseComplete, + * barcodeData[], barcodeDataLength, barcodeScanStatus, + * FPGA barcode FIFO control. + * @return Next barcode reader state. + *************************************************************************/ +static BARCODE_READER_STATE_T handleBarcodeReaderReadFifoState( void ) +{ + BARCODE_READER_STATE_T nextState = BARCODE_READER_READ_FIFO_STATE; + U16 fifoStatus = getFPGABarcodeFIFOStatus(); + U16 fifoCount = ( fifoStatus & BARCODE_FIFO_READ_COUNT_MASK ) >> + BARCODE_FIFO_READ_COUNT_SHIFT; + U32 barcodeFifoData; + U08 barcodeByte; + U08 index; + + if ( getFPGABarcodeUartError() != barcodeUartErrorStartCount ) + { + barcodeFifoReadPending = FALSE; + barcodeScanStatus = BARCODE_SCAN_STATUS_ERROR; + + nextState = BARCODE_READER_IDLE_STATE; + } + else if ( TRUE == didTimeout( barcodeScanStartTime, + BARCODE_SCAN_TIMEOUT_MS ) ) + { + barcodeFifoReadPending = FALSE; + barcodeScanStatus = BARCODE_SCAN_STATUS_TIMEOUT; + + nextState = BARCODE_READER_IDLE_STATE; + } + else if ( TRUE == barcodeFifoReadPending ) + { + barcodeFifoReadPending = FALSE; + barcodeFifoData = getFPGABarcodeFIFOData(); + + /* + * Once the response end character has been received, continue + * draining remaining FIFO words but do not store additional data. + */ + if ( FALSE == barcodeResponseComplete ) + { + for ( index = 0; + index < BARCODE_FIFO_READ_BYTE_COUNT; + index++ ) + { + barcodeByte = (U08)( + ( barcodeFifoData >> + ( ( BARCODE_FIFO_READ_BYTE_COUNT - 1 - index ) * 8 ) ) + & 0xFF ); + + /* + * Ignore any data until the barcode response start + * character is received. + */ + if ( 0 == barcodeDataLength ) + { + if ( BARCODE_RESPONSE_START_CHAR != barcodeByte ) + { + continue; + } + } + + if ( barcodeDataLength < BARCODE_MAX_DATA_LENGTH ) + { + barcodeData[barcodeDataLength] = barcodeByte; + barcodeDataLength++; + + if ( BARCODE_RESPONSE_END_CHAR == barcodeByte ) + { + barcodeResponseComplete = TRUE; + break; + } + } + else + { + barcodeScanStatus = BARCODE_SCAN_STATUS_ERROR; + nextState = BARCODE_READER_IDLE_STATE; + break; + } + } + } + } + else if ( fifoCount > 0 ) + { + setFPGABarcodeFIFOControl( 1 ); + barcodeFifoReadPending = TRUE; + } + else if ( TRUE == barcodeResponseComplete ) + { + if ( TRUE == isBarcodeResponseValid() ) + { + barcodeScanStatus = BARCODE_SCAN_STATUS_SUCCESS; + } + else + { + barcodeScanStatus = BARCODE_SCAN_STATUS_ERROR; + } + + nextState = BARCODE_READER_IDLE_STATE; + } + else + { + nextState = BARCODE_READER_WAIT_RESPONSE_STATE; + } + + return nextState; +} + +/*********************************************************************//** + * @brief + * The isBarcodeResponseValid function validates the barcode response + * framing. + * @details \b Inputs: barcodeData[], barcodeDataLength. + * @details \b Outputs: none. + * @return TRUE if the barcode response framing is valid, otherwise FALSE. + *************************************************************************/ +static BOOL isBarcodeResponseValid( void ) +{ + BOOL valid = FALSE; + + if ( barcodeDataLength > 2 ) + { + if ( ( BARCODE_RESPONSE_START_CHAR == barcodeData[0] ) && + ( BARCODE_RESPONSE_END_CHAR == + barcodeData[barcodeDataLength - 1] ) ) + { + valid = TRUE; + } + } + + return valid; +} + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testBarcodeScanRequest function requests a barcode scan for + * Dial-in testing. + * @details \b Inputs: barcodeReaderState, pendingBarcodeScanRequest + * @details \b Outputs: pendingBarcodeScanRequest, barcodeScanStatus + * @param message Dial-in barcode scan test request. + * @return TRUE if the barcode scan request is accepted, otherwise FALSE. + *************************************************************************/ +BOOL testBarcodeScanRequest( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + (void)message; + + result = requestBarcodeScan(); + + return result; +} + +/**@}*/ Index: firmware/App/Drivers/BarcodeReader.h =================================================================== diff -u --- firmware/App/Drivers/BarcodeReader.h (revision 0) +++ firmware/App/Drivers/BarcodeReader.h (revision f41df62e07626151238a2900eaac07ae3a405f5e) @@ -0,0 +1,59 @@ +/************************************************************************** +* +* Copyright (c) 2026-2026 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file BarcodeReader.h +* +* @author (last) Vijay Pamula +* @date (last) 19-August-2026 +* +* @author (original) Vijay Pamula +* @date (original) 19-August-2026 +* +***************************************************************************/ + +#ifndef _BARCODEREADER_H_ +#define _BARCODEREADER_H_ + +#include "TDCommon.h" + +/** + * @defgroup BarcodeReader BarcodeReader + * @brief Barcode reader communication driver. + * This driver controls barcode scanning through the FPGA interface + * and provides scan status and received barcode data. + * + * @addtogroup BarcodeReader + * @{ + */ + +// ********** public definitions ********** + +/// Barcode scan status +typedef enum barcodeScanStatus +{ + BARCODE_SCAN_STATUS_IDLE = 0, ///< No barcode scan is active. + BARCODE_SCAN_STATUS_IN_PROGRESS, ///< Barcode scan is currently in progress. + BARCODE_SCAN_STATUS_SUCCESS, ///< Barcode scan completed successfully. + BARCODE_SCAN_STATUS_TIMEOUT, ///< Barcode scan timed out. + BARCODE_SCAN_STATUS_ERROR ///< Barcode scan failed due to an interface or reader error. +} BARCODE_SCAN_STATUS_T; + +// ********** public function prototypes ********** + +void initBarcodeReaderDriver( void ); +void execBarcodeReaderDriver( void ); + +BOOL requestBarcodeScan( void ); + +BARCODE_SCAN_STATUS_T getBarcodeScanStatus( void ); +U16 getBarcodeDataLength( void ); +const U08 *getBarcodeData( void ); +BOOL testBarcodeScanRequest( MESSAGE_T *message ); + +/**@}*/ + +#endif Index: firmware/App/Services/FpgaTD.c =================================================================== diff -u -r2c16de14d2acd2aa1e36943f95c3855da094dc97 -rf41df62e07626151238a2900eaac07ae3a405f5e --- firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision 2c16de14d2acd2aa1e36943f95c3855da094dc97) +++ firmware/App/Services/FpgaTD.c (.../FpgaTD.c) (revision f41df62e07626151238a2900eaac07ae3a405f5e) @@ -73,6 +73,7 @@ #define FPGA_NIBP_CMD_MASK 0x0F ///< Bit mask for NIBP command bits #define FPGA_NIBP_CMD_RDY 0x10 ///< NIBP command ready pulse bit +#define FPGA_BARCODE_COMMAND_BYTE_COUNT 16 ///< Number of barcode command bytes supported by the FPGA. /// Control bits to run syringe pump in reverse direction // TODO - move to syringe pump controller unit when implemented. static const U08 SYRINGE_PUMP_CONTROL_RUN_REVERSE = SYRINGE_PUMP_CONTROL_SLEEP_OFF | @@ -184,6 +185,11 @@ U16 bpSystolic; ///< Reg 388. Systolic BP in mmHg. U16 bpDiastolic; ///< Reg 390. Diastolic BP in mmHg. U16 bpHr; ///< Reg 392. Heart rate in BPM. + U08 reservedBarcode[8]; ///< Reg 394-401. Reserved. + U16 barcodeUartError; ///< Reg 402. Barcode UART error counter. + U16 barcodeFIFORespStatus; ///< Reg 404. Barcode response FIFO status. + U08 barcodeCommandStatus; ///< Reg 406. Barcode command/trigger ready status. + U32 barcodeFIFORespData; ///< Reg 407. Barcode FIFO response data. } FPGA_SENSORS_T; /// Record structure for FPGA continuous priority writes. @@ -227,6 +233,12 @@ U16 h19InputWord3; ///< Reg 64. H19 input word 3. U08 h19FPGACmd; ///< Reg 66. H19 FPGA command register. U08 h19EnableReset; ///< Reg 67. H19 enable and reset register. + U08 reservedBarcode68; ///< Reg 68. Reserved. + U08 barcodeTriggerCtrl; ///< Reg 69. Barcode scan trigger control. + U08 barcodeResponseFIFOCtrl; ///< Reg 70. Barcode response FIFO read control. + U08 reservedBarcode71; ///< Reg 71. Reserved. + U08 barcodeCommandByte[16]; ///< Reg 72-87. Barcode command bytes. + U08 barcodeCommandCtrl; ///< Reg 88. Barcode command valid control. } FPGA_ACTUATORS_T; #pragma pack(pop) @@ -286,6 +298,11 @@ // Reset pinch valve position change command bits setH1Control( ( getH1Control() & ~FPGA_PINCH_VALVES_NEW_POS_CMD ) ); setH19Control( ( getH19Control() & ~FPGA_PINCH_VALVES_NEW_POS_CMD ) ); + + // Reset barcode transitory command bits + setFPGABarcodeTriggerControl( 0 ); + setFPGABarcodeFIFOControl( 0 ); + setFPGABarcodeCommandControl( 0 ); } /*********************************************************************//** @@ -1295,6 +1312,114 @@ /*********************************************************************//** * @brief + * The setFPGABarcodeTriggerControl function sets the barcode reader + * trigger control register. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.barcodeTriggerCtrl + * @param value Barcode trigger control value. + * @return none + *************************************************************************/ +void setFPGABarcodeTriggerControl( U08 value ) +{ + fpgaActuatorSetPoints.barcodeTriggerCtrl = value; +} + +/*********************************************************************//** + * @brief + * The setFPGABarcodeFIFOControl function sets the barcode response FIFO + * control register. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.barcodeResponseFIFOCtrl + * @param value Barcode FIFO control value. + * @return none + *************************************************************************/ +void setFPGABarcodeFIFOControl( U08 value ) +{ + fpgaActuatorSetPoints.barcodeResponseFIFOCtrl = value; +} + +/*********************************************************************//** + * @brief + * The setFPGABarcodeCommandByte function sets one barcode reader command + * byte in the FPGA command buffer. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.barcodeCommandByte[] + * @param index Barcode command byte index from 0 to 15. + * @param value Barcode command byte value. + * @return none + *************************************************************************/ +void setFPGABarcodeCommandByte( U08 index, U08 value ) +{ + if ( index < FPGA_BARCODE_COMMAND_BYTE_COUNT ) + { + fpgaActuatorSetPoints.barcodeCommandByte[index] = value; + } +} + +/*********************************************************************//** + * @brief + * The setFPGABarcodeCommandControl function sets the barcode reader + * command control register. + * @details \b Inputs: none + * @details \b Outputs: fpgaActuatorSetPoints.barcodeCommandCtrl + * @param value Barcode command control value. + * @return none + *************************************************************************/ +void setFPGABarcodeCommandControl( U08 value ) +{ + fpgaActuatorSetPoints.barcodeCommandCtrl = value; +} + +/*********************************************************************//** + * @brief + * The getFPGABarcodeUartError function returns the barcode UART error count. + * @details \b Inputs: fpgaSensorReadings.barcodeUartError + * @details \b Outputs: none + * @return Barcode UART error count. + *************************************************************************/ +U16 getFPGABarcodeUartError( void ) +{ + return fpgaSensorReadings.barcodeUartError; +} + +/*********************************************************************//** + * @brief + * The getFPGABarcodeFIFOStatus function returns the barcode FIFO status. + * @details \b Inputs: fpgaSensorReadings.barcodeFIFORespStatus + * @details \b Outputs: none + * @return Barcode FIFO response status. + *************************************************************************/ +U16 getFPGABarcodeFIFOStatus( void ) +{ + return fpgaSensorReadings.barcodeFIFORespStatus; +} + +/*********************************************************************//** + * @brief + * The getFPGABarcodeCommandStatus function returns the barcode command status. + * @details \b Inputs: fpgaSensorReadings.barcodeCommandStatus + * @details \b Outputs: none + * @return Barcode command status. + *************************************************************************/ +U08 getFPGABarcodeCommandStatus( void ) +{ + return fpgaSensorReadings.barcodeCommandStatus; +} + +/*********************************************************************//** + * @brief + * The getFPGABarcodeFIFOData function returns the barcode FIFO data. + * @details \b Inputs: fpgaSensorReadings.barcodeFIFORespData + * @details \b Outputs: none + * @return Barcode FIFO response data. + *************************************************************************/ +U32 getFPGABarcodeFIFOData( void ) +{ + return fpgaSensorReadings.barcodeFIFORespData; +} + +/*********************************************************************//** + * @brief * The getFPGAPBAADCTemperature function returns the PBA ADC temperature. * @details \b Inputs: fpgaSensorReadings * @details \b Outputs: none Index: firmware/App/Services/FpgaTD.h =================================================================== diff -u -r2c16de14d2acd2aa1e36943f95c3855da094dc97 -rf41df62e07626151238a2900eaac07ae3a405f5e --- firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision 2c16de14d2acd2aa1e36943f95c3855da094dc97) +++ firmware/App/Services/FpgaTD.h (.../FpgaTD.h) (revision f41df62e07626151238a2900eaac07ae3a405f5e) @@ -151,6 +151,16 @@ U32 getFPGAEjectorRetractOpticalSensor( void ); U32 getFPGAEjectorEngageOpticalSensor( void ); +void setFPGABarcodeTriggerControl( U08 value ); +void setFPGABarcodeFIFOControl( U08 value ); +void setFPGABarcodeCommandByte( U08 index, U08 value ); +void setFPGABarcodeCommandControl( U08 value ); + +U16 getFPGABarcodeUartError( void ); +U16 getFPGABarcodeFIFOStatus( void ); +U08 getFPGABarcodeCommandStatus( void ); +U32 getFPGABarcodeFIFOData( void ); + void setNIBPCommand( U08 command ); void setNIBPInflatePressure( U16 pressure ); U08 getNIBPControlStatus( void ); Index: firmware/App/Services/Messaging.c =================================================================== diff -u -r2c16de14d2acd2aa1e36943f95c3855da094dc97 -rf41df62e07626151238a2900eaac07ae3a405f5e --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision 2c16de14d2acd2aa1e36943f95c3855da094dc97) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision f41df62e07626151238a2900eaac07ae3a405f5e) @@ -20,6 +20,7 @@ #include "AirPump.h" #include "AirTrap.h" #include "AlarmMgmt.h" +#include "BarcodeReader.h" #include "BloodFlow.h" #include "BPModule.h" #include "Bubbles.h" @@ -148,6 +149,7 @@ { MSG_ID_UI_GENERIC_CONFIRMATION_RESULT_RESPONSE, &handleUIConfirmation }, { MSG_ID_TD_SOFTWARE_RESET_REQUEST, &testTDSoftwareResetRequest }, { MSG_ID_TD_BUBBLE_OVERRIDE_REQUEST, &testBubbleDetectOverride }, + { MSG_ID_TD_BARCODE_SCAN_REQUEST, &testBarcodeScanRequest }, { MSG_ID_TD_BUBBLE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBubblesDataPublishIntervalOverride }, { MSG_ID_TD_VOLTAGE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testVoltageDataPublishIntervalOverride }, { MSG_ID_TD_VOLTAGE_OVERRIDE_REQUEST, &testVoltageOverride }, Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -r2c16de14d2acd2aa1e36943f95c3855da094dc97 -rf41df62e07626151238a2900eaac07ae3a405f5e --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 2c16de14d2acd2aa1e36943f95c3855da094dc97) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision f41df62e07626151238a2900eaac07ae3a405f5e) @@ -16,6 +16,7 @@ ***************************************************************************/ #include "AirTrap.h" +#include "BarcodeReader.h" #include "Bubbles.h" #include "Buttons.h" #include "EjectorMotor.h" @@ -61,6 +62,9 @@ // 1st pass for FPGA execFPGA( TRUE ); + // Execute barcode reader state machine + execBarcodeReaderDriver(); + // Verify processor clock speed against FPGA clock // execFPGAClockSpeedTest(); Index: firmware/source/sys_main.c =================================================================== diff -u -r4f7855d894ddf2b62e7225050b5137d01862dd4b -rf41df62e07626151238a2900eaac07ae3a405f5e --- firmware/source/sys_main.c (.../sys_main.c) (revision 4f7855d894ddf2b62e7225050b5137d01862dd4b) +++ firmware/source/sys_main.c (.../sys_main.c) (revision f41df62e07626151238a2900eaac07ae3a405f5e) @@ -64,6 +64,7 @@ #include "TDCommon.h" #include "AirPump.h" #include "AirTrap.h" +#include "BarcodeReader.h" #include "BloodFlow.h" #include "BPModule.h" #include "Bubbles.h" @@ -188,6 +189,7 @@ initDDInterface(); initIntegrity(); initFpgaTD(); + initBarcodeReaderDriver(); initMsgQueues(); // initNVDataMgmt(); initSystemCommTD();