Subversion Repositories Projects

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
41 ligi 1
#include <stdio.h>
2
#include <stdlib.h>
3
#include <string.h>
4
#include <fcntl.h>
5
#include "lib/x52/x52.h"
6
#include <unistd.h>
7
#include <sys/socket.h>
8
#include <bluetooth/bluetooth.h>
9
#include <bluetooth/hci.h>
10
#include <bluetooth/hci_lib.h>
11
 
50 ligi 12
#include <sys/time.h>
41 ligi 13
 
50 ligi 14
 
43 ligi 15
#include <bluetooth/rfcomm.h>
41 ligi 16
 
43 ligi 17
 
41 ligi 18
#include <linux/joystick.h>
19
#define JOY_DEV "/dev/input/js0"
20
 
21
#define MAX_BT_DEVICES 3
22
 
47 ligi 23
 
24
#define STATEID_SCANNING 0
25
#define STATEID_CONNECTING 1
26
 
27
#define BUTTON_SELECT 26
28
#define BUTTON_DOWN 28
29
#define BUTTON_UP 27
30
 
50 ligi 31
 
117 ligi 32
// #define AXIS_ROLL 0
33
// #define AXIS_NICK 1
34
// #define AXIS_GIER 5
35
// #define AXIS_GAS  2
36
 
37
 
38
 
39
// for x52
40
/*
41
#define AXIS_ROLL 4
42
#define AXIS_NICK 3
50 ligi 43
#define AXIS_GIER 5
44
#define AXIS_GAS  2
45
 
46
#define INVERT_ROLL -1
47
#define INVERT_NICK -1
48
#define INVERT_GIER 1
49
#define INVERT_GAS  -1
117 ligi 50
*/
50 ligi 51
 
117 ligi 52
#define AXIS_ROLL 0
53
#define AXIS_NICK 1
54
#define AXIS_GIER 3
55
#define AXIS_GAS  2
50 ligi 56
 
117 ligi 57
#define INVERT_ROLL 1
58
#define INVERT_NICK -1
59
#define INVERT_GIER 1
60
#define INVERT_GAS  -1
61
 
62
 
63
#include <stdio.h>
64
#include <errno.h>
65
#include <string.h>
66
#include <sys/socket.h>
67
#include <sys/types.h>
68
#include <netinet/in.h>
69
#include <unistd.h>//for close() for socket
70
 
71
 
72
#define INPUT_NONE 0
73
#define INPUT_JOYDEV 1
74
#define INPUT_EVDEV 2
75
 
76
 
50 ligi 77
// time struct for measuring
78
struct timeval time_struct1;
79
struct timeval time_struct2;
80
 
81
 
82
int act_nick=0;
83
int act_roll=0;
84
int act_gier=0;
85
int act_gas=0;
86
int act_mode=0;
87
 
41 ligi 88
int bt_device_count=0;
89
 
90
char names[MAX_BT_DEVICES][248];
91
char addrs[MAX_BT_DEVICES][19];
92
 
43 ligi 93
int s, status;
94
unsigned char TxBuffer[150];
95
unsigned char _TxBuffer[150];
96
 
48 ligi 97
char RxBuffer[150];
98
 
99
 
47 ligi 100
int x52_input_fd, *axis=NULL, num_of_axis=0, num_of_buttons=0, x;
101
char *button=NULL,*button_trigger=NULL, name_of_joystick[80];
102
 
103
struct js_event x52_event_struct;
104
 
48 ligi 105
int engines_on=0;
106
int old_engines_on=0;
107
 
108
char in_char;
109
 
