Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 521 → Rev 522

/Riddim/bluetooth_handler.c
6,8 → 6,9
char addrs[MAX_BT_DEVICES][19];
 
char BtHostRxBuffer[150];
char BtHostRxBufferDecoded[150];
 
 
int BtRxCount;
int scan_bt()
{
inquiry_info *ii = NULL;
63,7 → 64,11
int maxfd, sock_flags;
 
 
unsigned char BT_TxBuffer[MAX_BUFF_LEN];
 
extern struct str_DebugOut DebugOut;
struct str_VersionInfo VersionInfo;
 
int bt_host_init()
{
100,6 → 105,236
return 1;
}
 
 
struct {
unsigned char MenuePunkt;
unsigned char MaxMenue;
char DisplayBuff[80];
} menu;
 
 
void copy_lcd_str(int x,int y,char str[])
{
int pos=0;
while (str[pos]!=0)
{
 
menu.DisplayBuff[y*20+x+pos]=str[pos];
pos++;
}
 
}
 
 
 
void Menu(void)
{
 
// menu.MenuePunkt=0;
menu.MaxMenue=3;
int x;
int y;
char tmp_str[20];
for (x=0;x<20;x++)
for (y=0;y<4;y++)
menu.DisplayBuff[y*20+x]=' ';
switch(menu.MenuePunkt)
{
case 0:
// LCD_printfxy(0,0,"+ Riddim +");
/* LCD_printfxy(0,1,"Version: %d %d",0,8);
LCD_printfxy(0,2,"");
LCD_printfxy(0,3,"(cc) 2009 ligi");
*/
// clear_lcd
 
 
 
sprintf(tmp_str,"+ Riddim +");
copy_lcd_str(0,0,tmp_str);
 
sprintf(tmp_str,"Version: V%d.%d/%d",RIDDIM_VERSION_MAJOR,RIDDIM_VERSION_MINOR,RIDDIM_VERSION_PATCH);
copy_lcd_str(0,1,tmp_str);
 
 
sprintf(tmp_str,"(cc) 2009 LiGi");
copy_lcd_str(0,3,tmp_str);
 
// sprintf(&menu.DisplayBuff,"+ Riddim ++");
 
// sprintf(&menu.DisplayBuff+20,"Version: %d %d",0,8);
 
break;
case 1:
sprintf(tmp_str,"Loop:");
copy_lcd_str(0,0,tmp_str);
sprintf(tmp_str," Count %ld",trip_count);
copy_lcd_str(0,1,tmp_str);
sprintf(tmp_str," Time %ld",last_trip_time);
copy_lcd_str(0,2,tmp_str);
break;
 
case 2:
sprintf(tmp_str,"Inputs:");
copy_lcd_str(0,0,tmp_str);
sprintf(tmp_str," Complete %d",evdevs_count);
copy_lcd_str(0,1,tmp_str);
sprintf(tmp_str," Connected %d",input_count);
copy_lcd_str(0,2,tmp_str);
sprintf(tmp_str," Configured %d",configured_input_count);
copy_lcd_str(0,3,tmp_str);
break;
 
case 3:
sprintf(tmp_str,"Nick: %d",act_nick);
copy_lcd_str(0,0,tmp_str);
sprintf(tmp_str,"Roll %d",act_roll);
copy_lcd_str(0,1,tmp_str);
sprintf(tmp_str,"Gier %d",act_gier);
copy_lcd_str(0,2,tmp_str);
sprintf(tmp_str,"Gas %d",act_gas);
copy_lcd_str(0,3,tmp_str);
break;
 
default:
sprintf(tmp_str,"illegal page %d",menu.MenuePunkt);
copy_lcd_str(0,0,tmp_str);
break;
}
}
 
 
 
void BT_Decode64(void) // die daten werden im rx buffer dekodiert, das geht nur, weil aus 4 byte immer 3 gemacht werden.
{
unsigned char a,b,c,d;
unsigned char x,y,z;
unsigned char ptrIn = 3; // start at begin of data block
unsigned char ptrOut = 0;
unsigned char len = BtRxCount - 5; // von der Gesamtbytezahl eines Frames gehen 3 Bytes des Headers ('#',Addr, Cmd) und 3 Bytes des Footers (CRC1, CRC2, '\r') ab.
 
while(len)
{
a = BtHostRxBuffer[ptrIn++] - '=';
b = BtHostRxBuffer[ptrIn++] - '=';
c = BtHostRxBuffer[ptrIn++] - '=';
d = BtHostRxBuffer[ptrIn++] - '=';
 
x = (a << 2) | (b >> 4);
y = ((b & 0x0f) << 4) | (c >> 2);
z = ((c & 0x03) << 6) | d;
printf("\naaaaa %d / %d\naaaaa s %s => x %d ; y %d ; z %d \n",ptrOut, BtRxCount ,BtHostRxBuffer,x,y,z);
 
 
if(len--) BtHostRxBufferDecoded[ptrOut++] = x; else break;
if(len--) BtHostRxBufferDecoded[ptrOut++] = y; else break;
if(len--) BtHostRxBufferDecoded[ptrOut++] = z; else break;
}
//RxDataLen = ptrOut ; // wie viele Bytes wurden dekodiert?
 
}
 
void BT_AddCRC(unsigned int wieviele)
{
unsigned int tmpCRC = 0,i;
for(i = 0; i < wieviele;i++)
{
tmpCRC += BT_TxBuffer[i];
}
tmpCRC %= 4096;
BT_TxBuffer[i++] = '=' + tmpCRC / 64;
BT_TxBuffer[i++] = '=' + tmpCRC % 64;
BT_TxBuffer[i++] = '\r';
}
 
void BT_SendOutData(unsigned char cmd,unsigned char modul, unsigned char *snd, unsigned char len)
{
// return;
int status =0;
unsigned int pt = 0;
unsigned char a,b,c;
unsigned char ptr = 0;
 
printf("packing base len %d -cmd %c\n",len,cmd);
 
BT_TxBuffer[pt++] = '#'; // Startzeichen
BT_TxBuffer[pt++] = modul; // Adresse (a=0; b=1,...)
BT_TxBuffer[pt++] = cmd; // Commando
 
while(len)
{
if(len) { a = snd[ptr++]; len--;} else a = 0;
if(len) { b = snd[ptr++]; len--;} else b = 0;
if(len) { c = snd[ptr++]; len--;} else c = 0;
BT_TxBuffer[pt++] = '=' + (a >> 2);
BT_TxBuffer[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4));
BT_TxBuffer[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6));
BT_TxBuffer[pt++] = '=' + ( c & 0x3f);
}
 
