00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef MIMOTERAEVENT_HH
00026 #define MIMOTERAEVENT_HH
00027
00028 # ifdef __cplusplus
00029
00030 # include <iostream>
00031 # include <vector>
00032
00033 # else
00034 # include <stdio.h>
00035
00036 # endif
00037
00049 # ifdef __cplusplus
00050 namespace Mimotera {
00051 # endif
00052
00055 typedef signed short Pixel_t;
00056
00059 typedef unsigned short Coord_t;
00060
00072 # ifdef __cplusplus
00073 class MimoteraInfo
00074 # else
00075 typedef struct MimoteraInfo
00076 # endif
00077 {
00078
00079 # ifdef __cplusplus
00080 public:
00083 MimoteraInfo() { ; }
00084
00087 void print(std::ostream & os ) const ;
00088
00089
00090 # endif
00091
00094 int _globalFrameNo;
00095
00098 short _frameInPacket;
00099
00102 short _triggeredFrameAB;
00103
00106 short _triggerNo;
00107 }
00108 # ifdef __cplusplus
00109 ;
00110
00117 std::ostream& operator<<( std::ostream & os, const MimoteraInfo & info );
00118
00119 # else
00120 MimoteraInfo ;
00121 # endif
00122
00123 # ifdef __cplusplus
00124
00126 const size_t kMimoteraInfoSize = 10;
00127
00131 const size_t kXPixel = 120;
00132
00136 const size_t kYPixel = 114;
00137
00141 const size_t kMarkersPerRow = 2;
00142
00145 const size_t kChan = 4;
00146
00149 const size_t kChanWidth = kXPixel / kChan;
00150
00153 const size_t kEventSize = 55296;
00154
00157 const size_t kSubFrameSize = sizeof ( Pixel_t ) * kXPixel * kYPixel ;
00158
00161 const size_t kDataSize = sizeof ( Pixel_t ) * kXPixel * kYPixel * 2;
00162
00165 const size_t kTrashSize = 566;
00166
00169 const size_t kLookUp[ kChan ] = { 0, 2, 3, 1 };
00170
00171
00172 # else
00173
00174 # define kMimoteraInfoSize 10
00175 # define kXPixel 120
00176 # define kYPixel 114
00177 # define kMarkersPerRow 2
00178 # define kChan 4
00179 # define kChanWidth kXPixel / kChan
00180 # define kEventSize 55296
00181 # define kSubFrameSize sizeof ( Pixel_t ) * kXPixel * kYPixel
00182 # define kDataSize sizeof ( Pixel_t ) * kXPixel * kYPixel * 2
00183 # define kTrashSize 566
00184
00185 # endif
00186
00187
00203 # ifdef __cplusplus
00204 class DataArrays_t {
00205 public:
00206
00208
00211 DataArrays_t()
00212 : _x( ( kXPixel - (kMarkersPerRow * kChan)) * kYPixel, 0 ),
00213 _y( ( kXPixel - (kMarkersPerRow * kChan)) * kYPixel, 0 ),
00214 _frameA( ( kXPixel - (kMarkersPerRow * kChan)) * kYPixel, 0 ),
00215 _frameB( ( kXPixel - (kMarkersPerRow * kChan)) * kYPixel, 0 )
00216 { }
00217
00218
00220 std::vector< Coord_t > _x;
00221
00223 std::vector< Coord_t > _y;
00224
00226 std::vector< Pixel_t > _frameA;
00227
00229 std::vector< Pixel_t > _frameB;
00230
00231 };
00232
00233 # else
00234
00235
00236 typedef struct DataArrays_t {
00237
00238 Coord_t _x[ (kXPixel - (kMarkersPerRow * kChan)) * kYPixel];
00239 Coord_t _y[ (kXPixel - (kMarkersPerRow * kChan)) * kYPixel];
00240 Pixel_t _frameA[ (kXPixel - (kMarkersPerRow * kChan)) * kYPixel];
00241 Pixel_t _frameB[ (kXPixel - (kMarkersPerRow * kChan)) * kYPixel];
00242 } DataArrays_t;
00243
00244
00245
00246 # endif
00247
00253 typedef struct CDataArrays_t {
00254
00255 Coord_t _x[ (kXPixel - (kMarkersPerRow * kChan)) * kYPixel];
00256 Coord_t _y[ (kXPixel - (kMarkersPerRow * kChan)) * kYPixel];
00257 Pixel_t _frameA[ (kXPixel - (kMarkersPerRow * kChan)) * kYPixel];
00258 Pixel_t _frameB[ (kXPixel - (kMarkersPerRow * kChan)) * kYPixel];
00259
00260 } CDataArrays_t ;
00261
00262
00295 # ifdef __cplusplus
00296 class MimoteraEvent {
00297 public:
00298
00300 MimoteraEvent();
00301
00303 ~MimoteraEvent();
00304
00306
00311 MimoteraInfo * info() { return _info; }
00312
00314
00317 Pixel_t * frameA() { return _subFrameA ; }
00318
00320
00323 Pixel_t * frameB() { return _subFrameB ; }
00324
00326
00346 DataArrays_t * getArrays();
00347
00349
00358 CDataArrays_t * getCArrays();
00359
00361
00366 void setArrays( DataArrays_t * dataArrays );
00367
00369
00374 void setArrays( CDataArrays_t * dataArrays ) ;
00375
00377 void setInfo( MimoteraInfo * info );
00378
00379 friend class MimoteraReader;
00380
00381 protected:
00383 bool _areArraysReady;
00384
00385 private:
00387 MimoteraInfo * _info;
00388
00390 Pixel_t _subFrameA[ kXPixel * kYPixel ];
00391
00393 Pixel_t _subFrameB[ kXPixel * kYPixel ];
00394
00396 DataArrays_t * _dataArrays;
00397
00399 CDataArrays_t * _cDataArrays;
00400
00401 };
00402 }
00403
00404 # else
00405 typedef struct MimoteraEvent {} MimoteraEvent;
00406 # endif
00407
00408
00409
00410
00411 # ifdef __cplusplus
00412 extern "C" {
00413 namespace Mimotera {
00414 # endif
00415
00422 extern MimoteraEvent * MimoteraEvent_create() ;
00423
00428 extern MimoteraEvent * MimoteraEvent_create_cpp() ;
00429
00437 extern void MimoteraEvent_dispose( MimoteraEvent * event );
00438
00443 extern void MimoteraEvent_dispose_cpp( MimoteraEvent * event );
00444
00452 extern MimoteraInfo * MimoteraEvent_getInfo( MimoteraEvent * event );
00453
00459 extern MimoteraInfo * MimoteraEvent_getInfo_cpp( MimoteraEvent * event );
00460
00468 extern void MimoteraEvent_setInfo( MimoteraEvent * event , MimoteraInfo * info );
00469
00475 extern void MimoteraEvent_setInfo_cpp( MimoteraEvent * event , MimoteraInfo * info );
00476
00490 extern Pixel_t * MimoteraEvent_getFrameA( MimoteraEvent * event ) ;
00491
00497 extern Pixel_t * MimoteraEvent_getFrameA_cpp( MimoteraEvent * event ) ;
00498
00512 extern Pixel_t * MimoteraEvent_getFrameB( MimoteraEvent * event ) ;
00513
00519 extern Pixel_t * MimoteraEvent_getFrameB_cpp( MimoteraEvent * event ) ;
00520
00528 extern CDataArrays_t * MimoteraEvent_getDataArrays( MimoteraEvent * event );
00529
00535 extern CDataArrays_t * MimoteraEvent_getDataArrays_cpp( MimoteraEvent * event );
00536
00537
00545 extern void MimoteraEvent_setDataArrays( MimoteraEvent * event, CDataArrays_t * dataArrays );
00546
00552 extern void MimoteraEvent_setDataArrays_cpp( MimoteraEvent * event, CDataArrays_t * dataArrays );
00553
00554 # ifdef __cplusplus
00555 }
00556 }
00557 # endif
00558
00559
00560 #endif
00561
00562