Upload files to "Receiver-Arduino"
							parent
							
								
									71277e159f
								
							
						
					
					
						commit
						4b88257ee1
					
				| 
						 | 
				
			
			@ -0,0 +1,17 @@
 | 
			
		|||
void setup() {
 | 
			
		||||
  // put your setup code here, to run once:
 | 
			
		||||
  Serial.begin(9600);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void loop() {
 | 
			
		||||
  // put your main code here, to run repeatedly:
 | 
			
		||||
  uint32_t w = 0xCAFE0000;
 | 
			
		||||
 | 
			
		||||
  w |= random(100);
 | 
			
		||||
 | 
			
		||||
  Serial.write( (char*) &w, 4);
 | 
			
		||||
  
 | 
			
		||||
  delay(1000);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,103 @@
 | 
			
		|||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <linux/ioctl.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <termios.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <signal.h>
 | 
			
		||||
 | 
			
		||||
#include <inttypes.h>
 | 
			
		||||
#include <fstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int openSerialPort(char* portname, int readMin=16){
 | 
			
		||||
    /* Open the file descriptor in non-blocking mode */
 | 
			
		||||
    int fd = open(portname, O_RDWR | O_NOCTTY);
 | 
			
		||||
    if(fd==-1){
 | 
			
		||||
        printf("Error trying to open the file: %s\n", portname);
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
    /* Set up the control structure */
 | 
			
		||||
    struct termios toptions;
 | 
			
		||||
    /* Get currently set options for the tty */
 | 
			
		||||
    tcgetattr(fd, &toptions);
 | 
			
		||||
    /* -----------  Set custom options ------------*/
 | 
			
		||||
    /* 9600 baud */
 | 
			
		||||
    cfsetispeed(&toptions, B9600);
 | 
			
		||||
    cfsetospeed(&toptions, B9600);
 | 
			
		||||
    /* 8 bits, no parity, no stop bits */
 | 
			
		||||
    toptions.c_cflag &= ~PARENB;
 | 
			
		||||
    toptions.c_cflag &= ~CSTOPB;
 | 
			
		||||
    toptions.c_cflag &= ~CSIZE;
 | 
			
		||||
    toptions.c_cflag |= CS8;
 | 
			
		||||
    /* no hardware flow control */
 | 
			
		||||
    toptions.c_cflag &= ~CRTSCTS;
 | 
			
		||||
    /* enable receiver, ignore status lines */
 | 
			
		||||
    toptions.c_cflag |= CREAD | CLOCAL;
 | 
			
		||||
    /* disable input/output flow control, disable restart chars */
 | 
			
		||||
    toptions.c_iflag &= ~(IXON | IXOFF | IXANY);
 | 
			
		||||
    /* disable canonical input, disable echo, disable visually erase
 | 
			
		||||
     * chars disable terminal-generated signals */
 | 
			
		||||
    toptions.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
 | 
			
		||||
    /* disable output processing */
 | 
			
		||||
    toptions.c_oflag &= ~OPOST;
 | 
			
		||||
    /* wait for readMin characters to come in before read returns */
 | 
			
		||||
    /* WARNING! THIS CAUSES THE read() TO BLOCK UNTIL ALL */
 | 
			
		||||
    /* CHARACTERS HAVE COME IN! */
 | 
			
		||||
    toptions.c_cc[VMIN] = readMin;
 | 
			
		||||
    /* no minimum time to wait before read returns */
 | 
			
		||||
    toptions.c_cc[VTIME] = 0;
 | 
			
		||||
    /* commit the options */
 | 
			
		||||
    tcsetattr(fd, TCSANOW, &toptions);
 | 
			
		||||
    /* Wait for the Arduino to reset */
 | 
			
		||||
    usleep(1000*1000);
 | 
			
		||||
    /* Flush anything already in the serial buffer */
 | 
			
		||||
    tcflush(fd, TCIFLUSH);
 | 
			
		||||
    printf("Ready to receive the words \n");
 | 
			
		||||
    return fd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void usage(){
 | 
			
		||||
    printf("Read in loop a 32 bit word \n");
 | 
			
		||||
    printf("I.e. it assumes that Arduino sends a 32 bit word for each readout\n");
 | 
			
		||||
    printf("Usage: command portName \n");
 | 
			
		||||
    exit(2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void* out_stream;
 | 
			
		||||
 | 
			
		||||
void term_handler(int signal_num){
 | 
			
		||||
    std::ofstream* out = static_cast<std::ofstream *>(out_stream);
 | 
			
		||||
    //std::ofstream out = *out_point;
 | 
			
		||||
    out -> flush();
 | 
			
		||||
    out -> close();
 | 
			
		||||
    exit(0);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main(int argc, char *argv[]){
 | 
			
		||||
    signal(SIGTERM, term_handler);
 | 
			
		||||
 | 
			
		||||
    if(argc!=2)
 | 
			
		||||
        usage();
 | 
			
		||||
 
 | 
			
		||||
    // Set the port name
 | 
			
		||||
    char* portName = argv[1];
 | 
			
		||||
    
 | 
			
		||||
    int fd = openSerialPort(portName);
 | 
			
		||||
 | 
			
		||||
    std::ofstream out("file.dat", std::ios::binary);
 | 
			
		||||
 | 
			
		||||
    out_stream = &out;
 | 
			
		||||
 | 
			
		||||
    for(;;){
 | 
			
		||||
        uint32_t w = 0x0;
 | 
			
		||||
        int n = read(fd, (char*) &w, 4);
 | 
			
		||||
        printf("Got %d bytes, 0X%8x \n", n, w);
 | 
			
		||||
        out.write ((char*) &w, sizeof(w));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    out.close();
 | 
			
		||||
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue