Das no|Link-Accessory verwaltet alle Informationen, die zur Ansteuerung der verwendeten Infrarot- oder sonstiger Hardware benötigt werden. Jedem hardwareabhängigen Code (z.B einem Infrarotsignal) wird ein Befehl zugeordnet, und für jedes Gerät (z.B. Videorekorder) existiert eine Liste solcher Befehle.
Will nun z.B. eine Applikation für die Fernbedienung eines Videorekorders ein Infrarotsignal für die Play-Taste senden, so schickt es no|Link eine XAcc-Nachricht, in der das Kommando <senden>, das Gerät <VIDEOREKORDER> und der Befehl <PLAY> codiert sind.
Damit eine Applikation mit no|Link vollständig kommunizieren kann, muß diese das Request/Reply-Protokoll unterstützen, was als Extended-Feature in der XDSC-Beschreibung durch ein "RQ" bekannt gemacht wird. Nur so ist es möglich, die Liste der eingetragenen Geräte von no|Link erhalten zu können.
Wenn die Applikation auch Codes vom Accessory empfangen können will (nur mit entsprechender Hardware möglich), so muß als Extended-Feature in der XDSC-Beschreibung zusätzlich ein "RR" (Remote Receive) enthalten sein. Alle Applikationen, die mit noLink arbeiten wollen, müssen den XAcc-Level 1 unterstützen.
Als Application-Type enthält das no|Link-Accessory im XDSC "\2RC" (Remote Control).
Die vollständige XAcc-Identifikation von no|Link lautet zur Zeit folgendermaßen (in C-Syntax):
char xaccNoLinkIdent[] = "Infrarot Manager\0" "XDSC\0" "1Fernsteuerschnittstelle\0" "2RC\0" "XRQ\0" "NnoRci\0";
Eine denkbare XAcc-Identifikation für eine no|Link-Applikation könnte so aussehen:
char xaccIdentstring[] = "VideoControl\0" "XDSC\0" "1Video Fernbedienung\0" "XRQ\0" "Nno|Video ACC\0";
Die Kommunikation zwischen Applikation und dem no|Link-Accessory findet hauptsächlich über ACC_TEXT Messages statt.
Das Accessory versteht zur Zeit folgende Befehle, die als String mittels einer ACC_TEXT Message versendet werden müssen (<X> := <Gerät>:<Befehl>):
Insbesondere bei der Neuinstallation einer Fernsteuerungs-Applikation sollten alle Geräte und Befehle, die diese Applikation verwendet, dem Accessory mitgeteilt werden!
Wenn no|Link den mitgelieferten Befehl nicht kennt, so wird der Benutzer aufgefordert, die nötige "Lernprozedur" zu tätigen bzw. dem neuen Befehl einen schon vorhandenen zuzuweisen.
Es sollte in jeder Fernsteuerungsapplikation eine Funktion geben, die es dem Benutzer ermöglicht, alle unterstützten Befehle zu "testen" - am besten über einen "Anmelden"-Button.
Als Antwort erhält die Applikation eine ACC_ACK-Message, bei der in msgbuff[3] der Erfolg der Behandlung des Befehls vermerkt ist:
Eine Applikation kann vom Accessory eine Liste der eingetragenen Geräte anfordern. Hierfür muß die Applikation das neue XAcc-Request/Reply-Protokoll verstehen (siehe oben bzw. XACC.H).
Um die Liste anzufordern, wird von der Applikation ein ACC_REQUEST an das Accessory geschickt, wobei diese Nachricht folgendermaßen aufgebaut sein muß:
msgbuff[0] = ACC_REQUEST msgbuff[1] = apid msgbuff[2] = 0 msgbuff[3] = 0x04 /* Datentyp: Code */ msgbuff[4] = 'D' /* 'D' steht für "devices" */ msgbuff[5] = 0 msgbuff[6] = 0 msgbuff[7] = 0
Als Antwort erhält die Applikation, wenn ein Fehler auftrat eine ACC_ACK- Message mit msgbuff[3] == 0, oder bei Erfolg eine ACC_REPLY-Message:
msgbuff[0] = ACC_REPLY msgbuff[1] = apid von no|Link msgbuff[2] = 0 msgbuff[3] = 0x02 /* Datentyp: Environment-String */ msgbuff[4]+msgbuff[5] = Pointer auf einen global zugreifbaren Speicher, in dem die Liste der Geräte in folgendem Format steht: "DEVICEINFOS:\0Gerät1\0Gerät2\0" msgbuff[6]+msgbuff[7] = long-value, der die Größe des Buffers angibt (inkl. der abschließenden zwei NULL-Bytes)
Der Empfang einer ACC_REPLY-Message muß abschließend mit einer ACC_ACK- Message bestätigt werden, damit das no|Link-Accessory seine Resourcen wieder freigeben kann!