게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
혹시 패킷 프로그래밍에 대해서 질문 드려도 될까요?
게시물ID : it_1248짧은주소 복사하기
작성자 : 유한요소법
추천 : 0
조회수 : 483회
댓글수 : 1개
등록시간 : 2014/05/18 23:48:46
옵션
  • 베스트금지
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용 펌웨어 안에 있는
패킷 수신수 입니다.
이 함수에 맞춰서 패킷을 보내고 싶은데,
어떻게 보내야할 지 모르겠네요. ;ㅂ;
혹시 알려주실 수 있는 분 계실련지요 ㅠㅠ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호