BT_AddCRC(pt);
printf("Sending to BT_Client %d \n" , pt);
 
status = send(client,"\r" , 1, 0);
// for (c=0;c<pt+2;c++)
// {
status = write(client,&BT_TxBuffer , pt+3);
 
status = send(client,"\r" , 1, 0);
printf("\n");
}
 
 
void bt_process_buffer()
{
printf("processing buffer\n");
switch(BtHostRxBuffer[2])
{
 
case 'v':
printf("got version request\n");
VersionInfo.SWMinor=RIDDIM_VERSION_MINOR;
VersionInfo.SWMajor=RIDDIM_VERSION_MAJOR;
VersionInfo.SWPatch=RIDDIM_VERSION_PATCH;
 
BT_SendOutData('V', RIDDIM_ADDRESS, (unsigned char *) &VersionInfo, sizeof(VersionInfo));
break;
 
case 'l':
printf("got display request\n");
Menu();
menu.MenuePunkt=BtHostRxBufferDecoded[0];
printf("sending %s \n",menu.DisplayBuff);
BT_SendOutData('L', RIDDIM_ADDRESS, (unsigned char *) &menu, sizeof(menu));
break;
 
}
 
}
 
 
 
 
 
 
 
 
int r=0;
 
struct timeval last_debug_time;
struct timeval act_time;
 