50 ligi 110
struct ExternControl_s
47 ligi 111
{
112
  unsigned char Digital[2];   // (noch unbenutzt)
113
  unsigned char RemoteTasten; //(gab es schon für das virtuelle Display)
114
  signed char   Nick;
115
  signed char   Roll;
116
  signed char   Gier;
117
  unsigned char Gas;          //(es wird das Stick-Gas auf diesen Wert begrenzt; --> StickGas ist das Maximum)
48 ligi 118
  signed char   Higt;        //(Höhenregler)
47 ligi 119
  unsigned char free;         // (unbenutzt)
120
  unsigned char Frame;        // (Bestätigung)
121
  unsigned char Config;
50 ligi 122
};
47 ligi 123
 
124
 
50 ligi 125
struct ExternControl_s  ExternControl ;
47 ligi 126
 
43 ligi 127
int state=STATEID_SCANNING;
128
 
129
 
130
struct x52 *x52_output;
131
 
132
int selected_bt_device=0;
41 ligi 133
void scan_bt()
134
{
135
  inquiry_info *ii = NULL;
136
 
137
  int dev_id, sock, len, flags;
138
  int i;
139
  char addr[19] = { 0 };
140
  char name[248] = { 0 };
141
 
142
  dev_id = hci_get_route(NULL);
143
  sock = hci_open_dev( dev_id );
144
  if (dev_id < 0 || sock < 0) {
145
    perror("opening socket");
146
    exit(1);
147
  }
148
 
149
  len  = 8;
150
 
151
  flags = IREQ_CACHE_FLUSH;
152
  ii = (inquiry_info*)malloc(MAX_BT_DEVICES * sizeof(inquiry_info));
153
 
154
  bt_device_count = hci_inquiry(dev_id, len, MAX_BT_DEVICES, NULL, &ii, flags);
155
  if(  bt_device_count < 0 ) perror("hci_inquiry");
156
 
157
  for (i = 0; i <  bt_device_count; i++) {
158
    ba2str(&(ii+i)->bdaddr, addr);
159
    sprintf(addrs[i],"%s",addr);
160
 
161
    memset(name, 0, sizeof(name));
162
 
163
    if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name),
164
                             name, 0) < 0)
165
      sprintf(names[i],"[unknown]");
166
    else
167
      sprintf(names[i],"%s",name);
168
 
169
  }
170
 
171
 
172
  free( ii );
173
  close( sock );
174
}
175
 
117 ligi 176
 int yalv;           /* loop counter */
177
    size_t read_bytes;  /* how many bytes were read */
178
    struct input_event ev[64]; /* the events (up to 64 at once) */
41 ligi 179
 
117 ligi 180
int evdev_fd;
181
int connect_evdev()
182
{
183
  if ((evdev_fd = open("/dev/input/event10", O_RDONLY)) < 0) {
184
        printf(" cant open evdev ");
185
        return 0;
186
    }
187
 
188
  return 1;
189
 
190
 
191
}
192
 
50 ligi 193
int connect_joy()
43 ligi 194
{
117 ligi 195
 
196
  axis = (int *) calloc( 100, sizeof( int ) );
197
  button = (char *)calloc( 100, sizeof( char ) );
198
  button_trigger = (char *) calloc( 100, sizeof( char ) );
41 ligi 199
 
43 ligi 200
 
117 ligi 201
  //  axis = (int *) calloc( num_of_axis, sizeof( int ) );
202
  // button = (char *)calloc( num_of_buttons, sizeof( char ) );
203
  // button_trigger = (char *) calloc( num_of_buttons, sizeof( char ) );
204
 
205
 
43 ligi 206
  if( ( x52_input_fd = open( JOY_DEV, O_RDONLY ) ) < 0 )
207
    {
208
      printf( "Couldn't open joystick device %s\n", JOY_DEV );
50 ligi 209
      printf( "try modprobe joydev\n"  );
210
      return 0;
43 ligi 211
    }
212
 
213
  ioctl( x52_input_fd, JSIOCGAXES, &num_of_axis );
214
  ioctl( x52_input_fd, JSIOCGBUTTONS, &num_of_buttons );
215
  ioctl( x52_input_fd, JSIOCGNAME(80), &name_of_joystick );
216
 
217
  printf("Joystick detected: %s\n\t%d axis\n\t%d buttons\n\n"
218
         , name_of_joystick
219
         , num_of_axis
220
         , num_of_buttons );
221
 
222
  fcntl( x52_input_fd, F_SETFL, O_NONBLOCK );   /* use non-blocking mode */
223
 
50 ligi 224
  return 1;
43 ligi 225
}
226
 
