Subversion Repositories Projects

Rev

Rev 140 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 140 Rev 483
1
#include "fc.h"
1
#include "fc.h"
2
 
2
 
3
 
-
 
4
unsigned char TxBuffer[150];
-
 
-
 
3
 
-
 
4
 
-
 
5
unsigned char TxBuffer[MAX_BUFF_LEN];
5
unsigned char _TxBuffer[150];
6
unsigned char _TxBuffer[MAX_BUFF_LEN];
6
 
7
 
7
unsigned char RxBuffer[150];
8
unsigned char RxBuffer[MAX_BUFF_LEN];
8
char PrintableRxBuffer[150];
9
char PrintableRxBuffer[MAX_BUFF_LEN];
9
 
10
 
10
 
11
 
11
 
12
 
12
int mk_socket;
13
int mk_socket;
13
 
14
 
14
int status;
15
int status;
15
 
16
 
16
void AddCRC(unsigned int wieviele)
17
void AddCRC(unsigned int wieviele)
17
{
18
{
18
  unsigned int tmpCRC = 0,i;
19
  unsigned int tmpCRC = 0,i;
19
  for(i = 0; i < wieviele;i++)
20
  for(i = 0; i < wieviele;i++)
20
    {
21
    {
21
      tmpCRC += TxBuffer[i];
22
      tmpCRC += TxBuffer[i];
22
    }
23
    }
23
  tmpCRC %= 4096;
24
  tmpCRC %= 4096;
24
  TxBuffer[i++] = '=' + tmpCRC / 64;
25
  TxBuffer[i++] = '=' + tmpCRC / 64;
25
  TxBuffer[i++] = '=' + tmpCRC % 64;
26
  TxBuffer[i++] = '=' + tmpCRC % 64;
26
  TxBuffer[i++] = '\r';
27
  TxBuffer[i++] = '\r';
27
}
28
}
28
 
29
 
29
 
30
 
30
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
31
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
31
{
32
{
-
 
33
  //  return;
32
  int status =0;
34
  int status =0;
33
  unsigned int pt = 0;
35
  unsigned int pt = 0;
34
  unsigned char a,b,c;
36
  unsigned char a,b,c;
35
  unsigned char ptr = 0;
37
  unsigned char ptr = 0;
36
 
38
 
37
  TxBuffer[pt++] = '#';               // Startzeichen
39
  TxBuffer[pt++] = '#';               // Startzeichen
38
  TxBuffer[pt++] = modul;             // Adresse (a=0; b=1,...)
40
  TxBuffer[pt++] = modul;             // Adresse (a=0; b=1,...)
39
  TxBuffer[pt++] = cmd;                 // Commando
41
  TxBuffer[pt++] = cmd;                 // Commando
40
 
42
 
41
  while(len)
43
  while(len)
42
    {
44
    {
43
      if(len) { a = snd[ptr++]; len--;} else a = 0;
45
      if(len) { a = snd[ptr++]; len--;} else a = 0;
44
      if(len) { b = snd[ptr++]; len--;} else b = 0;
46
      if(len) { b = snd[ptr++]; len--;} else b = 0;
45
      if(len) { c = snd[ptr++]; len--;} else c = 0;
47
      if(len) { c = snd[ptr++]; len--;} else c = 0;
46
      TxBuffer[pt++] = '=' + (a >> 2);
48
      TxBuffer[pt++] = '=' + (a >> 2);
47
      TxBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
49
      TxBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
48
      TxBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
50
      TxBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
49
      TxBuffer[pt++] = '=' + ( c & 0x3f);
51
      TxBuffer[pt++] = '=' + ( c & 0x3f);
50
    }
52
    }
51
 
53
 
52
 
54
 
53
 
55
 
54
  AddCRC(pt);
56
  AddCRC(pt);
55
  printf("Sending to MK %d \n" , pt);
57
  printf("Sending to MK %d \n" , pt);
56
 
58
 
57
  status = send(mk_socket,"\r" , 1, 0);
59
  status = send(mk_socket,"\r" , 1, 0);
58
 
60
 
59
 
61
 
60
  //  for (c=0;c<pt+2;c++)
62
  //  for (c=0;c<pt+2;c++)
61
  // {
63
  // {
62
  status = write(mk_socket,&TxBuffer , pt+3);
64
  status = write(mk_socket,&TxBuffer , pt+3);
63
 
65
 
64
 
66
 
65
  //   printf("Send to MK %d \n" , TxBuffer[c] );
67
  //   printf("Send to MK %d \n" , TxBuffer[c] );
66
  // }
68
  // }
67
  /* int i=0;
69
  /* int i=0;
68
  while(TxBuffer[i] !='\r' && i<150)
70
  while(TxBuffer[i] !='\r' && i<150)
69
    {
71
    {
70
    //     TxBuffer[i]='#';
72
    //     TxBuffer[i]='#';
71
    status = send(mk_socket,TxBuffer[i] , 1, 0);
73
    status = send(mk_socket,TxBuffer[i] , 1, 0);
72
    printf(" +%d%c ",i,TxBuffer[i]);
74
    printf(" +%d%c ",i,TxBuffer[i]);
73
    i++;
75
    i++;
74
    }
76
    }
75
 
77
 
76
  //  status = send(s,"\r" , 1, 0);
78
  //  status = send(s,"\r" , 1, 0);
77
  */
79
  */
78
   status = send(mk_socket,"\r" , 1, 0);
80
   status = send(mk_socket,"\r" , 1, 0);
79
   status = send(mk_socket,"\n" , 1, 0);
81
   status = send(mk_socket,"\n" , 1, 0);
80
  printf("\n");
82
  printf("\n");
81
}
83
}
82
 
