Ejemplo n.º 1
0
        public static bool Issue_BL_Reset()
        {
            bool result = false;

            byte[] array = new byte[65];
            Array.Clear(array, 0, array.Length);
            array[0] = 0;
            array[1] = 255;
            bool flag = USBWrite.Send_Data_Packet_To_PICkitS(ref array);

            if (flag)
            {
                result = true;
            }
            return(result);
        }
Ejemplo n.º 2
0
        public static bool Retrieve_BL_FW_Version_Cmd(ref ushort p_bl_ver)
        {
            bool flag = false;

            byte[] array = new byte[0x41];
            Array.Clear(array, 0, array.Length);
            array[0] = 0;
            array[1] = 0x76;
            Utilities.m_flags.g_need_to_copy_bl_data = true;
            if ((USBWrite.Send_Data_Packet_To_PICkitS(ref array) && Utilities.m_flags.g_bl_data_arrived_event.WaitOne(0x3e8, false)) && (Utilities.m_flags.bl_buffer[1] == 0x76))
            {
                p_bl_ver = (ushort)((Utilities.m_flags.bl_buffer[7] << 8) + Utilities.m_flags.bl_buffer[8]);
                flag     = true;
            }
            return(flag);
        }
Ejemplo n.º 3
0
        private static bool Send_MT2_RD_Command(byte p_sensor_id, bool p_trip, bool p_gdbnd, bool p_raw, bool p_avg, bool p_detect, bool p_aux1, bool p_aux2, bool p_status)
        {
            byte[] array = new byte[65];
            byte   b     = 0;

            if (p_trip)
            {
                b |= 1;
            }
            if (p_gdbnd)
            {
                b |= 2;
            }
            if (p_raw)
            {
                b |= 4;
            }
            if (p_avg)
            {
                b |= 8;
            }
            if (p_detect)
            {
                b |= 16;
            }
            if (p_aux1)
            {
                b |= 32;
            }
            if (p_aux2)
            {
                b |= 64;
            }
            if (p_status)
            {
                b |= 128;
            }
            array[0] = 0;
            array[1] = 20;
            array[2] = p_sensor_id;
            array[3] = b;
            array[4] = 0;
            bool result = USBWrite.Send_Data_Packet_To_PICkitS(ref array);

            mTouch2.m_we_are_broadcasting = false;
            return(result);
        }
Ejemplo n.º 4
0
        private static bool Send_MT2_RD_Command(byte p_sensor_id, bool p_trip, bool p_gdbnd, bool p_raw, bool p_avg, bool p_detect, bool p_aux1, bool p_aux2, bool p_status)
        {
            byte[] buffer = new byte[0x41];
            byte   num    = 0;

            if (p_trip)
            {
                num = (byte)(num | 1);
            }
            if (p_gdbnd)
            {
                num = (byte)(num | 2);
            }
            if (p_raw)
            {
                num = (byte)(num | 4);
            }
            if (p_avg)
            {
                num = (byte)(num | 8);
            }
            if (p_detect)
            {
                num = (byte)(num | 0x10);
            }
            if (p_aux1)
            {
                num = (byte)(num | 0x20);
            }
            if (p_aux2)
            {
                num = (byte)(num | 0x40);
            }
            if (p_status)
            {
                num = (byte)(num | 0x80);
            }
            buffer[0] = 0;
            buffer[1] = 20;
            buffer[2] = p_sensor_id;
            buffer[3] = num;
            buffer[4] = 0;
            bool flag = USBWrite.Send_Data_Packet_To_PICkitS(ref buffer);

            m_we_are_broadcasting = false;
            return(flag);
        }
Ejemplo n.º 5
0
        internal static bool Send_MT2_RD_STATUS_Command()
        {
            byte[] array  = new byte[65];
            bool   result = false;

            array[0] = 0;
            array[1] = 17;
            array[2] = 0;
            mTouch2.m_status_data_is_ready.Reset();
            bool flag = USBWrite.Send_Data_Packet_To_PICkitS(ref array);

            if (flag)
            {
                result = mTouch2.m_status_data_is_ready.WaitOne(500, false);
            }
            return(result);
        }
