[C#]USB-driver aansturen om onbekende data uit te lezen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb dus thuis zo'n sunny beam bakje, die gegevens bijhoud over men zonnepanelen en kan aangesloten worden via USB. Nu ben ik wat beginnen zoeken om deze data uit te lezen, maar bij het uitlezen wordt er nooit iets geretourneerd. Ik denk dat ik iets vergeet, want wat ik ook doe, ik krijg een steeds waarde 0 in men buffer. Zou sterk zijn dat na 20000 tekens, geen enkel eentje voorkomt niet ?

Ik heb een dotnet-wrapper klasse gedownload om te kunnen communiceren met de drivers en met het apparaat).Ik kan wel gegevens uitlezen, zoals type, serienummer, fabrikant, maar de eigenlijk inhoud niet. Hieronder de code die ik gebruik (naar een voorbeeld op: http://www.ftdichip.com/Projects/CodeExamples/CSharp.htm)

En hier vind je DLL die ik gebruik (kun je zien wat de methoden zijn met bijhorende uitleg) http://www.ftdichip.com/P...CSharp/FTD2XX_NET_106.zip

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FTD2XX_NET;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            UInt32 ftdiDeviceCount = 0;
            FTDI.FT_STATUS ftStatus = FTDI.FT_STATUS.FT_OK;

            // Create new instance of the FTDI device class
            FTDI myFtdiDevice = new FTDI();
            // Determine the number of FTDI devices connected to the machine
            ftStatus = myFtdiDevice.GetNumberOfDevices(ref ftdiDeviceCount);
            // Check status
            if (ftStatus == FTDI.FT_STATUS.FT_OK)
            {
                txtTest.Text += "Aangesloten Apparaten: " + ftdiDeviceCount.ToString();
                txtTest.Text += System.Environment.NewLine;
                txtTest.Text += System.Environment.NewLine;
            }
            if (ftdiDeviceCount == 0)
            {
                MessageBox.Show("Geen apparaten");
                this.Close();
            }
            
            // Allocate storage for device info list
            FTDI.FT_DEVICE_INFO_NODE[] ftdiDeviceList = new FTDI.FT_DEVICE_INFO_NODE[ftdiDeviceCount];

            // Populate our device list
            ftStatus = myFtdiDevice.GetDeviceList(ftdiDeviceList);

            if (ftStatus == FTDI.FT_STATUS.FT_OK)
            {
                for (UInt32 i = 0; i < ftdiDeviceCount; i++)
                {
                    txtTest.Text += "Device Index: " + i.ToString() + System.Environment.NewLine;
                    txtTest.Text += "Flags: " + String.Format("{0:x}", ftdiDeviceList[i].Flags) + System.Environment.NewLine;
                    txtTest.Text += "Type: " + ftdiDeviceList[i].Type.ToString() + System.Environment.NewLine;
                    txtTest.Text += "ID: " + String.Format("{0:x}", ftdiDeviceList[i].ID) + System.Environment.NewLine;
                    txtTest.Text += "Location ID: " + String.Format("{0:x}", ftdiDeviceList[i].LocId) + System.Environment.NewLine;
                    txtTest.Text += "Serial Number: " + ftdiDeviceList[i].SerialNumber.ToString() + System.Environment.NewLine;
                    txtTest.Text += "Description: " + ftdiDeviceList[i].Description.ToString() + System.Environment.NewLine;
                    txtTest.Text += System.Environment.NewLine;
                    txtTest.Text += System.Environment.NewLine;
                }
            }
            // Open first device in our list by serial number
            ftStatus = myFtdiDevice.OpenBySerialNumber(ftdiDeviceList[0].SerialNumber);
            if (ftStatus != FTDI.FT_STATUS.FT_OK)
            {
                MessageBox.Show("Kan het apparaat niet open");
                this.Close();
            }

            // Set up device data parameters
            // Set Baud rate to 9600
            ftStatus = myFtdiDevice.SetBaudRate(9600);
            if (ftStatus != FTDI.FT_STATUS.FT_OK)
            {
                MessageBox.Show("Fout bij zetten device parameters");
                this.Close();
            }


            // Set flow control - set RTS/CTS flow control
            ftStatus = myFtdiDevice.SetFlowControl(FTDI.FT_FLOW_CONTROL.FT_FLOW_RTS_CTS, 0x11, 0x13);
            if (ftStatus != FTDI.FT_STATUS.FT_OK)
            {
                MessageBox.Show("Fout bij zetten device parameters");
                this.Close();
            }

            // Set read timeout to 5 seconds, write timeout to infinite
            ftStatus = myFtdiDevice.SetTimeouts(5000, 0);
            if (ftStatus != FTDI.FT_STATUS.FT_OK)
            {
                MessageBox.Show("Fout bij zetten device parameters");
                this.Close();
            }

            //FTDI.FT_DEVICE device = FTDI.FT_DEVICE.FT_DEVICE_AM
            byte[] test = new byte[20000];
            uint teller = 0;
            myFtdiDevice.Read(test, 20000, ref teller);
            for (int i = 0; i < test.Length; i++)
            {
                txtTest.Text += test[i].ToString();
            }
        }
    }
}


