Subversion Repositories Projects

Compare Revisions

Regard whitespace Rev 50 → Rev 49

/Riddim/README
1,7 → 1,7
# RIDDIM
# -> Remote Interactive Digital Drone Interface Mashup
#
# Author: Marcus -ligi- Bueschleb
# Author: Marcus -ligi- Büschleb
#
# Contact: ligi
# -at-
56,9 → 56,6
 
= Changelog =
 
0.5 - code cleanup
0.4 - Measure time from send command to confirm
0.3 - mode selector
0.2 - first version with possibility to fly ( based on FC0.68b commands )
0.1 - initial release with basic functions and proove of concept Code ( Scanning for Blueooth Devices / read Joy / communicate to MK / ..)
65,6 → 62,6
 
= ToDo =
 
- Measure timings
- Force Feedback from ACC Sensor Data
- Support more JoySticks -> generalize
- Support more Aircraft types -> generalize
- Support more JoySticks -> generalize
/Riddim/riddim.c
9,9 → 9,7
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
 
#include <sys/time.h>
 
 
#include <bluetooth/rfcomm.h>
 
 
28,29 → 26,6
#define BUTTON_DOWN 28
#define BUTTON_UP 27
 
 
#define AXIS_ROLL 0
#define AXIS_NICK 1
#define AXIS_GIER 5
#define AXIS_GAS 2
 
#define INVERT_ROLL -1
#define INVERT_NICK -1
#define INVERT_GIER 1
#define INVERT_GAS -1
 
 
// time struct for measuring
struct timeval time_struct1;
struct timeval time_struct2;
 
 
int act_nick=0;
int act_roll=0;
int act_gier=0;
int act_gas=0;
int act_mode=0;
 
int bt_device_count=0;
 
char names[MAX_BT_DEVICES][248];
68,13 → 43,19
 
struct js_event x52_event_struct;
 
 
int engines_on=0;
int old_engines_on=0;
 
char in_char;
 
struct ExternControl_s
struct
{
char val[4];
} MotortestParam;
 
struct
{
unsigned char Digital[2]; // (noch unbenutzt)
unsigned char RemoteTasten; //(gab es schon für das virtuelle Display)
signed char Nick;
85,10 → 66,9
unsigned char free; // (unbenutzt)
unsigned char Frame; // (Bestätigung)
unsigned char Config;
};
} ExternControl;
 
 
struct ExternControl_s ExternControl ;
 
int state=STATEID_SCANNING;
 
140,7 → 120,7
}
 
 
int connect_joy()
void connect_joy()
{
 
147,8 → 127,7
if( ( x52_input_fd = open( JOY_DEV, O_RDONLY ) ) < 0 )
{
printf( "Couldn't open joystick device %s\n", JOY_DEV );
printf( "try modprobe joydev\n" );
return 0;
return ;
}
 
ioctl( x52_input_fd, JSIOCGAXES, &num_of_axis );
166,7 → 145,6
fcntl( x52_input_fd, F_SETFL, O_NONBLOCK ); /* use non-blocking mode */
 
return 1;
}
 
 
266,7 → 244,7
}
}
 
int connect_mk(char dest[18])
void connect_mk(char dest[18])
{
struct sockaddr_rc addr ;
 
281,8 → 259,6
// connect to server
status = connect(s, (struct sockaddr *)&addr, sizeof(addr));
 
return status;
}
 
 
290,7 → 266,6
 
int r=0;
int count=0;
int connected=0;
 