Ejemplo n.º 6
0
        public static bool Write_Gdbnd_Value(byte p_sensor_id, ushort p_gdbnd)
        {
            mTouch2.Send_MT2_RESET_Command();
            byte[] array         = new byte[65];
            ushort time_interval = 0;

            if (mTouch2.m_we_are_broadcasting && mTouch2.Send_MT2_RD_STATUS_Command())
            {
                time_interval = mTouch2.m_data_status.time_interval;
            }
            array[0] = 0;
            array[1] = 35;
            array[2] = p_sensor_id;
            array[3] = 2;
            array[4] = (byte)p_gdbnd;
            array[5] = (byte)(p_gdbnd >> 8);
            array[6] = 0;
            bool flag = USBWrite.Send_Data_Packet_To_PICkitS(ref array);

            if (flag)
            {
                mTouch2.m_gdb_data_is_ready.Reset();
                if (mTouch2.Send_MT2_RD_Command(p_sensor_id, false, true, false, false, false, false, false, false))
                {
                    flag = mTouch2.m_gdb_data_is_ready.WaitOne(500, false);
                    if (flag)
                    {
                        mTouch2.m_sensor_data_mutex.WaitOne();
                        if (p_gdbnd != mTouch2.m_gdb_values[0])
                        {
                            flag = false;
                        }
                        mTouch2.m_sensor_data_mutex.ReleaseMutex();
                    }
                }
            }
            if (mTouch2.m_we_are_broadcasting && mTouch2.Send_MT2_RD_STATUS_Command())
            {
                mTouch2.m_data_status.time_interval = time_interval;
                mTouch2.Send_MT2_RD_AUTO_Command(mTouch2.m_data_status.broadcast_group_id, mTouch2.m_data_status.broadcast_enable_flags.trip, mTouch2.m_data_status.broadcast_enable_flags.guardband, mTouch2.m_data_status.broadcast_enable_flags.raw, mTouch2.m_data_status.broadcast_enable_flags.avg, mTouch2.m_data_status.broadcast_enable_flags.detect_flags, mTouch2.m_data_status.broadcast_enable_flags.aux1, mTouch2.m_data_status.broadcast_enable_flags.aux2, mTouch2.m_data_status.broadcast_enable_flags.status, mTouch2.m_data_status.time_interval);
            }
            return(flag);
        }
Ejemplo n.º 7
0
        public static bool write_and_verify_LIN_config_block(ref byte[] p_control_block_data, ref string p_result_str, bool p_perform_warm_and_cold_reset, ref string p_cb_data_str)
        {
            bool result = false;
            bool flag   = USBWrite.Send_Data_Packet_To_PICkitS(ref p_control_block_data);

            Device.Clear_Status_Errors();
            if (flag)
            {
                if (USBWrite.Update_Status_Packet())
                {
                    Utilities.m_flags.g_status_packet_mutex.WaitOne();
                    int i;
                    for (i = 7; i < 31; i++)
                    {
                        if (Constants.STATUS_PACKET_DATA[i] != p_control_block_data[i - 5])
                        {
                            p_result_str = string.Format("Byte {0} failed verification in config block write.\n Value reads {1:X2}, but should be {2:X2}.", i - 7, Constants.STATUS_PACKET_DATA[i], p_control_block_data[i - 5]);
                            break;
                        }
                    }
                    if (i == 31)
                    {
                        result        = true;
                        p_result_str  = string.Format("PICkit Serial Analyzer correctly updated.", new object[0]);
                        p_cb_data_str = "";
                        for (i = 7; i < 31; i++)
                        {
                            p_cb_data_str += string.Format("{0:X2} ", Constants.STATUS_PACKET_DATA[i]);
                        }
                    }
                    Utilities.m_flags.g_status_packet_mutex.ReleaseMutex();
                }
                else
                {
                    p_result_str = string.Format("Error requesting config verification - Config Block may not be updated correctly", new object[0]);
                }
            }
            else
            {
                p_result_str = string.Format("Error sending config packet - Config Block may not be updated correctly", new object[0]);
            }
            return(result);
        }
