class library to access fischertechnik interfaces via USB

Dependencies:   FatFileSystem mbed myBlueUSB neigbourhood rfcomm sdp

ftlib/ftlibclassusb.h

Committer:
networker
Date:
2013-03-11
Revision:
1:4676e8b9b357
Parent:
0:7da612835693

File content as of revision 1:4676e8b9b357:

#ifndef FTLIBCLASSUSB_H
#define FTLIBCLASSUSB_H

#include <vector>
#include "ftlibclassdev.h"

#define FT_VENDOR_ID 0x146a
#define ROBO_IF_PRODUCT_ID 0x1
#define EXT_IF_PRODUCT_ID 0x2
#define RF_DATA_LINK_PRODUCT_ID 0x3
/*
#define usleep(x)    wait_us(x)
#define sleep(x)    wait(x)
*/
class ftlib;

class ftusbdev: public ftdev {
    friend ftlib;
    virtual unsigned pgm_message(unsigned code, unsigned dwMemBlock);
protected:
    static vector<ftusbdev*> devs;
    int device; //usb device nr
    int rf; //rf call nr
    int usb_endpoint_read, usb_endpoint_write;
    ftusbdev() {}
    ftusbdev(int d, int t, int s = 0, int r = -1): ftdev(t, s), device(d), rf(r) {}
    static int GetNumFtDevicesFromRF(int device);
    static void onTick() {
        for (int i = 0; i < devs.size(); i++) devs[i]->trigger();
    }
    static void CloseAllFtDevices() {
        for (int i = 0; i < devs.size(); i++) devs[i]->CloseFtDevice();
    }
    static void read_finished_cb(int device, int endpoint, int status, unsigned char* data, int len, void* userData);
    static void write_finished_cb(int device, int endpoint, int status, unsigned char* data, int len, void* userData);
    virtual void FtThreadInit();
    virtual void FtThreadBegin();
//    virtual void FtThreadEnd();
    virtual void FtThreadFinish();
public:
    static void poll();
//public API: These functions match those of the original ftlib
    static unsigned InitFtUsbDeviceList();
    static unsigned GetNumFtUsbDevice() {
        return devs.size();
    }
    virtual unsigned OpenFtUsbDevice();
    static ftusbdev* GetFtUsbDeviceHandle(unsigned DevNr);
    static ftusbdev* GetFtUsbDeviceHandleSerialNr(unsigned dwSN, unsigned dwTyp);
    unsigned      SetFtDeviceCommMode (unsigned dwMode, unsigned dwParameter, unsigned short *puiValue);
    virtual unsigned      CloseFtDevice();
    virtual unsigned      GetFtFirmware();
    virtual char*     GetFtManufacturerStrg();
    virtual char*     GetFtShortNameStrg();
    virtual char*     GetFtLongNameStrg();
    virtual unsigned      SetFtDistanceSensorMode(unsigned dwMode, unsigned dwTol1, unsigned dwTol2,
            unsigned dwSchwell1, unsigned dwSchwell2, unsigned dwRepeat1, unsigned dwRepeat2);
    /*
    virtual unsigned      GetFtDeviceSetting(FT_SETTING *pSet);
    virtual unsigned      SetFtDeviceSetting(FT_SETTING *pSet);
    */
    virtual unsigned StartFtProgram(unsigned dwMemBlock) {
        return pgm_message(0x12, dwMemBlock);
    }
    virtual unsigned StopFtProgram() {
        return pgm_message(0x13, 0);
    }
};

class ftusbdevext: public ftusbdev {
    friend ftusbdev;
    ftusbdevext() {}
    ftusbdevext(int d, int t, int s): ftusbdev(d, t, s) {}
    virtual void FtThreadInit();
    virtual void FtThreadEnd();
};

#endif