227
 
41 ligi 228
 
229
 
43 ligi 230
void AddCRC(unsigned int wieviele)
231
{
232
  unsigned int tmpCRC = 0,i;
233
  for(i = 0; i < wieviele;i++)
234
    {
235
      tmpCRC += TxBuffer[i];
236
    }
237
  tmpCRC %= 4096;
238
  TxBuffer[i++] = '=' + tmpCRC / 64;
239
  TxBuffer[i++] = '=' + tmpCRC % 64;
240
  TxBuffer[i++] = '\r';
241
}
41 ligi 242
 
48 ligi 243
 
244
void SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
43 ligi 245
{
50 ligi 246
  unsigned int pt = 0;
247
  unsigned char a,b,c;
248
  unsigned char ptr = 0;
43 ligi 249
 
50 ligi 250
  TxBuffer[pt++] = '#';               // Startzeichen
251
  TxBuffer[pt++] = modul;             // Adresse (a=0; b=1,...)
252
  TxBuffer[pt++] = cmd;                 // Commando
48 ligi 253
 
50 ligi 254
  while(len)
255
    {
256
      if(len) { a = snd[ptr++]; len--;} else a = 0;
257
      if(len) { b = snd[ptr++]; len--;} else b = 0;
258
      if(len) { c = snd[ptr++]; len--;} else c = 0;
259
      TxBuffer[pt++] = '=' + (a >> 2);
260
      TxBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
261
      TxBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
262
      TxBuffer[pt++] = '=' + ( c & 0x3f);
263
    }
43 ligi 264
 
48 ligi 265
 
266
 
267
  AddCRC(pt);
268
  printf("Sending to MK %d \n" , pt);
269
 
43 ligi 270
  status = send(s,"\r" , 1, 0);
48 ligi 271
 
272
 
273
  //  for (c=0;c<pt+2;c++)
274
  // {
50 ligi 275
  status = write(s,&TxBuffer , pt+3);
276
  //   printf("Send to MK %d \n" , TxBuffer[c] );
277
  // }
48 ligi 278
  /*while(TxBuffer[i] !='\r' && i<150)
43 ligi 279
    {
50 ligi 280
    //     TxBuffer[i]='#';
281
    status = send(s,&TxBuffer[i] , 1, 0);
282
    printf(" +%d%c ",i,TxBuffer[i]);
283
    i++;
43 ligi 284
    }
48 ligi 285
 
50 ligi 286
    status = send(s,"\r" , 1, 0);
48 ligi 287
  */
288
  // status = send(s,"\r" , 1, 0);
43 ligi 289
  printf("\n");
290
}
41 ligi 291
 
292
 
43 ligi 293
void write_display(int line,char* text)
294
{
295
  if (x52_output) x52_settext(x52_output, line , text, strlen(text));
296
}
297
 
298
void clear_display()
299
{
300
  write_display(0,"");
301
  write_display(1,"");
302
  write_display(2,"");
303
}
304
 
305
 
306
void output_device_list()
307
{
308
  int i;
309
  char disp_txt[20];
310
  for(i=0;i<bt_device_count;i++)
311
    {
312
      if (i<3)
313
        {
314
 
315
          if (selected_bt_device==i)
316
            sprintf(disp_txt,"#%s",names[i]);
317
          else
318
            sprintf(disp_txt," %s",names[i]);
319
          write_display(i,disp_txt);
320
        }
321
    }
322
}
323
 
