OpenCores
URL https://opencores.org/ocsvn/igor/igor/trunk

Subversion Repositories igor

[/] [igor/] [trunk/] [avr/] [tools/] [serialdmp.c] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 atypic
#include <termios.h>
2
#include <fcntl.h>
3
#include <strings.h>
4
#include <string.h>
5
#include <stdio.h>
6
#include <unistd.h>
7
#include "serialdmp.h"
8
 
9
 
10
static int fd;
11
struct termios settings, oldtio;
12
 
13
#define TYPES 12
14
 
15
 
16
static const char* types[TYPES] = {"NONE","INT","CONS","SNOC","PTR","ARRAY","NIL","T","CHAR","SYMBOL","FUNCTION","BUILTIN"};
17
 
18
 
19
int main() {
20
    unsigned char buffer[4];
21
    int i;
22
 
23
    if (serialinit() == -1 ) {
24
        printf("serialinit() failed. exiting\n");
25
        return -1;
26
    } else {
27
        printf("serialinit() completed");
28
    }
29
    for(i = 0 ; i< 4 ; i++ ) {
30
        buffer[i] = 0;
31
    }
32
 
33
    while ( 1 ) {
34
        getdata(buffer,sizeof(char));
35
        // If buffer = Unit Separator Convert to Object
36
        if ( buffer[0] == 17 ) {;
37
            getdata(buffer,sizeof(buffer));
38
            // This printf is somewhat.. ugly
39
            printf("TYPE: %s\t DATA: 0x%02X%02X%02X\tRAW: 0x%02X%02X%02X%02X\n",(buffer[0]<TYPES)?types[buffer[0]]:"INVALID",buffer[1],buffer[2],buffer[3],buffer[0],buffer[1],buffer[2],buffer[3]);
40
 
41
        } else {
42
            printf("RAW byte read: 0x%02X - %c\n", buffer[0], isalpha(buffer[0])?buffer[0]:'.');
43
        }
44
    }
45
 
46
}
47
 
48
 
49
 
50
int serialinit() {
51
 
52
    fd = open(DEVICE, O_RDONLY | O_NOCTTY);
53
    if ( fd < 0 ) {
54
        perror(DEVICE);
55
        return -1;
56
    }
57
 
58
    tcgetattr(fd, &oldtio);
59
    bzero(&settings, sizeof(settings));
60
 
61
    settings.c_cflag = BAUDRATE | CRTSCTS | CS8 | CSTOPB | CLOCAL | CREAD;
62
    settings.c_iflag = IGNPAR;
63
    settings.c_oflag = 0;
64
    settings.c_lflag = 0;
65
 
66
    settings.c_cc[VMIN]         = 2;
67
    settings.c_cc[VTIME]        = 0;
68
 
69
    tcflush(fd, TCIFLUSH);
70
    tcsetattr(fd, TCSANOW, &settings);
71
 
72
    return 0;
73
}
74
 
75
void serialuninit() {
76
    tcsetattr(fd, TCSANOW, &oldtio);
77
    close(fd);
78
}
79
 
80
void getdata(char* data ,unsigned char length) {
81
    char vmin = settings.c_cc[VMIN];
82
    settings.c_cc[VMIN] = length;
83
    tcsetattr(fd,TCSANOW,&settings);
84
    read(fd, data, length);
85
    settings.c_cc[VMIN] = vmin;
86
    tcsetattr(fd,TCSANOW,&settings);
87
}
88
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.