DMX Steuerung Selbstbau? Teil 4 Voreingestellte Konfigurationen Laden

Habe noch eine IR Fernbedienung für den Computer gefunden. Diese wird auch als solche unter Linux erkannt. Habe aber keine Lust mich mit dem Input Stream eine IR-Devices zu beschäftigen. Deshalb muss folgende Zeile reichen:

  //***************************************************
  // Abfrage Input
  //***************************************************
  cInput = getchar();
  iGueltigerWert = 0;

Hier wird alles, was eine Tastatureingabe ist, zurückgegeben. Und zwar jedes einzelne Zeichen. Der Tread, bzw. Prozess hält an und wartet auf eine Eingabe. Man muss das gewüschte Zeichen eingeben und dann Enter drücken. Bei der Auswertung wird zuerst das Zeichen verarbeitet. Im zweiten Durchlauf kommt dann die Entertaste. Diese Eingabe muss Ignoriert werden.

Der Einfachheit halber werden hier nur Zahlen von 0 bis 9 aktzeptiert. Diese Zahlen beginnen bei ASCII Zeichen mit 0x30 plus den Wert der Zahl:

  if((iInput & 0x30)==0x30)
  {
    iInput = iInput & 0x0F;

    if(iInput > 0x09)
    {
       //Kein Gültiger Wert
       printf("Kein gültiger Wert:%x \n",iInput);
    }
    else
    {
      iGueltigerWert = 1;
    }
  }

Wenn jetzt ein gültiger Wert vorhanden ist:

  if(iGueltigerWert == 1)
  {...

Wir eine zugehörige Konfigurationsdatei geöffnet und deren Daten in die Sende Datei kopiert.

Zuerst wird der Dateiname in ein Array geschrieben und die entsprechende Datei geöffnet.

      //***************************************************
      // Hole Daten vom Dateisystem
      //***************************************************
      sprintf(cDateiName,"KonfigDaten%x.dmx",iInput);
      fKonfig_Datei = fopen(cDateiName,"r");

Dann wird überprüft ob die Datei vorhanden ist, die Sende Datei geöffnet und die Daten kopiert.

  if(iGueltigerWert == 1)
  {
    
 
      //***************************************************
      // Hole Daten vom Dateisystem
      //***************************************************
      sprintf(cDateiName,"KonfigDaten%x.dmx",iInput);
      fKonfig_Datei = fopen(cDateiName,"r");


      printf(cDateiName);

      //fKonfig_Datei = fopen("KonfigDaten.dmx","r",iInput);
      if(fKonfig_Datei == 0)
      {
         printf("KonfigDaten%x.dmx fehlt! \n",iInput);
         Buffer[DATEN_OFFSET]=0xFF;
      }
      else
      {
        fread(Buffer,ANZAHL_BYTES,1,fKonfig_Datei);
        //***************************************************
        // Schließe Datei
        //***************************************************
        fclose(fKonfig_Datei);

        //***************************************************
        // Schreibe Konfig
        //***************************************************
        fSende_Datei = fopen("SendeDaten.dmx","w+");
        if(fKonfig_Datei == 0)
        {
           printf("SendeDaten.dmx Nicht Schreibbar! \n");
        }
        else
        {
          printf("SendeDaten.dmx Schreiben \n");
          fwrite(Buffer,ANZAHL_BYTES,1,fSende_Datei);
          fclose(fSende_Datei);
        }
      }
  }

Das ist nicht wirklich schön, und lässt sich sicherlich eleganter lösen. Aber es entkoppelt die verschiedenen Prozesse und macht das Leben einfacher. Kollisionen beim Zugriff können vorkommen. Das muss bei der Entwicklung bedacht werden.

Ich mache mir übrigens keine Sorgen das ich mir den Speicher „Kaputtschreiben“ könnte. Bis das passiert funktioniert der Computer wahrscheinlich schon lange nicht mehr.