int main(int argc, char**argv)
{
297,24 → 272,18
printf("Starting Riddim \n");
printf("\tRemote Interactive Digital Drone Interface Mashup\n");
// 1st argument -> Bluetooth adrees to bypass scanning ( takes to long for short testing roundtrips )
if (argv[1])
{
if (connect_mk(argv[1])==-1)
{
printf("cant connect to QC at adress: %s\n",argv[1]);
return 0;
}
printf("connected to QC at adress: %s\n",argv[1]);
connected=1;
}
//int tmp=2;
connect_mk("00:0B:CE:01:6B:4F");
 
 
int i;
printf("\nInitializing X-52 input ..\n");
if (!connect_joy()) return 0;
printf(".. done");//
connect_joy();
printf(".. done");
 
 
printf("\nInitializing X-52 output ..");
 
x52_output = x52_init();
329,22 → 298,28
else
printf(" not found \n");
 
if (!connected)
{
printf("Scanning for Bluetooth Devices ..\n");
write_display(1,"Bluetooth Scan");
scan_bt();
 
// scan_bt();
printf(" done \n");
printf(" %d Devices found \n",bt_device_count);
 
 
/* for(i=0;i<bt_device_count;i++)
{
printf(" %d -> %s (%s) \n",i,names[i],addrs[i]);
if (i<3) write_display(i,names[i]);
}
 
output_device_list() ;
*/
 
int v_old;
while( 1 )
{
// poll values from input device
int polls=0;
for (polls=0;polls<100;polls++) // FIXME - better Polling
for (polls=0;polls<1000;polls++) // FIXME - better Polling
{
read(x52_input_fd, &x52_event_struct, sizeof(struct js_event));
377,7 → 352,7
case STATEID_SCANNING:
 
state=STATEID_CONNECTING;
state=STATEID_CONNECTING; //e
 
ExternControl.Digital[0]=0;
ExternControl.Digital[1]=0;
393,11 → 368,12
ExternControl.Frame='t';
ExternControl.Config=1;
 
 
 
printf("sending data\n");
 
SendOutData('b', 0, &ExternControl, sizeof(ExternControl));
SendOutData('b', 0, (unsigned char *)&ExternControl, sizeof(ExternControl));
gettimeofday(&time_struct1,NULL);
 
if (button_trigger[BUTTON_SELECT]==1)
{
422,12 → 398,8
break;
case STATEID_CONNECTING:
 
// for (polls=0;polls<10;polls++) // FIXME - better Polling
RxBuffer[1]=0;
 
 
// ftime(&time_struct);
//printf("t:%d",time_struct.millitm);
while (RxBuffer[1]!='t')
{
 
451,68 → 423,34
printf("--->%s\n",RxBuffer);
 
}
gettimeofday(&time_struct2,NULL);
 
printf("last trip: %d",(int)(time_struct1.tv_usec-time_struct2.tv_usec));
act_mode=button[24] | (button[25]<<1);
 
switch (act_mode)
{
case 0:
act_nick=(axis[AXIS_NICK]>>8)*(INVERT_NICK);
act_roll=(axis[AXIS_ROLL]>>8)*(INVERT_ROLL);
act_gier=(axis[AXIS_GIER]>>8)*(INVERT_GIER);
act_gas=(axis[AXIS_GAS]>>8)*(INVERT_GAS);
 
break;
 
case 1:
act_nick=(axis[AXIS_NICK]>>8)*(INVERT_NICK)/2;
act_roll=(axis[AXIS_ROLL]>>8)*(INVERT_ROLL)/2;
act_gier=(axis[AXIS_GIER]>>8)*(INVERT_GIER)/2;
act_gas=(axis[AXIS_GAS]>>8)*(INVERT_GAS);
 
break;
case 2:
act_nick=(axis[AXIS_NICK]>>8)*(INVERT_NICK)/3;
act_roll=(axis[AXIS_ROLL]>>8)*(INVERT_ROLL)/3;
act_gier=(axis[AXIS_GIER]>>8)*(INVERT_GIER)/3;
act_gas=(axis[AXIS_GAS]>>8)*(INVERT_GAS);
 
 
break;
 
}
ExternControl.Digital[0]=0;
ExternControl.Digital[1]=0;
ExternControl.RemoteTasten=0;
ExternControl.Nick=act_nick; //(axis[1]>>8)*(-1)/2;
// printf("nick%d\n",ExternControl.Nick);
ExternControl.Roll=act_roll; //(axis[0]>>8)*(-1)/2;
ExternControl.Nick=(axis[1]>>8)*(-1);
printf("nick%d\n",ExternControl.Nick);
ExternControl.Roll=(axis[0]>>8)*(-1);
ExternControl.Gier=(axis[5]>>8);
ExternControl.Gas=(axis[2]>>8)*(-1)+127;
ExternControl.Higt=0;
ExternControl.free=0;
ExternControl.Frame='t';
ExternControl.Config=1;
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);
 
 
 
printf("sending data\n");
 
SendOutData('b', 0, (unsigned char *)&ExternControl, sizeof(ExternControl));
gettimeofday(&time_struct1,NULL);
SendOutData('b', 0, &ExternControl, sizeof(ExternControl));
printf("sent data\n");
 
// printf("sleeping\n");
printf("sleeping\n");
// usleep(10000);
// printf("end_sleep\n");
 
printf("end_sleep\n");
 
int v=axis[6]/655+50;
if (v!=v_old)if (x52_output) x52_setbri(x52_output, 0,v );
v_old=v;