Rev 130 |
Blame |
Last modification |
View Log
| RSS feed
#include "fc.h"
unsigned char TxBuffer
[150];
unsigned char _TxBuffer
[150];
unsigned char RxBuffer
[150];
char PrintableRxBuffer
[150];
int mk_socket
;
int status
;
void AddCRC
(unsigned int wieviele
)
{
unsigned int tmpCRC
= 0,i
;
for(i
= 0; i
< wieviele
;i
++)
{
tmpCRC
+= TxBuffer
[i
];
}
tmpCRC
%= 4096;
TxBuffer
[i
++] = '=' + tmpCRC
/ 64;
TxBuffer
[i
++] = '=' + tmpCRC
% 64;
TxBuffer
[i
++] = '\r';
}
void SendOutData
(unsigned char cmd
,unsigned char modul
, unsigned char *snd
, unsigned char len
)
{
int status
=0;
unsigned int pt
= 0;
unsigned char a
,b
,c
;
unsigned char ptr
= 0;
TxBuffer
[pt
++] = '#'; // Startzeichen
TxBuffer
[pt
++] = modul
; // Adresse (a=0; b=1,...)
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;
TxBuffer
[pt
++] = '=' + (a
>> 2);
TxBuffer
[pt
++] = '=' + (((a
& 0x03) << 4) | ((b
& 0xf0) >> 4));
TxBuffer
[pt
++] = '=' + (((b
& 0x0f) << 2) | ((c
& 0xc0) >> 6));
TxBuffer
[pt
++] = '=' + ( c
& 0x3f);
}
AddCRC
(pt
);
printf("Sending to MK %d \n" , pt
);
status
= send
(mk_socket
,"\r" , 1, 0);
// for (c=0;c<pt+2;c++)
// {
status
= write
(mk_socket
,&TxBuffer
, pt
+3);
// printf("Send to MK %d \n" , TxBuffer[c] );
// }
/* int i=0;
while(TxBuffer[i] !='\r' && i<150)
{
// TxBuffer[i]='#';
status = send(mk_socket,TxBuffer[i] , 1, 0);
printf(" +%d%c ",i,TxBuffer[i]);
i++;
}
// status = send(s,"\r" , 1, 0);
*/
status
= send
(mk_socket
,"\r" , 1, 0);
status
= send
(mk_socket
,"\n" , 1, 0);
printf("\n");
}
int rx_last_length
;
void Decode64
(unsigned char *ptrOut
, unsigned char len
, unsigned char ptrIn
,unsigned char max
)
{
unsigned char a
,b
,c
,d
;
unsigned char ptr
= 0;
unsigned char x
,y
,z
;
while(len
)
{
a
= RxBuffer
[ptrIn
++] - '=';
b
= RxBuffer
[ptrIn
++] - '=';
c
= RxBuffer
[ptrIn
++] - '=';
d
= RxBuffer
[ptrIn
++] - '=';
if(ptrIn
> max
- 2) break;
x
= (a
<< 2) | (b
>> 4);
y
= ((b
& 0x0f) << 4) | (c
>> 2);
z
= ((c
& 0x03) << 6) | d
;
if(len
--) ptrOut
[ptr
++] = x
; else break;
if(len
--) ptrOut
[ptr
++] = y
; else break;
if(len
--) ptrOut
[ptr
++] = z
; else break;
}
}
int read_from_mk
()
{
char in_char
='#';
int count
=0;
int r
=0;
int i
=0;
printf("starting read\n");
while(in_char
!='\n')
{
// printf("b read\n");
count
=read
(mk_socket
,&in_char
,1);
//printf("a read %d\n",count);
if (count
!=-1)
{
// printf("%c\n",in_char);
RxBuffer
[r
]=in_char
;
if (in_char
!=0)
PrintableRxBuffer
[r
++]=in_char
;
else
PrintableRxBuffer
[r
++]='0';
}
}
rx_last_length
=r
;
PrintableRxBuffer
[r
++]='\0'; // terminate
printf("done --->%s\n",PrintableRxBuffer
);
if (RxBuffer
[2]=='D')
{
debug_sets
++;
Decode64
((unsigned char *) &DebugOut
,sizeof(DebugOut
),3,rx_last_length
);
printf("decoded FC Debug data height:%d\n",DebugOut.
Analog[5]);
}
return 1;
}
int connect_mk_bluetooth
(char dest
[18])
{
struct sockaddr_rc addr
;
// allocate a socket
mk_socket
= socket
(AF_BLUETOOTH
, SOCK_STREAM
, BTPROTO_RFCOMM
);
// set the connection parameters (who to connect to)
addr.
rc_family = AF_BLUETOOTH
;
addr.
rc_channel = 1;
str2ba
( dest
, &addr.
rc_bdaddr );
// connect to server
status
= connect
(mk_socket
, (struct sockaddr
*)&addr
, sizeof(addr
));
printf("connection status %d\n",status
);
return status
;
}
int connect_mk_localhost_socket
(int port
)
{
int status
;
struct sockaddr_in sa
;
sa.
sin_family = AF_INET
;
sa.
sin_addr.
s_addr = htonl
(0x0);
sa.
sin_port = htons
(port
);
// allocate a socket
// s = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
mk_socket
= socket
(PF_INET
, SOCK_STREAM
, IPPROTO_TCP
);
//);
// set the connection parameters (who to connect to)
// connect to server
// status = connect(s, (struct sockaddr *)&addr, sizeof(addr));
status
= connect
(mk_socket
,(struct sockaddr
*) &sa
, sizeof(struct sockaddr_in
));
printf("connection status %d\n",status
);
return status
;
}