Alvast bedankt

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-09 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

En je vraag is...?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Wat ik verkeerd doe bij het uitlezen van de eigenlijke data ... of hoe verloopt het normaal uitlezen van een usb-device, zodat ik begrijp waarom het niet werkt.

Ik denk dat ik ergens een pointer zou moeten instellen voor begin en eind, maarja ik ben dat ook niet zeker en veel documentatie (die nuttig is) vind ik ook niet over USB-aansturing . Ik ga ervan uit dat hij standaard bij nul begint bij een read operatie ....

Acties:
  • 0 Henk 'm!

  • Mr.Nobody
  • Registratie: Oktober 2001
  • Niet online
heb je iets aan een usb sniffer? http://fileforum.betanews.../USB-Monitor/1044278986/1

dan kun je tenminste zien of er iets verzonden wordt

Opensource delphi componenten (http://www.delphi-jedi.org)


Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 15:47

CoolGamer

What is it? Dragons?

Ik zie in je code:
C#:
1
2
            // Open first device in our list by serial number
            ftStatus = myFtdiDevice.OpenBySerialNumber(ftdiDeviceList[0].SerialNumber);

Weet je zeker dat het je eerste device is wat je moet hebben, misschien zit je te luisteren naar het verkeerde apparaat? Ik weet niet wat ftdiDeviceCount wordt zodra je je code draait.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Okey, ik heb dus die analyse tool gedownload en eens laten lopen, maar veel ben ik er niet mee denk ik. Er komt gewoon te veel data binnen, doordat er een soort van live-update opzit. Ik krijg hier tientallen records per seconde. En als ik de opdracht geef om bestanden te downloaden van apparaat (via extern programma) vind ik het niet terug in de logging. Maar ik zal daar morgen nog eens voor kijken, voor die monitoring.

Ik krijg wel degelijk het juiste apparaat terug, want ik kan algemene gegevens uitlezen (deze in de code er vlak onder), maar aan de logging en dus de opgeslagen data kan ik niet. De devicecount staat op 1 (deze wrapper herkent alleen chips van FTD2XX type)...

Misschien zie ik iets over het hoofd ? Moet ik het geheugen apart aanspreken via die USB-interface en hoe ? ... ik zou het echt niet weten, vandaar men vraag :)

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:02
FTDI? Dat zijn serieel naar USB chips toch? Maw, je hebt waarschijnlijk wel verbinding met de USB kant, maar niet met de seriele kant ( het uitlezen van die serienummers gaat over de FTDI chip, niet over wat er dan ook aan de andere kant van die chip zit )

