Stap 6: Communicatie met de ASUS
Communicatie met de router lijkt misschien een beetje ontmoedigend (Nou ja het deed voor mij), met name wanneer u nieuw bent bij het. Maar het is niet zo moeilijk als het lijkt.Verzenden van opdrachten naar de router
Eerst moeten we beslissen wat we willen de radio te doen. We willen dat het in principe:
- spelen
- pauze
- Stop
- station wijzigen
- volume wijzigen
Als we naar de lijst met opdrachten voor mpc kijken zien we dat:
- de opdracht voor play = mpc spelen
- de opdracht voor pauze = mpc onderbreken
- de opdracht voor stop = stoppen met mpc
- de opdracht voor volume = mpc volume [+/-] num (numerieke waarde)
De wisseling van het station is een beetje moeilijker. Om te kunnen overstappen op een ander station, moet mpc weten van het adres. Eenvoudigste manier om dit te doen is vooraf alle onze favoriete stations laden in een playlist op de speler. Wij zullen dus de opdracht toevoegen aan het begin van onze code:
mpc adres toevoegen voor elk station dat wij willen vooraf laden in de router.
Voordat we beginnen met het toevoegen van stations, kunnen we een mpc duidelijk opdracht geven. Dit zal wissen alle vorige lijsten, enkel voor het geval dat we geen wijzigingen aangebracht aan onze lijst.
Nadat dit alles is gedaan, kunnen we het station met het commando mpc spelen num , waarbij num de positie van het station in onze toegevoegde playlist is veranderen.
In Bascom, het verzenden van deze opdrachten naar de router is erg eenvoudig. Alles wordt gedaan met PRINT:
Afdrukken "mpc play" of PRINT "mpc volume + 5"
Er is geen behoefte om toe te voegen een Carridge rendement (CR of ASCII-013) aan de opdracht, zoals de instructie PRINT voegt daaraan toe dat vanzelf.
Dus zoals je zien kunt, verzenden van opdrachten naar de router is niet moeilijk at all!
Aanvragen en info ontvangen van de router
Aanvragen en info ontvangen van de router is een beetje moeilijker. Nogmaals, zullen wij moeten beslissen wat info we willen ontvangen van de router. Wanneer u deel 6 op www.mightyohm.comlezen, ziet u dat er veel info die je kunt krijgen, maar we willen alleen weten:
- de naam van het station
- de titel van het liedje
- het volume
De aanvraag voor het ontvangen van het station en de titel is gedaan met het volgende commando:
echo "submenu" | nc localhost 6600 | grep -e "^ Titel:" -e "^ naam:" (Let op het kapitaal T en N)
en voor het volume:
"status" echo | nc localhost 6600 | grep -e "^ volume:" (Hier geen hoofdstad)
Dus in bascom die zou geven:
Afdrukken "echo"; Chr(34); "submenu"; Chr(34); " | NC localhost 6600 | grep -e ";" Chr(34); "^ Titel:"; Chr(34); " -e " ; Chr(34); "^ Naam:"; Chr(34); ">/dev/tts/0"
en
Afdrukken "echo"; Chr(34); "status"; Chr(34); " | NC localhost 6600 | grep -e ";" Chr(34); "^ volume:"; Chr(34); ">/dev/tts/0"
Opnieuw is er geen behoefte om toe te voegen een CR.
Wanneer we een van deze verzoeken sturen, zult we ontvangen iets in onze buffer onmiddellijk. Nu moeten we alle gegevens in onze buffer in nuttige dingen regelen.
Gelukkig voor ons etiketten de router zijn info. Voordat de stationname het voegt naam:, vóór de titel- titel , en vóór volume volume. Dus laten we onze code zoeken naar het geschikte etiket en lees de buffer vanaf dat punt totdat deze een CR ontmoetingen of totdat de buffer leeg is. Nadat alle info wordt gewonnen uit de bufffer, legen wij gewoon de buffer zodat het kan worden gebruikt voor een andere aanvraag.
Om dit te doen we beginnen met het lezen van de buffer in een tekenreeks. Daarna kunnen we de buffer gewoon schoon zodat er geen ongewenste tekens bevat links. We zullen kijken in onze string voor één van de labels met de var = INSTR (tekenreeks, substr) verklaring. Dit geeft de positie van onze label in onze belangrijkste string.
positie = Instr (Uart_in_string, "naam:")
Dit geeft ons de positie van het eerste teken van het label. Als u niet toevoegen van het label op uw scherm wilt, dan voeg gewoon het bedrag dat u wilt beginnen met het lezen achter het label. In dit geval:
standpunt standpunt + 6 =
Vanaf hier moeten we bepalen hoelang de gegevens is. Dus vanaf de punt standpunt beginnen we om één teken tegelijk te lezen totdat we een CR vinden of totdat we het laatste teken van de tekenreeks bereikt. We gebruiken de var = MID (var1, st [, l]) verklaring waar var1 = de bron, st = uitgangspunt en ik = de hoeveelheid tekens te lezen. Dus in ons geval:
Lengte = 0
Doen
INCR lengte
Positie = standpunt + lengte
Temp = MID (Uart_in_string, positie, 1)
Lus tot en met Temp = Chr(13) of Temp = ""
Dus nu weten we de lengte van onze gegevens en het enige dat nog moet doen, is het om gegevens te extraheren uit de brontekenreeks. Weer met de Mid -instructie:
Naam = Mid (Uart_in_str, positie lengte)
Hetzelfde zal werken voor de titel en het volume.
Nu we niet bespreken nog hoe om te lezen uit de buffer en hoe leeg te maken. Bij het lezen van de buffer gebeurt met var INKEY() =. Dit zal de ASCII-waarde van de eerste byte terug in de buffer en verwijder het teken uit de buffer. We gewoon elke één ontvangen teken toevoegen samen in een tekenreeks met het geheel of een gedeelte van de buffer.
Doen
Uart_buffer = Ischarwaiting() Ischarwaiting() vertelt hoeveel tekens er wachten in de buffer
Als Uart_buffer > 0 Then
Uart_in = Inkey()
Uart_in_str = Uart_in_str + Chr(uart_in) Chr transformeert de ASCII-waarde in het echte teken
End If
Loop totdat Uart_buffer = 0 of Len(uart_in_str) = 255 Len geeft ons de lengte van een string
Als u wilt legen van de buffer, lees net alles in een string tot Ischarwaiting() = 0
Dit was alles wat die u weet nodig te communiceren met uw router. Al de rest van de code zijn meestal cosmetisch: grafisch materiaal, enzovoort.