اطلاعیه

Collapse
No announcement yet.

کنترل Activex برای کار با USB PDIUSBD12

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کنترل Activex برای کار با USB PDIUSBD12

    بازم سلام
    اینم کنترلی که قولشو داده بودم:
    http://rapidshare.com/files/159962308/drv.rar.html
    تو این فایل چیزهای مهم :
    1: فایل install.cmd رو اجرا کنید تا درایور اصلی نصب بشه
    2: دستگاه یو اس بی تونو که با PDIUSBD12 ساختید رو از همین فایل نصب کنید (توجه) :
    (( شماره محصول و کارخونه دستگاهتونو تو grsio.inf عوض کنید تا ویندوز بتونه دستگاهتونو نصب کنه و یا دستگاهتون رو با مشخصات grsio.inf بسازید ))
    3: از فایل Grsio.ocx تو پروژه تون استفاده کنید
    :applause: به همین راحتی

    واسه استفاده از Grsio.ocx هم به مطالب زیر دقت کنید
    اول شماره مشخصه های دستگاه رو ست کرده و راه انداز رو اینیتیال کنید :
    کد:
    GRSIO_CTL1.VID = &H8086&
    GRSIO_CTL1.PID = &H930A&
    GRSIO_CTL1.Init
    بعد بررسی کنید خطایی رخ نداده باشه :

    کد:
    Text1 = GRSIO_CTL1.bError
    Text2 = GRSIO_CTL1.mError
    بعد بررسی کنیه دستگاه وصله یا نه

    کد:
    Text3 = GRSIO_CTL1.AttachDev
    بعد میتونید هرچند بایت از اندپوینت مربوطه خواستی بخونی (تا 64 بایت)
    کد:
    GRSIO_CTL1.rwpip "81"
    MsgBox GRSIO_CTL1.bRead("64")
    و یا 16 بایت تو اندپوینت مربوطه بنویسی :
    کد:
    GRSIO_CTL1.rwpip "2"
    GRSIO_CTL1.bWrite "Salam azizam", 16


    #2
    پاسخ : کنترل Activex برای کار با USB PDIUSBD12

    راستی میتونید از این کد هم واسه تست استفاده کنید
    این برنامه تو بسکام هست و واسه AVR نوشتم
    قبلاً هم این برنامه رو گذاشته بودم ولی اینبار یکم تغییرات کوچیک دادم توش

    کد:
    'GRSRINFO@GMAI.COM
    Declare Sub Write_command()
    Declare Sub Int_pdi()
    Declare Sub Write_data()
    Declare Sub Bus_reset()
    Dim Temp(16) As Byte
    Dim Address_device As Byte
    Declare Sub Read_data()
    Declare Sub Endpoint_ctrl_out()
    Declare Sub Endpoint_ctrl_in()
    Declare Sub Standard_request()
    Declare Sub Get_status()
    Declare Sub Set_feature()
    Declare Sub Clear_feature()
    Declare Sub Set_address()
    Declare Sub Get_descriptor()
    Declare Sub Endpoint1_out()
    Declare Sub On_datain()
    Declare Sub Endpoint2_in()
    
    Dim Bmrequesttype As Byte
    Dim Brequest As Byte
    Dim Wvalue As Word
    Dim Windex As Word
    Dim Wlengh As Word
    Dim Ttmp As Byte
    Dim Index As Byte
    Dim Global_length As Word
    Dim Index_descriptor As Word
    Dim Device_descriptor(18) As Byte
    Dim Configuration_discriptor(45) As Byte
    Dim String_discriptor(50) As Byte
    Dim Hid_discriptor(50) As Byte
    Dim P As Byte
    Dim Bufferi(66) As Byte
    Dim Buffero(66) As Byte
    
    $regfile = "m32def.dat"
    $crystal = 8000000
    $baud = 9600
    Disable Interrupts
    
    Buffero(1) = Asc( "S")
    Buffero(2) = Asc( "a")
    Buffero(3) = Asc( "l")
    Buffero(4) = Asc( "a")
    Buffero(5) = Asc( "m")
    
    Device_descriptor(1) = 18
    Device_descriptor(2) = 1
    Device_descriptor(3) = &H00
    Device_descriptor(4) = &H02
    Device_descriptor(5) = &H00
    Device_descriptor(6) = 0
    Device_descriptor(7) = 0
    Device_descriptor(8) = 16
    Device_descriptor(9) = &H86
    Device_descriptor(10) = &H80
    Device_descriptor(11) = &H0A
    Device_descriptor(12) = &H93
    Device_descriptor(13) = &H00
    Device_descriptor(14) = &H00
    Device_descriptor(15) = 0
    Device_descriptor(16) = 1
    Device_descriptor(17) = 0
    Device_descriptor(18) = 1
    
    Configuration_discriptor(1) = 9
    Configuration_discriptor(2) = 2
    Configuration_discriptor(3) = &H20
    Configuration_discriptor(4) = 0
    Configuration_discriptor(5) = 1
    Configuration_discriptor(6) = 1
    Configuration_discriptor(7) = 0
    Configuration_discriptor(8) = &H80
    Configuration_discriptor(9) = 250
    '//
    Configuration_discriptor(10) = 9
    Configuration_discriptor(11) = 4
    Configuration_discriptor(12) = 0
    Configuration_discriptor(13) = 0
    Configuration_discriptor(14) = 2
    Configuration_discriptor(15) = &HFF
    Configuration_discriptor(16) = &HFF
    Configuration_discriptor(17) = &HFF
    Configuration_discriptor(18) = 0
    '//
    'Configuration_discriptor(19) = &H9
    'Configuration_discriptor(20) = &H21
    'Configuration_discriptor(21) = &H10
    'Configuration_discriptor(22) = 1
    'Configuration_discriptor(23) = 0
    'Configuration_discriptor(24) = 1
    'Configuration_discriptor(25) = &H22
    'Configuration_discriptor(26) = &H1C
    'Configuration_discriptor(27) = &H00
    '//
    Configuration_discriptor(19) = 7
    Configuration_discriptor(20) = 5
    Configuration_discriptor(21) = &H81
    Configuration_discriptor(22) = 3
    Configuration_discriptor(23) = 64
    Configuration_discriptor(24) = 0
    Configuration_discriptor(25) = &H00
    '//
    Configuration_discriptor(26) = 7
    Configuration_discriptor(27) = 5
    Configuration_discriptor(28) = &H2
    Configuration_discriptor(29) = 3
    Configuration_discriptor(30) = 16
    Configuration_discriptor(31) = 0
    Configuration_discriptor(32) = &H00
    
    String_discriptor(1) = 4
    String_discriptor(2) = 3
    String_discriptor(3) = &H09
    String_discriptor(4) = 4
    '//
    String_discriptor(5) = 14
    String_discriptor(6) = 3
    String_discriptor(7) = Asc( "N")
    String_discriptor(8) = 0
    String_discriptor(9) = Asc( "a")
    String_discriptor(10) = 0
    String_discriptor(11) = Asc( "s")
    String_discriptor(12) = 0
    String_discriptor(13) = Asc( "s")
    String_discriptor(14) = 0
    String_discriptor(15) = Asc( "e")
    String_discriptor(16) = 0
    String_discriptor(17) = Asc( "r")
    String_discriptor(18) = 0
    String_discriptor(19) = Asc( " ")
    String_discriptor(20) = 0
    String_discriptor(21) = Asc( "U")
    String_discriptor(22) = 0
    String_discriptor(23) = Asc( "S")
    String_discriptor(24) = 0
    String_discriptor(25) = Asc( "B")
    String_discriptor(26) = 0
    String_discriptor(27) = Asc( " ")
    String_discriptor(28) = 0
    String_discriptor(29) = Asc( "T")
    String_discriptor(30) = 0
    String_discriptor(31) = Asc( "e")
    String_discriptor(32) = 0
    String_discriptor(33) = Asc( "s")
    String_discriptor(34) = 0
    String_discriptor(35) = Asc( "t")
    String_discriptor(36) = 0
    String_discriptor(37) = Asc( " ")
    String_discriptor(38) = 0
    String_discriptor(39) = Asc( " ")
    String_discriptor(40) = 0
    String_discriptor(41) = Asc( " ")
    String_discriptor(42) = 0
    String_discriptor(43) = Asc( " ")
    String_discriptor(44) = 0
    String_discriptor(45) = Asc( " ")
    String_discriptor(46) = 0
    String_discriptor(47) = Asc( " ")
    String_discriptor(48) = 0
    String_discriptor(49) = Asc( " ")
    String_discriptor(50) = 0
    
    Hid_discriptor(1) = 6
    Hid_discriptor(2) = &H00
    Hid_discriptor(3) = &HFF
    Hid_discriptor(4) = &H09
    Hid_discriptor(5) = &H1
    Hid_discriptor(6) = &HA1
    Hid_discriptor(7) = &H1
    Hid_discriptor(8) = &H19
    Hid_discriptor(9) = &H1
    
    Hid_discriptor(10) = &H29
    Hid_discriptor(11) = &H8
    Hid_discriptor(12) = &H15
    Hid_discriptor(13) = &H0
    Hid_discriptor(14) = &H25
    Hid_discriptor(15) = &H1
    Hid_discriptor(16) = &H75
    Hid_discriptor(17) = &H1
    Hid_discriptor(18) = &H95
    Hid_discriptor(19) = &H8
    Hid_discriptor(20) = &H81
    Hid_discriptor(21) = &H2
    
    Hid_discriptor(22) = &H19
    Hid_discriptor(23) = &H1
    Hid_discriptor(24) = &H29
    Hid_discriptor(25) = &H8
    Hid_discriptor(26) = &H91
    Hid_discriptor(27) = &H2
    
    Hid_discriptor(28) = &HC0
    
    'print ""
    'print "Initialize MCU .... ";
    Temp(1) = 0
    Ddrd.2 = 0
    Ddrd.3 = 1
    Ddrd.4 = 1
    Ddrd.5 = 1
    Portd.3 = 1
    Portd.4 = 1
    Portd.5 = 0
    'Gicr = &H40
    'Mcucr = 0
    'Mcucsr = 0
    'Gifr = 40
    Dim Ts As Bit
    Ts = 0
    'print "OK!"
    Int_pdi
    'Bus_reset
    Config Int0 = Low Level
    On Int0 Intr0
    Enable Interrupts
    Enable Int0
    'Do
    'If Ts = 1 Then
    'End
    'End If
    'Loop
    Do
    Loop
    End
    
    Intr0:
    Int_pdi
    Return
    
    Sub Int_pdi()
    Ttmp = &HF4
    Write_command
    Ttmp = 2
    Read_data
    ''print Temp(1)
    
    If Temp(1).6 = 1 Then
    'print "Bus_Reset .... ";
    Bus_reset
    'print "OK!"
    
    Elseif Temp(1).7 = 1 Then
    'print "Suspend_ch"
    
    Elseif Temp(1).0 = 1 Then
    'Print "Endpoint_ctrl_out"
    Endpoint_ctrl_out
    
    Elseif Temp(1).1 = 1 Then
    'Print "Endpoint_ctrl_in"
    Endpoint_ctrl_in
    
    Elseif Temp(1).2 = 1 Then
    'print "Endpoint1_Out"
    
    Elseif Temp(1).3 = 1 Then
    'Print "Endpoint1_In"
    Endpoint2_in
    
    Elseif Temp(1).4 = 1 Then
    'print "Endpoint2_Out"
    Endpoint1_out
    Elseif Temp(1).5 = 1 Then
    'Print "Endpoint2_In"
    
    End If
    Ts = 1
    End Sub
    
    Sub Bus_reset()
    Address_device = 0
    Ttmp = &HD0
    Write_command
    Ttmp = &H80
    Write_data
    Ttmp = &HD8
    Write_command
    Ttmp = &H01
    Write_data
    Ttmp = &HF3
    Write_command
    Ttmp = &H1E
    Write_data
    Ttmp = &H02
    Write_data
    'Waitms 10
    'Write_command &HFB
    'Write_data &HC0
    End Sub
    
    Sub Write_command()
    Ddra = &HFF
    Portd.3 = 1
    Portd.5 = 1
    Porta = Ttmp
    Portd.4 = 0
    Portd.4 = 1
    Portd.5 = 0
    End Sub
    
    Sub Write_data()
    Ddra = &HFF
    Portd.3 = 1
    Porta = Ttmp
    Portd.4 = 0
    Portd.4 = 1
    End Sub
    
    Sub Read_data()
    Dim I As Byte
    ''print "NUM:";
    ''print ttmp
    Portd.4 = 1
    Ddra = 0
    Porta = &HFF
    For I = 1 To Ttmp
    Portd.3 = 0
    Temp(i) = Pina
    ''print "I:";
    ''print I
    Portd.3 = 1
    Next
    End Sub
    
    Sub Endpoint_ctrl_out()
    Dim Ttp As Byte
    Dim Data_packet(16) As Byte
    Dim Tp As Byte
    Ttmp = &H40
    Write_command
    Ttmp = 1
    Read_data
    Ttp = Temp(1)
    ''print "Ttp:";
    ''print Hex(ttp)
    If Ttp.0 = 1 Then
      If Ttp.5 = 1 Then
       Ttmp = &H00
       Write_command
       Ttmp = &HF0
       Write_command
       Ttmp = 16
       Read_data
       Ttmp = &HF1
       Write_command
       Ttmp = &HF2
       Write_command
       Ttmp = &H41
       Write_command
       Ttmp = &HF1
       Write_command
       Ttmp = &HF2
       Write_command
       ''print "Data_Packet:"
       'For Tp = 1 To 16
       ''print Tp;
       ''print ":";
       ''print Hex(temp(tp));
       ''print "  ";
       'Next
       ''print ""
       If Temp(2) = 8 Then
         Bmrequesttype = Temp(3)
         Brequest = Temp(4)
         Wvalue = Temp(6)
         Shift Wvalue , Left , 8
         Wvalue = Wvalue Or Temp(5)
         Windex = Temp(8)
         Shift Windex , Left , 8
         Windex = Windex Or Temp(7)
         Wlengh = Temp(10)
         Shift Wlengh , Left , 8
         Wlengh = Wlengh Or Temp(9)
         Tp = Bmrequesttype And &H60
         If Tp = &H00 Then
          Standard_request
         Elseif Tp = &H20 Then
    '      Print "Class_Request"
         Elseif Tp = &H40 Then
          'print "Vendor_Request"
         Else
          Ttmp = &H40
          Write_command
          Ttmp = &H1
          Write_data
         End If
       Else
         Ttmp = &H40
         Write_command
         Ttmp = &H1
         Write_data
       End If
      End If
    End If
    
    End Sub
    
    Sub Standard_request()
    'print "Standard_Request"
    Select Case Brequest
      Case &H00
       'Print "Get_Status"
       Get_status
      Case &H01
       'Print "Clear_Feature"
       'Clear_feature
      Case &H03
       'Print "Set_Feature"
       Set_feature
      Case &H05
       'Print "Set_Address"
       Set_address
      Case &H06
       'Print "Get_Discriptor"
       Get_descriptor
      Case &H07
       'Print "Set_Discriptor"
      Case &H08
       'Print "Get_Configuration"
      Case &H09
       'Print "Set_Configuration"
       Dim Requestok As Byte
       Requestok = 1
       Select Case Low(wvalue)
       Case 0
    
       Case 1
    
       Case Else
       Requestok = 0
       End Select
       Ttmp = 1                       '&HF0
      Write_command
    
      Ttmp = &HF0
      Write_command
      Ttmp = 0
      Write_data
      Ttmp = 0
       Ttmp = &HFA
      Write_command
      Case &H0A
       'Print "Get_Interface"
      Case &H0B
       'Print "Set_Interface"
      Case Else
       'Print "Request : ";
       'Print Brequest
       Ttmp = &H40
       Write_command
       Ttmp = &H1
       Write_data
    End Select
    End Sub
    
    Sub Get_status()
    Dim Dstt As Byte
    Dstt = Bmrequesttype And 3
    'If Dstt < 3 Then
      Ttmp = 1                         '&HF0
      Write_command
    
      Ttmp = &HF0
      Write_command
      Ttmp = 0
      Write_data
      Ttmp = 2
      Write_data
      Ttmp = 1
      Write_data
      Ttmp = 0
      Write_data
      Ttmp = &HFA
      Write_command
    'Else
    '  Ttmp = &H41
    '  Write_command
    '  Ttmp = &H1
    '  Write_data
    'End If
    End Sub
    
    Sub Set_feature()
       Ttmp = &H41
       Write_command
       Ttmp = &H1
       Write_data
    'Dim Stf As Byte
    'Stf = Bmrequesttype And 3
    'Select Case Stf
    'Case 0
    '  If Wvalue = 1 Then
    '   Ttmp = &H41
    '   Write_command
    '   Ttmp = &H1
    '   Write_data
    '  End If
    'Case 2
    '  If Wvalue = 0 Then
    '   Ttmp = &H40 + Low(windex)
    '   Write_command
    '   Ttmp = &H1
    '   Write_data
    '   Ttmp = &H01
    '   Write_command
    '   Ttmp = &HF0
    '   Write_command
    '   Ttmp = &H0
    '   Write_data
    '   Ttmp = &H0
    '   Write_data
    '   Ttmp = &HFA
    '   Write_command
    '  End If
    'Case Else
    '  Ttmp = &H41
    '  Write_command
    '  Ttmp = &H1
    '  Write_data
    'End Select
    End Sub
    
    Sub Clear_feature()
    Dim Clf As Byte
    Clf = Bmrequesttype And 3
    Select Case Clf
    Case 0
      If Wvalue = 1 Then
       Ttmp = &H41
       Write_command
       Ttmp = &H1
       Write_data
      End If
    Case 2
      If Wvalue = 0 Then
       Ttmp = &H40 + Low(windex)
       Write_command
       Ttmp = &H0
       Write_data
       Ttmp = &H01
       Write_command
       Ttmp = &HF0
       Write_command
       Ttmp = &H0
       Write_data
       Ttmp = &H0
       Write_data
       Ttmp = &HFA
       Write_command
      End If
    Case Else
      Ttmp = &H41
      Write_command
      Ttmp = &H1
      Write_data
    End Select
    End Sub
    
    Sub Set_address()
    Dim Ads As Byte
    Address_device = Low(wvalue)
    Ads = &H80 Or Address_device
    Ttmp = &HD0
    Write_command
    Ttmp = Ads
    Write_data
    Ttmp = &H01
    Write_command
    Ttmp = &HF0
    Write_command
    Ttmp = 0
    Write_data
    Ttmp = 0
    Write_data
    Ttmp = &HFA
    Write_command
    End Sub
    
    Sub Get_descriptor()
    Dim Data_length As Word
    Dim Type_descriptor As Byte
    Dim Length As Byte
    Dim Iig As Byte
    Global_length = 0
    Index = &H40
    'print "Wlengh: ";
    'print Hex(wlengh)
    Data_length = Wlengh
    'print "wvalue: ";
    'print Hex(wvalue)
    Type_descriptor = High(wvalue)
    Iig = 1
    'Print "Type_descriptor: ";
    'Print Type_descriptor
    Select Case Type_descriptor
    Case 1
    P = 1
    Length = Device_descriptor(1)
    Case 2
    P = 2
    Length = Configuration_discriptor(3)
    Case 3
    If Low(wvalue) = 1 Then
    P = 4
    Length = 14
    Iig = 5
    Else
    P = 3
    Length = 4
    End If
    Case 4
    P = 5
    Length = 9
    Iig = 10
    Case 5
    P = 6
    Length = 7
    Iig = 19
    Case 34
    P = 8
    Length = 34
    End Select
    If Data_length > Length Then
    Data_length = Length
    End If
    Global_length = Data_length
    Index_descriptor = Iig
    If Global_length = 0 Then
      Ttmp = &H40
      Write_command
      Ttmp = &H1
      Write_data
      Ttmp = &H41
      Write_command
      Ttmp = &H1
      Write_data
    Else
      Endpoint_ctrl_in
    End If
    End Sub
    
    Sub Endpoint_ctrl_in()
    Dim Endlen As Byte
    Dim Leng As Byte
    Dim Tpe As Byte
    Dim Ipe As Byte
    Ttmp = &H41
    Write_command
    Ttmp = 1
    Read_data
    Tpe = Temp(1) And &H40
    'print "TPE: ";
    'print Tpe
    'print "Temp: ";
    'print Hex(temp(1))
    'print "index: ";
    'print Index
    If Index <> Tpe Then
      Index = Temp(1) And &H40
      'print "Index: ";
      'print Index
      'print "Global_length: ";
      'print Global_length
      If Global_length > 16 Then
      Leng = 16
      Else
      Leng = Global_length
      End If
      'print "Len: ";
      'print Leng
      Endlen = Leng + Index_descriptor
      Endlen = Endlen - 1
      'print "Endlen: ";
      'print Endlen
      Ttmp = &H01
      Write_command
      Ttmp = &HF0
      Write_command
      Ttmp = &H00
      Write_data
      Ttmp = Leng
      Write_data
      'print "Index_descriptor: ";
      'print Index_descriptor
      For Ipe = Index_descriptor To Endlen
       If P = 1 Then
         Ttmp = Device_descriptor(ipe)
         'print "Device: ";
         'print Ttmp
       Elseif P = 2 Or P = 5 Or P = 6 Then
         Ttmp = Configuration_discriptor(ipe)
         'print "configuration: ";
         'print Ttmp
       Elseif P = 3 Or P = 4 Then
         Ttmp = String_discriptor(ipe)
         'print "string: ";
         'print Ttmp
       Elseif P = 8 Then
         Ttmp = Hid_discriptor(ipe)
       End If
       Write_data
       Global_length = Global_length - 1
      Next
      'print "Global_length: ";
      'print Global_length
      Index_descriptor = Endlen + 1
      'print "Index_descriptor: ";
      'print Index_descriptor
      Ttmp = &HFA
      Write_command
      If Global_length = 0 Then
       Ttmp = &H01
       Write_command
       Ttmp = &HF0
       Write_command
       Ttmp = 0
       Write_data
       Ttmp = &HFA
       Write_command
      End If
    End If
    
    End Sub
    
    Sub Endpoint1_out()
    Dim Ieo As Byte
    Ttmp = &H44
    Write_command
    Ttmp = &H04
    Write_command
    Ttmp = &HF0
    Write_command
    Ttmp = 16
    Read_data
    Ttmp = &HF2
    Write_command
    For Ieo = 1 To 16
    Bufferi(ieo) = Temp(ieo)
    Next
    On_datain
    End Sub
    
    Sub On_datain()
    Dim Ion As Byte
    Print "Data in:"
    For Ion = 1 To 16
    Print Ion;
    Print ":";
    Print Hex(bufferi(ion));
    Print " ";
    Next
    Print ""
    End Sub
    
    Sub Endpoint2_in()
    Dim Iei As Byte
    Ttmp = &H43
    Write_command
    Ttmp = &H03
    Write_command
    Ttmp = &HF2
    Write_command
    Ttmp = &HF0
    Write_command
    Ttmp = 0
    Write_data
    Ttmp = 64
    Write_data
    For Iei = 1 To 64
    Ttmp = Buffero(iei)
    Write_data
    Next
    Ttmp = &HFA
    Write_command
    End Sub

    دیدگاه

    لطفا صبر کنید...
    X