84
 
83
 
85
 
84
int rx_last_length;
86
int rx_last_length;
85
 
87
 
86
 
88
 
87
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max)
89
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max)
88
{
90
{
89
 unsigned char a,b,c,d;
91
 unsigned char a,b,c,d;
90
 unsigned char ptr = 0;
92
 unsigned char ptr = 0;
91
 unsigned char x,y,z;
93
 unsigned char x,y,z;
92
 while(len)
94
 while(len)
93
  {
95
  {
94
   a = RxBuffer[ptrIn++] - '=';
96
   a = RxBuffer[ptrIn++] - '=';
95
   b = RxBuffer[ptrIn++] - '=';
97
   b = RxBuffer[ptrIn++] - '=';
96
   c = RxBuffer[ptrIn++] - '=';
98
   c = RxBuffer[ptrIn++] - '=';
97
   d = RxBuffer[ptrIn++] - '=';
99
   d = RxBuffer[ptrIn++] - '=';
98
   if(ptrIn > max - 2) break;    
100
   if(ptrIn > max - 2) break;    
99
 
101
 
100
   x = (a << 2) | (b >> 4);
102
   x = (a << 2) | (b >> 4);
101
   y = ((b & 0x0f) << 4) | (c >> 2);
103
   y = ((b & 0x0f) << 4) | (c >> 2);
102
   z = ((c & 0x03) << 6) | d;
104
   z = ((c & 0x03) << 6) | d;
103
 
105
 
104
   if(len--) ptrOut[ptr++] = x; else break;
106
   if(len--) ptrOut[ptr++] = x; else break;
105
   if(len--) ptrOut[ptr++] = y; else break;
107
   if(len--) ptrOut[ptr++] = y; else break;
106
   if(len--) ptrOut[ptr++] = z; else break;
108
   if(len--) ptrOut[ptr++] = z; else break;
107
  }
109
  }
108
 
110
 
109
}
111
}
110
 
112
 
