Hallo,
ich habe Probleme unter QT ein I2C Block Lesekommando zu erstellen.
Damit ich den Buffer erhalte muss ich 2x das IowKitRead Kommado aufrufen um die empfangenen Daten im Buffer zu erhalten.
Was ist an meinem Code falsch?
IO-WARRIOR56, QTCREATOR, Windows 10 pro
Funktionsaufruf: I2C_readblock(IOWarrior, 0xEE, 0, 16, bI2C_Readbuffer);
short I2C_readblock(IOWKIT_HANDLE handle, BYTE ucI2CAddress, BYTE ucAddress, BYTE ucCount, BYTE *bBuffer)
{
BYTE ucPtr;
IOWKIT56_SPECIAL_REPORT report;
QByteArray qbCmd;
ULONG ulRet;
memset(&report, 0, IOWKIT56_SPECIAL_REPORT_SIZE);
report.ReportID = 0x02; // Enable Write-Mode
report.Bytes[0] = 0xC2; // Start & Stopbit = 1, 3Bytes will be send
report.Bytes[1] = ucI2CAddress; // Device address
report.Bytes[2] = ucAddress; // set sub address
IowKitWrite(handle,IOW_PIPE_SPECIAL_MODE, (char *) &report, IOWKIT56_SPECIAL_REPORT_SIZE);
memset(&report, 0, IOWKIT56_SPECIAL_REPORT_SIZE);
report.ReportID = 0x03; // Enable Read-Mode
report.Bytes[0] = ucCount; // telegram length
report.Bytes[1] = ucI2CAddress+1; // Device address
IowKitWrite(handle,IOW_PIPE_SPECIAL_MODE, (char *) &report, sizeof(report));
ulRet = IowKitRead(handle,IOW_PIPE_SPECIAL_MODE, (char *) &report, sizeof(report)); // 1. Lesen
ulRet = IowKitRead(handle,IOW_PIPE_SPECIAL_MODE, (char *) &report, sizeof(report)); // 2. Lesen
qbCmd.clear();
qbCmd.append(ulRet);
for(ucPtr = 0;ucPtr < ucCount; ucPtr++)
{
*bBuffer = report.Bytes[2+ucPtr];
qbCmd.append(report.Bytes[2+ucPtr]);
bBuffer++;
}
qDebug() <<"[iowarrior] I2C readblock " << qbCmd.toHex();
return(1);
}
I2C Buffer Leseproblem
Moderator: Guido Körber
-
- Site Admin
- Posts: 2856
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact:
Re: I2C Buffer Leseproblem
Wenn man den Status-Report vom I2C-Write nicht gleich liest, dann liegt der halt noch im Buffer…
-
- Posts: 2
- Joined: Fri Mar 02, 2018 12:39 am
Re: I2C Buffer Leseproblem
Ist natürlich logisch!Wenn man den Status-Report vom I2C-Write nicht gleich liest, dann liegt der halt noch im Buffer…
Wie währe es wenn Ihr mal die Dokumentation auf einen verständlichen Stand bringt und den Ablauf in eienm Flussdiagramm beschreiben würdet?
Danke für die Antwort.