class library to access fischertechnik interfaces via USB
Dependencies: FatFileSystem mbed myBlueUSB neigbourhood rfcomm sdp
ftlib/ftlibclasscom.h@1:4676e8b9b357, 2013-03-11 (annotated)
- 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?
User | Revision | Line number | New 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 |