111
int read_from_mk()
113
int read_from_mk()
112
{      
114
{      
113
  char in_char='#';
115
  char in_char='#';
114
  int count=0;
116
  int count=0;
115
  int r=0;
117
  int r=0;
116
  int i=0;
118
  int i=0;
-
 
119
 
117
 
120
  int p=0;
118
  printf("starting read\n");
121
  printf("starting read\n");
119
  while(in_char!='\n')
122
  while(in_char!='\r')
-
 
123
    {
120
    {
124
      p++;
121
      //      printf("b read\n");
125
      //      printf("b read\n");
-
 
126
      count=read(mk_socket,&in_char,1);
-
 
127
     
122
      count=read(mk_socket,&in_char,1);
128
      //      if ( count ==-1) exit(0);
123
      //printf("a read %d\n",count);
129
      printf("a read %d %d %c \n",p,count,in_char);
124
      if (count!=-1)
130
      if (count!=-1)
125
        {
131
        {
126
          //  printf("%c\n",in_char);
132
          //  printf("%c\n",in_char);
127
          RxBuffer[r]=in_char;
133
          RxBuffer[r]=in_char;
128
     
134
     
129
          if (in_char!=0)
135
          if (in_char!=0)
130
            PrintableRxBuffer[r++]=in_char;
136
            PrintableRxBuffer[r++]=in_char;
131
          else
137
          else
132
            PrintableRxBuffer[r++]='0';
138
            PrintableRxBuffer[r++]='0';
133
        }
139
        }
134
 
140
 
135
    }
141
    }
136
  rx_last_length=r;
142
  rx_last_length=r;
137
  PrintableRxBuffer[r++]='\0'; // terminate 
143
  PrintableRxBuffer[r++]='\0'; // terminate 
138
  printf("done --->%s\n",PrintableRxBuffer);
144
  printf("done --->%s\n",PrintableRxBuffer);
139
 
145
 
140
  if (RxBuffer[2]=='D')
146
  if (RxBuffer[2]=='D')
141
    {
147
    {
142
      debug_sets++;
148
      debug_sets++;
143
      Decode64((unsigned char *) &DebugOut,sizeof(DebugOut),3,rx_last_length);
149
      Decode64((unsigned char *) &DebugOut,sizeof(DebugOut),3,rx_last_length);
144
      printf("decoded FC Debug data height:%d\n",DebugOut.Analog[5]);
150
      printf("decoded FC Debug data height:%d\n",DebugOut.Analog[5]);
145
    }
151
    }
146
  return 1;
152
  return 1;
147
}
153
}
148
 
154
 
149
 
155
 
150
int connect_mk_bluetooth(char dest[18])
156
int connect_mk_bluetooth(char dest[18])
151
{
157
{
152
 
-
 
153
  struct sockaddr_rc addr ;
158
  struct sockaddr_rc addr ;
154
 
159
 
155
  // allocate a socket
160
  // allocate a socket
156
  mk_socket = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
161
  mk_socket = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
157
 
162
 
158
  // set the connection parameters (who to connect to)
163
  // set the connection parameters (who to connect to)
159
  addr.rc_family = AF_BLUETOOTH;
164
  addr.rc_family = AF_BLUETOOTH;
160
  addr.rc_channel = 1;
165
  addr.rc_channel = 1;
161
  str2ba( dest, &addr.rc_bdaddr );
166
  str2ba( dest, &addr.rc_bdaddr );
162
 
167
 
163
  // connect to server
168
  // connect to server
164
  status = connect(mk_socket, (struct sockaddr *)&addr, sizeof(addr));
169
  status = connect(mk_socket, (struct sockaddr *)&addr, sizeof(addr));
165
 
170
 
166
  printf("connection status %d\n",status);
171
  printf("connection status %d\n",status);
167
  return status;
172
  return status;
168
 
-
 
169
}
173
}
170
 
174
 
-
 
175
 
-
 
176
int connect_mk_tty(char* tty_filename)
-
 
