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