Die Firmware wurde mit dem CV-AVR Compiler von hpinfotech.ro geschrieben. Bei Bedarf lässt sie sich sicher leicht auf GNU C oder andere umsetzen.
Der uC ATxmega128A3-AU hat 7 serielle Schnittstellen. Diese werden alle per Interrupt empfangen und die Daten in einem kleinen Empfangspuffer gelegt.
Die Hauptschleife holt die Daten aus diesem Empfangspuffer ab und sucht gültige CIV Datenblöcke, welche an einem Start von 0xFE,0xFE und einem Ende von 0xFD erkennbar sind. Wurde ein Datenblock gefunden, so werden die CIV Daten entnommen und in einen FIFO (Ringpuffer) gelegt. Dabei wird die grüne LED für ca. 1s lang eingeschaltet.
sobald CIV Daten im FIFO sind, werden diese herausgenommen, zu einem kompletten CIV Datenblock ergänzt und ein zusätzliches Kennungs-Byte vorangestellt. Dieses zusätzliche Byte ermöglicht die Erkennung ob der Datenblock von diesem Router ausgesendet wurde. Da CIV eine bidirektionale Eindraht-Schnittstelle ist, empfängt man seine eigene Aussendung auch immer, daher ist es wichtig zu wissen ob empfangene Daten von einem selbst stammen, da man sonst eine Endlosschleife bauen würde.
da bei CIV alle Geräte an einem einzelnen Draht hängen, ist die Gefahr von Daten-Kollisionen sehr hoch. Leider hat ICOM auf eine Prüfsumme verzichtet, daher steht die Kollisionsvermeidung ganz oben auf der Liste.
Dieser Router hat den Vorteil, den Datenverkehr zu redizieren, da jedes Gerät seine eigene CIV Schnittstelle hat. Dazu werden Daten nur dorthin gesendet wohin sie auch adressiert sind.
Nach dem Einschalten werden alle Daten überall hingesendet. Der Router beobachtet aber die CIV Adressen der angeschlossenen Geräte. Sobald der Router sicher weiß welches Gerät wo angeschlossen ist, sendet er dorthin nur mehr CIV Datenblöcke welche auch für dieses Gerät bestimmt sind. Das reduziert den Datenverkehr ganz erheblich und die Kollisionsgefahr geht fast gegen null.
rot ... der Router sendet CIV Daten zu einem angeschlossenen Gerät grün ... der Router empfängt CIV Daten von einem angeschlossenen Gerät gelb (rot+grün) ... es wird sowohl empfangen als auch gesendet
auf der Platine befindet sich auch eine RS-232 Schnittstelle welche durch Optokoppler geschützt ist. Diese Schnittstelle geht NICHT durch den uC, sie ist einfach direkt durchgeschleift. Allerdings beobachtet der uC den Datenverkehr und schaltet die rote und/oder grüne LED ein sobald Daten fließen.