Issues with header file unknown type name in C program

0

I am trying to run a demo program in C provided by a company (US Digital) in a software package. I have downloaded all of the software properly and am using the exact demo program and header file provided by the company, so I am assuming that nothing is wrong with the code. I am new to C, so I am guessing that this is an issue on my end--I suspect I am not properly including a library or something along those lines.

The following files were also all provided by the company:

USB4.dll USB4.lib USB4.h

Within the demo C program, I used #include to include the USB4.h directory (with the correct file path) and this is the line that I am entering into the command prompt window. (The name of the demo program is turtle and simple is the folder containing turtle.c, USB4.dll, USB4.h, and USB4.lib).

C:\simple> gcc turtle.c -lC:\simple\USB4.lib -o turtle.exe

I continue to receive the error

In file included from turtle.c:4:0:C:\simple\USB4.h:222:79: error:unknown type name 'USB4_FIFOBufferRecord' extern int _stdcall USB4_ReadFIFOBufferStrut(short iDeviceNo, long *plSize, USB4_FIFOBufferRecord *pCBR, unsigned long ulReadTimeout);

and I do not understand why. (I see that the type name is not defined in the header file, but I don't know where else it would be defined). Please let me know if you have any ideas, or if any clarification is needed. Thanks!

If it helps, this is the demo program I am trying to run:

#include "conio.h"
#include "stdio.h"
#include "windows.h"
#include "C:\simple\USB4.h"

int main(int argc, char* argv[]) 
{
    short iDeviceCount = 0;
    int iResult = 0;
    unsigned long ctrlmode = 0;
    unsigned long ulCount;
    unsigned long ulPrevCount = 0xFFFFFFFF;
    printf("--------------------------------\n");
    printf("USB4 Hello World!\n");
    printf("--------------------------------\n");
    // Initialize the USB4 driver.
    iResult = USB4_Initialize(&iDeviceCount);        // initialize the card
    // Check result code...
    if (iResult != USB4_SUCCESS) 
    {
        printf("Failed to initialize USB4 driver!  Result code = %d.\nPress any key to exit.\n",
                iResult);
        while( !_kbhit() ) 
        {
            Sleep(100);
        }
    } 
    else 
    {
        // Caution! The reset of the example is implemented without any error checking.

        // Configure encoder channel 0.
        USB4_SetPresetValue(0,0,499);       // Set the preset register to the CPR-1
        USB4_SetMultiplier(0,0,3);      // Set quadrature mode to X4.
        USB4_SetCounterMode(0,0,3);     // Set counter mode to modulo-N.
        USB4_SetForward(0,0,TRUE);      // Optional: determines the direction of counting.
        USB4_SetCounterEnabled(0,0,TRUE);   // Enable the counter.**IMPORTANT**
        USB4_ResetCount(0,0);           // Reset the counter to 0

        // USB4_SetControlMode(0,0,0xFC000); // You may replace the previous five   
        // lines with one call to USB4_SetControlMode using to correct control mode value.

        printf("Reading encoder channel 0. Press any key to exit.\n");
        // Waits for the user to press any key, then exits.
        while( !_kbhit() ) 
        {
        USB4_GetCount(0,0,&ulCount);
        // Update display when value changes
            if (ulPrevCount != ulCount) 
            {
            printf("%d    \r", ulCount);
            }
        ulPrevCount = ulCount;
        Sleep(1); // Don't want to hog all the CPU.
        }
    }
    // Close all open connections to the USB4 devices.
    USB4_Shutdown();

    return 0;
}

And this is the header file:

// USB4.h : USB4 header file.

/*************************************************************************
|    Definitions                                                         |
*************************************************************************/

#define MAX_ERROR_MSG_LENGTH        512
#define MAX_INC_COUNTS              0x1000000
#define FAILURE                     FALSE       // must  be zero
#define SUCCESS                     TRUE
#define USB4_SUCCESS                0
#define USB4_MAX_ENCODERS           4       // max number of encoders per device.
#define USB4_MAX_DEVICES            32      // max devices on USB bus
#define USB4_MAX_ADDRESSES          32      // address can be any valid single byte value
#define USB4_MAX_ADC_CHANNELS       4       // max number of a/d channels.
#define USB4_FIFO_MAX_COUNT         196607  // max number of ChannelBufferRecords in FIFO.
#define USB4_RS232_BAUDBYTE_9600    0x00    // baud byte code used to set RS232 baud rate to 9600.
#define USB4_RS232_BAUDBYTE_19200   0x01    // baud byte code used to set RS232 baud rate to 19200.
#define USB4_RS232_BAUDBYTE_115200  0xFF    // baud byte code used to set RS232 baud rate to 115200.


//****** Error Codes ***************************/
#define DEVICE_NOT_OPEN                 -1
#define FAILED_TO_AQUIRE_MUTEX          -2
#define FAILED_TO_DOWNLOAD_FIRMWARE     -3
#define FATAL_ERROR                     -4
#define FIFO_BUFFER_EMPTY               -5
#define INVALID_A2D_CHANNEL             -6
#define INVALID_COUNTER_MODE            -7
#define INVALID_D2A_CHANNEL             -8
#define INVALID_D2A_MODE                -9
#define INVALID_DEVICE_NUMBER           -10
#define INVALID_ENCODER_NUMBER          -11
#define INVALID_MODULE_NUMBER           -12
#define INVALID_PARAMETER               -13
#define INVALID_QUADRATURE_MODE         -14
#define INVALID_REGISTER_NUMBER         -15
#define INVALID_SIGNAL_LENGTH_CODE      -16
#define MODULE_NUMBER_ALREADY_ASSIGNED  -17
#define MODULE_NUMBER_NOT_FOUND         -18
#define NO_AVAILABLE_MODULE_ADDRESSES   -19
#define USB4_INVALID_D2A_VALUE          -20
#define RX_232_FAILURE                  -30
#define TX_232_FAILURE                  -31
#define NO_DEVICES_FOUND                -32
#define OLD_FIRMWARE_DETECTED           -33
#define INSUFFICIENT_MEMORY_AVAILABLE   -34

//****** REGISTERS *****************************/
#define PRESET_REGISTER                     0
#define OUTPUT_LATCH_REGISTER               1
#define MATCH_REGISTER                      2
#define CONTROL_REGISTER                    3
#define STATUS_REGISTER                     4
#define COUNTER_REGISTER                    5  // Renamed from        RESET_CHANNEL_REGISTER
#define RESET_CHANNEL_REGISTER              5  // Not currently used.
#define TRANSFER_PRESET_REGISTER            6
#define CMD_REGISTER                        7
#define TIMESTAMP_OUTPUT_LATCH_REGISTER     15
#define TIMESTAMP_REGISTER                  23
#define ADC01_TRIGGER_CONTROL_REGISTER      24
#define ADC23_TRIGGER_CONTROL_REGISTER      25
#define ENCODER_TYPE_REGISTER               26
#define INPUT_TRIGGER_CONTROL_REGISTER      27
#define INPUT_TRIGGER_STATUS_REGISTER       28
#define SAMPLING_RATE_MULTIPLIER_REGISTER   30
#define SAMPLING_RATE_COUNTER_REGISTER      31
#define USB_PWM0_TRIGGER_CONTROL_REGISTER   32
#define USB_PWM1_TRIGGER_CONTROL_REGISTER   33
#define USB_PWM2_TRIGGER_CONTROL_REGISTER   34
#define USB_PWM3_TRIGGER_CONTROL_REGISTER   35
#define FIFO_ON_OFF_REGISTER                37
#define FIFO_STATUS_CONTROL_REGISTER        38
#define FIFO_BUFFER_COUNT                   39
#define INPUT_PORT_REGISTER                 40
#define INPUT_TRIGGER1_SETUP_REGISTER       41
#define INPUT_TRIGGER2_SETUP_REGISTER       42
#define SAMPLES_TO_COLLECT_REGISTER         43
#define SAMPLES_REMAINING_TO_COLLECT_REGISTER   44
#define AQUISITION_CONTROL_REGISTER         45
#define OUTPUT_PORT_REGISTER                46
#define OUTPUT_PORT_SETUP_REGISTER          47
#define USB4_ENCODER3_BASE                  48
#define USB4_A2D_BASE_REGISTER              55
#define USB4_A2D_CHANNEL0_REGISTER          55
#define USB4_A2D_CHANNEL1_REGISTER          56
#define USB4_A2D_CHANNEL2_REGISTER          57
#define USB4_A2D_CHANNEL3_REGISTER          58
#define USB4_D2A_CONTROL_REGISTER           59
#define USB4_PW0_REGISTER                   60
#define USB4_PER0_REGISTER                  61   
#define USB4_PW1_REGISTER                   62
#define USB4_PER1_REGISTER                  63
#define USB4_PW2_REGISTER                   64
#define USB4_PER2_REGISTER                  65
#define USB4_PW3_REGISTER                   66
#define USB4_PER3_REGISTER                  67


//****** Status Register Bits ******************/       // bit  6-0 reserved
#define STATUS_BIT_LATCHED_ZERO_DETECTED    0x00000080  // bit  7
#define STATUS_BIT_LATCHED_MATCH_DETECTED   0x00000100  // bit  8
#define STATUS_BIT_LATCHED_CARRY_DETECTED   0x00000200  // bit  9
#define STATUS_BIT_LATCHED_BORROW_DETECTED  0x00000400  // bit 10
#define STATUS_BIT_LATCHED_INDEX_DETECTED   0x00000800  // bit 11
#define STATUS_BIT_LATCHED_ADVANCE_DETECTED 0x00001000  // bit 12
#define STATUS_BIT_LATCHED_RETARD_DETECTED  0x00002000  // bit 13
#define STATUS_BIT_ZERO_DETECTED            0x00004000  // bit 14
#define STATUS_BIT_MATCH_DETECTED           0x00008000  // bit 15 
#define STATUS_BIT_CARRY_DETECTED           0x00010000  // bit 16
#define STATUS_BIT_BORROW_DETECTED          0x00020000  // bit 17
#define STATUS_BIT_INDEX_DETECTED           0x00040000  // bit 18
#define STATUS_BIT_ADVANCE_DETECTED         0x00080000  // bit 19
#define STATUS_BIT_RETARD_DETECTED          0x00100000  // bit 20
                                                    // bit 22-21 reserved
#define STATUS_BIT_LAST_DIRECTION_INDICATOR 0x08000000  // bit 23           
                                                    // bit 31-24 reserved

//****** Control Register Bits ******************/          // bit  6-0
#define CONTROL_BIT_INDEX_ENABLE_ON_MATCH       0x00000010  // bit  4
#define CONTROL_BIT_TRIGGER_ON_ZERO             0x00000080  // bit  7
#define CONTROL_BIT_TRIGGER_ON_MATCH            0x00000100  // bit  8
#define CONTROL_BIT_TRIGGER_ON_ROLLOVER         0x00000200  // bit  9
#define CONTROL_BIT_TRIGGER_ON_ROLLUNDER        0x00000400  // bit 10
#define CONTROL_BIT_TRIGGER_ON_INDEX            0x00000800  // bit 11
#define CONTROL_BIT_TRIGGER_ON_INCREASE         0x00001000  // bit 12
#define CONTROL_BIT_TRIGGER_ON_DECREASE         0x00002000  // bit 13
#define CONTROL_BITS_MULTIPLIER                 0x0000C000  // bits 14 & 15
#define CONTROL_BITS_COUNTER_MODE               0x00030000  // bits 16 & 17
#define CONTROL_BIT_COUNTER_ENABLE              0x00040000  // bit 18
#define CONTROL_BIT_COUNT_DIRECTION             0x00080000  // bit 19
#define CONTROL_BIT_INDEX_ENABLE                0x00100000  // bit 20
#define CONTROL_BIT_INVERT_INDEX                0x00200000  // bit 21
#define CONTROL_BIT_COUNTER_RESET_OR_PRESET     0x00400000  // bit 22
#define CONTROL_BIT_ENABLE_CAPTURE              0x00800000  // bit 23
                                                        // bit 31-24 reserved

//******* Input Port Register Bits ***************/  
#define INPUT_PORT_ESTOP                        0x00000100  // bit 8

//******* Output Port Configuration Bits ***************/
#define INVERT_OUTPUT_POLARITY                  0x00000020  // bit 5


#ifdef __cplusplus 
extern "C"{ 
#endif 

struct USB4_FIFOBufferRecord
{
    unsigned char Header[6];
    unsigned char Input;
    unsigned char EStop;
    unsigned long Time;
    unsigned long Count[4];
    unsigned char Status[4];
    unsigned short ADC[4];
};

extern int _stdcall USB4_CaptureTimeAndCounts(short iDeviceNo, unsigned long *pulCounts, unsigned long *pulTimeStamp);
extern int _stdcall USB4_ClearCapturedStatus(short iDeviceNo, short iEncoder);
extern int _stdcall USB4_ClearDigitalInputTriggerStatus(short iDeviceNo);
extern int _stdcall USB4_ClearFIFOBuffer(short iDeviceNo);
extern int _stdcall USB4_DeviceCount();
extern int _stdcall USB4_DisableFIFOBuffer(short iDeviceNo);
extern int _stdcall USB4_EnableFIFOBuffer(short iDeviceNo);
extern int _stdcall USB4_GetA2D(short iDeviceNo, short iA2DChannel, unsigned short * puiA2DValue);
extern int _stdcall USB4_GetA2DSamplingFrequency(short iDeviceNo, unsigned short * puiVal);
extern int _stdcall USB4_GetCaptureEnabled(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetControlMode(short iDeviceNo, short iEncoder, unsigned long *pulVal);
extern int _stdcall USB4_GetCount(short iDeviceNo, short iEncoder, unsigned long *pulVal);
extern int _stdcall USB4_GetCounterMode(short iDeviceNo, short iEncoder, short *piVal);
extern int _stdcall USB4_GetDeviceNo(short iModuleAddress, short *piDeviceNo);
extern int _stdcall USB4_GetDigitalInputTriggerConfig(short iDeviceNo, BOOL *pbEnableTrigger, BOOL *pbTriggerOnRisingEdge);
extern int _stdcall USB4_GetDigitalInputTriggerStatus(short iDeviceNo, BOOL *pbVal);
extern int _stdcall USB4_GetDriverBuildNumber(short iDeviceNo, unsigned char *pucVersion);
extern int _stdcall USB4_GetCounterEnabled(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetEnableIndex(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetEnableIndexOnMatch(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetEStopBit(short iDeviceNo, unsigned char *pucVal);
extern int _stdcall USB4_GetFactoryInfo(short iDeviceNo, unsigned short *puiModel, unsigned short *puiVersion, unsigned long *pulSN, unsigned char *pucMonth, unsigned char *pucDay, unsigned short *pusYear);
extern int _stdcall USB4_GetFIFOBufferCount(short iDeviceNo, unsigned long *plVal);
extern int _stdcall USB4_GetForward(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetInterruptControl(short iDeviceNo, BOOL *pbEnableFIFOHalfFullInterrupt, BOOL *pbEnableTriggerOutInterrupt);
extern int _stdcall USB4_GetInvertIndex(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetInvertOutput(short iDeviceNo, BOOL *pbVal);
extern int _stdcall USB4_GetMatch(short iDeviceNo, short iEncoder, unsigned long *pulVal);
extern int _stdcall USB4_GetModuleAddress(short iDeviceNo, unsigned char *pucModuleAddress);
extern int _stdcall USB4_GetMultiplier(short iDeviceNo, short iEncoder, short *piVal);
extern int _stdcall USB4_GetOutputPortConfig(short iDeviceNo, BOOL *pbTriggerOutSignalDrivesOutputPin, unsigned char *pucTriggerSignalLengthCode);
extern int _stdcall USB4_GetPresetOnIndex(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetPresetValue(short iDeviceNo, short iEncoder, unsigned long *pulVal);
extern int _stdcall USB4_GetPWM(short iDeviceNo, short iPWMChannel, unsigned long *pulPulseWidth, unsigned long *pulPulsePeriod);
extern int _stdcall USB4_GetPWMConfig(short iDeviceNo, unsigned char *pucDivisor, unsigned char *pucCaptureToFIFOFlags);
extern int _stdcall USB4_GetROM_ID(short iDeviceNo, unsigned char *pucVal);
extern int _stdcall USB4_GetRPM(short iDeviceNo, short iEncoder, float *pufRPM);
extern int _stdcall USB4_GetSamplesRemaining(short iDeviceNo, unsigned long *pulVal);
extern int _stdcall USB4_GetSamplesToCollect(short iDeviceNo, unsigned long *pulVal);
extern int _stdcall USB4_GetSamplingRateCounter(short iDeviceNo, unsigned long *pulVal);
extern int _stdcall USB4_GetSamplingRateMultiplier(short iDeviceNo, unsigned long *pulVal);
extern int _stdcall USB4_GetStatus(short iDeviceNo, short iEncoder, unsigned long *pulVal);
extern int _stdcall USB4_GetStatusEx(short iDeviceNo, short iEncoder, BOOL *pbDecreaseDetected, BOOL *pbIncreaseDetected, BOOL *pbIndexDetected, BOOL *pbRollunderDetected, BOOL *pbRolloverDetected, BOOL *pbMatchDetected, BOOL *pbZeroDetected);
extern int _stdcall USB4_GetTimeBasedLogSettings(short iDeviceNo, unsigned char * pucInputTrigger1Array, unsigned char * pucInputTrig1And,
                                          unsigned char * pucInputTrigger2Array, unsigned char * pucInputTrig2And,
                                          unsigned char * pucADCTrigger, unsigned short * puiADCThreshold,
                                          unsigned char * pucPWMTrigger, unsigned long  * pulPWMThreshold,
                                          unsigned char * pucEncoderChannels, unsigned long * pulNumberOfSamples);
extern int _stdcall USB4_GetTimeStamp(short iDeviceNo, unsigned long *pulVal);
extern int _stdcall USB4_GetTriggerOnDecrease(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetTriggerOnIncrease(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetTriggerOnIndex(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetTriggerOnMatch(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetTriggerOnRollover(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetTriggerOnRollunder(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetTriggerOnZero(short iDeviceNo, short iEncoder, BOOL *pbVal);
extern int _stdcall USB4_GetVersion(short iDeviceNo, unsigned short *puiVersion);
extern int _stdcall USB4_Initialize(short *pDeviceCount);
extern BOOL _stdcall USB4_IsFIFOBufferEmpty(short iDeviceNo, int *piResult);
extern BOOL _stdcall USB4_IsFIFOBufferFull(short iDeviceNo, int * piResult);
extern int _stdcall USB4_PresetCount(short iDeviceNo, short iEncoder);
extern int _stdcall USB4_ReadFIFOBuffer(short iDeviceNo, long *plSize, unsigned long * pTime, unsigned long * pCount0, unsigned long * pCount1, unsigned long * pCount2, unsigned long * pCount3, unsigned char * pStatus0, unsigned char * pStatus1, unsigned char * pStatus2, unsigned char * pStatus3, unsigned char * pInput, unsigned char * pEStop, unsigned long * pADC0, unsigned long * pADC1, unsigned long * pADC2, unsigned long * pADC3, unsigned long ulReadTimeout);
extern int _stdcall USB4_ReadFIFOBufferStruct(short iDeviceNo, long *plSize, USB4_FIFOBufferRecord *pCBR, unsigned long ulReadTimeout);
extern int _stdcall USB4_ReadInputPortRegister(short iDeviceNo, unsigned char *pucVal);
extern int _stdcall USB4_ReadOutputLatch(short iDeviceNo, short iEncoder, unsigned long *pulVal);
extern int _stdcall USB4_ReadOutputPortRegister(short iDeviceNo, unsigned char *pucVal);
extern int _stdcall USB4_ReadRegister(short iDeviceNo, short iRegister, unsigned long *pulVal);
extern int _stdcall USB4_ReadSavedParameters(short iDeviceNo);
extern int _stdcall USB4_ReadTimeAndCounts(short iDeviceNo, unsigned long *pulCounts, unsigned long *pulTimeStamp);
extern int _stdcall USB4_ReadTimeStamp(short iDeviceNo, unsigned long *pulVal);
extern int _stdcall USB4_ReadUnlatchedTimeAndCounts(short iDeviceNo, unsigned long *pulCounts, unsigned long *pulTimeStamp);
extern int _stdcall USB4_ReadUserEEPROM(short iDeviceNo, unsigned char ucStartAddress, unsigned char ucBytesToRead, unsigned char * pucDataArray);
extern int _stdcall USB4_ResetCount(short iDeviceNo, short iEncoder);
extern int _stdcall USB4_ResetTimeStamp(short iDeviceNo);
extern int _stdcall USB4_RestoreFactoryParameters(short iDeviceNo);
extern int _stdcall USB4_SaveParameters(short iDeviceNo);
extern int _stdcall USB4_SetA2DSamplingFrequency(short iDeviceNo, unsigned short uiVal);
extern int _stdcall USB4_SetCaptureEnabled(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetControlMode(short iDeviceNo, short iEncoder, unsigned long ulVal);
extern int _stdcall USB4_SetCount(short iDeviceNo, short iEncoder, unsigned long ulVal);
extern int _stdcall USB4_SetCounterMode(short iDeviceNo, short iEncoder, short iVal);
extern int _stdcall USB4_SetD2A(short iDeviceNo, short iChannel, unsigned short iD2AValue, BOOL bUpdateD2AChannelsNow);
extern int _stdcall USB4_SetD2AControlMode(short iDeviceNo, unsigned char ucMode);
extern int _stdcall USB4_SetDigitalInputTriggerConfig(short iDeviceNo, BOOL *pbEnableTrigger, BOOL *pbTriggerOnRisingEdge);
extern int _stdcall USB4_SetCounterEnabled(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetEnableIndex(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetEnableIndexOnMatch(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetEStopBit(short iDeviceNo, unsigned char bVal);
extern int _stdcall USB4_SetForward(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetInvertIndex(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetInvertOutput(short iDeviceNo, BOOL bVal);
extern int _stdcall USB4_SetMatch(short iDeviceNo, short iEncoder, unsigned long ulVal);
extern int _stdcall USB4_SetModuleAddress(short iDeviceNo, unsigned char ucModuleAddress);
extern int _stdcall USB4_SetMultiplier(short iDeviceNo, short iEncoder, short iVal);
extern int _stdcall USB4_SetOutputPortConfig(short iDeviceNo, BOOL *pbTriggerOutSignalDrivesOutputPin, unsigned char ucTriggerSignalLengthCode);
extern int _stdcall USB4_SetPresetOnIndex(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetPresetValue(short iDeviceNo, short iEncoder, unsigned long ulVal);
extern int _stdcall USB4_SetPWMConfig(short iDeviceNo, unsigned char pucDivisor, unsigned char ucCaptureToFIFOFlags);
extern int _stdcall USB4_SetSamplesToCollect(short iDeviceNo, unsigned long ulVal);
extern int _stdcall USB4_SetSamplingRateMultiplier(short iDeviceNo, unsigned long ulVal);
extern int _stdcall USB4_SetTimeBasedLogSettings(short iDeviceNo, unsigned char * pucInputTrigger1Array, unsigned char ucInputTrig1And, 
                                          unsigned char * pucInputTrigger2Array, unsigned char ucInputTrig2And, 
                                          unsigned char * pucADCTrigger, unsigned short * puiADCThreshold, 
                                          unsigned char * pucPWMTrigger, unsigned long  * pulPWMThreshold, 
                                          unsigned char ucEncoderChannels, unsigned long ulNumberOfSamples);
extern int _stdcall USB4_SetTriggerOnDecrease(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetTriggerOnIncrease(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetTriggerOnIndex(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetTriggerOnMatch(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetTriggerOnRollover(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetTriggerOnRollunder(short iDeviceNo, short iEncoder, BOOL bVal);
extern int _stdcall USB4_SetTriggerOnZero(short iDeviceNo, short iEncoder, BOOL bVal);
extern void _stdcall USB4_Shutdown();
extern int _stdcall USB4_StartAcquisition(short iDeviceNo);
extern int _stdcall USB4_StopAcquisition(short iDeviceNo);
extern int _stdcall USB4_TriggerSoftwareCapture(short iDeviceNo);
extern int _stdcall USB4_WriteOutputPortRegister(short iDeviceNo, unsigned char ucVal);
extern int _stdcall USB4_WriteRegister(short iDeviceNo, short iRegister, unsigned long ulVal);
extern int _stdcall USB4_WriteUserEEPROM(short iDeviceNo, unsigned char startAddress, unsigned char bytesToWrite, unsigned char * pucData);


#ifdef _DEBUG
#define PRINT(x)    OutputDebugString(x)
#else
#define PRINT(x)
#endif

#ifdef __cplusplus 
} 
#endif 
c
asked on Stack Overflow Nov 5, 2013 by user2859994 • edited Sep 3, 2015 by Haris

3 Answers

0

The error message you provided is:

USB4_FIFOBufferRector extern int _stidcall USB4_ReadFIFOBufferStrut(short iDeviceNo, long *plSize, USB$_FIFOBufferRecord *pCBR, unsigned long ulReadTimeout);

I believe this line has multiple typos. This could be sloppy typing, or it could be the source of your errors:

  • USB4_FIFOBufferRector (USB4_FIFOBufferRecord??)
  • _stidcall (_stdcall??)
  • USB$_FIFOBufferRecord (USB4_FIFOBufferRecord??)
  • USB4_ReadFIFOBufferStrut (USB4_ReadFIFOBufferStruct??)
answered on Stack Overflow Nov 5, 2013 by abelenky
0

Not the first time a vendor's header file had some minor errors,...

The error message:

*...\USB4.h:222:79: error:unknown type name 'USB4_FIFOBufferRector' extern int _stidcall USB4_ReadFIFOBufferStrut(short iDeviceNo, long *plSize, USB$_FIFOBufferRecord pCBR, unsigned long ulReadTimeout);

Line 222, column 79 occurs at a reference to the struct USB4_FIFOBufferRecord, defined on line 149 of the same file as:

struct USB4_FIFOBufferRecord
{
    unsigned char Header[6];
    unsigned char Input;
    unsigned char EStop;
    unsigned long Time;
    unsigned long Count[4];
    unsigned char Status[4];
    unsigned short ADC[4];
};    

The problem is that this struct is defined, but the stuct keyword is not included in the prototype on line 222.

To fix it, In the line:

extern int _stdcall USB4_ReadFIFOBufferStruct(short iDeviceNo, long *plSize, USB4_FIFOBufferRecord *pCBR, unsigned long ulReadTimeout);   

try inserting the keyword word struct in front of USB4_FIFOBufferRecord. Like this:

extern int _stdcall USB4_ReadFIFOBufferStruct(short iDeviceNo, long *plSize, struct USB4_FIFOBufferRecord *pCBR, unsigned long ulReadTimeout);   

OR

On line 149, modify the struct definition. try this instead:

typedef struct
    {
        unsigned char Header[6];
        unsigned char Input;
        unsigned char EStop;
        unsigned long Time;
        unsigned long Count[4];
        unsigned char Status[4];
        unsigned short ADC[4];
    } USB4_FIFOBufferRecord;    

That will cause USB4_FIFOBufferRecord to be a new variable of type "struct USB4_FIFOBufferRecord". With that, you can just leave the prototype the way it is.

Either will work, (Your choice.)

answered on Stack Overflow Nov 5, 2013 by ryyker • edited Nov 5, 2013 by ryyker
0

USB4_FIFOBufferRecord is declared on line 149 as struct USB4_FIFOBufferRecord{...};. In C, if a parameters type is a struct, then that parameter must have the struct keyword before the type declaration. So, on line 222, you need to declare the USB4_FIFOBufferRecord *pCBR as struct USB4_FIFOBufferRecord *pCBR.

So, the line needs to be

extern int _stdcall USB4_ReadFIFOBufferStruct(short iDeviceNo, long *plSize, struct USB4_FIFOBufferRecord *pCBR, unsigned long ulReadTimeout);
answered on Stack Overflow Nov 5, 2013 by Josh

User contributions licensed under CC BY-SA 3.0