#ifdef _MAIN
 
#include <cvirte.h>             
 
#include <userint.h>
 
#include "mpod_uir.h"
 
 
 
#include "netsnmplib.h" 
 
#include "WIENER_SNMP.h"
 
 
 
 
 
static int p1h;
 
HSNMP mpod;
 
 
 
void snmptest(void) {
 
  
 
  
 
  if(!mpod) return;
 
  printf("-----------------------------------------------------------------\n");  
 
 
  double ret;
 
  double voltage;
 
  double vSet=0;
 
  int channel=2;
 
  int iret;
 
  int i, j;
 
  
 
  printf("Turning channel %i ON\n", channel
);    
  setMainSwitch(mpod, 1);
 
  Sleep(1000);
 
  printf(".... Turning channel %i ON\n", channel
);  
  setChannelSwitch(mpod, channel, 1);
 
  Sleep(1000);
 
  
 
  //Test Channel Status
 
  iret=getChannelSwitch(mpod, channel);
 
  printf("Channel Status = %i\n\n", iret
);  
  
 
  
 
  
 
  //getOutputNumber
 
  iret=getOutputNumber(mpod);
 
  printf("getOutputNumber = %i\n\n", iret
);  
  
 
  //getOutputGroups
 
  iret=getOutputGroups(mpod);
 
  printf("getOutputGroups = %i\n\n", iret
);  
  
 
  
 
 
 
  //Test Setting and reading output Voltage
 
  vSet =getOutputVoltage(mpod, channel);
 
  printf("Output Voltage = %f.  I will now change it to 24.2\n", vSet
);  
  setOutputVoltage(mpod, channel, 24.2);
 
  vSet =getOutputVoltage(mpod, channel);
 
  printf("Output Voltage = %f.  I will now change it to 12.3\n", vSet
);  
  setOutputVoltage(mpod, channel, 12.3);
 
  vSet =getOutputVoltage(mpod, channel);
 
  printf("Output Voltage = %f.\n\n", vSet
);  
 
 
  //Test Reading the Sense Measurement
 
  ret = getOutputSenseMeasurement(mpod, channel);
 
  printf("Sense Voltage =  %f\n", ret
);  
  Sleep(1000);
 
  ret = getOutputSenseMeasurement(mpod, channel);
 
  printf("Sense Voltage =  %f.  It the channel is ramping it should have changed.\n\n", ret
);  
 
 
  //Test Reading the Current
 
  ret = getCurrentMeasurement(mpod, channel);
 
  printf("Current Measurement =  %f\n\n", ret
);  
 
 
  //Test the Ramp
 
  ret=getOutputRiseRate(mpod, channel);
 
  printf("Ramp Rate is %f, Let's make it 46.\n", ret
);  
  setOutputRiseRate(mpod, channel, 4.6);
 
  ret=getOutputRiseRate(mpod, channel);
 
  printf("Ramp Rate is %f, Let's make it 100.\n", ret
);  
  setOutputRiseRate(mpod, channel, 10.0);
 
  ret=getOutputRiseRate(mpod, channel);
 
  printf("Ramp Rate is %f.\n\n", ret
);  
 
 
  //Test Channel Status
 
  iret=getChannelSwitch(mpod, channel);
 
  printf("Channel Status = %i\n\n", iret
);  
 
 
 
 
  
 
  getMainSwitch(mpod);
 
  //setMainSwitch(mpod, 0);
 
  Sleep(1000);
 
  if (!getMainSwitch(mpod)) {
 
  }
 
 
 
 
 
  printf("-----------------------------------------------------------------\n");  
 
 
 
 
}
 
 
 
 
 
int main (int argc, char *argv[]) {
 
  if (InitCVIRTE (0, argv, 0) == 0)
 
    return -1;  // out of memory 
 
  if ((p1h = LoadPanel (0, "mpod_uir.uir", PANEL)) < 0)
 
    return -1;
 
  
 
  if(!SnmpInit()) return;                     // basic init
 
  mpod = SnmpOpen("178.172.43.94");   // open TCP/IP socket
 
  SetCtrlVal(p1h,PANEL_MPODONOFF,1-getMainSwitch(mpod));
 
  DisplayPanel (p1h);
 
  RunUserInterface ();
 
  DiscardPanel (p1h);
 
   SnmpClose(mpod);
 
  SnmpCleanup();                              // finish
 
  return 0;
 
}
 
 
 
int CVICALLBACK StartCB (int panel, int control, int event,
 
                         void *callbackData, int eventData1, int eventData2) {
 
  switch (event) {
 
    case EVENT_COMMIT:
 
      snmptest();
 
      break;
 
  }
 
  return 0;
 
}
 
 
 
