RaspberryPi[14] USB入力のGPSデータをUSBメモリに記録する。

時刻でファイル名を生成し、時刻がちょうど00分になったらファイルを更新し、USBメモリに記録するプログラムです。USBNAMEにはUSB名を入れてください。(ubuntu MATE ではUSBNAMEが付きません。)

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <time.h>

#define SERIAL_PORT "/dev/ttyACM0"
#define BFILENAME rover

int main(int argc, char *argv[])
{
    unsigned char msg[] = "serial port open...\n";
  //  unsigned char bfn[64]; = "rover_gps"  // base file name
    unsigned char cfn[255];           // current file name based on size
    unsigned char buf[255];       
    int fd;                            
    struct termios tio;                 
    int baudRate = B115200;
    int i;
    int cnt;
    int cng_file;
    int len;
    int ret;
    int size;
    int disp;
    int store_hour;
    time_t t;
    FILE *file;
    struct tm *local;
    
 //   file = fopen("gps.txt","w");

    fd = open(SERIAL_PORT, O_RDWR);     
    if (fd < 0) {
        printf("open error\n");
        return -1;
    }

    tio.c_cflag += CREAD;               
    tio.c_cflag += CLOCAL;             
    tio.c_cflag += CS8;                
    tio.c_cflag += 0;                   
    tio.c_cflag += 0;                   

    cfsetispeed( &tio, baudRate );
    cfsetospeed( &tio, baudRate );

    cfmakeraw(&tio);                    

    tcsetattr( fd, TCSANOW, &tio );     

    ioctl(fd, TCSETS, &tio);            

    cnt = 0;
    cng_file = 1;
    
    if(argc >1) disp = 1;
    else disp = 0;

    while(1) {
        if(cng_file == 1){  // generate file name
            t = time(NULL);
            local = localtime(&t);
            sprintf(cfn,"/media/pi/USBNAME/RTK/rtk%02d%02d%02d%02d.txt",local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min);
             file = fopen(cfn,"a");
             cng_file = 0;
             store_hour = local->tm_hour;
//		printf("File create %s\n",cfn);
        }
        len = read(fd, buf, sizeof(buf));
        if (0 < len) {
            for(i = 0; i < len; i++) {
              if(disp == 1)  printf("%c", buf[i]);
                fprintf(file,"%c",buf[i]);
            }
        }
        cnt++;
        t = time(NULL);
        local = localtime(&t);
//        printf("cnt:%d st:%d ct:%d\n",cnt,store_hour,local->tm_min);
        if(store_hour != local->tm_hour) {
            fclose(file); 
            cng_file = 1;
            cnt = 0; 
//	    printf("Time changed\n");
 //           break;
        }
    }

    close(fd); 
    return 0;
}