How do i create an UI for the below code
#include <visa.h>
#include <ansi_c.h>
#include <cvirte.h>
#include <userint.h>
#include "stepresponse.h"
#include "toolbox.h"
static int panelHandle = 0;
#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
#define _CRT_SECURE_NO_DEPRECATE
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "visa.h"
#include "utility.h"
static ViSession defaultRM;
static ViSession instr;
static ViSession instr2;
static ViStatus status;
static ViUInt32 retCount;
static ViUInt32 writeCount;
static unsigned char buffer[100];
static unsigned char buffer2[100];
static char stringinput[512];
static double knobval[512];
static char komand[512];
static double Save[1001];
// Global variables
int f;
double x;
int i;
double j;
int k=0;
double n;
double stepval;
double pointval;
double pval;
double sval;
double g;
double slideval;
int radioButtonVal;
int main (int argc, char *argv[])
{
status = viOpenDefaultRM(&defaultRM);
status = viOpen (defaultRM, "device address", VI_NULL, VI_NULL, &instr);
status = viOpen (defaultRM, "address", VI_NULL, VI_NULL, &instr2);
status = viSetAttribute (instr, VI_ATTR_TMO_VALUE, 5000);
status = viSetAttribute (instr2, VI_ATTR_TMO_VALUE, 5000);
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "stepresponse.uir", PANEL)) < 0)
return -1;
DisplayPanel (panelHandle);
RunUserInterface ();
DiscardPanel (panelHandle);
return 0;
}
// UI callback function prototypes
/// HIFN Exit when the user dismisses the panel.
int CVICALLBACK panelCB (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
if (event == EVENT_CLOSE)
QuitUserInterface (0);
return 0;
}
int CVICALLBACK OkCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
// comand for gr initialisation
strcpy(stringinput,"*IDN?");
status = viWrite (instr, stringinput, strlen(stringinput), &writeCount);
// read data from gr 'instr' to variable 'buffer'
status = viRead (instr, buffer, 100, &retCount);
printf("Data read: %s\n",buffer);
// comand for mulmr initialisation
strcpy(stringinput,"*IDN?");
status = viWrite (instr2, stringinput, strlen(stringinput), &writeCount);
// read data from mulmr 'instr2' to variable 'buffer2'
status = viRead (instr2, buffer2, 100, &retCount);
printf("Data read: %s\n",buffer2);
//SET MULTIMETER
strcpy(stringinput, "CONF:VOLTage:AC");
status = viWrite (instr2, stringinput, strlen(stringinput), &writeCount);
// set channel 1 of GENERATOR to function sin
strcpy(stringinput,"SOUR1:FUNC SIN");
status = viWrite (instr, stringinput, strlen(stringinput), &writeCount);
//use knob to set amplitude from GENERATOR
GetCtrlVal(panel,PANEL_NUMERICKNOB,knobval);
sprintf(komand,"SOUR1:VOLT %f",*knobval);
strcpy(stringinput,komand);
status = viWrite (instr, stringinput, strlen(stringinput), &writeCount);
//use knob to set MIN frequency from GENERATOR
GetCtrlVal(panel,PANEL_NUMERICKNOBFREQ,knobval);
sprintf(komand,"SOUR1:FREQ %f",*knobval);
strcpy(stringinput,komand);
status = viWrite (instr, stringinput, strlen(stringinput), &writeCount);
//set MAX value
GetCtrlVal(panel,PANEL_NUMERIC_3,&slideval);
g=slideval;
GetCtrlVal (panelHandle, PANEL_RADIOBUTTON, &radioButtonVal);
if (radioButtonVal == 1) {
//Input step value
GetCtrlVal(panel,PANEL_NUMERIC, &stepval);
sval=stepval;
n=sval;}
else
{
//Input point number
GetCtrlVal(panel,PANEL_NUMERIC_2, &pointval);
GetCtrlVal(panel,PANEL_NUMERICKNOBFREQ,knobval);
pval=((g - *knobval)/pointval);
n=pval;
}
j = *knobval;
for (f=j,k=0; f<=g; f+=n,k++)
{
sprintf(komand,"SOUR1:FREQ %f",(double)f);
strcpy(stringinput,komand);
status = viWrite (instr, stringinput, strlen(stringinput), &writeCount);
//DELAY!!!
Delay (0.1);
//READ FROM MULTIMETER
strcpy(stringinput, "MEASure:VOLTage:AC?");
status = viWrite (instr2, stringinput, strlen(stringinput), &writeCount);
status = viRead (instr2, buffer2, 100, &retCount);
printf("Amplitude read: %s", buffer2);
//save to array
x = atof(buffer2);
Save[k] = x;
}
//Display Output
printf("Result:\n");
putchar('\n');
for (i=0; i<k; printf("%3.1lf ",Save[i++]));
putchar('\n');
//sinepattern (100. Save[k], 180.0, 2.0, sine);
PlotY (panelHandle, PANEL_Output, Save, k, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, VAL_DASH, VAL_RED);
//printf("Closing Sessions\nHit enter to continue.");
// session closing
//fflush(stdin);
//getchar();
//status = viClose(instr);
//status = viClose(instr2);
//status = viClose(defaultRM);
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}
int CVICALLBACK QuitCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
// session closing
fflush(stdin);
getchar();
status = viClose(instr);
status = viClose(instr2);
status = viClose(defaultRM);
QuitUserInterface(0);
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}
int CVICALLBACK amplitudeCTRL (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}
int CVICALLBACK frequencyCTRL (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}
int CVICALLBACK MaxFreqCallback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}
int CVICALLBACK StepToggleCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
SetCtrlVal (panelHandle, PANEL_RADIOBUTTON_2, 0);
SetInputMode (panelHandle, PANEL_NUMERIC, 1);
SetInputMode(panel, PANEL_NUMERIC_2, 0);
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}
int CVICALLBACK PointToggleCB (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
SetCtrlVal (panelHandle, PANEL_RADIOBUTTON, 0);
SetInputMode(panel, PANEL_NUMERIC, 0);
SetInputMode (panelHandle, PANEL_NUMERIC_2, 1);
break;
case EVENT_RIGHT_CLICK:
break;
}
return 0;
}