int CVICALLBACK StopCB (int panel, int control, int event,
 
                        void *callbackData, int eventData1, int eventData2) {
 
  switch (event) {
 
    case EVENT_COMMIT:
 
 
 
      break;
 
  }
 
  return 0;
 
}
 
 
 
int CVICALLBACK ExitCB (int panel, int control, int event,
 
                        void *callbackData, int eventData1, int eventData2) {
 
  switch (event) {
 
    case EVENT_COMMIT:
 
      QuitUserInterface (0);
 
      break;
 
  }
 
  return 0;
 
}
 
 
 
 
 
int CVICALLBACK MpodOnOffCB (int panel, int control, int event,
 
                             void *callbackData, int eventData1, int eventData2) {
 
  int val;
 
  switch (event) {
 
    case EVENT_COMMIT:
 
      GetCtrlVal(panel,control,&val);
 
      getMainSwitch(mpod);
 
      setMainSwitch(mpod, 1-val);
 
      Sleep(100);
 
      if (!getMainSwitch(mpod)) {
 
      }  else  {
 
      } 
 
      break;
 
  }
 
  return 0;
 
}
 
 
 
 
 
int CVICALLBACK MpodChannelsOutputVoltageCB (int panel, int control, int event,
 
                                     void *callbackData, int eventData1, int eventData2) {
 
  double vset,iset;
 
  switch (event) {
 
    case EVENT_COMMIT:
 
      GetCtrlVal(panel,PANEL_VSET,&vset);
 
      GetCtrlVal(panel,PANEL_ISET,&iset); 
 
      for( int i = 0; i < 4; i++) {
 
        int j=i*100;
 
        for( int k = 0; k < 8; k++) {
 
          int channel = j+k;
 
          char *cName= getOutputName(mpod, channel);
 
          if (!cName) continue;
 
          if (channel==0) continue;
 
          printf("%d  Vset=%f Iset=%f \n", channel
, vset
,iset
);  
          setOutputVoltage(mpod, channel, vset);
 
          setOutputCurrent(mpod, channel, iset); 
 
        
 
        }
 
      }
 
      break;
 
  }
 
  return 0;
 
}
 
 
 
 
 
 
 
int CVICALLBACK MpodChannelsOnOffCB (int panel, int control, int event,
 
                                     void *callbackData, int eventData1, int eventData2) {
 
  int val;
 
  switch (event) {
 
    case EVENT_COMMIT:
 
       GetCtrlVal(panel,control,&val);
 
       val=1-val;
 
      for( int i = 0; i < 4; i++) {
 
        int j=i*100;
 
        for( int k = 0; k < 8; k++) {
 
          int channel = j+k;
 
          char *cName= getOutputName(mpod, channel);
 
          if (!cName) continue;
 
          if (channel==0) continue;
 
          int state=getChannelSwitch(mpod, channel);
 
          if (state!= val) setChannelSwitch(mpod, channel, val);
 
        
 
        }
 
      }
 
      break;
 
  }
 
  return 0;
 
}
 
 
 
 
 
 
 
 
 
 
 
 
 
int CVICALLBACK GetStatus (int panel, int control, int event,
 
                           void *callbackData, int eventData1, int eventData2) {
 
  switch (event) {
 
    case EVENT_COMMIT:
 
       // scan MPOD crate, now 4 loops for MPODmini can be changed to 10 for full size crate
 
  for( int i = 0; i < 4; i++) 
 
  {
 
          int j=i*100;
 
          for( int k = 0; k < 8; k++) 
 
          {
 
        int channel = j+k; 
 
        char * cName= getOutputName(mpod, channel);
 
        if (!cName) continue;
 
        
 
                    int iret=getChannelSwitch(mpod, channel);
 
                    double vSet      =getOutputVoltage(mpod, channel);
 
        double iSet      =getOutputCurrent(mpod, channel);
 
        double vTerminal =getOutputTerminalMeasurement(mpod, channel);
 
        double vSense    =getOutputSenseMeasurement(mpod, channel); 
 
        double iMon      =getCurrentMeasurement(mpod, channel);
 
        double vRpUp     =getOutputRiseRate(mpod, channel);  
 
        double vRpDown   =getOutputFallRate(mpod, channel);  
 
                    printf("%3i %s\t[%i]\tVset=%g\tIset=%g\tImon=%g\tVmon=%g\tVterm=%g\tRUp=%g\tRDn=%g\n", channel
, cName
, iret
, vSet
, iSet
, iMon
, vSense
, vTerminal
, vRpUp
, vRpDown
);  
          }
 
  }
 
  
 
  break;
 
  }
 
  return 0;
 
}
 
#endif