43,7 → 43,7 |
static int ph_tdc, ph_wf; |
static int dtdc[MAXTDCCH]; |
static int debugOut = 0; |
|
static time_t t0; |
static ViStatus istat; |
static ViSession RedPHandle,RMHandle; |
|
50,8 → 50,7 |
//============================================================================== |
// Static functions |
|
static int update_plots (void) |
{ |
static int update_plots (void) { |
if (ph_tdc>0) DeleteGraphPlot (p1h, P1_TDC_G, ph_tdc, VAL_DELAYED_DRAW); |
ph_tdc = PlotY (p1h, P1_TDC_G, &dtdc[0], MAXTDCCH, VAL_INTEGER, |
VAL_VERTICAL_BAR, VAL_EMPTY_SQUARE, VAL_SOLID, 1, VAL_RED); |
58,40 → 57,89 |
return (0); |
} |
|
static int CVICALLBACK daq_run(void *functionData) |
{ |
int i,trgdly,neve,ieve,ndata; |
|
|
static int export_data (void) { |
char filename[0xFF],rootcmd[0xFF]; |
int type=0; |
int neve; |
GetCtrlVal(p1h,P1_FILENAME_EN,filename); |
GetCtrlVal(p1h,P1_FILETYPE,&type); |
unsigned int hdr[10]; |
time_t t; |
hdr[0] = 0x1; |
hdr[1] = sizeof(int) * MAXTDCCH; |
hdr[2] = t0; |
GetCtrlVal (p1h, P1_CEVE_N, &neve); |
hdr[3] = neve; |
hdr[4] = (unsigned int)( time(&t)-t0); |
FILE *fp; |
switch (type) { |
case 0: |
case 1: |
fp =fopen(filename,"wb"); |
if (fp) { |
fwrite(hdr,sizeof(unsigned int),5,fp); |
fwrite(dtdc,sizeof(int),MAXTDCCH,fp); |
fclose(fp); |
if (type) { |
sprintf(rootcmd ,"root.exe plottdc.cxx(\\\"%s\\\")", filename); |
LaunchExecutable(rootcmd); |
|
} |
} |
break; |
case 2: |
fp=fopen(filename,"w"); |
if (fp) { |
for (int i=0; i<MAXTDCCH; i++) fprintf(fp,"%d\n", dtdc[i]); |
fclose(fp); |
} |
break; |
|
} |
|
|
return (0); |
} |
static int CVICALLBACK daq_run(void *functionData) { |
int trgdly,neve,ieve,ndata; |
float data[10000]; |
char datac[100000]; |
char *ctoken_p; |
char response[80]; |
|
istat = viPrintf (RedPHandle, "ACQ:RST\r\n"); |
istat = viPrintf (RedPHandle, "ACQ:AVG OFF\r\n"); |
istat = viPrintf (RedPHandle, "ACQ:DEC 1\r\n"); |
istat = viPrintf (RedPHandle, "ACQ:TRIG:LEV -0.03\r\n"); |
trgdly = MINTRGDELAY + NSAMPLES - NBEFORE + 1; |
istat = viPrintf (RedPHandle, "ACQ:TRIG:DLY %0d\r\n", trgdly); |
istat = viPrintf (RedPHandle, "ACQ:START\r\n"); |
Delay(0.01); |
istat = viPrintf (RedPHandle, "ACQ:TRIG CH1_NE\r\n"); |
time_t t; |
response[0] = 0; |
t0 = time(&t); |
if (RedPHandle) { |
istat = viPrintf (RedPHandle, "ACQ:RST\r\n"); |
istat = viPrintf (RedPHandle, "ACQ:AVG OFF\r\n"); |
istat = viPrintf (RedPHandle, "ACQ:DEC 1\r\n"); |
istat = viPrintf (RedPHandle, "ACQ:TRIG:LEV -0.03\r\n"); |
trgdly = MINTRGDELAY + NSAMPLES - NBEFORE + 1; |
istat = viPrintf (RedPHandle, "ACQ:TRIG:DLY %0d\r\n", trgdly); |
istat = viPrintf (RedPHandle, "ACQ:START\r\n"); |
Delay(0.01); |
istat = viPrintf (RedPHandle, "ACQ:TRIG CH1_NE\r\n"); |
// istat = viPrintf (RedPHandle, "ACQ:TRIG NOW\r\n"); |
|
GetCtrlVal (p1h, P1_NEVE_N, &neve); |
} |
GetCtrlVal (p1h, P1_NEVE_N, &neve); |
ieve=0; |
do { |
while (VI_TRUE) { |
istat = viQueryf (RedPHandle, "ACQ:TRIG:STAT?\r\n", "%s",response); |
if (RedPHandle) istat = viQueryf (RedPHandle, "ACQ:TRIG:STAT?\r\n", "%s",response); |
if (response[0]=='T') break; |
if (!daq_on) break; |
} |
if (!daq_on) break; |
istat = viQueryf (RedPHandle, "ACQ:SOUR1:DATA:LAT:N? %0d\r\n", "%s", NSAMPLES, datac); |
istat = viPrintf (RedPHandle, "ACQ:START\r\n"); |
Delay(0.001); |
istat = viPrintf (RedPHandle, "ACQ:TRIG CH1_NE\r\n"); |
if (RedPHandle) { |
istat = viQueryf (RedPHandle, "ACQ:SOUR1:DATA:LAT:N? %0d\r\n", "%s", NSAMPLES, datac); |
istat = viPrintf (RedPHandle, "ACQ:START\r\n"); |
Delay(0.001); |
istat = viPrintf (RedPHandle, "ACQ:TRIG CH1_NE\r\n"); |
// istat = viPrintf (RedPHandle, "ACQ:TRIG NOW\r\n"); |
// Delay(0.01); |
} |
ndata=0; |
ctoken_p = strtok (datac, "{,}\r"); |
while (ctoken_p) { |
101,7 → 149,7 |
ndata++; |
} |
ph_wf = PlotY (p1h, P1_WF_G, data, ndata, VAL_FLOAT, VAL_THIN_LINE, VAL_NO_POINT, VAL_SOLID, 1, VAL_BLUE); |
SetCtrlVal (p1h, P1_CEVE_N, ++ieve); |
SetCtrlVal (p1h, P1_CEVE_N, ++ieve); |
if (debugOut) { |
sprintf(response,"%d, %d",ieve,ndata); |
istat = InsertTextBoxLine (p1h, P1_IO_TB, -1, response); |
108,12 → 156,12 |
debugOut=0; |
} |
} while (ieve<neve); |
daq_on=0; |
SetCtrlVal (p1h, P1_DAQ_S, daq_on); |
SetCtrlVal (p1h, P1_CEVE_N, ieve); |
return 0; |
daq_on=0; |
SetCtrlVal (p1h, P1_DAQ_S, daq_on); |
SetCtrlVal (p1h, P1_CEVE_N, ieve); |
return 0; |
} |
|
|
//============================================================================== |
// Global variables |
|
125,8 → 173,7 |
/// HIRET What does your function return? |
|
int CVICALLBACK cb_timer (int panel, int control, int event, void *callbackData, |
int eventData1, int eventData2) |
{ |
int eventData1, int eventData2) { |
QueueUserEvent (9000, p1h, P1_TIMER_T); |
return (0); |
} |
145,7 → 192,7 |
LPSTR lpszCmdLine, int nCmdShow) { |
int i,refon,dummy; |
char response[80]; |
|
|
if (InitCVIRTE (hInstance, 0, 0) == 0) |
return -1; /* out of memory */ |
|
157,18 → 204,20 |
SetStdioWindowPosition (825, 20); |
|
istat = viOpenDefaultRM (&RMHandle); |
istat = viOpen (RMHandle, "TCPIP0::178.172.43.73::5000::SOCKET", VI_NULL, VI_NULL, &RedPHandle); |
if (RMHandle) istat = viOpen (RMHandle, "TCPIP0::178.172.43.73::5000::SOCKET", VI_NULL, VI_NULL, &RedPHandle); |
if (RedPHandle){ |
istat = viSetAttribute (RedPHandle, VI_ATTR_TCPIP_KEEPALIVE, VI_TRUE); |
istat = viSetAttribute (RedPHandle, VI_ATTR_TCPIP_NODELAY, VI_TRUE); |
istat = viSetAttribute (RedPHandle, VI_ATTR_TERMCHAR, '\n'); |
istat = viSetAttribute (RedPHandle, VI_ATTR_TERMCHAR_EN, VI_TRUE); |
istat = viSetAttribute (RedPHandle, VI_ATTR_TMO_VALUE, 1000); |
|
} |
if ((p1h = LoadPanel (0, "RedPitaya_ui.uir", P1)) < 0) return -1; |
DisplayPanel (p1h); |
istat = SetCtrlAttribute (p1h, P1_WF_G, ATTR_DATA_MODE, VAL_DISCARD); |
|
istat = viQueryf (RedPHandle, "*IDN?\r\n", "%s",response); |
if (RedPHandle) istat = viQueryf (RedPHandle, "*IDN?\r\n", "%s",response); |
else sprintf(response,"Connection to RedPitaya is missing"); |
istat = InsertTextBoxLine (p1h, P1_IO_TB, -1,response); |
istat = ProcessDrawEvents (); |
|
189,8 → 238,7 |
GetCtrlVal (p1h, P1_DAQ_S, &daq_on); |
if (daq_on) { |
CmtScheduleThreadPoolFunction (poolHandle, daq_run, (void *)&dummy, &tfID); |
} |
else { |
} else { |
CmtWaitForThreadPoolFunctionCompletion (poolHandle, tfID, |
OPT_TP_PROCESS_EVENTS_WHILE_WAITING); |
CmtReleaseThreadPoolFunctionID (poolHandle, tfID); |
204,6 → 252,10 |
case P1_CLEAR_PB: |
DeleteGraphPlot (p1h, P1_WF_G, -1, VAL_IMMEDIATE_DRAW); |
break; |
|
case P1_EXPORT_PB: |
export_data(); |
break; |
case P1_TDCLOG_S: |
GetCtrlVal (p1h, P1_TDCLOG_S, &istat); |
SetCtrlAttribute (p1h, P1_TDC_G, ATTR_YMAP_MODE, istat); |
212,14 → 264,13 |
default: |
Delay(1.); |
} |
} |
while ((rID != P1_EXIT_PB)||daq_on); |
} while ((rID != P1_EXIT_PB)||daq_on); |
|
CmtDiscardThreadPool (poolHandle); |
DiscardPanel (p1h); |
|
istat = viClose (RedPHandle); |
istat = viClose (RMHandle); |
if (RedPHandle) istat = viClose (RedPHandle); |
if (RMHandle) istat = viClose (RMHandle); |
|
return 0; |
} |