177
{
-
 
178
 
-
 
179
  mk_socket = open(tty_filename,O_RDWR);
-
 
180
 
-
 
181
 
-
 
182
 
-
 
183
  struct termios termattr;
-
 
184
   speed_t baudRate;
-
 
185
 
-
 
186
      /* Make a copy of the termios structure. */
-
 
187
   tcgetattr(mk_socket, &termattr);
-
 
188
 
-
 
189
   termattr.c_iflag = IGNBRK | IGNPAR;
-
 
190
   termattr.c_cflag=CS8 | CREAD | CLOCAL;
-
 
191
   //   termattr.speed_t=B57600;
-
 
192
 
-
 
193
 
-
 
194
   tcsetattr(mk_socket, TCSANOW, &termattr);
-
 
195
 
-
 
196
 
-
 
197
   /*
-
 
198
   usleep(1000000);  
-
 
199
  char in_char='#';
-
 
200
  int count=0;
-
 
201
  int r=0;
-
 
202
  int i=0;
-
 
203
 
-
 
204
  int p=0;
-
 
205
  printf("starting read %d\n",mk_socket);
-
 
206
  while  (1)
-
 
207
    {
-
 
208
      p=0;
-
 
209
      r=0;
-
 
210
  char in_char='#';
-
 
211
  while((in_char!='\r'))//&&(r<MAX_BUFF_LEN))
-
 
212
        {
-
 
213
          //      p++;
-
 
214
          //      printf("b read\n");
-
 
215
          count=read(mk_socket,&in_char,1);
-
 
216
          // tcflush( mk_socket, TCOFLUSH );
-
 
217
         
-
 
218
          //      printf("\np !read %d %d %c \n",p,count,in_char);
-
 
219
 
-
 
220
          //count=read(mk_socket,&in_char,1);
-
 
221
          // tcflush( mk_socket, TCOFLUSH );
-
 
222
         
-
 
223
          //      printf("\np !read %d %d %d %c \n",r,p,count,in_char);
-
 
224
          printf("%d %c \n",r, in_char);
-
 
225
         
-
 
226
                  if (count==1)
-
 
227
                  {
-
 
228
                  //  printf("%c\n",in_char);
-
 
229
                    RxBuffer[r]=in_char;
-
 
230
                 
-
 
231
                  if (in_char!=0)
-
 
232
                  PrintableRxBuffer[r]=in_char;
-
 
233
                  else
-
 
234
                  PrintableRxBuffer[r]='0';
-
 
235
                  r++;
-
 
236
                  }
-
 
237
          //else
-
 
238
                         //printf("%d/%d",errno,EBADF);
-
 
239
         
-
 
240
        }
-
 
241
  PrintableRxBuffer[r]=0;
-
 
242
      printf("buff> %d\n %s\n", r, PrintableRxBuffer);
-
 
243
    }
-
 
244
*/
-
 
245
  if (mk_socket<0)
-
 
246
    return 0;
-
 
247
  else
-
 
248
    return  1;
-
 
249
 
171
 
250
}
172
 
251
 
173
 
252
 
174
int connect_mk_localhost_socket(int port)
253
int connect_mk_localhost_socket(int port)
175
{
254
{
176
 
-
 
177
  int status;
-
 
178
  struct sockaddr_in sa;
255
  struct sockaddr_in sa;
179
 
256
 
180
  sa.sin_family = AF_INET;
257
  sa.sin_family = AF_INET;
181
  sa.sin_addr.s_addr = htonl(0x0);
258
  sa.sin_addr.s_addr = htonl(0x0);
182
  sa.sin_port = htons(port);
259
  sa.sin_port = htons(port);
183
 
-
 
184
  // allocate a socket
-
 
185
  //  s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
260
 
186
  mk_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
-
 
187
  //);
-
 
188
 
-
 
189
  // set the connection parameters (who to connect to)
-
 
190
 
-
 
191
  // connect to server
261
  mk_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
192
  //  status = connect(s, (struct sockaddr *)&addr, sizeof(addr));
-
 
193
  status = connect(mk_socket,(struct sockaddr*) &sa, sizeof(struct sockaddr_in));
-
 
194
 
-
 
195
  printf("connection status %d\n",status);
262
 
196
  return status;
263
  return  connect(mk_socket,(struct sockaddr*) &sa, sizeof(struct sockaddr_in));
197
 
264
 
198
}
265
}
199
 
266
 
200
 
267