void uart1_packet_recv(u8 data)
{
static unsigned char index =0;
static u8 packet_size =0,checksum=0;;
// recv data all buffer save
if((index==0)&&(data == 'F'))
{
DEBUG_RX_buf[index]= data;
index=1;
checksum=0;
}
else if((index==1)&&(data =='C'))
{
DEBUG_RX_buf[index]= data;
index=2;
checksum=0;
}
else if(index == 2)
{
DEBUG_RX_buf[index]= data;
index =3;
checksum^=data;
switch (data)
{
case FLIGHT_INFO :
break;
case OSD_INFO:
break;
case GPS_CONTROL_INFO :
break;
case VERSION_INFO:
break;
case REQUEST:
break;
case WAYPOINT:
break;
case PC_CONTROL:
packet_size = sizeof(PC_control)+2;
Uart1_putchar(packet_size);
break;
default : index = 0; packet_size =0;
}
}
else if(index <packet_size)
{
DEBUG_RX_buf[index]= data;
index++;
checksum^=data;
}
else if(index==packet_size)
{
DEBUG_RX_buf[index]= data;
checksum^=data;
Uart1_putchar(checksum);
if(checksum==0)
{
switch(DEBUG_RX_buf[2])
{
case FLIGHT_INFO :
break;
case GPS_CONTROL_INFO:
break;
case OSD_INFO:
break;
case OPTION1_INFO :
break;
case VERSION_INFO :
break;
case REQUEST:
asm("nop");
break;
case WAYPOINT:
break;
case PC_CONTROL :
Uart1_putchar('o');
Uart1_putchar('k');
memcpy((uint8_t *)(&PC_control.label), (uint8_t *)&DEBUG_RX_buf[2],sizeof(PC_control));
Uart_CTRL_timer = 5000;
RX_ail = PC_control.roll;
RX_ele = PC_control.pitch;
RX_thr = PC_control.thr;
RX_rud = PC_control.yaw;
break;
default : break;
}
}
packet_size=0;
index =0;
memset((uint8_t *)&DEBUG_RX_buf,0,sizeof(DEBUG_RX_buf));
}
}
해당 코드는 FLYCAM에서 제작한 멀티위 기반 Black32의 서브 MCU용 펌웨어 안에 있는
패킷 수신수 입니다.
이 함수에 맞춰서 패킷을 보내고 싶은데,
어떻게 보내야할 지 모르겠네요. ;ㅂ;
혹시 알려주실 수 있는 분 계실련지요 ㅠㅠ
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.