#include #include #include #include #ifndef DUMMY_INST #include #include "Decl-32.h" #endif #include "inst.h" #include "instinit.h" #include "trace.h" static long dev = -1; static pthread_mutex_t mut; #define PS_LOCK pthread_mutex_lock(&mut) #define PS_UNLOCK pthread_mutex_unlock(&mut) int powersupply_init () { char s[100]; trace_output("Initializing power supply at device 6... "); #ifndef DUMMY_INST dev = ibdev(0,6,0,T3s,1,0); ibwrt(dev, "*rst\r", strlen("*rst\r")); sprintf(s, "*idn?\r"); ibwrt(dev, s, strlen(s)); ibrd(dev, s, 100); trace_output("%s.\n", s); ibwrt(dev, "*rst\r", strlen("*rst\r")); ibwrt(dev, "outp on\r", strlen("outp on\r")); #else dev = 0; trace_output("dummy.\n"); #endif pthread_mutex_init(&mut, NULL); return 0; } int powersupply_set_voltage (double v) { char s[100]; PS_LOCK; #ifndef DUMMY_INST sprintf(s, "volt %f", v); ibwrt(dev, s, strlen(s)); #else /* don't do anything */ #endif PS_UNLOCK; return 0; } int powersupply_set_current (double i) { char s[100]; PS_LOCK; #ifndef DUMMY_INST sprintf(s, "curr %f", i); ibwrt(dev, s, strlen(s)); #else /* don't do anything */ #endif PS_UNLOCK; return 0; } double powersupply_mult_voltage (double m) { PS_LOCK; /* do real stuff here */ PS_UNLOCK; return 1.22 * m; } double powersupply_get_voltage () { static int i = 0; /* sleep(1); */ PS_LOCK; /* do real stuff here */ PS_UNLOCK; if (i++ % 10) return 0; return 1.25; } double powersupply_get_opposite () { static int i = 0; /* sleep(1); */ PS_LOCK; /* do real stuff here */ PS_UNLOCK; if (i++ % 10) return 1.25; return 0; } int powersupply_current_exceeds (double i) { double current; char s[100]; PS_LOCK; #ifndef DUMMY_INST sprintf(s, "meas:curr?"); ibwrt(dev, s, strlen(s)); ibrd(dev, s, 100); sscanf(s, " %le", ¤t); #else current = 0; #endif PS_UNLOCK; return current > i; } int say_hello () { printf("Hello!\n"); return 0; } int say_goodbye () { printf("Goodbye!\n"); return 0; } /* int main () { if (!init()) return 1; #ifndef DUMMY_INST char s[100] = "", s2[100] = ""; sprintf(s, "*idn?"); ibwrt(dev, s, strlen(s)); ibrd(dev, s2, 100); printf("Powersupply ID: %s\n", s2); #endif return 0; } */