56 #ifdef CONF_AUTOSHUTOFF
93 static char lnp_buffer[260];
96 #if defined(CONF_RCX_PROTOCOL)
108 unsigned char lnp_rcx_temp0;
109 unsigned char lnp_rcx_temp1;
112 unsigned char lnp_rcx_checksum;
116 #if defined(CONF_RCX_MESSAGE)
131 #define lnp_checksum_init(sum) (unsigned char)((sum) = 0xff)
132 #define lnp_checksum_step(sum,d) (unsigned char)((sum) += (d))
136 const unsigned char *data,
139 unsigned char a = 0xff;
147 }
while (length > 0);
154 "_lnp_checksum_copy:\n"
155 ";; r0: dest, r1: data, r2: length;\n"
157 " add.w r0,r2 ; r2: end \n"
158 " mov.b #0xff,r3l ; r3l: a \n"
161 " mov.b @r1+,r3h ; r3h = *data++ \n"
162 " add.b r3h,r3l ; a += r3h \n"
163 " mov.b r3h,@r0 ; *dest++ = r3h \n"
180 char* buffer_ptr =
malloc(length+3);
182 char* buffer_ptr = lnp_buffer;
185 lnp_checksum_step( c, buffer_ptr[0]=0xf0 );
186 lnp_checksum_step( c, buffer_ptr[1]=length );
187 buffer_ptr[length+2] = c;
199 unsigned char dest,
unsigned char srcport) {
202 char* buffer_ptr =
malloc(length+5);
204 char* buffer_ptr = lnp_buffer;
207 lnp_checksum_step( c, buffer_ptr[0]=0xf1 );
208 lnp_checksum_step( c, buffer_ptr[1]=length+2 );
209 lnp_checksum_step( c, buffer_ptr[2]=dest );
210 lnp_checksum_step( c, buffer_ptr[3]=
212 buffer_ptr[length+4] = c;
221 void lnp_receive_packet(
const unsigned char *data) {
222 unsigned char header=*(data++);
223 unsigned char length=*(data++);
233 #ifdef CONF_AUTOSHUTOFF
242 unsigned char dest=*(data++);
248 unsigned char src=*(data++);
249 #ifdef CONF_AUTOSHUTOFF
252 addrh(data,length-2,src);
262 static unsigned char buffer[256+3];
263 static int bytesRead,endOfData;
264 static unsigned char chk;
269 buffer[bytesRead++]=b;
271 switch(lnp_integrity_state) {
275 if(((b & 0xf8) == 0xf0) || (b == 0x55)) {
284 #ifndef CONF_LCD_REFRESH
289 lnp_checksum_init( chk );
293 #if defined(CONF_RCX_PROTOCOL) || defined(CONF_RCX_MESSAGE)
311 if(bytesRead==endOfData)
317 lnp_receive_packet(buffer);
321 #if defined(CONF_RCX_PROTOCOL) || defined (CONF_RCX_MESSAGE)
326 if ( b == lnp_rcx_header[ lnp_integrity_state-
LNPwaitRMH1 ] )
334 if ( b == lnp_rcx_remote_op[ lnp_integrity_state-
LNPwaitRMH3 ] )
336 #if defined(CONF_RCX_MESSAGE)
337 else if ( b == lnp_rcx_msg_op[ lnp_integrity_state-
LNPwaitRMH3 ] )
350 if ( (
unsigned char)~b == lnp_rcx_temp0 )
362 if ( (
unsigned char)~b == lnp_rcx_temp1 )
369 lnp_rcx_checksum = 0xd2 + lnp_rcx_temp0 + lnp_rcx_temp1;
370 if ( b == lnp_rcx_checksum )
378 if ( b == (
unsigned char)~lnp_rcx_checksum) {
379 #if defined(CONF_RCX_MESSAGE)
381 if (lnp_rcx_temp1 & 0x07)
391 rmth( (lnp_rcx_temp0<<8)+lnp_rcx_temp1 );
399 #if defined(CONF_RCX_MESSAGE)
403 if ( b == lnp_rcx_msg_op[ lnp_integrity_state-
LNPwaitMH3 ] )
415 if ( (
unsigned char)~b == lnp_rcx_temp0 )
422 lnp_rcx_temp1 = 0xf7 + lnp_rcx_temp0;
424 if (b == lnp_rcx_temp1)
432 if ( (
unsigned char)~b == lnp_rcx_temp1 )
440 lnp_checksum_step( chk, b );
444 #if defined(CONF_RCX_COMPILER) || defined(CONF_HOST)
448 void lnp_integrity_reset_core(
void) {
462 #ifndef CONF_LCD_REFRESH
477 #if defined(CONF_RCX_COMPILER) || defined(CONF_HOST)
481 void lnp_timeout_reset_core(
void) {
503 #if defined(CONF_RCX_PROTOCOL)
506 #if defined(CONF_RCX_MESSAGE)
511 #ifdef CONF_RCX_MESSAGE
513 return (m == 0 ? lnp_rcx_message != 0 : lnp_rcx_message == m);
523 char* buffer_ptr =
malloc(9);
525 char* buffer_ptr = lnp_buffer;
533 buffer_ptr[6]=(
unsigned char) (0xff-msg);
534 buffer_ptr[7]=(
unsigned char) (0xf7+msg);
535 buffer_ptr[8]=(
unsigned char) (0x08-msg);