50 ligi 324
int connect_mk(char dest[18])
43 ligi 325
{
117 ligi 326
 
43 ligi 327
  struct sockaddr_rc addr ;
117 ligi 328
  struct sockaddr_in sa;
329
 
330
 sa.sin_family = AF_INET;
331
  sa.sin_addr.s_addr = htonl(0x0);
332
  sa.sin_port = htons(54321);
333
 
334
  // allocate a socket
335
  //  s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
336
  s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
337
  //);
43 ligi 338
 
117 ligi 339
  // set the connection parameters (who to connect to)
340
  addr.rc_family = AF_BLUETOOTH;
341
  addr.rc_channel = 1;
342
  str2ba( dest, &addr.rc_bdaddr );
343
 
344
  // connect to server
345
  //  status = connect(s, (struct sockaddr *)&addr, sizeof(addr));
346
  status = connect(s,(struct sockaddr*) &sa, sizeof(struct sockaddr_in));
347
 
348
  return status;
349
 
350
  /*
351
  struct sockaddr_rc addr ;
352
 
43 ligi 353
  // allocate a socket
354
  s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
355
 
356
  // set the connection parameters (who to connect to)
357
  addr.rc_family = AF_BLUETOOTH;
358
  addr.rc_channel = 1;
359
  str2ba( dest, &addr.rc_bdaddr );
360
 
361
  // connect to server
362
  status = connect(s, (struct sockaddr *)&addr, sizeof(addr));
363
 
50 ligi 364
  return status;
117 ligi 365
  */
43 ligi 366
}
367
 
368
 
369
 
370
 
50 ligi 371
int r=0;
372
int count=0;
373
int connected=0;
43 ligi 374
 
117 ligi 375
 
376
int input=INPUT_NONE;
377
 