Ter verduidelijking: je zult een of ander protocol moeten implementeren om met de seriele devices te praten die aan die FTDI chip zit. Hiervoor heb je iets van FTDI.Send / FTDI.Receive functies nodig, en natuurlijk de juiste instellingen. Wat deze precies zijn zul je in de documentatie van de zonnepanelen moeten opzoeken.
leuk_he schreef op vrijdag 13 maart 2009 @ 00:09:
Kijk ook eens naar

[google =usb reverse engineering]
Het probleem zit em niet in de USB verbinding, de TS kan serienummers uitlezen etc; het probleem zit em in de stap daarna.

[ Voor 58% gewijzigd door farlane op 13-03-2009 00:14 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

Kijk ook eens naar

[google =usb reverse engineering]

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 15:47

CoolGamer

What is it? Dragons?

leuk_he schreef op vrijdag 13 maart 2009 @ 00:09:
Kijk ook eens naar

[google =usb reverse engineering]
Ik snap niet wat je hier voor nuttigs kan vinden. Reverse engineering is niet echt nodig aangezien er gewoon documentatie beschikbaar is.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, klinkt logisch dus nu moet ik verbinding maken met de seriële kant ? En de vraag is nu hoe ? Moet dit ook via die dotnet driver ?

Allija geen code hoor (mag altijd :)), maar moet ik nu terugvallen op de standaard seriële toegang van windows en deze gebruiken om te lezen uit die driver?

Maar het zal voor morgen zijn, kga gaan slapen het is morgen weer werkdag :)

EDIT:

Er was al sneller update van een post => Merci en ik zal het morgen verder uitzoeken

[ Voor 11% gewijzigd door Verwijderd op 13-03-2009 00:17 ]


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 17:02
Verwijderd schreef op vrijdag 13 maart 2009 @ 00:16:
Ok, klinkt logisch dus nu moet ik verbinding maken met de seriële kant ? En de vraag is nu hoe ? Moet dit ook via die dotnet driver ?
Als het goed is heb je functies ( FTDI_Read / FTDI_Write ? ) waarmee je data over de USB verbinding van en naar het seriele device kunt zenden/ontvangen. De kunst is nu alleen nog, welke data moet je versturen om het zonnepaneel iets zinnigs te laten doen, en daarvoor heb je de documentatie van het zonnepaneel nodig.

Dus om je vragen te beantwoorden, ja dat moet via de .Net interface van de driver, en nee je hoeft in dit geval geen gebruikt te maken van de Windows functies voor seriele poorten. ( Alhoewel die chips afhankelijk van de gebruikte driver wel een virtuele compoort kunnen aanmaken als ik me niet vergis. Op deze manier echter zit je dichter op de mogelijkheden van de USB driver van FTDI )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, dat zal dus nog een probleem worden gezien ik nergens documentatie kan vinden. Ik heb een mail verstuurd naar de fabrikant om de mogelijkheden (commando's) voor de firmware op te vragen. Dus met een kans van misschien 1 op enkele miljarden ga ik dit waarschijnlijk mogen laten varen.

Ik zie wel, ik ga nog proberen meer te weten te komen over de firmware :)...

In elk bedankt voor alle hulp!

Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 15:47

CoolGamer

What is it? Dragons?

Er staat op de site wel wat code voor de andere modellen, maar er staat specifiek bij dat dat niet werkt bij jouw model. Misschien omdat die van jouw via USB verloopt. Je zou eens kunnen kijken:
http://www.sma.de/en/products/software/yasdi.html

Is wel in C.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

Verwijderd

Kijk ook eens naar mijn 'sunnybeamtool' http://michael-peeters.blogspot.com/2009/06/sunny-beam-under-ubuntu-sunnybeamtool.html

Is in C geschreven en voor linux / libusb bedoeld, maar libusb.dll bestaat ook onder Windows.

Acties:
  • 0 Henk 'm!

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 18-09 15:41

mOrPhie

❤️❤️❤️❤️🤍

Mich: je weet dat dit topic 3 maanden oud is?

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.

Pagina: 1