public static bool Send_Data_Packet_To_PICkitS(ref byte[] p_data) { bool result = true; lock (USBWrite.m_priv_write_buffer_lock) { if (USBWrite.m_we_are_in_write_loop && (Utilities.m_flags.HID_DeviceReady != false)) { for (int i = 0; i < Utilities.m_flags.write_buffer.Length; i++) { Utilities.m_flags.write_buffer[i] = p_data[i]; } USBWrite.m_ready_to_write_event.Set(); if (!USBWrite.m_have_written_event.WaitOne(3000, false)) { issue_Tell_Host_PKSA_Needs_Reset(); } if (USBWrite.There_Was_A_Write_Error()) { result = false; } } else { string.Format("Error writing to USB device", new object[0]); result = false; } } return(result); }
public static bool Send_Script_To_PICkitS(ref byte[] p_send_byte_array) { bool result; lock (USBWrite.m_priv_write_script_lock) { USBWrite.m_data_buffer_is_empty = false; bool flag = false; uint num = 0u; uint num2 = (uint)p_send_byte_array[2]; byte[] array = new byte[65]; USBWrite.m_last_script_array_mutex.WaitOne(); USBWrite.m_last_script_array_byte_count = (byte)(num2 + 2u); Array.Clear(USBWrite.m_last_script_array, 0, USBWrite.m_last_script_array.Length); for (int i = 0; i < (int)USBWrite.m_last_script_array_byte_count; i++) { USBWrite.m_last_script_array[i] = p_send_byte_array[i + 1]; } Utilities.m_flags.g_PKSA_has_completed_script.Reset(); USBWrite.m_last_script_array_mutex.ReleaseMutex(); uint num3 = num2 / 62u; byte b = (byte)(num2 % 62u); if (b != 0) { num3 += 1u; } int num4 = 0; while ((long)num4 < (long)((ulong)num3)) { Array.Clear(array, 0, array.Length); array[0] = p_send_byte_array[0]; array[1] = p_send_byte_array[1]; uint num5; uint num6; if (num3 != 1u) { num5 = 3u; if ((long)num4 == (long)((ulong)(num3 - 1u)) && b != 0) { num6 = (uint)(b + 4); array[2] = b; } else { num6 = 65u; array[2] = 62; } } else { num6 = num2 + 4u; num5 = 2u; } for (uint num7 = num5; num7 < num6; num7 += 1u) { array[(int)((UIntPtr)num7)] = p_send_byte_array[(int)((UIntPtr)(num + num7))]; } if (num3 != 1u) { num += 62u; if ((long)num4 == (long)((ulong)(num3 - 1u))) { num += 1u; } } if (array[1] == 3) { if (!USBWrite.there_is_room_in_cbuf1(array[2])) { result = false; return(result); } USBWrite.m_cbuf1_avail_bytes_mutex.WaitOne(); USBWrite.m_cbuf1_avail_bytes -= array[2]; USBWrite.m_cbuf1_avail_bytes_mutex.ReleaseMutex(); if (!USBWrite.Send_Data_Packet_To_PICkitS(ref array)) { result = false; return(result); } if (USBWrite.There_Was_A_Write_Error()) { result = false; return(result); } } else { if (!USBWrite.Send_Data_Packet_To_PICkitS(ref array)) { result = false; return(result); } if (USBWrite.There_Was_A_Write_Error()) { result = false; return(result); } } num4++; } if (array[1] == 3) { if (USBWrite.m_use_script_timeout) { bool flag2 = Utilities.m_flags.g_PKSA_has_completed_script.WaitOne(USBWrite.m_universal_timeout, false); if (flag2 && USBWrite.Update_Status_Packet()) { uint num8 = 0u; if (!Status.There_Is_A_Status_Error(ref num8)) { flag = true; } } } else { flag = true; } } else { flag = true; } USBWrite.m_data_buffer_is_empty = true; result = flag; } return(result); }