C++ stream in variable referenzieren

Sebastian Reinhardt <[email protected]> Tue, 2 Apr 2024 21:54:39 +0200
Newsgroups gmane.user-groups.linux.dresden
Message-ID <[email protected]>
Hallo,

Ich steh mal wieder etwas auf dem Schlauch und ich hoffe, dass mir einer 
von euch den "Schubs" in die richtige Richtung geben kann.

Erstmal die Voraussetzungen:

Ich habe an einem PC/PI mehrere I2C-GPIO- Porterweiterungen (MCP23017 
und MCP23008) hängen. Die haben 16 bzw. 8 GPIO's und hängen mit 
verschiedenen Adressen am I2C.

Nun möchte ich diese Bausteine mit C++ über I2C mit entsprechenden 
Bibliotheken (MCP23017 und MCP23008) direkt ansteuern. Die jeweilige 
Bezeichnung, Busadresse usw. lese ich aus einer text/csv-DAtei ein und 
rufe diese Daten aus der Vectorvariable (mcp_elements mit eigener 
struct) ab. Das funktioniert soweit auch, z.B.:

-------code-------

MCP23017 mcpout1.(atoi(mcp_elements[i_e].busnr.c_str()), 
atoi(mcp_elements[i_e].busaddr.c_str()));

mcpout1.openI2C();

for ( int i17 = 0; i17 < 16; i17++) {

     mcpout1.pinMode(i17, OUTPUT);
     mcpout1.pinMode(i17, LOW);

}

-------/code-------

Nun muss ich eben für jeden Baustein  das Device mit dem Handle/ostream 
verbinden und benötige eben z.B. "mcpout1", "mcpout2", "mcpout3" usw. Da 
ich aber nicht sicher weiss, ob immer die gleiche Anzahl von I2C- 
Bausteinen an den Bus angeschlossen sind, ist diese "Hardcodierung" 
ungünstig. Um nicht jedes mal das Programm anpassen und neu kompilieren 
zu müssen, möchte ich die Art (MCP23008/MCP23017), Busadresse, Art der 
Ports (In-/Outputs) Nummerierung der Ports usw. aus der txt/csv-Datei 
lesen und das etwas dynamisch behandeln. Das Lesen der Infos klappt 
schon, aber dann hänge ich....

Nun die Frage: Kann ich eine Variable (event. einen Vector) erstellen in 
den ich dann in einer Zeile "Nr", "Streamref", "Portnummerstart", 
"Portnummerende" speichern kann und dann eben nur diese eine Variable in 
die anderen Unterprogramme übergeben kann? D.h., kann ich in dieser 
Variable, und wenn ja wie, die Streamreferenz speichern und übergeben 
kann. In den Unterprogrammen möchte ich die Variable nach dem Schema 
"liegt die anzusteuernde Portnummer zwischen "Start" und "Ende", dann 
ist der Stream/ Referenz zu verwenden benutzen.

Wie müsste die Variable aussehen? Vector mit welcher struct?

Wäre toll, wenn mich jemand erleuchten könnte.....oder wenigstens den 
Weg weisen könnte.

-- 
Mit freundlichen Grüßen

Sebastian Reinhardt