Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2105 - 1
#include "main.h"
2
#include "uart.h"
3
 
4
int uart0_filestream = -1;
5
int usb_stream = -1;
6
int data_length;                //length of transmitting data string
7
 
8
 
9
//>> Adding checksum and transmitting  data
10
//------------------------------------------------------------------------------------------------------
11
void transmit_data(serial_data_struct* pdata_package){
12
        if (uart0_filestream != -1)
13
        {
14
                int count = write(uart0_filestream, pdata_package->txrxdata, pdata_package->cmdLength);        
15
                if (count < 0)         
16
                {
17
                        printf("UART TX error\n");
18
                }
19
        }
20
}
21
 
22
//>> Adding address and command ID, encoding and checksum
23
//------------------------------------------------------------------------------------------------------
24
void create_serial_frame(u8 address, u8 cmdID, u16 cmdLength, serial_data_struct* pdata_package){
25
        pdata_package->txrxdata[0] = '#';
26
        pdata_package->txrxdata[1] = address + 'a';
27
        pdata_package->txrxdata[2] = cmdID;
28
 
29
        //encode data
30
        u8 a,b,c;
31
        int counter = 0;
32
        int u = 3;
33
        while(cmdLength){
34
                if(cmdLength)
35
                        {
36
                                cmdLength--;
37
                                a = pdata_package->data[counter++];
38
                        }else{a = 0; counter++;};
39
                if(cmdLength)
40
                        {
41
                                cmdLength--;
42
                                b = pdata_package->data[counter++];
43
                        }else{b = 0; counter++;};
44
                if(cmdLength)
45
                        {
46
                                cmdLength--;
47
                                c = pdata_package->data[counter++];
48
                        }else{c = 0; counter++;};
49
                pdata_package->txrxdata[u++] = '=' + (a >> 2);
50
                pdata_package->txrxdata[u++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
51
                pdata_package->txrxdata[u++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
52
                pdata_package->txrxdata[u++] = '=' + (c & 0x3f);
53
        }      
54
 
55
        //add Checksum
56
        u16 crc = 0;
57
        u8      crc1, crc2;
58
        for (int i = 0; i < u; i++)
59
        {
60
                crc += pdata_package->txrxdata[i];
61
        }
62
        crc %= 4096;
63
        crc1 = '=' + crc / 64;
64
        crc2 = '=' + crc % 64;
65
        pdata_package->txrxdata[u++] = crc1;
66
        pdata_package->txrxdata[u++] = crc2;
67
        pdata_package->txrxdata[u++] = '\r';
68
 
69
        pdata_package->cmdLength = u;
70
}
71
 
72
 
73
//>> Initializing serial interface
74
//------------------------------------------------------------------------------------------------------
75
void uart_init(){
76
        uart0_filestream = open(SERIAL, O_RDWR | O_NOCTTY | O_NDELAY);
77
        if (uart0_filestream == -1)
78
        {
79
                printf("Error - Unable to open UART.  Ensure it is not in use by another application\n");
80
        }
81
        //UART Options
82
        struct termios options;
83
        tcgetattr(uart0_filestream, &options);
84
        options.c_cflag = B57600 | CS8 | CLOCAL | CREAD;               
85
        options.c_iflag = IGNPAR;
86
        options.c_oflag = 0;
87
        options.c_lflag = 0;
88
        tcflush(uart0_filestream, TCIFLUSH);
89
        tcsetattr(uart0_filestream, TCSANOW, &options);
90
        //UART Options
91
}