Ejemplo n.º 8
0
        public static bool Clear_64_Bytes_of_Flash(ushort p_addr)
        {
            bool flag = false;

            byte[] array = new byte[0x41];
            Array.Clear(array, 0, array.Length);
            array[0] = 0;
            array[1] = 3;
            array[2] = 1;
            array[3] = (byte)p_addr;
            array[4] = (byte)(p_addr >> 8);
            array[5] = 0;
            Utilities.m_flags.g_need_to_copy_bl_data = true;
            if (((USBWrite.Send_Data_Packet_To_PICkitS(ref array) && Utilities.m_flags.g_bl_data_arrived_event.WaitOne(0x3e8, false)) && ((Utilities.m_flags.bl_buffer[1] == 3) && (Utilities.m_flags.bl_buffer[2] == 1))) && (Utilities.m_flags.bl_buffer[3] == ((byte)p_addr)))
            {
                flag = true;
            }
            return(flag);
        }
Ejemplo n.º 9
0
        public static bool Write_Trip_Value(byte p_sensor_id, ushort p_trip)
        {
            Send_MT2_RESET_Command();
            byte[] buffer = new byte[0x41];
            ushort num    = 0;

            if (m_we_are_broadcasting && Send_MT2_RD_STATUS_Command())
            {
                num = m_data_status.time_interval;
            }
            buffer[0] = 0;
            buffer[1] = 0x22;
            buffer[2] = p_sensor_id;
            buffer[3] = 2;
            buffer[4] = (byte)p_trip;
            buffer[5] = (byte)(p_trip >> 8);
            buffer[6] = 0;
            bool flag = USBWrite.Send_Data_Packet_To_PICkitS(ref buffer);

            if (flag)
            {
                m_trip_data_is_ready.Reset();
                if (Send_MT2_RD_Command(p_sensor_id, true, false, false, false, false, false, false, false))
                {
                    flag = m_trip_data_is_ready.WaitOne(500, false);
                    if (flag)
                    {
                        m_sensor_data_mutex.WaitOne();
                        if (p_trip != m_trp_values[0])
                        {
                            flag = false;
                        }
                        m_sensor_data_mutex.ReleaseMutex();
                    }
                }
            }
            if (m_we_are_broadcasting && Send_MT2_RD_STATUS_Command())
            {
                m_data_status.time_interval = num;
                Send_MT2_RD_AUTO_Command(m_data_status.broadcast_group_id, m_data_status.broadcast_enable_flags.trip, m_data_status.broadcast_enable_flags.guardband, m_data_status.broadcast_enable_flags.raw, m_data_status.broadcast_enable_flags.avg, m_data_status.broadcast_enable_flags.detect_flags, m_data_status.broadcast_enable_flags.aux1, m_data_status.broadcast_enable_flags.aux2, m_data_status.broadcast_enable_flags.status, m_data_status.time_interval);
            }
            return(flag);
        }
Ejemplo n.º 10
0
        public static bool Send_CtrlBlkWrite_Cmd(ref byte[] p_data_array)
        {
            byte[] array = new byte[65];
            Array.Clear(array, 0, array.Length);
            array[0] = 0;
            array[1] = 2;
            int i;

            for (i = 0; i < 24; i++)
            {
                array[i + 2] = p_data_array[i];
            }
            array[i] = 0;
            USBWrite.Send_Cold_Reset_Cmd();
            bool result = USBWrite.Send_Data_Packet_To_PICkitS(ref array);

            USBWrite.Send_Warm_Reset_Cmd();
            USBWrite.Update_Status_Packet();
            return(result);
        }
Ejemplo n.º 11
0
        public static bool Retrieve_BL_FW_Version_Cmd(ref ushort p_bl_ver)
        {
            bool result = false;

            byte[] array = new byte[65];
            Array.Clear(array, 0, array.Length);
            array[0] = 0;
            array[1] = 118;
            Utilities.m_flags.g_need_to_copy_bl_data = true;
            bool flag = USBWrite.Send_Data_Packet_To_PICkitS(ref array);

            if (flag)
            {
                bool flag2 = Utilities.m_flags.g_bl_data_arrived_event.WaitOne(1000, false);
                if (flag2 && Utilities.m_flags.bl_buffer[1] == 118)
                {
                    p_bl_ver = (ushort)(((int)Utilities.m_flags.bl_buffer[7] << 8) + (int)Utilities.m_flags.bl_buffer[8]);
                    result   = true;
                }
            }
            return(result);
        }
