Subversion Repositories Projects

Compare Revisions

Regard whitespace Rev 49 → Rev 50

/Riddim/README
1,7 → 1,7
# RIDDIM
# -> Remote Interactive Digital Drone Interface Mashup
#
# Author: Marcus -ligi- Büschleb
# Author: Marcus -ligi- Bueschleb
#
# Contact: ligi
# -at-
56,6 → 56,9
 
= 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 / ..)
62,6 → 65,6
 
= ToDo =
 
- Measure timings
- Force Feedback from ACC Sensor Data
- Support more JoySticks -> generalize
- Support more JoySticks -> generalize
- Support more Aircraft types -> generalize
/Riddim/riddim.c
9,7 → 9,9
#include <bluetooth/hci.h>
#include <bluetooth/hci_lib.h>
 
#include <sys/time.h>
 
 
#include <bluetooth/rfcomm.h>
 
 
26,6 → 28,29
#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];
43,19 → 68,13
 
struct js_event x52_event_struct;
 
 
int engines_on=0;
int old_engines_on=0;
 
char in_char;
 
struct
struct ExternControl_s
{
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;
66,9 → 85,10
unsigned char free; // (unbenutzt)
unsigned char Frame; // (Bestätigung)
unsigned char Config;
} ExternControl;
};
 
 
struct ExternControl_s ExternControl ;
 
int state=STATEID_SCANNING;
 
120,7 → 140,7
}
 
 
void connect_joy()
int connect_joy()
{
 
127,7 → 147,8
if( ( x52_input_fd = open( JOY_DEV, O_RDONLY ) ) < 0 )
{
printf( "Couldn't open joystick device %s\n", JOY_DEV );
return ;
printf( "try modprobe joydev\n" );
return 0;
}
 
ioctl( x52_input_fd, JSIOCGAXES, &num_of_axis );
145,6 → 166,7
fcntl( x52_input_fd, F_SETFL, O_NONBLOCK ); /* use non-blocking mode */
 
return 1;
}
 
 
244,7 → 266,7
}
}
 
void connect_mk(char dest[18])
int connect_mk(char dest[18])
{
struct sockaddr_rc addr ;
 
259,6 → 281,8
// connect to server
status = connect(s, (struct sockaddr *)&addr, sizeof(addr));
 
return status;
}
 
 
266,6 → 290,7
 
int r=0;
int count=0;
int connected=0;
 
int main(int argc, char**argv)
{
272,18 → 297,24
printf("Starting Riddim \n");
printf("\tRemote Interactive Digital Drone Interface Mashup\n");
//int tmp=2;
connect_mk("00:0B:CE:01:6B:4F");
 
 
// 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 i;
printf("\nInitializing X-52 input ..\n");
connect_joy();
printf(".. done");
if (!connect_joy()) return 0;
printf(".. done");//
 
 
printf("\nInitializing X-52 output ..");
 
x52_output = x52_init();
298,28 → 329,22
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<1000;polls++) // FIXME - better Polling
for (polls=0;polls<100;polls++) // FIXME - better Polling
{
read(x52_input_fd, &x52_event_struct, sizeof(struct js_event));
352,7 → 377,7
case STATEID_SCANNING:
 
state=STATEID_CONNECTING; //e
state=STATEID_CONNECTING;
 
ExternControl.Digital[0]=0;
ExternControl.Digital[1]=0;
368,12 → 393,11
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)
{
398,8 → 422,12
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')
{
 
423,34 → 451,68
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=(axis[1]>>8)*(-1);
printf("nick%d\n",ExternControl.Nick);
ExternControl.Roll=(axis[0]>>8)*(-1);
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.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, &ExternControl, sizeof(ExternControl));
SendOutData('b', 0, (unsigned char *)&ExternControl, sizeof(ExternControl));
gettimeofday(&time_struct1,NULL);
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;