internal static void initialize_LIN_frames() { LIN.m_stopwatch = new Stopwatch(); LIN.m_opmode = LIN.OPMODE.LISTEN; LIN.m_working_frame.FrameInfo.FrameData = new byte[9]; LIN.reset_working_frame(); LIN.Reset_LIN_Frame_Buffers(); LIN.m_FrameStartTimer = new Timer(new TimerCallback(LIN.frame_has_timed_out), null, -1, -1); LIN.m_working_frame.BuildState.we_have_transmitted = false; LIN.m_working_frame.BuildState.transmit_data_byte_count_zero = false; LIN.m_working_frame_is_done = new AutoResetEvent(false); LIN.m_slave_profile_id_read = new AutoResetEvent(false); LIN.m_slave_profile_id.ByteCount = 0; LIN.m_slave_profile_id.FrameID = 0; LIN.m_slave_profile_id.Data = new byte[255]; }
private static void finish_this_frame() { LIN.m_we_are_finishing_a_frame = true; LIN.m_working_frame.BuildState.we_are_building_a_frame = false; LIN.m_FrameStartTimer.Change(-1, -1); bool flag = false; if (LIN.this_is_a_valid_frame()) { if (LIN.m_next_frame_is_first_frame) { LIN.m_working_frame.FrameInfo.time = 0.0; LIN.m_next_frame_is_first_frame = false; flag = !USBRead.reset_timer_params(); } if (LIN.m_working_frame.FrameInfo.baud != 0) { LIN.m_working_frame.FrameInfo.baud = LIN.calculate_baud_rate(LIN.m_working_frame.FrameInfo.baud); } else { LIN.m_working_frame.FrameInfo.baud = LIN.m_last_master_baud_rate; } LIN.m_OnReceive_error = 0; uint num = 0u; if (Status.There_Is_A_Status_Error(ref num)) { LIN.m_OnReceive_error = 4; Device.Clear_Status_Errors(); } if (LIN.m_OnReceive_error == 0 && LIN.m_working_frame.BuildState.we_had_a_status_error) { LIN.m_OnReceive_error = 5; } else if (LIN.m_working_frame.BuildState.we_timed_out) { LIN.m_OnReceive_error = 1; } else if (flag) { LIN.m_OnReceive_error = 3; } else if (LIN.m_working_frame.BuildState.next_frame_header_received) { LIN.m_OnReceive_error = 6; } if ((LIN.this_frame_is_different_than_last() && LIN.m_opmode == LIN.OPMODE.LISTEN) || LIN.m_opmode == LIN.OPMODE.DISPLAY_ALL) { if (LIN.m_working_frame.BuildState.we_have_transmitted && LIN.m_working_frame.BuildState.transmit_data_byte_count_zero) { OnAnswer(LIN.m_working_frame.FrameInfo.FrameID, LIN.m_working_frame.FrameInfo.FrameData, LIN.m_working_frame.FrameInfo.bytecount, LIN.m_OnReceive_error, LIN.m_working_frame.FrameInfo.baud, LIN.m_working_frame.FrameInfo.time); } else if ((!LIN.m_working_frame.BuildState.we_have_transmitted || !LIN.m_working_frame.BuildState.transmit_data_byte_count_zero) && LIN.OnReceive != null) { if (LIN.m_OnReceive_error == 6) { LIN.m_OnReceive_error = 0; } OnReceive(LIN.m_working_frame.FrameInfo.FrameID, LIN.m_working_frame.FrameInfo.FrameData, LIN.m_working_frame.FrameInfo.bytecount, LIN.m_OnReceive_error, LIN.m_working_frame.FrameInfo.baud, LIN.m_working_frame.FrameInfo.time); } } LIN.copy_this_frame_into_array(); } LIN.reset_working_frame(); LIN.m_working_frame_is_done.Set(); LIN.m_we_are_finishing_a_frame = false; }