My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
CbassBackend.h
1 #ifndef GCP_UTIL_CBASSBACKEND_H
2 #define GCP_UTIL_CBASSBACKEND_H
3 
4 /*
5  * CbassBackend.h
6  * cbass_interface
7  *
8  * Created by Stephen Muchovej on 11/17/09
9  *
10  */
11 
12 #include <iostream>
13 #include <math.h>
14 #include <stdio.h>
15 #include <stdlib.h>
16 
17 #include <vector>
18 
19 #include "gcp/util/common/Directives.h"
20 
21 #if DIR_HAVE_USB
22 #include "usb.h"
23 #endif
24 
25 #define VendorID 0x04B4
26 #define ProductID 0x0081
27 #define cy8051_CPUCS 0xE600
28 #define BACKEND_TIMEOUT 15
29 #define MAX_HEX_LENGTH 16
30 
31 //#define convToV 1.25/8191
32 #define convToV 1/1024 //to keep the same level as before.
33 #define convToV2 1/65536 //to keep the same level as before.
34 
35 namespace gcp {
36  namespace util {
37 
38  // Class to Communicate with the Backend
39 
40  class CbassBackend {
41  public:
42 
46  CbassBackend();
47 
51  virtual ~CbassBackend();
52 
56  bool connected_;
57 
61  typedef struct {
62  int Length;
63  int Address;
64  int Type;
65  char Data[MAX_HEX_LENGTH];
66  } hexRecord;
67 
68  hexRecord record_;
69 
73 #if DIR_HAVE_USB
74  usb_dev_handle* devHandle_;
75 #endif
76 
80  // timeVals_ should be a vector of time samples
81  // dataVals_ should be a 2D vector
82  std::vector<float> sortTimeVals_;
83  std::vector<float> sortTimeVals2_;
84  std::vector<float> sortBackendVersion_;
85  std::vector<uint> sortAvgSec_;
86  std::vector<std::vector<float> > sortDataVals_;
87  std::vector<std::vector<float> > sortRegData_;
88  std::vector<std::vector<float> > sortDiagnostics_;
89  std::vector<std::vector<float> > sortAlpha_;
90  std::vector<std::vector<float> > sortNonlin_;
91  std::vector<unsigned short> sortFlags_;
92  int startIndex_;
93  int currentIndex_;
94  bool burst_; // indicates whether we're in burst mode.
95  int numFrames_; // how many frames are to be parsed
96 
100  char data_[512];
101  std::vector<float> timeVals_;
102  std::vector<float> timeVals2_;
103  std::vector<std::vector<float> > dataVals_;
104  std::vector<std::vector<float> > regData_;
105  std::vector<unsigned short> flags_;
106  std::vector<float> packetVals_;
107  int arrayIndex_;
108 
112  void backendConnect();
113 
117  void backendDisconnect();
118 
122  void hexRead(FILE* hexFile);
123 
127  void loadHex();
128 
132  enum Command {
133  INVALID ,
134  READ_DATA ,
135  FPGA_RESET ,
136  FIFO_RESET ,
137  SET_SWITCH_PERIOD ,
138  SET_INT_PERIOD ,
139  SET_BURST_LENGTH ,
140  SETUP_ADC ,
141  TRIGGER ,
142  ACQUIRE_DATA ,
143  ENABLE_CONTINUOUS ,
144  ENABLE_SIMULATOR ,
145  ENABLE_NOISE ,
146  ENABLE_WALSH ,
147  ENABLE_WALSH_ALT ,
148  ENABLE_WALSH_FULL ,
149  NON_LINEARITY ,
150  WALSH_TRIM_LENGTH ,
151  SET_NONLIN ,
152  SET_ALPHA ,
153  ENABLE_ALPHA
154  };
155 
159  void parseData2(int bytesTransferred);
160  void parseData1(int bytesTransferred);
161  void parseDataOld(int bytesTransferred);
162  void parseData(int bytesTransferred);
163  void parseData2011(int bytesTransferred);
164 
168  void sortData(int numSamples);
169 
173  int issueCommand(Command type);
174  int issueCommand(Command type, unsigned char address);
175  int issueCommand(Command type, unsigned char* period);
176  int issueCommand(Command type, unsigned char address, unsigned char* period);
177  int issueCommand(Command type, unsigned char address, unsigned char* period, unsigned char channel, unsigned char stage);
178 
182  int fpgaReset();
183  int usbReset();
184  int fifoReset();
185  int setSwPeriod(unsigned char period);
186  int setIntPeriod(unsigned char* period);
187  int setBurstLength(unsigned char* length);
188  int setupAdc();
189  int setBit(unsigned char address, unsigned char bit, unsigned char value);
190  int storeData(unsigned char address, unsigned char value);
191  int trigger();
192  int acquireData(unsigned char enable);
193  int enableContinuous(unsigned char enable);
194  int enableSimulator(unsigned char enable);
195  int enableNoise(unsigned char enable);
196  int enableSwitch(unsigned char enable);
197  int enableSwitchAlt(unsigned char enable);
198  int getData();
199 
200 
201  private:
202  void printBits(unsigned char feature);
203 
207  int bulkTransfer(char* data);
208  int bulkTransfer(char* data, int size);
209 
210  }; // End class CbassBackend
211  }; // End namespace util
212 }; // End namespace gcp
213 #endif
int setupAdc()
Definition: CbassBackend.cc:581
void backendConnect()
Definition: CbassBackend.cc:61
Definition: Command.h:34
int issueCommand(Command type)
Definition: CbassBackend.cc:282
Definition: CbassBackend.h:61
void backendDisconnect()
Definition: CbassBackend.cc:138
Definition: script.h:529
virtual ~CbassBackend()
Definition: CbassBackend.cc:50
char data_[512]
Definition: CbassBackend.h:100
void parseData2(int bytesTransferred)
Definition: CbassBackend.cc:1022
int setBit(unsigned char address, unsigned char bit, unsigned char value)
Definition: CbassBackend.cc:593
int storeData(unsigned char address, unsigned char value)
Definition: CbassBackend.cc:609
int getData()
Definition: CbassBackend.cc:720
void hexRead(FILE *hexFile)
Definition: CbassBackend.cc:176
int setIntPeriod(unsigned char *period)
Definition: CbassBackend.cc:537
int fpgaReset()
Definition: CbassBackend.cc:488
int enableSimulator(unsigned char enable)
Definition: CbassBackend.cc:661
int enableNoise(unsigned char enable)
Definition: CbassBackend.cc:674
int setBurstLength(unsigned char *length)
Definition: CbassBackend.cc:565
int acquireData(unsigned char enable)
Definition: CbassBackend.cc:635
bool connected_
Definition: CbassBackend.h:56
CbassBackend()
Definition: CbassBackend.cc:33
int setSwPeriod(unsigned char period)
Definition: CbassBackend.cc:524
int usbReset()
Definition: CbassBackend.cc:500
int fifoReset()
Definition: CbassBackend.cc:512
int enableSwitch(unsigned char enable)
Definition: CbassBackend.cc:688
std::vector< float > sortTimeVals_
Definition: CbassBackend.h:82
Definition: CbassBackend.h:40
int trigger()
Definition: CbassBackend.cc:623
int enableSwitchAlt(unsigned char enable)
Definition: CbassBackend.cc:707
void loadHex()
Definition: CbassBackend.cc:224
void sortData(int numSamples)
Definition: CbassBackend.cc:1472
int enableContinuous(unsigned char enable)
Definition: CbassBackend.cc:648
Definition: Length.h:19