|
Web-based Interactive Data Acquisition CGI Script
adc.ch
#!/bin/ch
#include <cgi.h>
#include <chplot.h>
#include <i2c-io-api.h>
int main() {
class CRequest Request;
class CResponse Response;
int samples, interval;
int i2cDev, i;
uint8_t baseChannel = 64;
i2cDev = I2C_IO_Init("/dev/i2c-0", "0x0b");
samples = atoi(Request.getForm("samples"));
interval = atoi(Request.getForm("interval"));
if(samples == 0) {
printf("You must have at least one sample");
return -1;
}
else {
int channels[8] = {0};
int j;
char something[10];
uint16_t data[8][samples];
int x[samples];
for(i=0;i<8;i++) {
sprintf(something, "chan%d", i);
if(Request.getForm(something))
channels[i] = 1;
}
for(i = 0; i<samples; i++) {
for(j=0; j<8; j++)
I2C_IO_GetADC(i2cDev, baseChannel+j, &data[j][i]);
usleep(interval);
x[i] = i * interval;
}
if(Request.getForm("plot")) {
CPlot plot;
Response.setContentType("image/png");
Response.begin();
for(j=0;j<8;j++) {
if(channels[j])
plot.data2D(x, data[j]);
}
plot.outputType(PLOT_OUTPUTTYPE_STREAM, "png");
plot.plotting();
Response.end();
}
else {
Response.setContentType("text/html");
Response.begin();
printf("<TABLE><BR><TR>");
for(j=0; j<8;j++) {
if(channels[j]){
printf("<TD ALIGN=CENTER WIDTH=50>");
printf("Chan %d<BR><HR></TD>", j);
}
}
printf("</TR>");
for(i = 0; i<samples; i++) {
printf("<TR>");
for(j=0;j<8;j++) {
if(channels[j]) {
printf("<TD ALIGN=RIGHT WIDTH=50>");
printf("%d</TD>", data[j][i]);
}
}
printf("</TR>");
}
printf("</TABLE>");
Response.end();
}
}
I2C_IO_CloseDev();
return 0;
}
|
| Integration Engineering Laboratory | UCD MTU Sandia |