суть такая.. есть 2 устройства с UART , я в разрыв вставляю Дисковери и хочу что бы все данные которые шли от устр1 шли без оработки к устр2 ,
а данные от устр2 заходили на Дисковери и если пакет данных соответсвует условию.. то посылались б другие , а если нет .. то также просзрачно слались бы..
или натолкните на правильный пример ..
CODE
#include "main.h"
uint16_t delay_count=0;
uint8_t Mode=0;
uint16_t Mode_count=0;
uint8_t Mode_new=0;
uint8_t Button_count=0;
uint8_t Button_state=0;
char GetData10[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xD3,0xDF};
char DataOtvet1[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0x1A};
char GetData20[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x2e,0x92};
char DataOtvet2[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x01,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0xC0,0x2F,0x00,0x00,0x00,0x00,0xAA,0x5B};
char GetData30[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x29,0x44};
char DataOtvet3[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x02,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0xAC};
char GetData40[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xD4,0x09};
char DataOtvet4[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x03,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0xC0,0x2F,0x00,0x00,0x00,0x00,0x17,0xED};
char GetData50[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xA8,0x8E};
char DataOtvet5[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0x1A};
char GetData21[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x55,0xc3};
char GetData60[] = {0x55,0x0D,0x04,0x33,0x03,0x0c,0x01,0x00,0x40,0x00,0x01,0xC3,0x41};
char DataOtvet6[] = {0x55,0x2B,0x04,0x58,0x0c,0x03,0x01,0x00,0xc0,0x00,0x01,0x00,0x10,0x58,0x43,0x4f
,0x52,0x45,0x5f,0x45,0x53,0x43,0x5f,0x56,0x78,0x00,0x00,0x00,0x00,0x02,0x02,0x00
,
0x01,0x00,0x00,0x0a,0x01,0xad,0x9f,0x01,0x04,0x4d,0x8c};
char GetData70[] = {0x55,0x0D,0x04,0x33,0x03,0x2c,0x02,0x00,0x40,0x00,0x01,0x6f,0xd9};
char DataOtvet7[] = {0x55,0x2B,0x04,0x58,0x2c,0x03,0x02,0x00,0xc0,0x00,0x01,0x00,0x10,0x58,0x43,0x4f
,0x52,0x45,0x5f,0x45,0x53,0x43,0x5f,0x56,0x78,0x00,0x00,0x00,0x00,0x02,0x02,0x00
,
0x01,0x00,0x00,0x0a,0x01,0xbe,0x59,0x01,0x04,0xae,0x53};
char GetData80[] = {0x55,0x0D,0x04,0x33,0x03,0x4c,0x03,0x00,0x40,0x00,0x01,0x9a,0x55};
char DataOtvet8[] = {0x55,0x2B,0x04,0x58,0x4c,0x03,0x03,0x00,0xc0,0x00,0x01,0x00,0x10,0x58,0x43,0x4f
,0x52,0x45,0x5f,0x45,0x53,0x43,0x5f,0x56,0x78,0x00,0x00,0x00,0x00,0x02,0x02,0x00
,
0x01,0x00,0x00,0x0a,0x01,0xc1,0xe2,0x01,0x04,0x57,0x0a};
char GetData90[] = {0x55,0x0D,0x04,0x33,0x03,0x6c,0x04,0x00,0x40,0x00,0x01,0x26,0xe0};
char DataOtvet9[] = {0x55,0x2B,0x04,0x58,0x6c,0x03,0x04,0x00,0xc0,0x00,0x01,0x00,0x10,0x58,0x43,0x4f
,0x52,0x45,0x5f,0x45,0x53,0x43,0x5f,0x56,0x78,0x00,0x00,0x00,0x00,0x02,0x02,0x00
,
0x01,0x00,0x00,0x0a,0x01,0xdb,0x38,0x01,0x04,0x05,0x38};
char GetData11[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xa8,0x8e};
char GetData31[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x52,0x15};
char GetData41[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xaf,0x58};
struct CMsg
{
char * In;
char * Out;
int SizeIn;
int SizeOut;
};
void Init ( struct CMsg * msg , char * in, int size_in, char * out, int size_out )
{
msg -> In = in;
msg -> Out = out;
msg -> SizeIn = size_in;
msg -> SizeOut = size_out;
}
struct CMsg Messages [ 13 ];
//----------------------------------------------
//
//----------------------------------------------
void SysTick_Handler(void)//1ms
{
}
//----------------------------------------------
//
//----------------------------------------------
void delay_ms(uint16_t delay_temp)
{
delay_count = delay_temp;
while(delay_count){}
}
//----------------------------------------------
//
//----------------------------------------------
void SendStrtoPC(char* str_p, uint16_t count)
{
uint16_t i=0;
while(i < count)
{
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET){}
USART_SendData(USART2, str_p[i]);
i++;
}
}
char ReadByte (void )
{
while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET){}
return USART_ReceiveData ( USART2 );
}
void loop() {
char cur;
char msg_len;
char Buffer [ 256 ];
int i = 0 ,j=0, Valid;
do
{
cur = ReadByte ();
Buffer [ 0 ] = cur;
}
while ( cur != 0x55);
msg_len = ReadByte ();
Buffer [ 0 ] = 0x55;
Buffer [ 1 ] = msg_len;
for ( i = 2; i != msg_len; ++i )
{
Buffer [ i ] = ReadByte ();
}
for ( i = 0; i != sizeof ( Messages ) / sizeof ( struct CMsg); ++i )
{
if ( Messages [ i ].SizeIn != msg_len )
continue;
Valid = 1;
for ( j = 0; j != msg_len; ++j )
{
if ( Messages [ i ].In [ j ] != Buffer [ j ] )
{
Valid = 0;
break;
}
}
if ( Valid )
{
for ( j = 0; j != Messages [ i ].SizeOut; ++j )
{
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
{}
USART_SendData(USART2, Messages [ i ].Out [ j ] );
}
return; // reply sent
}
}
}
int main(void)
{
Init ( &Messages [0], GetData10, sizeof (GetData10), DataOtvet1, sizeof (DataOtvet1) );
Init ( &Messages [1], GetData11, sizeof (GetData11), DataOtvet1, sizeof (DataOtvet1) );
Init ( &Messages [2], GetData20, sizeof (GetData20), DataOtvet2, sizeof (DataOtvet2) );
Init ( &Messages [3], GetData21, sizeof (GetData21), DataOtvet2, sizeof (DataOtvet2) );
Init ( &Messages [4], GetData30, sizeof (GetData30), DataOtvet3, sizeof (DataOtvet3) );
Init ( &Messages [5], GetData31, sizeof (GetData31), DataOtvet3, sizeof (DataOtvet3) );
Init ( &Messages [6], GetData40, sizeof (GetData40), DataOtvet4, sizeof (DataOtvet4) );
Init ( &Messages [7], GetData41, sizeof (GetData41), DataOtvet4, sizeof (DataOtvet4) );
Init ( &Messages [8], GetData50, sizeof (GetData50), DataOtvet5, sizeof (DataOtvet5) );
Init ( &Messages [9], GetData60, sizeof (GetData60), DataOtvet6, sizeof (DataOtvet6) );
Init ( &Messages [10], GetData70, sizeof (GetData70), DataOtvet7, sizeof (DataOtvet7) );
Init ( &Messages [11], GetData80, sizeof (GetData80), DataOtvet8, sizeof (DataOtvet8) );
Init ( &Messages [12], GetData90, sizeof (GetData90), DataOtvet9, sizeof (DataOtvet9) );
SysTick_Config(SystemCoreClock/1000);//1 ms
USART2_ini();
while(1)
{
loop ();
}
}
uint16_t delay_count=0;
uint8_t Mode=0;
uint16_t Mode_count=0;
uint8_t Mode_new=0;
uint8_t Button_count=0;
uint8_t Button_state=0;
char GetData10[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xD3,0xDF};
char DataOtvet1[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0x1A};
char GetData20[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x2e,0x92};
char DataOtvet2[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x01,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0xC0,0x2F,0x00,0x00,0x00,0x00,0xAA,0x5B};
char GetData30[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x29,0x44};
char DataOtvet3[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x02,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0xAC};
char GetData40[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xD4,0x09};
char DataOtvet4[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x03,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0xC0,0x2F,0x00,0x00,0x00,0x00,0x17,0xED};
char GetData50[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xA8,0x8E};
char DataOtvet5[] = {0x55,0x1C,0x00,0x7A,0xA0,0x01,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAB,0x1A};
char GetData21[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x55,0xc3};
char GetData60[] = {0x55,0x0D,0x04,0x33,0x03,0x0c,0x01,0x00,0x40,0x00,0x01,0xC3,0x41};
char DataOtvet6[] = {0x55,0x2B,0x04,0x58,0x0c,0x03,0x01,0x00,0xc0,0x00,0x01,0x00,0x10,0x58,0x43,0x4f
,0x52,0x45,0x5f,0x45,0x53,0x43,0x5f,0x56,0x78,0x00,0x00,0x00,0x00,0x02,0x02,0x00
,
0x01,0x00,0x00,0x0a,0x01,0xad,0x9f,0x01,0x04,0x4d,0x8c};
char GetData70[] = {0x55,0x0D,0x04,0x33,0x03,0x2c,0x02,0x00,0x40,0x00,0x01,0x6f,0xd9};
char DataOtvet7[] = {0x55,0x2B,0x04,0x58,0x2c,0x03,0x02,0x00,0xc0,0x00,0x01,0x00,0x10,0x58,0x43,0x4f
,0x52,0x45,0x5f,0x45,0x53,0x43,0x5f,0x56,0x78,0x00,0x00,0x00,0x00,0x02,0x02,0x00
,
0x01,0x00,0x00,0x0a,0x01,0xbe,0x59,0x01,0x04,0xae,0x53};
char GetData80[] = {0x55,0x0D,0x04,0x33,0x03,0x4c,0x03,0x00,0x40,0x00,0x01,0x9a,0x55};
char DataOtvet8[] = {0x55,0x2B,0x04,0x58,0x4c,0x03,0x03,0x00,0xc0,0x00,0x01,0x00,0x10,0x58,0x43,0x4f
,0x52,0x45,0x5f,0x45,0x53,0x43,0x5f,0x56,0x78,0x00,0x00,0x00,0x00,0x02,0x02,0x00
,
0x01,0x00,0x00,0x0a,0x01,0xc1,0xe2,0x01,0x04,0x57,0x0a};
char GetData90[] = {0x55,0x0D,0x04,0x33,0x03,0x6c,0x04,0x00,0x40,0x00,0x01,0x26,0xe0};
char DataOtvet9[] = {0x55,0x2B,0x04,0x58,0x6c,0x03,0x04,0x00,0xc0,0x00,0x01,0x00,0x10,0x58,0x43,0x4f
,0x52,0x45,0x5f,0x45,0x53,0x43,0x5f,0x56,0x78,0x00,0x00,0x00,0x00,0x02,0x02,0x00
,
0x01,0x00,0x00,0x0a,0x01,0xdb,0x38,0x01,0x04,0x05,0x38};
char GetData11[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x40,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xa8,0x8e};
char GetData31[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0x52,0x15};
char GetData41[] = {0x55,0x12,0x00,0xA6,0xA0,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
,0xaf,0x58};
struct CMsg
{
char * In;
char * Out;
int SizeIn;
int SizeOut;
};
void Init ( struct CMsg * msg , char * in, int size_in, char * out, int size_out )
{
msg -> In = in;
msg -> Out = out;
msg -> SizeIn = size_in;
msg -> SizeOut = size_out;
}
struct CMsg Messages [ 13 ];
//----------------------------------------------
//
//----------------------------------------------
void SysTick_Handler(void)//1ms
{
}
//----------------------------------------------
//
//----------------------------------------------
void delay_ms(uint16_t delay_temp)
{
delay_count = delay_temp;
while(delay_count){}
}
//----------------------------------------------
//
//----------------------------------------------
void SendStrtoPC(char* str_p, uint16_t count)
{
uint16_t i=0;
while(i < count)
{
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET){}
USART_SendData(USART2, str_p[i]);
i++;
}
}
char ReadByte (void )
{
while(USART_GetFlagStatus(USART2, USART_FLAG_RXNE) == RESET){}
return USART_ReceiveData ( USART2 );
}
void loop() {
char cur;
char msg_len;
char Buffer [ 256 ];
int i = 0 ,j=0, Valid;
do
{
cur = ReadByte ();
Buffer [ 0 ] = cur;
}
while ( cur != 0x55);
msg_len = ReadByte ();
Buffer [ 0 ] = 0x55;
Buffer [ 1 ] = msg_len;
for ( i = 2; i != msg_len; ++i )
{
Buffer [ i ] = ReadByte ();
}
for ( i = 0; i != sizeof ( Messages ) / sizeof ( struct CMsg); ++i )
{
if ( Messages [ i ].SizeIn != msg_len )
continue;
Valid = 1;
for ( j = 0; j != msg_len; ++j )
{
if ( Messages [ i ].In [ j ] != Buffer [ j ] )
{
Valid = 0;
break;
}
}
if ( Valid )
{
for ( j = 0; j != Messages [ i ].SizeOut; ++j )
{
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
{}
USART_SendData(USART2, Messages [ i ].Out [ j ] );
}
return; // reply sent
}
}
}
int main(void)
{
Init ( &Messages [0], GetData10, sizeof (GetData10), DataOtvet1, sizeof (DataOtvet1) );
Init ( &Messages [1], GetData11, sizeof (GetData11), DataOtvet1, sizeof (DataOtvet1) );
Init ( &Messages [2], GetData20, sizeof (GetData20), DataOtvet2, sizeof (DataOtvet2) );
Init ( &Messages [3], GetData21, sizeof (GetData21), DataOtvet2, sizeof (DataOtvet2) );
Init ( &Messages [4], GetData30, sizeof (GetData30), DataOtvet3, sizeof (DataOtvet3) );
Init ( &Messages [5], GetData31, sizeof (GetData31), DataOtvet3, sizeof (DataOtvet3) );
Init ( &Messages [6], GetData40, sizeof (GetData40), DataOtvet4, sizeof (DataOtvet4) );
Init ( &Messages [7], GetData41, sizeof (GetData41), DataOtvet4, sizeof (DataOtvet4) );
Init ( &Messages [8], GetData50, sizeof (GetData50), DataOtvet5, sizeof (DataOtvet5) );
Init ( &Messages [9], GetData60, sizeof (GetData60), DataOtvet6, sizeof (DataOtvet6) );
Init ( &Messages [10], GetData70, sizeof (GetData70), DataOtvet7, sizeof (DataOtvet7) );
Init ( &Messages [11], GetData80, sizeof (GetData80), DataOtvet8, sizeof (DataOtvet8) );
Init ( &Messages [12], GetData90, sizeof (GetData90), DataOtvet9, sizeof (DataOtvet9) );
SysTick_Config(SystemCoreClock/1000);//1 ms
USART2_ini();
while(1)
{
loop ();
}
}
это код когда есть только устр1 и дисковери .. устр1 шлет пакеты, дисковери смотрит если находит у себя в списке похожий то выдает ответ, если не находит то молчит.