OpenCores
URL https://opencores.org/ocsvn/usb_ft232h_avalon-mm_interface/usb_ft232h_avalon-mm_interface/trunk

Subversion Repositories usb_ft232h_avalon-mm_interface

[/] [usb_ft232h_avalon-mm_interface/] [trunk/] [testbench/] [desktop/] [main.cpp] - Rev 2

Compare with Previous | Blame | View Log

#include <iostream>
#include <fstream>
#include <types.h>
#include <malloc.h>
#include <sysinfoapi.h>
#include "ftd2xx.h"
 
#define MS_DEV_TYPE     8
#define MS_DEV_VID      0x0403
#define MS_DEV_PID      0x75D8
#define MS_DEV_ID       ((MS_DEV_VID <<16) | MS_DEV_PID)
 
#define SEND_SIZE       524288
#define GET_SIZE        524288
 
using namespace std;
 
int main()
{
    cout << "Hello World!" << endl;
 
    FT_HANDLE ftHandle;
    FT_STATUS ftStatus;
    FT_DEVICE_LIST_INFO_NODE* ftDevInfo;
    unsigned long dcount;
    unsigned char mask=0xff, mode=0x0, latency=16;
 
    ftStatus = FT_CreateDeviceInfoList(&dcount);
    ftDevInfo = (FT_DEVICE_LIST_INFO_NODE*)malloc(sizeof(FT_DEVICE_LIST_INFO_NODE)*dcount);
    FT_GetDeviceInfoList(ftDevInfo, &dcount);
 
    for(int i=0; i<dcount; i++) {
        if((ftDevInfo[i].Type == MS_DEV_TYPE) && (ftDevInfo[i].ID == MS_DEV_ID)) {
//            printf("Open device\n");
            cout << "Open device" << endl;
            ftStatus = FT_Open (i, &ftHandle);
            if (!FT_SUCCESS(ftStatus))
            {
//                printf("Unable to open USB device\n");
                cout << "Unable to open USB device" << endl;
                return 0;
            }
            break;
        }
    }
    if(ftHandle == NULL) {
//        printf("No device found\n");
        cout << "No device found" << endl;
        return 0;
    }
 
    mode = 0x0; //reset mode
    ftStatus = FT_SetBitMode(ftHandle, mask, mode);
    Sleep(1000);
    mode = 0x40;
    ftStatus = FT_SetBitMode(ftHandle, mask, mode);
    if(ftStatus != FT_OK) {
        printf("Set bit mode error %d\n", ftStatus);
        return -2;
    }
    FT_SetLatencyTimer(ftHandle, 2);
    FT_SetUSBParameters(ftHandle, 0x10000, 0x10000);
    FT_SetFlowControl(ftHandle, FT_FLOW_RTS_CTS, 0x0, 0x0);
    FT_Purge(ftHandle, /*FT_PURGE_RX |*/ FT_PURGE_TX);
 
    uint8_t rxbuff[524288];
    uint32_t rxbuffCount = 0;
    uint8_t txbuff[40000];
 
    for(int i=0; i<sizeof(txbuff); i++)
        txbuff[i] = i & 0xFF;
 
    unsigned long getSize, sendSize;
    unsigned long event, rxCount, txCount;
    unsigned long bytesWrite, bytesRead;
 
    unsigned long start, last, current, prev;
 
    getSize = 0;
    sendSize = 0;
    event = 0;
    rxCount = 0;
    txCount = 0;
    bytesWrite = 0;
    bytesRead = 0;
 
    ofstream rxfile;
    rxfile.open("e:\\rxlog.txt", ios_base::out | ios_base::binary | ios_base::trunc);
    if(!rxfile.is_open()) {
        cout << "Cant open file" << endl;
        return -1;
    }
 
    start = GetTickCount();
    while((sendSize < SEND_SIZE) || (getSize < GET_SIZE)) {
        cout << getSize << " - " << sendSize << endl;
        if(FT_GetStatus(ftHandle, &rxCount, &txCount, &event) == FT_OK) {
            if(sendSize < SEND_SIZE) {
                if(FT_Write(ftHandle, txbuff, 4096, &bytesWrite) == FT_OK) {
                    cout << "Send OK " << bytesWrite << endl;
                    sendSize += bytesWrite;
                } else {
                    cout << "Write error " << endl;
//                    return -2;
                }
            }
//            if((getSize < GET_SIZE) || (rxCount > 0)) {
                if(rxCount) {
                    if (FT_Read (ftHandle, rxbuff, rxCount, &bytesRead) == FT_OK) {
                        if(bytesRead > 0) {
                            cout << "Read OK " << bytesRead << " " << txCount << endl;
                            getSize += bytesRead;
                            for(int i=0; i<bytesRead; i++)
                                rxfile << rxbuff[i];
                        }
                    } else {
                        cout << "read error" << endl;
                    }
                }
//            }
        } else {
            cout << "get dstatus error" << endl;
        }
 
        current = GetTickCount();
        if((current - prev) >= 500) {
            prev = current;
            cout << "Alive " << getSize << "(" << rxCount << ")\t " << sendSize << "(" << txCount << ")" << endl;
            rxfile.flush();
        }
    }
 
    /*do {
        FT_GetStatus(ftHandle, &rxCount, &txCount, &event);
    } while(rxCount || txCount);*/
 
    cout << "Complete" << endl;
    FT_GetStatus(ftHandle, &rxCount, &txCount, &event);
     cout << "Alive " << getSize << "(" << rxCount << ")\t " << sendSize << "(" << txCount << ")" << endl;
    last = GetTickCount();
 
    double kbsec = (double) ((double) (getSize + sendSize) / 1000) / ((double) (last - start) / 1000);
    int timepassed = (last - start) / 1000;
 
    printf("Time:%d Size:%dB\/%dB Rate:%.1fKB/s       \r", timepassed, getSize, sendSize, kbsec);
//    cout << "Time: " << timepassed << "\t Get size: " << getSize << "\t Send size: " << sendSize << "\t Rate: " << kbsec << endl;
 
    rxfile.close();
 
    FT_SetBitMode(ftHandle, 0, 0);
    FT_Close(ftHandle);
 
    return 0;
}
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.