Problem beim umschreiben BME680 Library auf onewire

Gast #5412781
Lesenswert?

Guten Morgen,

ich suche immer gute Sensoren für den Smarthome Bereich und jetzt gibt's 
ja den BME680 mit zusätzlichem Luftqualitätssensor.
Da mir I2C Sensoren nicht viel bringen habe ich schon den BME280 als 
onewire umgestrickt. Extra so gebaut, dass man alte DHT22 Gehäuse nutzen 
kann.
Leider ist die BME680 Library für mich etwas zu objektorientiert 
gestrickt. Die vom BME280 konnte ich noch selbst ganz gut umschreiben. 
Diesmal brauche ich etwas Hilfe.

Ich nutze die Adafruit Library, die so strukturiert ist:
Adafruit_BME680.cpp
Adafruit_BME680.h
bme680.c
bme680.h
bme680_defs.h

Die "bme680" Sourcen kommen diesmal scheinbar direkt von Bosch.

zunächst ist eine Struktur für den Sensor definiert, darin werden ein 
paar Einstellungen und Sensordaten hinterlegt, soweit kein Problem.
Auch darin enthalten sind aber Pointer zu den I2C schreib und 
lese-Funktionen und da wird's für mich kompliziert. Die 
Schreib-/Lesefunktionen selbst sind nicht in der Adafruit Klasse, 
deshalb muss ich einen Pointer auf mein Onewire Element übergeben.
Die Funktionen kennen aber den Datentyp Onewire scheinbar nicht, was ich 
nicht verstehe.

Definition der read/write Funktionen mit hinzugefügtem Onewire Pointer:
1
typedef int8_t (*bme680_com_fptr_t)(Onewire* onewire, uint8_t dev_id, uint8_t reg_addr, uint8_t *data, uint16_t len);


Beispielaufruf der Funktion auch mit hinzugefügtem Onewire:
1
gas_sensor->write(gas_sensor->onewire, gas_sensor->dev_id, BME680_MEM_PAGE_ADDR & BME680_SPI_WR_MSK, &reg, 1);


Die Funktion wird also aus dem struct aufgerufen und noch mit Daten aus 
dem struct gefüttert. Augenverdreh

Die Eigentliche Frage ist aber quasi warum die read write Funtkionen 
behaupten sie kennen den Datentyp onewire nicht?


Das ganze ist natürlich für jemand der das ganze nicht vorliegen hat nun 
auch nicht einfach zu verstehen, aber vielleicht hat trotzdem jemand 
eine Idee.


zwanni
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren