User manual

Schritt-für-Schritt-Anleitung
20. Zuletzt ist es noch erforderlich jene Funktion zu erzeugen, die bei jeder Änderung eines der Konfigblöcke durch das
System aufgerufen wird und es somit ermöglicht auf eine vom Server empfangene, geänderte Konfiguration zu
reagieren.
/* Funktion, die es ermöglicht auf eine vom Server empfangene, geänderte Konfiguration zu reagieren */
public ReadConfig(cfg)
{
// Wenn es sich bei der geänderten Konfiguration um die Basiskonfig handelt -> */
if(cfg == CFG_BASIC_INDEX)
{
new aData{CFG_BASIC_SIZE}; // Zwischenspeicher für die vom System gelesene Basiskonfig
new iSize; // Zwischenspeicher für die Größe der Basiskonfig in Bytes
new iTmp; // Zwischenspeicher für einen Parameter der Basiskonfig
/* Basiskonfig vom System lesen und in den Zwischenspeicher kopieren. Anschließend wird die
Nummer des Konfigblocks und der Rückgabewert der Lesefunktion (Anzahl der Bytes bzw. Fehlercode)
über die Console ausgegeben */
iSize = rM2M_CfgRead(cfg, 0, aData, CFG_BASIC_SIZE);
printf("Cfg %d size = %d\r\n", cfg, iSize);
/* Wenn die Anzahl der gelesenen Bytes unter der Größe der Basiskonfig liegt ->
Info: Fehlercodes sind negativ */
if(iSize < CFG_BASIC_SIZE)
{
/* Der folgende Block kopiert zunächst die Default-Werte in den Zw.speicher für die gelesene
Basiskonfig und setzt dann den Zw.speicher für die Größe der Basiskonfig auf die aktuelle
Größe. Dadurch wird das folgende "IF" sowohl beim Neuinitialisieren als auch bei empfangenen
Änderungen durchlaufen. Müssen für einzelne Parameter spezielle Aktionen ausgeführt werden,
ist es so nicht notwendig dies für beide Fälle getrennt zu implementieren. */
iTmp = ITV_RECORD;
rM2M_Pack(aData, 0, iTmp, RM2M_PACK_BE + RM2M_PACK_U32);
iTmp = ITV_TRANSMISSION;
rM2M_Pack(aData, 4, iTmp, RM2M_PACK_BE + RM2M_PACK_U32);
iTmp = TXMODE;
rM2M_Pack(aData, 8, iTmp, RM2M_PACK_BE + RM2M_PACK_U8);
iSize = CFG_BASIC_SIZE;
print("created new Config #0\r\n");
}
/* Wenn die Anzahl der gelesenen Bytes mindestens der Größe der Basiskonfig entspricht -> */
if(iSize >= CFG_BASIC_SIZE)
{
/* Aufzeichnungsintervall(u32, Big Endian) auf Postion 0-3 aus dem Zw.speicher für die gelesene
Basiskonfig in den Zw.speicher für einen Parameter kopieren */
rM2M_Pack(aData, 0, iTmp, RM2M_PACK_BE + RM2M_PACK_U32 + RM2M_PACK_GET);
if(iTmp != iRecItv) // Wenn der empfangene Wert nicht jenem der globalen Variablen entspricht ->
{
printf("iRecItv changed to %d s\r\n", iTmp); // empfangenen Wert über die Console ausgeben
iRecItv = iTmp; // empfangenen Wert in globale Variable übernehmen
}
/* Übertragungsintervall(u32, Big Endian) auf Postion 4-7 aus dem Zw.speicher für die gelesene
Basiskonfig in den Zw.speicher für einen Parameter kopieren */
rM2M_Pack(aData, 4, iTmp, RM2M_PACK_BE + RM2M_PACK_U32 + RM2M_PACK_GET);
if(iTmp != iTxItv) // Wenn der empfangene Wert nicht jenem der globalen Variablen entspricht ->
{
printf("iTxItv changed to %d s\r\n", iTmp); // empfangenen Wert über die Console ausgeben
iTxItv = iTmp; // empfangenen Wert in globale Variable übernehmen
}
/* Verbindungsart(u8) auf Postion 8 aus dem Zw.speicher für die gelesene Basiskonfig in den
Zw.speicher für einen Parameter kopieren */
rM2M_Pack(aData, 8, iTmp, RM2M_PACK_BE + RM2M_PACK_U8 + RM2M_PACK_GET);
if(iTmp != iTxMode) // Wenn der empfangene Wert nicht jenem der globalen Variablen entspricht ->
{
rM2M_TxSetMode(iTmp); // Verbindungsart auf den empfangenen Wert setzen
printf("iTxMode changed to %d\r\n", iTmp); // empfangenen Wert über die Console ausgeben
iTxMode = iTmp; // empfangenen Wert in globale Variable übernehmen
}
}
}
}
Rev. 01 21