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ı:
(28-04-2018, Saat: 00:06)mrmarman Adlı Kullanıcıdan Alıntı: 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.

Bu microsoft linkinden GUID 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
kisisel_logo_dark.png
WWW
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


https://github.com/Androxyde/Flashtool


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


https://forum.xda-developers.com/showthr...p?t=832663
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ı: 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ı.


http://dosya.co/nk3euzkvf3wa/111111.htm.html
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ı: 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ı: 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ı. 

Şu linkten MSDN 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 Flashtool/src/flashsystem/io/ oluyor. 
- Cihaz tür vs. bilgileri de Devices.java 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ı: CreateFile yaparken Read/Write açılıyor burada sıkıntı olduğunu sanmıyorum, hemen ardından yapılacaklar listesi olmalı. 

Şu linkten MSDN 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 Flashtool/src/flashsystem/io/ oluyor. 
- Cihaz tür vs. bilgileri de Devices.java 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
  Kod yazma kolaylığı varmı? tuna 12 1.056 31-03-2024, Saat: 13:58
Son Yorum: frmman
  IEC 61850 Potokolünden veri alma shooterman 1 440 14-03-2024, Saat: 11:38
Son Yorum: shooterman
  Veri Tabanına Kontrollü Kayıt Yaptırma bünyamin68 15 783 08-03-2024, Saat: 00:06
Son Yorum: TuncayDelphi
  net.tcp web servis clienti yazma erkankurtaga 3 352 27-02-2024, Saat: 00:01
Son Yorum: mkysoft
  Problem - ZKTeco Cihazlardan Anlık Veri Alma mad85 16 8.141 25-12-2023, Saat: 11:35
Son Yorum: osiso



Konuyu Okuyanlar: 1 Ziyaretçi