Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim CtrlEndPt As CyControlEndPoint
        Dim cntlbyte(4096) As Byte
        Dim pos As Integer
        Dim length As Double
        Dim fname As String = ""
        Dim bufdata(262144) As Byte
        Dim index As Integer
        Dim value As Integer
        Dim blklength As Integer
        Dim blksize As Integer = 4096
        Dim dldlength As Integer
        Dim wrlength As Integer
        Dim ix As Integer
        Dim shift24 As Integer = 16777216
        Dim shift16 As Integer = 65536
        Dim shift8 As Integer = 256
        Dim lpcnt As Integer = 0


        CtrlEndPt = myDevice.ControlEndPt

        CtrlEndPt.Target = CyConst.TGT_DEVICE
        CtrlEndPt.ReqType = CyConst.REQ_VENDOR
        CtrlEndPt.Direction = CyConst.DIR_TO_DEVICE
        CtrlEndPt.ReqCode = &HA0
        CtrlEndPt.Value = &H0
        CtrlEndPt.Index = &H0

        OpenFileDialog1.Filter = "Text files (*.img)|*.img"
        If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
            fname = (OpenFileDialog1.FileName)
        End If

        Try
            Dim reader As New BinaryReader(File.Open(fname, FileMode.Open))
            ' Loop through length of file.

            length = reader.BaseStream.Length
            While pos < length
                bufdata(pos) = reader.ReadByte
                pos += 1
            End While
            reader.Close()
        Catch
            MsgBox("file doesnot exist")
        End Try


        pos = 4 'move past initial signature bytes
        length = length - 8 ' trim off first and last 4 bytes
        'main loop for downloading .img
        While length > 0

            blklength = (bufdata(pos + 3) * shift24 + bufdata(pos + 2) * shift16 + bufdata(pos + 1) * shift8 + bufdata(pos)) * 4
            pos = pos + 4
            value = (bufdata(pos + 1) * shift8) + bufdata(pos)
            index = bufdata(pos + 3) * shift8 + bufdata(pos + 2)
            pos = pos + 4   ' to get at the data
            length = length - 8

            wrlength = blklength
            While wrlength > 0

                If wrlength > blksize Then
                    dldlength = blksize
                Else
                    dldlength = wrlength
                End If

                ix = 0
                While ix < dldlength
                    cntlbyte(ix) = (bufdata(ix + pos))
                    ix += 1
                End While

                CtrlEndPt.Value = value
                CtrlEndPt.Index = index
                CtrlEndPt.XferData(cntlbyte, dldlength)

                If value = &HF000 Then
                    value = 0
                    index = index + 1
                Else
                    value = value + &H1000
                End If

                wrlength = wrlength - dldlength
                length = length - dldlength
                pos = pos + dldlength

            End While
        End While
        'jump to program execution
        CtrlEndPt.Value = value
        CtrlEndPt.Index = index
        CtrlEndPt.XferData(cntlbyte, 0)

    End Sub
