class library to access fischertechnik interfaces via USB

Dependencies:   FatFileSystem mbed myBlueUSB neigbourhood rfcomm sdp

Committer:
networker
Date:
Mon Mar 11 08:04:37 2013 +0000
Revision:
1:4676e8b9b357
Parent:
0:7da612835693
first publication of this experimental class, just for sharing wip

Who changed what in which revision?

UserRevisionLine numberNew contents of line
networker 0:7da612835693 1 #ifndef FTLIBCLASSCOM_H
networker 0:7da612835693 2 #define FTLIBCLASSCOM_H
networker 0:7da612835693 3
networker 0:7da612835693 4 #include "ftlibclassdev.h"
networker 0:7da612835693 5 #include <vector>
networker 0:7da612835693 6
networker 0:7da612835693 7 #define BAUDRATE_II 9600
networker 0:7da612835693 8 #define BAUDRATE_RI 38400
networker 0:7da612835693 9
networker 0:7da612835693 10 #define usleep(x) wait_us(x)
networker 0:7da612835693 11 #define sleep(x) wait(x)
networker 0:7da612835693 12
networker 0:7da612835693 13 class ftlib;
networker 0:7da612835693 14
networker 0:7da612835693 15 class ftcommdev: public ftdev { //for serial devices (Robo over Com), IIF devices are derived from this
networker 0:7da612835693 16 friend ftlib;
networker 0:7da612835693 17 virtual unsigned pgm_message(unsigned code, unsigned dwMemBlock);
networker 0:7da612835693 18 protected:
networker 0:7da612835693 19 static vector<ftcommdev*> devs;
networker 0:7da612835693 20 Serial *device;
networker 0:7da612835693 21 unsigned port;
networker 0:7da612835693 22 int windex, rindex;
networker 0:7da612835693 23 ftcommdev() {}
networker 0:7da612835693 24 ftcommdev(Serial *s, unsigned t, unsigned c);
networker 0:7da612835693 25 static int write(Serial *d, unsigned char *ptr, int n, int timeout_ms);
networker 0:7da612835693 26 static int read(Serial *stream, unsigned char *buf, int n, int timeout_ms);
networker 0:7da612835693 27 int write();
networker 0:7da612835693 28 void writeByte();
networker 0:7da612835693 29 void readByte();
networker 0:7da612835693 30 static void onTick() {
networker 0:7da612835693 31 for (int i = 0; i < devs.size(); i++) devs[i]->trigger();
networker 0:7da612835693 32 }
networker 0:7da612835693 33 static void CloseAllFtDevices() {
networker 0:7da612835693 34 for (int i = 0; i < devs.size(); i++) devs[i]->CloseFtDevice();
networker 0:7da612835693 35 }
networker 0:7da612835693 36 virtual void FtThreadInit();
networker 0:7da612835693 37 virtual void FtThreadBegin();
networker 0:7da612835693 38 // virtual void FtThreadEnd();
networker 0:7da612835693 39 virtual void FtThreadFinish();
networker 0:7da612835693 40 public:
networker 0:7da612835693 41 virtual ~ftcommdev() {
networker 0:7da612835693 42 if (port>0) delete device;
networker 0:7da612835693 43 }
networker 0:7da612835693 44 static void poll();
networker 0:7da612835693 45 //public API: These functions match those of the original ftlib
networker 0:7da612835693 46 static ftcommdev* OpenFtCommDevice(unsigned dwPort, unsigned dwTyp, unsigned dwZyklus, unsigned *pdwError);
networker 0:7da612835693 47 static ftcommdev* OpenFtCommDevice(Serial *port, unsigned dwTyp, unsigned dwZyklus, unsigned *pdwError);
networker 0:7da612835693 48 virtual unsigned CloseFtDevice();
networker 0:7da612835693 49 virtual unsigned GetFtSerialNr();
networker 0:7da612835693 50 virtual char* GetFtManufacturerStrg() {
networker 0:7da612835693 51 return strdup("Knobloch GMBH");
networker 0:7da612835693 52 }
networker 0:7da612835693 53 virtual char* GetFtShortNameStrg();
networker 0:7da612835693 54 virtual char* GetFtLongNameStrg();
networker 0:7da612835693 55 virtual unsigned SetFtDistanceSensorMode(unsigned dwMode, unsigned dwTol1, unsigned dwTol2,
networker 0:7da612835693 56 unsigned dwSchwell1, unsigned dwSchwell2, unsigned dwRepeat1, unsigned dwRepeat2);
networker 0:7da612835693 57 /*
networker 0:7da612835693 58 virtual unsigned GetFtDeviceSetting(FT_SETTING *pSet);
networker 0:7da612835693 59 virtual unsigned SetFtDeviceSetting(FT_SETTING *pSet);
networker 0:7da612835693 60 */
networker 0:7da612835693 61 virtual unsigned StartFtProgram(unsigned dwMemBlock) {
networker 0:7da612835693 62 return pgm_message(0xf4, dwMemBlock);
networker 0:7da612835693 63 }
networker 0:7da612835693 64 virtual unsigned StopFtProgram() {
networker 0:7da612835693 65 return pgm_message(0xf8, 0);
networker 0:7da612835693 66 }
networker 0:7da612835693 67 };
networker 0:7da612835693 68
networker 0:7da612835693 69 class ftcommdevii: public ftcommdev {//specialisation of intelligent interface like devices
networker 0:7da612835693 70 friend ftcommdev;
networker 0:7da612835693 71 int analogcycle, cycle;
networker 0:7da612835693 72 int ii_speed;
networker 0:7da612835693 73 ftcommdevii() {}
networker 0:7da612835693 74 ftcommdevii(Serial *s, unsigned t, unsigned c):ftcommdev(s, t, c), analogcycle(c) {
networker 0:7da612835693 75 cycle = 0;
networker 0:7da612835693 76 ii_speed = 0;
networker 0:7da612835693 77 }
networker 0:7da612835693 78 virtual void FtThreadBegin();
networker 0:7da612835693 79 virtual void FtThreadEnd();
networker 0:7da612835693 80 };
networker 0:7da612835693 81
networker 0:7da612835693 82 #endif