Ik ben bezig met een toerenregelaar op de EZUSB (AN21315SC). Deze zit verbonden met een PC via een USB-kabel. Op de PC draait een interface, welke moet communiceren met de USB-kit. Dit moet gebeuren via een buffer. Deze buffer wil ik realiseren via endpoints.
Ik heb een driver, waarin bepaalde methoden staan, die de communicatie verzorgen met deze endpoints vanuit C++. Aangezien endpoints een bulk data opslag zijn, leken de methodes ReadBulkData en WriteBulkData de goede methodes.
Hieronder de methodes:
Het probleem is het gebruik van deze methodes, aangezien mij niet duidelijk is welke endpoint bij welke pipe hoort. Ik heb al wel, doormiddel van een for-loop, meerdere waardes geprobeerd voor het pipenummer. Er werd alleen niets uit de endpoint gehaald.
De endpoint wordt vanaf de EZUSB automatisch gevuld als de endpoint vrij is, dus zodra er een request komt van de PC is de data wel aanwezig.
Ik heb een driver, waarin bepaalde methoden staan, die de communicatie verzorgen met deze endpoints vanuit C++. Aangezien endpoints een bulk data opslag zijn, leken de methodes ReadBulkData en WriteBulkData de goede methodes.
Hieronder de methodes:
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
| int CUSBInterface::WriteBulkData(WORD PipeNumber, BYTE *BArray, WORD ByteCnt) { if (!IsOpen()) return FALSE; void (_stdcall *function)(BYTE, WORD, BYTE*, WORD, WORD &); if (!(function = (void (_stdcall *)(BYTE, WORD, BYTE*, WORD, WORD &))GetProcAddress(m_hLibInstance, "WriteBulkData"))) { m_LastSystemError = GetLastError(); return FALSE; } (*function)(m_DevNumber, PipeNumber, BArray, ByteCnt, m_LastIOError); m_LastSystemError = 0; return (m_LastIOError == 0); } int CUSBInterface::ReadBulkData(WORD PipeNumber, BYTE *BArray, WORD ByteCnt) { if (!IsOpen()) return FALSE; void (_stdcall *function)(BYTE, WORD, BYTE*, WORD, WORD &); if (!(function = (void (_stdcall *)(BYTE, WORD, BYTE*, WORD, WORD &))GetProcAddress(m_hLibInstance, "ReadBulkData"))) { m_LastSystemError = GetLastError(); return FALSE; } (*function)(m_DevNumber, PipeNumber, BArray, ByteCnt, m_LastIOError); m_LastSystemError = 0; return (m_LastIOError == 0); } |
Het probleem is het gebruik van deze methodes, aangezien mij niet duidelijk is welke endpoint bij welke pipe hoort. Ik heb al wel, doormiddel van een for-loop, meerdere waardes geprobeerd voor het pipenummer. Er werd alleen niets uit de endpoint gehaald.
De endpoint wordt vanaf de EZUSB automatisch gevuld als de endpoint vrij is, dus zodra er een request komt van de PC is de data wel aanwezig.