Ejemplo n.º 12
0
        public static bool Clear_64_Bytes_of_Flash_return_fail_info(ushort p_addr, ref byte[] p_data, ref bool p_write_result, ref bool p_wait_result)
        {
            bool result = false;
            bool flag   = false;

            byte[] array = new byte[65];
            Array.Clear(array, 0, array.Length);
            array[0] = 0;
            array[1] = 3;
            array[2] = 1;
            array[3] = (byte)p_addr;
            array[4] = (byte)(p_addr >> 8);
            array[5] = 0;
            Utilities.m_flags.g_need_to_copy_bl_data = true;
            bool flag2 = USBWrite.Send_Data_Packet_To_PICkitS(ref array);

            if (flag2)
            {
                flag = Utilities.m_flags.g_bl_data_arrived_event.WaitOne(1000, false);
                if (flag)
                {
                    if (Utilities.m_flags.bl_buffer[1] == 3 && Utilities.m_flags.bl_buffer[2] == 1 && Utilities.m_flags.bl_buffer[3] == (byte)p_addr)
                    {
                        result = true;
                    }
                    else
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            p_data[i] = Utilities.m_flags.bl_buffer[i];
                        }
                    }
                }
            }
            p_write_result = flag2;
            p_wait_result  = flag;
            return(result);
        }
Ejemplo n.º 13
0
        public static bool Read_One_BL_Flash_USB_Packet(ushort p_addr, byte p_byte_count, ref byte[] p_data)
        {
            bool flag = false;

            byte[] array = new byte[0x41];
            Array.Clear(array, 0, array.Length);
            array[0] = 0;
            array[1] = 1;
            array[2] = p_byte_count;
            array[3] = (byte)p_addr;
            array[4] = (byte)(p_addr >> 8);
            array[5] = 0;
            Utilities.m_flags.g_need_to_copy_bl_data = true;
            if ((!USBWrite.Send_Data_Packet_To_PICkitS(ref array) || !Utilities.m_flags.g_bl_data_arrived_event.WaitOne(0x3e8, false)) || ((Utilities.m_flags.bl_buffer[1] != 1) || (Utilities.m_flags.bl_buffer[2] != p_byte_count)))
            {
                return(flag);
            }
            for (int i = 6; i < (6 + p_byte_count); i++)
            {
                p_data[i - 6] = Utilities.m_flags.bl_buffer[i];
            }
            return(true);
        }
Ejemplo n.º 14
0
        private static bool Force_PKS_Into_Prog_Mode_Cmd()
        {
            bool   flag = false;
            ushort num  = 0;

            byte[] array = new byte[0x41];
            Array.Clear(array, 0, array.Length);
            array[1] = 0x42;
            array[2] = 0;
            if (Bootloader.Retrieve_BL_FW_Version_Cmd(ref num))
            {
                return(true);
            }
            if (USBWrite.Send_Data_Packet_To_PICkitS(ref array))
            {
                restart_the_device();
                if (Bootloader.Retrieve_BL_FW_Version_Cmd(ref num))
                {
                    flag = true;
                }
            }
            return(flag);
        }
Ejemplo n.º 15
0
        public static bool Write_32_Bytes_to_Flash(ushort p_addr, ref byte[] p_data)
        {
            bool flag = false;

            byte[] array = new byte[0x41];
            Array.Clear(array, 0, array.Length);
            array[0] = 0;
            array[1] = 2;
            array[2] = 0x20;
            array[3] = (byte)p_addr;
            array[4] = (byte)(p_addr >> 8);
            array[5] = 0;
            for (int i = 0; i < 0x20; i++)
            {
                array[6 + i] = p_data[i];
            }
            Utilities.m_flags.g_need_to_copy_bl_data = true;
            if (((USBWrite.Send_Data_Packet_To_PICkitS(ref array) && Utilities.m_flags.g_bl_data_arrived_event.WaitOne(0x3e8, false)) && ((Utilities.m_flags.bl_buffer[1] == 2) && (Utilities.m_flags.bl_buffer[2] == 0x20))) && (Utilities.m_flags.bl_buffer[3] == ((byte)p_addr)))
            {
                flag = true;
            }
            return(flag);
        }
