Files
sicspsi/utils/picoscope/picocontrol.c
Koennecke Mark 0294b7ad95 Added the small support driver for the picoscope
Added a deploysics script
The Tcl data and time functions were moved to the SICS kernel
2015-07-07 12:33:02 +02:00

128 lines
2.6 KiB
C

/**
This is a little CLI program to control the picoscope frequency
generator coming with the Pico Labs Picoscope 2206a oscilloscope
Mark Koennecke, May 2015
*/
#include <sys/types.h>
#include <string.h>
#include <termios.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <libps2000a-1.1/ps2000aApi.h>
#ifndef PICO_STATUS
#include <libps2000a-1.1/PicoStatus.h>
#endif
static short handle;
/*--------------------------------------------------------------*/
static void StopPico(void)
{
ps2000aCloseUnit(handle);
}
/*--------------------------------------------------------------*/
static void SetGenerator(long freq, float ampl)
{
int status;
if(freq == 0){
status = ps2000aSetSigGenBuiltIn(handle,
0,
0,
PS2000A_DC_VOLTAGE,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0);
} else {
status = ps2000aSetSigGenBuiltIn(handle,
0,
(unsigned long)ampl,
PS2000A_SINE,
(float)freq,
(float)freq,
0,
0,
0,
0,
0,
0,
0,
0,
0);
}
if(status != PICO_OK){
printf("Failed to configure signal generator with %d\n", status);
}
}
/*----------------------------------------------------------------------*/
int main(int argc, char *argv[])
{
int status;
long int freq = 1000;
float mult = 1000000, ampl = 1.*mult, tmp;
char line[80], token[80];
status = ps2000aOpenUnit(&handle, NULL);
if(status != PICO_OK){
printf("Failed to open picoscope with %d\n", status);
exit(1);
}
atexit(StopPico);
while(1) {
memset(line,0,sizeof(line));
fgets(line,sizeof(line),stdin);
if(strstr(line,"freq") != NULL){
status = sscanf(line,"%s %f",token, &tmp);
if(status == 2){
freq = (unsigned int) tmp;
SetGenerator(freq,ampl);
printf("OK\n");
} else {
printf("freq %ld\n", freq);
}
} else if(strstr(line,"ampl") != NULL){
status = sscanf(line,"%s %f",token, &tmp);
if(status == 2){
ampl = tmp*mult;
SetGenerator(freq,ampl);
printf("OK\n");
} else {
printf("ampl %f\n", ampl/mult);
}
} else if(strstr(line,"on") != NULL){
SetGenerator(freq,ampl);
printf("OK\n");
}else if(strstr(line,"off") != NULL){
SetGenerator(0,0);
printf("OK\n");
}else if(strstr(line,"exit") != NULL){
ps2000aCloseUnit(handle);
break;
} else {
printf("Parameter commands: freq (hz), ampl( V), on, off\n");
}
fflush(stdout);
}
}