예제 #1
0
        private static void process_lin_data(ref bool p_error)
        {
            switch (m_raw_cbuf2_data_array[m_cb2_array_tag_index])
            {
            case 0x80:
                if ((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) < 2)
                {
                    m_we_need_next_packet_to_continue = true;
                    return;
                }
                m_cb2_array_tag_index += 2;
                return;

            case 0x81:
                if ((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) < 2)
                {
                    m_we_need_next_packet_to_continue = true;
                    return;
                }
                m_cb2_array_tag_index += 2;
                return;

            case 130:
                LIN.m_working_frame.BuildState.we_had_a_status_error = true;
                if (!LIN.m_working_frame.BuildState.we_timed_out)
                {
                    LIN.finalize_working_frame();
                    Device.Clear_Status_Errors();
                }
                if ((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) >= 2)
                {
                    m_cb2_array_tag_index += 2;
                    return;
                }
                m_we_need_next_packet_to_continue = true;
                return;

            case 0x83:
                if (!LIN.m_working_frame.BuildState.we_timed_out)
                {
                    if (LIN.m_working_frame.BuildState.we_are_building_a_frame)
                    {
                        LIN.m_working_frame.BuildState.next_frame_header_received = true;
                        LIN.finalize_working_frame();
                    }
                    LIN.m_working_frame.BuildState.we_are_building_a_frame = true;
                    m_grab_next_time_marker = true;
                    LIN.reset_LIN_timeout();
                }
                m_cb2_array_tag_index++;
                return;

            case 0x84:
                m_cb2_array_tag_index++;
                return;

            case 0x85:
                if (LIN.m_working_frame.BuildState.we_are_building_a_frame)
                {
                    LIN.m_working_frame.FrameInfo.baud = (ushort)(m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 1))] + (m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 2))] << 8));
                    if (LIN.m_use_baud_rate_timeout)
                    {
                        LIN.calculate_new_baud_dependent_onreceive_timeout(LIN.m_working_frame.FrameInfo.baud);
                    }
                }
                if ((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) >= 3)
                {
                    m_cb2_array_tag_index += 3;
                    return;
                }
                m_we_need_next_packet_to_continue = true;
                return;

            case 0x86:
                if ((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) < 2)
                {
                    m_we_need_next_packet_to_continue = true;
                    return;
                }
                m_cb2_array_tag_index += 2;
                return;

            case 0x87:
                if ((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) < 2)
                {
                    m_we_need_next_packet_to_continue = true;
                    return;
                }
                m_cb2_array_tag_index += 2;
                return;

            case 0x88:
                LIN.m_slave_profile_id.FrameID   = m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 1))];
                LIN.m_slave_profile_id.ByteCount = m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 2))];
                for (int i = 0; i < LIN.m_slave_profile_id.ByteCount; i++)
                {
                    LIN.m_slave_profile_id.Data[i] = m_raw_cbuf2_data_array[(int)((IntPtr)((m_cb2_array_tag_index + 3) + i))];
                }
                m_cb2_array_tag_index += (uint)(m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 2))] + 3);
                LIN.m_slave_profile_id_read.Set();
                return;
            }
            p_error = true;
        }
예제 #2
0
        private static void process_common_data(ref bool p_error)
        {
            switch (m_raw_cbuf2_data_array[m_cb2_array_tag_index])
            {
            case 0x10:
            case 0x12:
            case 0x1a:
            case 0x1c:
                if ((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) < 2)
                {
                    m_we_need_next_packet_to_continue = true;
                    return;
                }
                switch (m_raw_cbuf2_data_array[m_cb2_array_tag_index])
                {
                case 0x10:
                    add_data_to_cbuf2_data_array(ref m_raw_cbuf2_data_array, m_cb2_array_tag_index + 1, 1);
                    if (((Utilities.g_comm_mode == Utilities.COMM_MODE.LIN) && !LIN.m_working_frame.BuildState.we_timed_out) && LIN.m_working_frame.BuildState.we_are_building_a_frame)
                    {
                        if (!LIN.m_working_frame.BuildState.we_have_an_id)
                        {
                            LIN.m_working_frame.FrameInfo.FrameID        = m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 1))];
                            LIN.m_working_frame.BuildState.we_have_an_id = true;
                        }
                        else
                        {
                            if (LIN.m_working_frame.FrameInfo.bytecount < 9)
                            {
                                byte num4;
                                LIN.m_working_frame.FrameInfo.bytecount       = (byte)((num4 = LIN.m_working_frame.FrameInfo.bytecount) + 1);
                                LIN.m_working_frame.FrameInfo.FrameData[num4] = m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 1))];
                            }
                            if (LIN.m_working_frame.FrameInfo.bytecount == 9)
                            {
                                LIN.finalize_working_frame();
                            }
                        }
                    }
                    goto Label_01C3;

                case 0x1c:
                    if (m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 1))] == 0x77)
                    {
                        Utilities.m_flags.g_PKSA_has_completed_script.Set();
                    }
                    goto Label_01C3;
                }
                break;

            case 0x11:
                if (((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) - 2) < m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 1))])
                {
                    m_we_need_next_packet_to_continue = true;
                    return;
                }
                add_data_to_cbuf2_data_array(ref m_raw_cbuf2_data_array, m_cb2_array_tag_index + 2, m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 1))]);
                m_cb2_array_tag_index += (uint)(2 + m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 1))]);
                return;

            case 0x13:
                if ((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) < 3)
                {
                    m_we_need_next_packet_to_continue = true;
                    return;
                }
                if (((Utilities.g_comm_mode == Utilities.COMM_MODE.LIN) && LIN.m_working_frame.BuildState.we_are_building_a_frame) && m_grab_next_time_marker)
                {
                    double num = ((m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 2))] << 8) + m_raw_cbuf2_data_array[(int)((IntPtr)(m_cb2_array_tag_index + 1))]) * m_EVENT_TIME_CONSTANT;
                    m_RUNNING_TIME = m_EVENT_TIME_ROLLOVER + num;
                    LIN.m_working_frame.FrameInfo.time = m_RUNNING_TIME;
                    m_grab_next_time_marker            = false;
                }
                m_cb2_array_tag_index += 3;
                return;

            case 20:
                m_EVENT_TIME_ROLLOVER += m_EVENT_TIME_ROLLOVER_CONSTANT;
                m_cb2_array_tag_index++;
                return;

            case 0x15:
                if ((m_raw_cbuf2_data_array_index - m_cb2_array_tag_index) < 3)
                {
                    m_we_need_next_packet_to_continue = true;
                    return;
                }
                m_cb2_array_tag_index += 3;
                return;

            case 0x16:
                m_cb2_array_tag_index++;
                return;

            case 0x17:
                m_cb2_array_tag_index++;
                return;

            case 0x18:
                m_cb2_array_tag_index++;
                return;

            case 0x19:
                m_cb2_array_tag_index++;
                return;

            case 0x1b:
                m_cb2_array_tag_index++;
                return;

            default:
                p_error = true;
                return;
            }
Label_01C3:
            m_cb2_array_tag_index += 2;
        }