Multiple reports

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
steinmassl322
Posts: 3
Joined: Wed Jul 27, 2016 1:10 pm

Multiple reports

Post by steinmassl322 »

Hallo zusammen,
ich hab am IOWDongle einen BOSCH BME280 Sensor hängen.
ich möchte auf einen Rutsch über I2C 26 Calibrierkonstanten auslesen, die auf dem Sensor gespeichert sind.
Zuerst schicke ich dem Sensor die Adresse, wo diese zu finden sind und schicke dann einen Read-Befehl:

Code: Select all

memset(&report, 0, IOWKIT_SPECIAL_REPORT_SIZE);
report.ReportID = 0x03; // ID 3 for reading
report.Bytes[0] = 0x1A; // 26 bytes with IIC Start and Stop
report.Bytes[1] = BME280_CTRL_R1 //Adresse Read
IowKitWrite(IOWarrior, IOW_PIPE_SPECIAL_MODE, (char *) &report, IOWKIT_SPECIAL_REPORT_SIZE);

IowKitRead(IOWarrior, IOW_PIPE_SPECIAL_MODE, (char *) &report, sizeof(report));
Der Report hat ja nur Platz für 6 Bytes. Wie komme ich nun an die restlichen Bytes?
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Multiple reports

Post by Guido Körber »

Na mehrfach IowKitRead aufrufen.
steinmassl322
Posts: 3
Joined: Wed Jul 27, 2016 1:10 pm

Re: Multiple reports

Post by steinmassl322 »

Ich habs so gemacht:

Code: Select all

IowKitRead(IOWarrior, IOW_PIPE_SPECIAL_MODE, (char *) &report, sizeof(report));
for(i=0;i<6;i++)
  {
	BME1.COMP.raw_param1[i] = report.Bytes[i+1]; //
  }
IowKitRead(IOWarrior, IOW_PIPE_SPECIAL_MODE, (char *) &report, sizeof(report));
  for(i=6;i<12;i++)
  {
	BME1.COMP.raw_param1[i] = report.Bytes[i-5]; //
  }
IowKitRead(IOWarrior, IOW_PIPE_SPECIAL_MODE, (char *) &report, sizeof(report));
  for(i=12;i<18;i++)
  {
	BME1.COMP.raw_param1[i] = report.Bytes[i-11]; //
  }
IowKitRead(IOWarrior, IOW_PIPE_SPECIAL_MODE, (char *) &report, sizeof(report));
  for(i=18;i<24;i++)
  {
	BME1.COMP.raw_param1[i] = report.Bytes[i-17]; //
  }
IowKitRead(IOWarrior, IOW_PIPE_SPECIAL_MODE, (char *) &report, sizeof(report));
  for(i=24;i<27;i++)
  {
	BME1.COMP.raw_param1[i] = report.Bytes[i-23]; //
  }
Das klappt leider nicht. Beim 3. IowKitRead bleibt er hängen und wartet, bis sich was ändert.
Ich habe mit "SimpleHIDWrite.exe" meine Befehle getestet. Dort bekomme ich 26 Bytes (= 4*6 Bytes und 1*2 Bytes).
Guido Körber
Site Admin
Posts: 2856
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: Multiple reports

Post by Guido Körber »

iowKitReadNonblocking ist da meisten besser zu benutzen.

Was sagen denn die Flags in den Reports die zurück kommen?
steinmassl322
Posts: 3
Joined: Wed Jul 27, 2016 1:10 pm

Re: Multiple reports

Post by steinmassl322 »

Da lag das Problem.
Nach überprüfen der Flags habe ich den Fehler gefunden.
Hatte beim Copy&Paste aus den Sampledateien versehentlich das Sensibus Protokoll aktiviert.
Vielen Dank.

Multiple Reports auslesen klappt ohne Probleme.
Post Reply