Пример #1
0
        /*******************************************************************************
        * Name           : PKB_rxCharEvent
        * -----------------------------------------------------------------------------
        * Input          : dd - received character
        * Output         : fills 'Rxwrite' with 'length' to 'Data' frame's fields
        * Returned Value : none
        * Description    : Callback function called by L1 at any character receiving
        *******************************************************************************/
        void PKB_rxCharEvent( byte p_rxChar )
        {
            switch( PKB_rxState )
            {
                case PKB_RX_FSM_STATE.PKB_RX_IDLE:
                    byteCount = 0;
                    packetLength = 0;
                    packetAndCrcLength = 0;

                    if( p_rxChar == PKB_PREAMBLE_FF )
                    {
                        PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_PREAMBLE_FF;
                    }

                break;

                case PKB_RX_FSM_STATE.PKB_RX_PREAMBLE_FF:
                    if( p_rxChar == SS_SOP_RP30 )
                    {
                        crcAccumulator = 0x5a5a;
                        PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_START_OF_PACKET;
                        PKB_rxBuffer[byteCount] = p_rxChar;
                        byteCount++;
                    }
                    else
                    {
                        PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_IDLE;
                    }

                break;

                case PKB_RX_FSM_STATE.PKB_RX_START_OF_PACKET:
                    ///@Note (Kien ##): Start Timer for frame
                    // CTRL_timerStart( PKB_RX_TIMER );
                    Start_Snif_Timer(PKB_MAX_RX_DELAY);
                    PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_RECEIVING;
                    PKB_rxBuffer[byteCount] = p_rxChar;
                    byteCount++;

                    // The packet len is calculated from the len field in air + 1
                    packetLength = ((0x7F)&(p_rxChar)) + 1;  //TODO: usare la maschera per prendere la len

                    // We have to add 2 bytes to the packet len
                    packetAndCrcLength = packetLength + 2;

                    if( (packetAndCrcLength > PK_MAX_BUFFER_LEN) || (packetAndCrcLength < PK_MIN_LEN) )
                    {
                        PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_IDLE;
                        ///@NOTE (Kien ##): stop Timer for frame
                        // CTRL_timerStop( PKB_RX_TIMER );
                        Stop_Snif_Timer();
                    }
                    else
                    {
                        PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_RECEIVING;
                    }

                break;

                case PKB_RX_FSM_STATE.PKB_RX_RECEIVING:
                    PKB_rxBuffer[byteCount] = p_rxChar;
                    byteCount++;
                    if( byteCount == packetLength )
                    {
                        PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_CRC;
                    }
                    break;

                case PKB_RX_FSM_STATE.PKB_RX_CRC:

                    ///@NOTE (Kien ##): Check CRC
                    // CRC_ACCUM(crcAccumulator,p_rxChar);
                    crcAccumulator = Get_CRC(PKB_rxBuffer, byteCount);
                    byteCount++;

                    if( byteCount == packetAndCrcLength )
                    {
                        PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_IDLE;
                        byteCount = 0;
                        packetLength = 0;
                        packetAndCrcLength = 0;
                        L2_rxCheckPacket( PKB_rxBuffer,crcAccumulator );        //@NOTE Kien(2.0): SS2.0 call L2 check frame
                        ///@NOTE (Kien ##): Stop Timer for frame
                        // CTRL_timerStop( PKB_RX_TIMER );
                        Stop_Snif_Timer();
                    }

                    break;
                default:
                    PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_IDLE;
                    break;

            }
        }
Пример #2
0
 private void PKB_rxTimer(object sender, EventArgs e)
 {
     PKB_rxState = PKB_RX_FSM_STATE.PKB_RX_IDLE;
 }