Exemple #1
0
        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);
        }