int bt_host_tick(int mk_fd)
{
 
112,8 → 347,8
FD_ZERO(&writefds);
FD_SET(s, &readfds);
maxfd = s;
printf("waiting for connection\n");
 
printf("waiting for bt connection\n");
// status = select(maxfd + 1, &readfds, &writefds, 0, &timeout);
status = select(maxfd + 1, &readfds, &writefds, 0,& (struct timeval) { 0, 100 });
if( status > 0 && FD_ISSET( s, &readfds ) ) {
141,13 → 376,26
}
else
{
gettimeofday(&act_time,NULL);
if (act_time.tv_sec>last_debug_time.tv_sec)
{
 
DebugOut.Analog[9]=23; // voltage
DebugOut.Analog[5]=23; // alt
 
BT_SendOutData('D', RIDDIM_ADDRESS, (unsigned char *) &DebugOut, sizeof(DebugOut));
 
 
gettimeofday(&last_debug_time,NULL);
}
printf("reading from bt_host");
char in_char='#';
int count=0;
int r=0;
 
// timeout.tv_sec = 0;
//timeout.tv_usec = 100;
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 100;
FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_SET(client, &readfds);
154,24 → 402,34
maxfd = client;
printf("waiting for connection\n");
//status = select(maxfd + 1, &readfds, 0, 0, &timeout);
status = select(maxfd + 1, &readfds, 0, 0, &timeout);
if( status >0 )
{
send(mk_fd,"\r",1,0);
while(in_char!='\r')
count=read(client,&in_char,1);
//send(mk_fd,"\r",1,0);
if (count==-1)
{
count=read(client,&in_char,1);
if (count==-1)
{
bt_host_connected=0;
return 0;
}
printf("count: %d in %d chr %c\n",count,in_char,in_char);
send(mk_fd,&in_char,1,0);
BtHostRxBuffer[r]=in_char;
bt_host_connected=0;
//return 0;
}
else
if(in_char!='\r')
{
printf("count: %d in %d chr %c r:%d\n",count,in_char,in_char,r);
//send(mk_fd,&in_char,1,0);
BtHostRxBuffer[r++]=in_char;
 
}
send(mk_fd,"\r",1,0);
else
{
BtRxCount=r;
r=0;
BT_Decode64();
bt_process_buffer();
}
// send(mk_fd,"\r",1,0);
}
else
return 0;
/Riddim/bluetooth_handler.h
3,6 → 3,7
#define BLUETOOTH_HANDLER_H
 
 
#define RIDDIM_ADDRESS 12+'a'
#include <bluetooth/bluetooth.h>
#include <bluetooth/rfcomm.h>
#include <bluetooth/hci.h>
18,6 → 19,7
 
 
 
 
#include <errno.h>
#include <sys/types.h>
#include <netinet/in.h>
26,6 → 28,11
#include <unistd.h>//for close() for socket
 
#include <string.h>
#include "riddim_meta.h"
#include "statistics.h"
#include "config.h"
#include "riddim.h"
#include "fc.h"
 
#define MAX_BT_DEVICES 3
 
39,4 → 46,12
int bt_host_init();
int bt_host_send(char RxBuffer[150],int len);
 
 
#define MAX_BUFF_LEN 150
 
 
extern struct str_DebugOut DebugOut;
extern struct str_VersionInfo VersionInfo;
 
 
#endif
/Riddim/config.c
34,10 → 34,10
 
 
int input_count=0;
 
int configured_input_count=0;
cfg_t *cfg;
 
int parse_config(char* fname)
void parse_config(char* fname)
{
 
// section for inputs
115,12 → 115,12
void parse_config_input_sections()
{
printf("parsing inputs \n");
input_count=cfg_size(cfg,"input");
configured_input_count=cfg_size(cfg,"input");
printf("%d inputs configured\n", input_count);
int i;
int act_input=0;
for (i=0;i<input_count;i++)
for (i=0;i<configured_input_count;i++)
{
cfg_t *input_sect=cfg_getnsec(cfg,"input",i);
 
149,7 → 149,7
 
 
inputs[act_input].nick_up_btn=cfg_getint(input_sect,"nick_up_btn");
printf("nick_up_btn %d\n" ,cfg_getint(input_sect,"nick_up_btn"));
printf("nick_up_btn %ld\n" ,cfg_getint(input_sect,"nick_up_btn"));
 
inputs[act_input].nick_down_btn=cfg_getint(input_sect,"nick_down_btn");
 
174,10 → 174,10
 
 
}
 
input_count=act_input;
printf("%d inputs matching\n", input_count);
return 0;
 
}
 
 
/Riddim/config.h
36,6 → 36,7
 
 
extern int input_count;
extern int configured_input_count;
struct {
 
 
80,7 → 81,7
} inputs[MAX_INPUTS];
 
 
int parse_config(char* fname);
void parse_config(char* fname);
void parse_config_input_sections();
 
#endif
/Riddim/doc/router_setup.dia
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/Riddim/evdev_handler.c
11,7 → 11,7
int counter;
 
int evdevs_count=0;
int file_select(struct direct *entry)
int file_select(const struct direct *entry)
{
if ((strncmp(entry->d_name, "event",5))==0)
113,7 → 113,7
printf("Unknown event type ( 0x%04hx)\n", id);
}
return "";
 
}
 
int connect_evdev()
/Riddim/fc.c
115,7 → 115,7
char in_char='#';
int count=0;
int r=0;
int i=0;
// int i=0;
 
int p=0;
printf("starting read\n");
181,7 → 181,7
 
 
struct termios termattr;
speed_t baudRate;
// speed_t baudRate;
 
/* Make a copy of the termios structure. */
tcgetattr(mk_socket, &termattr);
/Riddim/fc.h
1,5 → 1,6
#ifndef FC_H
#define FC_H
 
 
#include <stdio.h>
#include <termios.h>
#include <sys/socket.h>
39,6 → 40,18
uint16_t Analog[32]; // Debugwert//
};
 
 
struct str_VersionInfo
{
unsigned char SWMajor;
unsigned char SWMinor;
unsigned char ProtoMajor;
unsigned char ProtoMinor;
unsigned char SWPatch;
unsigned char Reserved[5];
};
 
 
struct str_DebugOut DebugOut;
 
 
61,3 → 74,6
extern unsigned char RxBuffer[MAX_BUFF_LEN ];
extern char PrintableRxBuffer[MAX_BUFF_LEN ];
extern int rx_last_length;
 
 
#endif
/Riddim/riddim.c
4,7 → 4,7
* Riddim
* Remote Interactive Digital Drone Interface Mashup
*
* 2007-2008 Marcus -LiGi- Bueschleb
* (cc) 2007-2009 Marcus -LiGi- Bueschleb
*
*
**************************************************/
12,8 → 12,6
#include "riddim.h"
 
int state=STATEID_SCANNING;
 
 
struct js_event x52_event_struct;
 
int engines_on=0;
22,10 → 20,23
int *axis;
char *button;
 
int act_nick=0;
int act_roll=0;
int act_gier=0;
int act_gas=0;
int act_mode=0;
 
int act_alt=0;
long act_long_alt=0;
 
struct x52 *x52_output;
 
int selected_bt_device=0;
 
int count=0;
int connected=0;
int input=INPUT_NONE;
 
void write_display(int line,char* text)
{
if (x52_output) x52_settext(x52_output, line , text, strlen(text));
67,14 → 78,7
 
 
 
int count=0;
int connected=0;
 
 
int input=INPUT_NONE;
 
 
 
int main(int argc, char**argv)
{
 
83,18 → 87,13
printf("\nusage:\n");
printf("\t riddim [config_file]\n\n");
 
 
 
 
// bt_host_init();
 
// check if config file as argument
if (argv[1])
parse_config(argv[1]);
else
parse_config("/etc/riddim.conf");
 
 
bt_host_init();
collect_evdev_devices();
parse_config_input_sections();
// exit(0);
219,7 → 218,7
 
 
// blink_evdev_led();
// bt_host_tick(mk_socket);
bt_host_tick(mk_socket);
usleep(loop_delay);
 
poll_evdev();
606,8 → 605,9
gettimeofday(&loop_end_time,NULL);
last_trip_time=(unsigned long)(loop_end_time.tv_usec-loop_start_time.tv_usec)+(unsigned long)(loop_end_time.tv_sec-loop_start_time.tv_sec)*1000000;
printf("last trip: %d\n",last_trip_time);
printf("last trip: %ld\n",last_trip_time);
 
trip_count++;
}
 
/Riddim/riddim.h
14,14 → 14,12
 
 
 
#define RIDDIM_VERSION_MAJOR 0
#define RIDDIM_VERSION_MINOR 8
 
// for config file parsing
#include <confuse.h>
#include <string.h>
#include "riddim_meta.h"
 
 
// for configuration file parsing
#include "config.h"
// for measuring
62,17 → 60,15
#include <unistd.h>//for close() for socket
 
 
int act_nick=0;
int act_roll=0;
int act_gier=0;
int act_gas=0;
int act_mode=0;
extern int act_nick;
extern int act_roll;
extern int act_gier;
extern int act_gas;
extern int act_mode;
 
int act_alt=0;
extern int act_alt;
extern long act_long_alt;
 
 
long act_long_alt=0;
 
#define FALSE 0
#define TRUE 1
 
/Riddim/riddim_meta.h
0,0 → 1,4
#define RIDDIM_VERSION_MAJOR 0
#define RIDDIM_VERSION_MINOR 9
#define RIDDIM_VERSION_PATCH 1
 
/Riddim/statistics.c
12,3 → 12,4
int version_sets=0;
 
unsigned long last_trip_time=0;
unsigned long trip_count=0;
/Riddim/statistics.h
10,4 → 10,5
extern int version_sets;
 
extern unsigned long last_trip_time;
extern unsigned long trip_count;