//--------------------------------------------------------------
void testApp::update() {
    if (currentMode == MODE_CONTROLLED_BY_ARDUINO) {
        processSerial();
        rotationalSpeed = ofMap(potValue, 0, 1023, -maxSpeed, maxSpeed);
        float elapsedTime = ofGetLastFrameTime();
        imageSectionHeading += rotationalSpeed * elapsedTime;
        generateVBOs();
    }

}
//pocess serial and I2C interface 
void Interface::process(void)
{
  processSerial();
  processI2C();
}
Exemple #3
0
int main(int argc, char **argv)
{
	in_port_t port = DEFAULT_PORT;
	long baud = DEFAULT_BAUD;
	char dv3000tty[MAXPATHLEN] = DEFAULT_TTY;
	
	fd_set fds;
	int serialFd;
	int sockFd;
	int topFd;
	
	int c;

#ifdef __CYGWIN__
	int commnum;
#endif
	
	char reset = 0;
	char daemon = 0;

	setvbuf(stdout, NULL, _IOLBF, 0);
	setvbuf(stderr, NULL, _IOLBF, 0);

#ifdef __CYGWIN__
	while ((c = getopt(argc, argv, "dp:s:c:vxrh")) != -1) {
#else
	while ((c = getopt(argc, argv, "dp:s:i:vxrh")) != -1) {
#endif
		switch (c) {
			case 'd':
				daemon = 1;
				break;
			case 'p':
				errno = 0;
				port = strtol(optarg, NULL, 10);
				if(errno != 0 || port == 0) {
					fprintf(stderr, "Invalid port number: %s\n", optarg);
					usage();
				}
				break;
			case 's':
				errno = 0;
				baud = strtol(optarg, NULL, 10);
				if(errno != 0 || baud == 0) {
					fprintf(stderr, "Invalid baud rate: %s\n", optarg);
					usage();
				}
				break;
#ifdef __CYGWIN__
			case 'c':
				commnum = strtol(optarg, NULL, 10);
				sprintf(dv3000tty,"/dev/ttyS%d",commnum - 1);
				break;
#else
			case 'i':
				strncpy(dv3000tty, optarg, sizeof(dv3000tty));
				break;
#endif
			case 'v':
				fprintf(stdout, "AMBEserver: version " DV3000_VERSION "\n");
				return 0;
			case 'x':
				debug = 1;
				break;
			case 'r':
				reset = 1;
				break;
			case 'h':
			default:
				usage();
				break;
		}
	}
	
	if (strlen(dv3000tty) < 1) {
		fprintf(stderr, "An input tty filename (-i /dev/ttyXXX) must be set.\n");
		return 1;
	}

	if (daemon) {
		pid_t pid = fork();

		if (pid < 0) {
			fprintf(stderr, "AMBEserver: error in fork(), exiting\n");
			exit(1);
		}

		// If this is the parent, exit
		if (pid > 0)
			exit(0);

		// We are the child from here onwards
		setsid();

		umask(0);
	}

	fprintf(stdout, "AMBEserver: Starting...\n");

	serialFd = openSerial(dv3000tty, baud);
	if (serialFd < 0)
		exit(1);

	fprintf(stdout, "AMBEserver: Opened serial port %s at %ld bps.\n", dv3000tty, baud);
	
	if(initDV3K(serialFd, reset) == 0) {
		fprintf(stderr, "AMBEserver: Could not initialize the DV3K!\n");
		exit(1);
	}
	
	sockFd = openSocket(port);
	if (sockFd < 0)
		exit(1);

	fprintf(stdout, "AMBEserver: Listening for connections on UDP port %d.\n", port);
		
	topFd = (sockFd > serialFd ? sockFd : serialFd ) + 1;

	for (;;) {
		FD_ZERO(&fds);
		FD_SET(sockFd, &fds);
		FD_SET(serialFd, &fds);

		if (select(topFd, &fds, NULL, NULL, NULL) < 0) {
			fprintf(stderr, "AMBEserver: error from select: %s\n", strerror(errno));
			exit(1);
		}
		
		if(FD_ISSET(sockFd, &fds))
			if (!processSocket(sockFd, serialFd))
				exit(1);

		if(FD_ISSET(serialFd, &fds))
			if (!processSerial(sockFd, serialFd))
				exit(1);
	}

	exit(0);
}