Ejemplo n.º 16
0
        public static bool Read_User_Defined_Sensor_Group(ref byte p_sensor_count, ref byte[] p_sensor_array)
        {
            byte[] array = new byte[65];
            array[0] = 0;
            array[1] = 19;
            array[2] = 0;
            mTouch2.m_user_sensor_values_are_ready.Reset();
            bool flag = USBWrite.Send_Data_Packet_To_PICkitS(ref array);

            if (flag)
            {
                flag = mTouch2.m_user_sensor_values_are_ready.WaitOne(500, false);
                if (flag)
                {
                    p_sensor_count = mTouch2.m_user_sensor_values[0];
                    for (int i = 0; i < (int)p_sensor_count; i++)
                    {
                        p_sensor_array[i] = mTouch2.m_user_sensor_values[1 + i];
                    }
                }
            }
            return(flag);
        }
Ejemplo n.º 17
0
        public static bool Read_User_Defined_Sensor_Group(ref byte p_sensor_count, ref byte[] p_sensor_array)
        {
            byte[] buffer = new byte[0x41];
            buffer[0] = 0;
            buffer[1] = 0x13;
            buffer[2] = 0;
            m_user_sensor_values_are_ready.Reset();
            bool flag = USBWrite.Send_Data_Packet_To_PICkitS(ref buffer);

            if (flag)
            {
                flag = m_user_sensor_values_are_ready.WaitOne(500, false);
                if (!flag)
                {
                    return(flag);
                }
                p_sensor_count = m_user_sensor_values[0];
                for (int i = 0; i < p_sensor_count; i++)
                {
                    p_sensor_array[i] = m_user_sensor_values[1 + i];
                }
            }
            return(flag);
        }
Ejemplo n.º 18
0
        public static bool Read_BL_Config_Data(ref byte[] p_data)
        {
            byte num  = 14;
            bool flag = false;

            byte[] array = new byte[0x41];
            Array.Clear(array, 0, array.Length);
            array[0] = 0;
            array[1] = 6;
            array[2] = num;
            array[3] = 0;
            array[4] = 0;
            array[5] = 0x30;
            Utilities.m_flags.g_need_to_copy_bl_data = true;
            if ((!USBWrite.Send_Data_Packet_To_PICkitS(ref array) || !Utilities.m_flags.g_bl_data_arrived_event.WaitOne(0x3e8, false)) || ((Utilities.m_flags.bl_buffer[1] != 6) || (Utilities.m_flags.bl_buffer[2] != num)))
            {
                return(flag);
            }
            for (int i = 6; i < (6 + num); i++)
            {
                p_data[i - 6] = Utilities.m_flags.bl_buffer[i];
            }
            return(true);
        }
Ejemplo n.º 19
0
        public static bool Add_LIN_Slave_Profile_To_PKS(byte p_array_byte_count, ref byte[] p_profile_array, ref string p_result_str, ref int p_error_code)
        {
            bool flag = false;

            byte[] array  = new byte[65];
            byte[] array2 = new byte[255];
            byte[] array3 = new byte[65];
            bool   result = false;
            byte   b      = 0;
            byte   b2     = 0;
            string text   = "";

            p_error_code = 0;
            Array.Clear(array, 0, array.Length);
            Array.Clear(array3, 0, array3.Length);
            byte b3 = LIN.Number_Of_Bytes_In_CBUF3(ref b, ref b2);

            if (p_array_byte_count > b3)
            {
                p_result_str = string.Format("Byte count of {0} greater than allowed value of {1}.", p_array_byte_count, b3);
                p_error_code = 1;
                return(flag);
            }
            USBWrite.Clear_CBUF(3);
            if (!Basic.Get_Status_Packet(ref array3))
            {
                p_result_str = string.Format("Error reading status packet.", new object[0]);
                p_error_code = 2;
                return(false);
            }
            byte[] expr_A6_cp_0 = array3;
            int    expr_A6_cp_1 = 23;

            expr_A6_cp_0[expr_A6_cp_1] |= 32;
            USBWrite.configure_outbound_control_block_packet(ref array, ref text, ref array3);
            flag = USBWrite.Send_Data_Packet_To_PICkitS(ref array);
            Array.Clear(array2, 0, array2.Length);
            array2[0] = 0;
            array2[1] = 5;
            array2[2] = p_array_byte_count;
            for (int i = 3; i < (int)(p_array_byte_count + 3); i++)
            {
                array2[i] = p_profile_array[i - 3];
            }
            bool flag2 = USBWrite.Send_Script_To_PICkitS(ref array2);

            if (flag & flag2)
            {
                if (USBWrite.Update_Status_Packet())
                {
                    Utilities.m_flags.g_status_packet_mutex.WaitOne();
                    int j;
                    for (j = 7; j < 31; j++)
                    {
                        if (Constants.STATUS_PACKET_DATA[j] != array[j - 5])
                        {
                            p_error_code = 3;
                            p_result_str = string.Format("Byte {0} failed verification in config block write.\n Value reads {1:X2}, but should be {2:X2}.", j - 7, Constants.STATUS_PACKET_DATA[j], array[j - 5]);
                            break;
                        }
                    }
                    if (j == 31)
                    {
                        result       = true;
                        p_result_str = string.Format("PICkit Serial Analyzer correctly updated.", new object[0]);
                    }
                    Utilities.m_flags.g_status_packet_mutex.ReleaseMutex();
                }
                else
                {
                    p_result_str = string.Format("Error requesting config verification - Config Block may not be updated correctly", new object[0]);
                }
            }
            else
            {
                p_error_code = 2;
                p_result_str = string.Format("Error sending config packet - Config Block may not be updated correctly", new object[0]);
            }
            return(result);
        }