43 ligi 378
int main(int argc, char**argv)
379
{
380
  printf("Starting Riddim \n");
381
  printf("\tRemote Interactive Digital Drone Interface Mashup\n");
50 ligi 382
 
383
  // 1st argument -> Bluetooth adrees to bypass scanning ( takes to long for short testing roundtrips )
384
  if (argv[1])
385
    {
386
      if (connect_mk(argv[1])==-1)
387
        {
388
          printf("cant connect to QC at adress: %s\n",argv[1]);
389
          return 0;
390
        }
391
        printf("connected to QC at adress: %s\n",argv[1]);
392
        connected=1;
393
    }
47 ligi 394
  int i;
117 ligi 395
 
396
 
397
 
47 ligi 398
 
117 ligi 399
 
400
 
43 ligi 401
  printf("\nInitializing X-52 input ..\n");
117 ligi 402
  if (connect_joy())
403
    {
404
    printf(".. done");//
405
    input=INPUT_JOYDEV;
406
    }
407
  else
408
    printf(".. ERROR ");//
43 ligi 409
 
117 ligi 410
  /*  printf("\nInitializing evdev input ..\n");
411
  if (connect_evdev())
412
    {
413
    printf(".. done");//
414
    input=INPUT_EVDEV;
415
    }
416
  else
417
    printf(".. ERROR ");//
418
  */
43 ligi 419
  printf("\nInitializing X-52 output ..");
420
 
47 ligi 421
  x52_output = x52_init();
422
 
423
  clear_display();
43 ligi 424
 
47 ligi 425
  write_display(0, "RIDDIM active");
43 ligi 426
 
47 ligi 427
  if (x52_output) x52_setbri(x52_output, 1,128);  
428
  if (x52_output)
429
    printf(" done \n");  
430
  else
431
    printf(" not found \n");      
43 ligi 432
 
50 ligi 433
  if (!connected)
43 ligi 434
    {
50 ligi 435
      printf("Scanning for Bluetooth Devices ..\n");
436
      write_display(1,"Bluetooth Scan");
437
      scan_bt();
438
      printf(" done \n");  
439
      printf(" %d Devices found \n",bt_device_count);  
43 ligi 440
    }
41 ligi 441
 
50 ligi 442
 
43 ligi 443
  int v_old;
117 ligi 444
  int polls=0;
445
  printf("starting loop ..\n");
446
 
447
 
448
 
41 ligi 449
  while( 1 )    
450
    {
117 ligi 451
 
452
      switch (input)
43 ligi 453
        {
117 ligi 454
 
455
        case INPUT_NONE:
456
          printf("input none\n");
457
          usleep(10000);
458
 
459
          break;
43 ligi 460
 
117 ligi 461
        case INPUT_EVDEV:
462
           printf("input evdev\n");
463
          usleep(30000);
464
 
465
 
466
        read_bytes = read(evdev_fd, ev, sizeof(struct input_event) * 64);
467
           printf("read done\n");
468
        if (read_bytes < (int) sizeof(struct input_event)) {
469
            perror("evtest: short read");
470
            exit (1);
471
        }
472
 
473
        for (yalv = 0; yalv < (int) (read_bytes / sizeof(struct input_event)); yalv++)
50 ligi 474
            {
117 ligi 475
              // 1 -> nick
476
              // 2 -> gas
477
              // 4->roll
478
              // 5-> gier
479
              axis[ ev[yalv].code]= ev[yalv].value;
480
 
481
              printf("nick:%d roll:%d gier:%d gas:%d\n",axis[3] , axis[4] , axis[5] , axis[2]);
482
              /*if ( ev[yalv].code==5)
483
                printf("Event: time %ld.%06ld, type %d, code %d, value %d\n",
484
                       ev[yalv].time.tv_sec, ev[yalv].time.tv_usec, ev[yalv].type,
485
                       ev[yalv].code, ev[yalv].value);
486
              */
50 ligi 487
            }
117 ligi 488
 
489
 
490
          break;
491
        case INPUT_JOYDEV:
492
          printf("input joydev\n");      
493
          // poll values from input device
494
 
495
          for (polls=0;polls<100;polls++) // FIXME - better Polling
496
            {
497
              read(x52_input_fd, &x52_event_struct, sizeof(struct js_event));
498
 
499
 
500
              /* see what to do with the event */
501
              switch (x52_event_struct.type & ~JS_EVENT_INIT)
502
                {
503
                case JS_EVENT_AXIS:
504
                  axis   [ x52_event_struct.number ] = x52_event_struct.value;
505
                  break;
506
                case JS_EVENT_BUTTON:
507
                  button [ x52_event_struct.number ] = x52_event_struct.value;
508
                  break;
509
                }
510
            }
511
 
512
          for( x=0 ; x<num_of_buttons ; ++x )
513
            if( button[x]==0)
514
              button_trigger[x]=0;
515
            else
516
              {
517
                if (button_trigger[x]<100)button_trigger[x]++;
518
              }
519
          break;
43 ligi 520
        }
521
 
117 ligi 522
      printf("input done\n");    
43 ligi 523
 
47 ligi 524
      switch(state)
525
        {
48 ligi 526
 
527
 
47 ligi 528
        case STATEID_SCANNING:
48 ligi 529
 
50 ligi 530
          state=STATEID_CONNECTING;
48 ligi 531
 
532
          ExternControl.Digital[0]=0;
533
          ExternControl.Digital[1]=0;
534
          ExternControl.RemoteTasten=0;
535
          ExternControl.Nick=(axis[1]>>8)*(-1)+127;;
536
 
537
          printf("nick%d\n",ExternControl.Nick);         
538
          ExternControl.Roll=(axis[0]>>8)*(-1)+127;;
539
          ExternControl.Gier=(axis[5]>>8)*(-1)+127;;
540
          ExternControl.Gas=(axis[2]>>8)*(-1)+127;
541
          ExternControl.Higt=0;
542
          ExternControl.free=0;
543
          ExternControl.Frame='t';
544
          ExternControl.Config=1;
545
 
546
          printf("sending data\n");
547
 
50 ligi 548
 
549
          SendOutData('b', 0, (unsigned char *)&ExternControl, sizeof(ExternControl));
550
          gettimeofday(&time_struct1,NULL);
48 ligi 551
 
47 ligi 552
          if (button_trigger[BUTTON_SELECT]==1)
553
            {
554
              state=STATEID_CONNECTING;
555
              clear_display();
556
              write_display(0,"connecting to");
557
              write_display(1,names[selected_bt_device]);
558
              connect_mk(addrs[selected_bt_device]);
559
              write_display(0,"connected to");
560
            }
43 ligi 561
 
47 ligi 562
          if ((button_trigger[BUTTON_UP]+button_trigger[BUTTON_DOWN])==1)
563
            {
564
              printf("-> sel_dev %d - %d\n",selected_bt_device,button_trigger[19]);
565
              if (button_trigger[BUTTON_DOWN]==1)
566
                if (selected_bt_device>0) selected_bt_device--;
567
              if (button_trigger[BUTTON_UP]==1)
568
                if (selected_bt_device<bt_device_count-1) selected_bt_device++;
569
 
570
              output_device_list()                ;
571
            }
572
          break;
48 ligi 573
 
47 ligi 574
        case STATEID_CONNECTING:
50 ligi 575
 
48 ligi 576
          RxBuffer[1]=0;
50 ligi 577
 
578
 
579
          //      ftime(&time_struct);
117 ligi 580
          printf("waiting for confirm frame\n");
581
          RxBuffer[2]=0;
582
          int confirm_misses=0;
583
 
584
          while (RxBuffer[2]!='t')
50 ligi 585
            {
43 ligi 586
 
50 ligi 587
              r=0;
588
              in_char='#';
43 ligi 589
 
117 ligi 590
              while(in_char!='\n')
48 ligi 591
                {
50 ligi 592
                  count=read(s,&in_char,1);
593
                  if (in_char!=0)
594
                    {
595
                      RxBuffer[r++]=in_char;
596
                    }
597
                  else
598
                    {
599
                      RxBuffer[r++]='0';
600
                    }
117 ligi 601
                  //               printf("\ncount:%d r:%d %d %c \n",count , r, in_char, in_char);
48 ligi 602
                }
50 ligi 603
              RxBuffer[r++]='\0';
604
              printf("--->%s\n",RxBuffer);
117 ligi 605
              // new
606
              if (button_trigger[12]>1)
607
                {
608
                  SendOutData('s', 0, (unsigned char *)&ExternControl, sizeof(ExternControl));
609
                  button_trigger[12]=0;
610
                }
611
              if (++confirm_misses>4)
612
              SendOutData('b', 0, (unsigned char *)&ExternControl, sizeof(ExternControl));
613
 
48 ligi 614
            }
50 ligi 615
          gettimeofday(&time_struct2,NULL);
43 ligi 616
 
50 ligi 617
          printf("last trip: %d",(int)(time_struct1.tv_usec-time_struct2.tv_usec));
618
          act_mode=button[24] | (button[25]<<1);
43 ligi 619
 
50 ligi 620
          switch (act_mode)
621
            {
622
            case 0:
117 ligi 623
 
624
 
50 ligi 625
              act_nick=(axis[AXIS_NICK]>>8)*(INVERT_NICK);
626
              act_roll=(axis[AXIS_ROLL]>>8)*(INVERT_ROLL);
627
              act_gier=(axis[AXIS_GIER]>>8)*(INVERT_GIER);
117 ligi 628
              act_gas=((axis[AXIS_GAS]>>8)-128)*(-1);
629
 
630
              // clip gas      
631
              if (act_gas<0) act_gas=0;
50 ligi 632
 
117 ligi 633
              if (act_gas>250) act_gas=250;        
634
 
635
////////              act_gas=0;
50 ligi 636
              break;
637
 
638
            case 1:
639
              act_nick=(axis[AXIS_NICK]>>8)*(INVERT_NICK)/2;
640
              act_roll=(axis[AXIS_ROLL]>>8)*(INVERT_ROLL)/2;
641
              act_gier=(axis[AXIS_GIER]>>8)*(INVERT_GIER)/2;
642
              act_gas=(axis[AXIS_GAS]>>8)*(INVERT_GAS);
643
 
644
              break;
645
 
646
            case 2:
647
              act_nick=(axis[AXIS_NICK]>>8)*(INVERT_NICK)/3;
648
              act_roll=(axis[AXIS_ROLL]>>8)*(INVERT_ROLL)/3;
649
              act_gier=(axis[AXIS_GIER]>>8)*(INVERT_GIER)/3;
650
              act_gas=(axis[AXIS_GAS]>>8)*(INVERT_GAS);
651
 
652
 
653
              break;
654
 
655
            }
656
 
48 ligi 657
          ExternControl.Digital[0]=0;
658
          ExternControl.Digital[1]=0;
659
          ExternControl.RemoteTasten=0;
50 ligi 660
          ExternControl.Nick=act_nick;  //(axis[1]>>8)*(-1)/2;
661
          //      printf("nick%d\n",ExternControl.Nick);         
117 ligi 662
          ExternControl.Roll=act_roll*(-1); //(axis[0]>>8)*(-1)/2;
48 ligi 663
          ExternControl.Gier=(axis[5]>>8);
117 ligi 664
          ExternControl.Gier=act_gier; // ************
48 ligi 665
          ExternControl.Gas=(axis[2]>>8)*(-1)+127;
117 ligi 666
          ExternControl.Gas=act_gas; // ************
667
          //      ExternControl.Gas=0; // ************
48 ligi 668
          ExternControl.Higt=0;
669
          ExternControl.free=0;
670
          ExternControl.Frame='t';
50 ligi 671
 
48 ligi 672
          ExternControl.Config=1;
117 ligi 673
          printf("---+++act_mode %d , act_nick %d , act_roll %d , act_gier %d , act_gas %d",act_mode , act_nick  , act_roll  , act_gier , act_gas);
48 ligi 674
 
675
 
676
 
677
          printf("sending data\n");
678
 
50 ligi 679
          SendOutData('b', 0, (unsigned char *)&ExternControl, sizeof(ExternControl));
680
          gettimeofday(&time_struct1,NULL);
48 ligi 681
          printf("sent data\n");
682
 
683
 
50 ligi 684
          // printf("sleeping\n");
117 ligi 685
          //      for (polls=0;polls<100;polls++) // FIXME - better Polling
50 ligi 686
          // printf("end_sleep\n");
48 ligi 687
 
47 ligi 688
          int v=axis[6]/655+50;
689
          if (v!=v_old)if (x52_output) x52_setbri(x52_output, 0,v );  
690
          v_old=v;
691
 
48 ligi 692
          printf("v: %d \n",v);
43 ligi 693
 
694
 
47 ligi 695
          for (i=0;i<num_of_axis;i++)
696
            printf("A%d: %d  ", i,axis[i]>>8 );
697
 
698
          for( x=0 ; x<num_of_buttons ; ++x )
699
 
700
            printf("B%d: %d  ", x, button[x] );            
43 ligi 701
 
47 ligi 702
          break;
703
        }
704
 
48 ligi 705
      printf("\n");
47 ligi 706
      fflush(stdout);
48 ligi 707
      printf("loop fin");
43 ligi 708
 
50 ligi 709
    }
41 ligi 710
 
43 ligi 711
 
47 ligi 712
  /******************** Cleanup **********************/
713
  close(x52_input_fd);
714
  close(s);
41 ligi 715
 
716
  if (x52_output) x52_close(x52_output);
717
  return 0;
718
}