==== Event-System ==== Die Basis-Firmware enthält ein kleines Event-System, mit der eine lose Kopplung zwischen AddOn und dem BiDiB-Bus zur Versendung von Nachrichten und das Starten bestimmter Makros realisiert werden kann. === Ereignisverwalter === Zentraler Teil ist der Ereignisverwalter mit dem Modul ''event_handler'' in der Basis-Firmware. Das Modul wertet das für Events zuständige ''Fifo'': ''event_fifo'' aus und agiert entsprechend. Zum Auslösen eines Ereignisses wird das Fifo: ''event_fifo'' lediglich mit dem gewünschten Ereigniscode gefüllt. Per Taskverwaltung wird dann der "Event Handler" informiert. Ereignisse können die Werte 0x00 bis 0xFF annehmen. === Makro-Ereignisse === Der Bereich von 0x00 bis 0x7F ist für die interne Makroverwaltung reserviert. === Taster Ereignisse === Der Bereich von 0xF0 bis 0xFF ist für die Taster auf der Basis-Platine reserviert. === Keyboard-Ereignisse === Unter Keyboard-Ereignissen wird das Verstellen von **externen** Tastern oder anderen Schaltelementen verstanden. Keyboard-Ereignisse liegen zwischen ''IN_DOWN0'' (ab 0x80) und ''IN_DOWN15'' sowie ''IN_UP0'' und ''IN_UP15''. Die Definition ist in der Definitionsdatei ''keyboard.h'' enthalten. Diese Ereignisse können frei verwendet werden und lösen eine MSG_LC_KEY-Nachricht bei eingeschaltetem "Feature" ''FEATURE_CTRL_INPUT_NOTIFY'' aus. Zusätzlich wird für die Ereignisse IN_DOWN0 bis IN_DOWN15 das korrespondierende Makro gestartet, wenn das "Feature" ''FEATURE_CTRL_MAC_START_MAN'' aktiviert ist. == Ereignis auslösen == Allein durch das Füllen des FiFos wird das entsprechende Ereignis ausgelöst: {{:softwarebausteine:oc_event.jpg|}} Im Beispiel nimmt den größten Teil die Umsetzungstabelle des Port-Bits in den Ereigniscode in Anspruch.