Ejemplo n.º 20
0
        public static bool Add_LIN_Slave_Profile_To_PKS(byte p_array_byte_count, ref byte[] p_profile_array, ref string p_result_str, ref int p_error_code)
        {
            bool flag = false;

            byte[] array   = new byte[0x41];
            byte[] buffer2 = new byte[0xff];
            byte[] buffer3 = new byte[0x41];
            bool   flag2   = false;
            byte   num     = 0;
            byte   num2    = 0;
            string str     = "";
            int    index   = 0;

            p_error_code = 0;
            Array.Clear(array, 0, array.Length);
            Array.Clear(buffer3, 0, buffer3.Length);
            byte num4 = Number_Of_Bytes_In_CBUF3(ref num, ref num2);

            if (p_array_byte_count > num4)
            {
                p_result_str = string.Format("Byte count of {0} greater than allowed value of {1}.", p_array_byte_count, num4);
                p_error_code = 1;
                return(flag);
            }
            USBWrite.Clear_CBUF(3);
            if (!Basic.Get_Status_Packet(ref buffer3))
            {
                p_result_str = string.Format("Error reading status packet.", new object[0]);
                p_error_code = 2;
                return(false);
            }
            buffer3[0x17] = (byte)(buffer3[0x17] | 0x20);
            USBWrite.configure_outbound_control_block_packet(ref array, ref str, ref buffer3);
            flag = USBWrite.Send_Data_Packet_To_PICkitS(ref array);
            Array.Clear(buffer2, 0, buffer2.Length);
            buffer2[0] = 0;
            buffer2[1] = 5;
            buffer2[2] = p_array_byte_count;
            for (int i = 3; i < (p_array_byte_count + 3); i++)
            {
                buffer2[i] = p_profile_array[i - 3];
            }
            bool flag3 = USBWrite.Send_Script_To_PICkitS(ref buffer2);

            if (!(flag & flag3))
            {
                p_error_code = 2;
                p_result_str = string.Format("Error sending config packet - Config Block may not be updated correctly", new object[0]);
                return(flag2);
            }
            if (!USBWrite.Update_Status_Packet())
            {
                p_result_str = string.Format("Error requesting config verification - Config Block may not be updated correctly", new object[0]);
                return(flag2);
            }
            Utilities.m_flags.g_status_packet_mutex.WaitOne();
            index = 7;
            while (index < 0x1f)
            {
                if (Constants.STATUS_PACKET_DATA[index] != array[index - 5])
                {
                    p_error_code = 3;
                    p_result_str = string.Format("Byte {0} failed verification in config block write.\n Value reads {1:X2}, but should be {2:X2}.", index - 7, Constants.STATUS_PACKET_DATA[index], array[index - 5]);
                    break;
                }
                index++;
            }
            if (index == 0x1f)
            {
                flag2        = true;
                p_result_str = string.Format("PICkit Serial Analyzer correctly updated.", new object[0]);
            }
            Utilities.m_flags.g_status_packet_mutex.ReleaseMutex();
            return(flag2);
        }
Ejemplo n.º 21
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);
        }