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 
00026 
00027 
00028 #ifndef __SRANGER_HWI_H
00029 #define __SRANGER_HWI_H
00030 
00031 
00032 #include "FB_spm_dataexchange.h" 
00033 #include "sranger_hwi_control.h"
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 class sranger_hwi_dev : public XSM_Hardware{
00042 
00043 public: 
00044         friend class DSPControl;
00045 
00046         sranger_hwi_dev();
00047         virtual ~sranger_hwi_dev();
00048 
00049         
00050         virtual long GetMaxPointsPerLine(){ return  AIC_max_points; };
00051         virtual long GetMaxLines(){ return  AIC_max_points; };
00052 
00053         virtual int ReadScanData(int y_index, int num_srcs, Mem2d *m[MAX_SRCS_CHANNELS]);
00054         virtual int ReadProbeData(int nsrcs, int nprobe, int kx, int ky,
00055                                   Mem2d *m, double scale=1.);
00056         virtual gchar* get_info();
00057 
00058         
00059         
00060 
00061 
00062 
00063 
00064 
00065 
00066 
00067         virtual gint RTQuery (gchar *property, double &val) { return FALSE; };
00068         virtual gint RTQuery (gchar *property, double &val1, double &val2) { return FALSE; };
00069         virtual gint RTQuery (gchar *property, double &val1, double &val2, double &val3) { return FALSE; };
00070         virtual gint RTQuery (gchar *property, gchar **val) { return FALSE; };
00071 
00072         virtual void ExecCmd(int Cmd) {};
00073 
00074 
00075         void swap (unsigned short *addr);
00076         void swap (short *addr);
00077         void swap (long *addr);
00078         void check_and_swap (short &data) {
00079                 if (swap_flg)
00080                         swap (&data);
00081         };
00082         void check_and_swap (unsigned short &data) {
00083                 if (swap_flg)
00084                         swap (&data);
00085         };
00086         void check_and_swap (long &data) {
00087                 if (swap_flg)
00088                         swap (&data);
00089         };
00090         int float_2_sranger_q15 (double x);
00091         int int_2_sranger_int (int x);
00092         long long_2_sranger_long (long x);
00093 
00094         int is_scanning() { return ScanningFlg; };
00095         int start_fifo_read (int y_start, 
00096                              int num_srcs0, int num_srcs1, int num_srcs2, int num_srcs3, 
00097                              Mem2d **Mob0, Mem2d **Mob1, Mem2d **Mob2, Mem2d **Mob3);
00098 
00099         int ReadLineFromFifo (int y_index);
00100 
00101         int ReadProbeFifo (int dspdev, int control=0);
00102 
00103         int probe_fifo_thread_active;
00104         int probe_time_estimate;
00105         int fifo_data_y_index;
00106         int fifo_data_num_srcs[4]; 
00107         Mem2d **fifo_data_Mobp[4]; 
00108 
00109         int probe_thread_dsp; 
00110 protected:
00111         int ScanningFlg;
00112         int KillFlg;
00113         int dsp; 
00114         int dsp_alternative; 
00115         int thread_dsp; 
00116         
00117         SPM_MAGIC_DATA_LOCATIONS magic_data;
00118         int swap_flg;
00119 
00120 private:
00121         GThread *fifo_read_thread;
00122         GThread *probe_fifo_read_thread;
00123         int FifoRead (int start, int end, int &xi, int num_srcs, int len, short *buffer, short *fifo);
00124         int FifoRead (int start, int end, int &xi, int num_srcs, int len, long *buffer, long *fifo);
00125         gchar *productid;
00126         int AIC_max_points;
00127 };
00128 
00129 
00130 
00131 
00132 
00133 
00134 class sranger_hwi_spm : public sranger_hwi_dev{
00135  public:
00136         sranger_hwi_spm();
00137         virtual ~sranger_hwi_spm();
00138 
00139         
00140         
00141 
00142 
00143 
00144 
00145 
00146 
00147 
00148         virtual gint RTQuery (gchar *property, double &val) { return FALSE; };
00149         virtual gint RTQuery (gchar *property, double &val1, double &val2) { return FALSE; };
00150         virtual gint RTQuery (gchar *property, double &val1, double &val2, double &val3);
00151         virtual gint RTQuery (gchar *property, gchar **val) { return FALSE; };
00152 
00153         virtual void SetOffset(long x, long y);
00154         virtual void StartScan2D();
00155         virtual void ScanLineM(int yindex, int xdir, int muxmode,
00156                                Mem2d *Mob[MAX_SRCS_CHANNELS], int ix0=0 );
00157         virtual void EndScan2D();
00158         virtual void PauseScan2D();
00159         virtual void ResumeScan2D();
00160         virtual void KillScan2D(){ KillFlg=TRUE; };
00161 
00162         virtual void ExecCmd(int Cmd);
00163  protected:
00164 
00165  private:
00166         DSPControl *dc;
00167 };
00168 
00169 #endif
00170