Cheetah Software  1.0
rt_sbus.c
Go to the documentation of this file.
1 //#include <stdio.h>
2 //#include <stdint.h>
3 //#include <stdlib.h>
4 //#include <string.h>
5 //#include <pthread.h>
6 //#include <errno.h>
7 //#include <fcntl.h>
8 //#include <time.h>
9 //#include <unistd.h>
10 //
11 //
12 //#define termios asmtermios
13 //
14 //#include <asm/termios.h>
15 //
16 //#undef termios
17 //
18 //#include <termios.h>
19 //
20 //#include <rt/rt_sbus.h>
21 //#include <rt/rt_serial.h>
22 //#include <rt/rt_interface_lcm.h>
23 //#include <cTypes.h>
24 //
25 // pthread_mutex_t sbus_data_m;
26 //
27 // uint16_t channels[18];
28 // uint16_t channel_data[18];
29 //
31 //#define K_SBUS_PORT_SIM "/dev/ttyUSB0"
33 //#define K_SBUS_PORT_MC "/dev/ttyS4"
34 //
35 //
36 // void unpack_sbus_data(uint8_t sbus_data[], uint16_t *channels) {
37 // if ((sbus_data[0] == 0xF) && (sbus_data[24] == 0x0)) {
38 // channels[0] = ((sbus_data[1]) | ((sbus_data[2] & 0x7) << 8));
39 // channels[1] = (sbus_data[2] >> 3) | ((sbus_data[3] & 0x3F) << 5);
40 // channels[2] = ((sbus_data[3] & 0xC0) >> 6) | (sbus_data[4] << 2) |
41 // ((sbus_data[5] & 0x1) << 10); channels[3] = ((sbus_data[5] & 0xFE) >> 1) |
42 // ((sbus_data[6] & 0xF) << 7); channels[4] = ((sbus_data[6] & 0xF0) >> 4) |
43 // ((sbus_data[7] & 0x7F) << 4); channels[5] = ((sbus_data[7] & 0x80) >> 7) |
44 // (sbus_data[8] << 1) | ((sbus_data[9] & 0x3) << 9); channels[6] =
45 // ((sbus_data[9] & 0xFC) >> 2) | ((sbus_data[10] & 0x1F) << 6); channels[7]
46 // = ((sbus_data[10] & 0xE0) >> 5) | (sbus_data[11] << 3);
47 //
48 // channels[8] = ((sbus_data[12]) | ((sbus_data[13] & 0x7) << 8));
49 // channels[9] = (sbus_data[13] >> 3) | ((sbus_data[14] & 0x3F) << 5);
50 // channels[10] = ((sbus_data[14] & 0xC0) >> 6) | (sbus_data[15] << 2) |
51 // ((sbus_data[16] & 0x1) << 10); channels[11] = ((sbus_data[16] & 0xFE) >>
52 // 1) | ((sbus_data[17] & 0xF) << 7); channels[12] = ((sbus_data[17] & 0xF0)
53 // >> 4) | ((sbus_data[18] & 0x7F) << 4); channels[13] = ((sbus_data[18] &
54 // 0x80) >> 7) | (sbus_data[19] << 1) | ((sbus_data[20] & 0x3) << 9);
55 // channels[14] = ((sbus_data[20] & 0xFC) >> 2) | ((sbus_data[21] & 0x1F) <<
56 // 6); channels[15] = ((sbus_data[21] & 0xE0) >> 5) | (sbus_data[22] << 3);
57 //
58 // channels[16] = (sbus_data[23] & 0x80) >> 7;
59 // channels[17] = (sbus_data[23] & 0x40) >> 6;
60 //
61 // pthread_mutex_lock(&sbus_data_m);
62 // for (int i = 0; i < 18; i++) {
63 // //printf("%d ", channels[i]);
64 // channel_data[i] = channels[i];
65 // }
66 // //printf("\n\n");
67 // pthread_mutex_unlock(&sbus_data_m);
68 //
69 //
70 // } else { printf("Bad Packet\n"); }
71 //}
72 //
73 // int read_sbus_data(int port, uint8_t *sbus_data) {
74 // uint8_t packet_full = 0;
75 // uint8_t read_byte[1] = {0};
76 // int timeout_counter = 0;
77 // //int n = read(fd1, read_buff, sizeof(read_buff));
78 // while ((!packet_full) && (timeout_counter < 50)) {
79 // timeout_counter++;
80 // // Read a byte //
81 // int n = read(port, read_byte, sizeof(read_byte));
82 // // Shift the buffer //
83 // for (int i = 0; i < 24; i++) {
84 // sbus_data[i] = sbus_data[i + 1];
85 // }
86 // sbus_data[24] = read_byte[0];
87 //
88 // // Check for the correct start and stop bytes ///
89 // if ((sbus_data[0] == 15) && (sbus_data[24] == 0)) {
90 // //unpack_sbus_data(sbus_data_buff, channels);
91 // packet_full = 1;
92 // }
93 // }
94 // return packet_full;
95 //}
96 //
97 // int read_sbus_channel(int channel) {
98 // pthread_mutex_lock(&sbus_data_m);
99 // int value = channel_data[channel];
100 // pthread_mutex_unlock(&sbus_data_m);
101 // return value;
102 //}
103 //
104 // int receive_sbus(int port) {
105 // uint16_t read_buff[25] = {0};
106 // int x = read_sbus_data(port, (uint8_t*)read_buff);
107 // if (x) {
108 // unpack_sbus_data((uint8_t*)read_buff, channels);
109 // } else {
110 // printf("SBUS tried read 50 bytes without seeing a packet\n");
111 // }
112 // return x;
113 //}
114 //
115 // int init_sbus(int is_simulator) {
116 // char *port1;
117 // if (is_simulator) { port1 = K_SBUS_PORT_SIM; }
118 // else { port1 = K_SBUS_PORT_MC; }
119 //
120 // if (pthread_mutex_init(&sbus_data_m, NULL) != 0) {
121 // printf("Failed to initialize sbus data mutex.\n");
122 // }
123 //
124 //
125 // int fd1 = open(port1, O_RDWR | O_NOCTTY | O_SYNC);
126 // if (fd1 < 0) {
127 // printf("Error opening %s: %s\n", port1, strerror(errno));
128 // } else {
129 // set_interface_attribs_custom_baud(fd1, 100000, 0, 0);
130 // }
131 // return fd1;
132 //}