Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Usb cihazlarına veri yazma ve usb cihazlarını listeleme
#11
(28-04-2018, Saat: 01:42)seci20 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
(28-04-2018, Saat: 00:06)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Bendeki Note4 için Open işlemi başarılı oldu. 
Bence sizin cihazı algılama şeklinizi değiştirmeniz lazım.

Sorun şu satırda.

 USBPORT:= CreateFile('\\?\USB\VID_0FCE&PID_ADDE&REV_0100{2AEB0243-6A6E-486B-82FC-D815F6B97006}', GENERIC_WRITE or GENERIC_READ,

Sizin için bir örnek hazırladım. 
(1) Registry Class GUID içinden cihazların listesini çektim. 
(2) Oradan bir ListBox'a atanmasını sağladım.
(3) Seçili olan cihazınızı USB OpenDevice fonksiyonunu uyguladım.

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. tanımlarının açılımlarını inceleyebilirsiniz.
Buna bir KickStart diyelim. Gerisi size kalmış.
Forma bir tane TListBox ekleyin iki de Button aşağıdakileri uygulayın. Idea

Ek bilgi: cihazları ListBox'a alma sırasında  birer birer OpenDevice yapın, FALSE dönenleri listeye almayın. Böylece liste bağlantısı gerçekleşmiş cihazlardan oluşacaktır.

Başarılar.
Procedure CihazListesiAl( strGUID:String; Bilgiler:TStrings );
Const
  BaslaKEY = '\SYSTEM\ControlSet001\Control\Class\';
Var
  Reg               : TRegistry;
  strKey,
  strWpdDevicePnPID : String;
  Liste             : TStringList;
begin
  Reg := TRegistry.Create;
  Try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    strKey      := BaslaKEY + strGUID;

    if Reg.OpenKeyReadonly( strKey ) then
    begin
      Liste := TStringList.Create;
      Try
        Reg.GetKeyNames( Liste );
        while Liste.Count > 0 do
        begin
          // Tekrar bir önceki, üst ağaç dalına dönüyoruz...
          Reg.OpenKeyReadonly( strKey );
          if Reg.OpenKeyReadOnly( Liste[0] ) then
          begin
            if Reg.OpenKeyReadOnly('DeviceData') then
            begin
              strWpdDevicePnPID   := Reg.ReadString('WpdDevicePnPID');
              if Trim(strWpdDevicePnPID) <> ''
                then Bilgiler.Add( Format('%s', [strWpdDevicePnPID]) );
            end;
          end;
          Liste.Delete(0);
        end;
      Finally
        Liste.Free;
      End;
    end;
  Finally
    Reg.Free;
  End;
end;

var
  USBPORT : THandle = INVALID_HANDLE_VALUE;

Function USBOpenDriver( strDev: String ):boolean;
begin
  USBPORT:= CreateFile( PChar(strDev),
                        GENERIC_WRITE or GENERIC_READ,
                        FILE_SHARE_WRITE or FILE_SHARE_READ,
                        nil,
                        OPEN_EXISTING,
                        FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL,
                        0 );
  USBOpenDriver := USBPORT <> INVALID_HANDLE_VALUE;
  if USBPORT = INVALID_HANDLE_VALUE then // error at open port
    begin
      result:=false;
    end else result:=true;
end;

Function USBCloseDriver:boolean;
begin
  USBCloseDriver := CloseHandle(USBPORT);
  USBPORT := INVALID_HANDLE_VALUE;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  if ListBox1.ItemIndex < 0 then Exit;

  if USBOpenDriver( ListBox1.Items[ListBox1.ItemIndex] )
    then ShowMessage('port açıldı...')
    else ShowMessage('port sorun oldu açılamadı...')
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  CihazListesiAl( '{eec5ad98-8080-425f-922a-dabf3de3f69a}', ListBox1.Items );
end;



hocam siz elleri öpülesi bir insansınız çok çok teşekkür ederim... Smile
 şşşş o benim idolüm  Heart
Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#12
Hocam şuan usb portu open yapabiliyorum veride gönderebiliyorum ama cihazdan cevap gelmiyor hiç bir şekilde read yapamıyorum. Diğer programlar açınca cihazı, cihaz direk cevap veriyor ama ben open yaptığımda yada veri yazdığımda cevap gelmiyor. Atladığım bir kısımmı var acaba yardım ederseniz çok memnun olurum ?

Bu arada hocam şurada kaynak kodu var ama delphi olarak değil malasef Sad


Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.


burada protokolü hakkında bilgi vermişler ama read 4096 yaptığım halde genede cevap vermiyor telefon.


Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#13
DWORD değerler protokol gereği "BIG ENDIAN" olduğu ifade edilmiş

Buna göre siz 4 byte DWORD veriyi nasıl gönderiyorsunuz bilmiyorum, tersten mi yoksa düzden mi giriyorsunuz ? Byte sırasını yaptığınızın tersinden bir yollayıp deneyin 01 02 03 04 şeklinde 4 byte ise 04 03 02 01 şeklinde dizilimi tersten yapıp yollayın.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#14
(30-04-2018, Saat: 11:41)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.DWORD değerler protokol gereği "BIG ENDIAN" olduğu ifade edilmiş

Buna göre siz 4 byte DWORD  veriyi nasıl gönderiyorsunuz bilmiyorum, tersten mi yoksa düzden mi giriyorsunuz ? Byte sırasını yaptığınızın tersinden bir yollayıp deneyin 01 02 03 04  şeklinde 4 byte ise 04 03 02 01 şeklinde dizilimi tersten yapıp yollayın.

hocam normal şartlarda şu şekilde oluyor hiç bir veri göndermeden open yaptığında (yada read tam bilmiyorum) direk cihaz tepki veriyor.


0EMrPV.png

Veri göndermeden direk olan işlem bu hocam.

usb monitor ile izlenmiş tam gönderilen veriler bu şekilde hocam.Loader yazma vb. işlemlerin hesaplamalarını yazdım sadece göndermek kaldı.


Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.
Cevapla
#15
JAVA Kaynak Kodlarında S1Flasher.java dosyasında anladığıma göre
maxS1packetsize olarak ne olduğuna bakılıyor, buna göre daha büyükse bunlar ilgili paket büyüklüklerine göre bölünüp öyle yollanıyor.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#16
(01-05-2018, Saat: 11:10)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.JAVA Kaynak Kodlarında S1Flasher.java dosyasında anladığıma göre
maxS1packetsize olarak ne olduğuna bakılıyor, buna göre daha büyükse bunlar ilgili paket büyüklüklerine göre bölünüp öyle yollanıyor.

hocam öncelikle cevap verdiğiniz ve ilgilendiğiniz için çok teşekkür ederim. Sorunum veri göndermede değil cihazı daha hiç bir veri göndermeden direk usb port open yaptığında cihaz zaten direk cevap veriyor diğer programlarda ama ben open yaptığımda yada oradaki veriyi gönderdiğimde cevap gelmiyor malasef.
Cevapla
#17
Direkt open yapınca cevap veriyor olayı open yaparken protokol gereği bir veri post edilip handshake bekleniyordur. Bu nedenle usb trafiğini yeniden gözden geçirip incelemek lazım.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#18
(01-05-2018, Saat: 13:19)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.Direkt open yapınca cevap veriyor olayı open yaparken protokol gereği bir veri post edilip handshake bekleniyordur. Bu nedenle usb trafiğini yeniden gözden geçirip incelemek lazım.

hocam create file üzerine araştırma yaptım ama malasef bir sonuca ulaşamadım biraz açabilirmisiniz demek istediğinizi yada nereden araştırma yapmaya başlamalıyım.
Cevapla
#19
CreateFile yaparken Read/Write açılıyor burada sıkıntı olduğunu sanmıyorum, hemen ardından yapılacaklar listesi olmalı. 

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. aslında 
"// test1.cpp : CreateFile, write it and CreateFileMapping for reading and writing" başlığında yazana göre bağlantı yapıldı buraya diyecek birşey yok. Bağlantı sırasında esnekliğiniz sadece cihazı seçmekten öte değil. Yanlış anlaşılmasın. 

- Bahsetmek istediğim, JAVA kayak kodlarında cihazı uyandıran noktanın ne olduğunu ben bilmiyorum. Belki kaynak kodlarda USBOpen'dan sonra geçen basit bir properties okuması ile cihaz uyanıyor olabilir belki de bir başka yerde.

- Hani JAVA projenin FlashTool'u çalışırken gözlemlediğinizde "bağlanınca tepki veriyor" diyorsunuz ya, ben de sadece bağlanmadığını ardından da bir de içerik değerlendirmesi yaparken tepki verebileceğini ifade etmeye çalıştım.

- Java kaynak kodlarına da bakınca USB bağlantı unit grubu Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. oluyor. 
- Cihaz tür vs. bilgileri de Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. içinden olduğu görülüyor.

Bu arada Listener kurmuşlar buna göre bağlantı için ADB sürücüsü kontrolü vs. var. Demek ki buradan da bir geri besleme alıyor ki ADB Flasm Mode olup olmadığı testini gerçekleştiriyor. Bu akışı okuyup anlam verecek kişi yine siz olacaksınız.

İlk mesajımda da dediğim gibi, sadece bir kımıldatmak cevap için yazdım. Proje sahibi olarak gerekirse JAVA'yı da öğrenmeniz gerekecek. Biliyorsanız zaten sorun yok. Bir akış çıkartın sonra aynı akışı Delphi yakasında oluşturursunuz.

- Vakit ve sabrın ötesinde suya yazı yazıyoruz burada. Telefon flash merakım da yok Sony cihazım da yok. Dolayısıyla yardımcı olamayacağımı üzülerek bildireyim.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#20
(02-05-2018, Saat: 08:46)mrmarman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.CreateFile yaparken Read/Write açılıyor burada sıkıntı olduğunu sanmıyorum, hemen ardından yapılacaklar listesi olmalı. 

Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. aslında 
"// test1.cpp : CreateFile, write it and CreateFileMapping for reading and writing" başlığında yazana göre bağlantı yapıldı buraya diyecek birşey yok. Bağlantı sırasında esnekliğiniz sadece cihazı seçmekten öte değil. Yanlış anlaşılmasın. 

- Bahsetmek istediğim, JAVA kayak kodlarında cihazı uyandıran noktanın ne olduğunu ben bilmiyorum. Belki kaynak kodlarda USBOpen'dan sonra geçen basit bir properties okuması ile cihaz uyanıyor olabilir belki de bir başka yerde.

- Hani JAVA projenin FlashTool'u çalışırken gözlemlediğinizde "bağlanınca tepki veriyor" diyorsunuz ya, ben de sadece bağlanmadığını ardından da bir de içerik değerlendirmesi yaparken tepki verebileceğini ifade etmeye çalıştım.

- Java kaynak kodlarına da bakınca USB bağlantı unit grubu Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. oluyor. 
- Cihaz tür vs. bilgileri de Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız. içinden olduğu görülüyor.

Bu arada Listener kurmuşlar buna göre bağlantı için ADB sürücüsü kontrolü vs. var. Demek ki buradan da bir geri besleme alıyor ki ADB Flasm Mode olup olmadığı testini gerçekleştiriyor. Bu akışı okuyup anlam verecek kişi yine siz olacaksınız.

İlk mesajımda da dediğim gibi, sadece bir kımıldatmak cevap için yazdım. Proje sahibi olarak gerekirse JAVA'yı da öğrenmeniz gerekecek. Biliyorsanız zaten sorun yok. Bir akış çıkartın sonra aynı akışı Delphi yakasında oluşturursunuz.

- Vakit ve sabrın ötesinde suya yazı yazıyoruz burada. Telefon flash merakım da yok Sony cihazım da yok. Dolayısıyla yardımcı olamayacağımı üzülerek bildireyim.


hocam şu yorumunuz bile benim için yeterlidir tekrardan çok teşekkür ederim Smile
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Comboboxa girilen değere göre veri çekme. bünyamin68 4 153 06-10-2019, Saat: 10:16
Son Yorum: bünyamin68
  HTML Sayfaya Veri Çekme Hayati 1 217 17-07-2019, Saat: 21:44
Son Yorum: SimaWB
  Excel'den veri çekme hatası harezmi 7 414 17-07-2019, Saat: 18:40
Son Yorum: harezmi
  Parmak izi okuyucudan veri çekmek ermanispir@gmail.com 9 681 16-07-2019, Saat: 13:47
Son Yorum: wiseman
  DBGrid1 den Excel Veri Gönderme OZCANK 0 197 13-07-2019, Saat: 14:03
Son Yorum: OZCANK



Konuyu Okuyanlar: 1 Ziyaretçi