Paso 6: Comunicaciones con el ASUS
Comunicación con el router puede parecer un poco desalentador (bien me hicieron), especialmente cuando eres nuevo en él. Pero no es tan difícil como parece.Enviar comandos al router
Primero tenemos que decidir lo que queremos la radio para hacer. Básicamente queremos que:
- juego
- hacer una pausa
- parada
- cambio de estación
- cambiar el volumen
Si nos fijamos en la lista de comandos para mpc vemos que:
- el comando de play = jugar mpc
- el comando de pausa = pausa de mpc
- el comando de stop = parar de mpc
- el comando de volumen = volumen del mpc [+/-] num (valor numérico)
El cambio de la estación es un poco más difícil. Para ser capaces de cambiar a otra estación, mpc necesita saber su dirección. Manera más fácil de hacerlo es cargar todas nuestras estaciones favoritas en una lista de reproducción en el reproductor. Por lo que al principio de nuestro código se agregue el comando:
agregar Dirección mpc para cada estación que queremos cargar en el router.
Antes de empezar a añadir emisoras, podríamos emitimos una orden clara de mpc . Esto borrará todas las listas anteriores, acaso hicimos cambios a la lista.
Después de todo ello, podemos cambiar la estación con el comando mpc jugar num , donde num es la posición de la estación en nuestra lista de reproducción añadido.
En Bascom, enviar estos comandos al router es muy fácil. Todo se hace con la impresión:
Imprimir "el juego del mpc" o imprimir "mpc volumen + 5"
No hay necesidad para agregar un retorno de Carridge (CR o ascii 013) al comando como la instrucción de impresión añade que por sí mismo.
Así como se puede ver, enviar comandos al router no es difícil en absoluto!
Solicitar y recibir información desde el router
Solicitar y recibir información desde el router es un poco más difícil. Una vez más, tendremos que decidir qué información queremos recibir del router. Al leer parte 6 en www.mightyohm.com, verás que hay un montón de información que se puede conseguir, pero queremos saber:
- el nombre de la estación
- el título de la canción
- el volumen de
La solicitud para la recepción de la estación y el título se hace con el siguiente comando:
echo "currentsong" | nc localhost 6600 | grep -e "^ Título:" -e "^ nombre:" (mente el capital T y N)
y para el volumen:
echo "estado" | nc localhost 6600 | grep -e "^ volumen:" (Aquí no capital)
Tan en bascom que daría:
Imprimir "Eco"; Chr(34); "currentsong"; Chr(34); " | NC localhost 6600 | grep -e "; Chr(34); «^ Título: "; Chr(34); " -e " ; Chr(34); «^ Nombre: "; Chr(34); ">/dev/tts/0"
y
Imprimir "Eco"; Chr(34); "estado"; Chr(34); " | NC localhost 6600 | grep -e "; Chr(34); «^ volumen: "; Chr(34); ">/dev/tts/0"
Otra vez no hay que añadir un CR.
Cuando nos envía una de estas solicitudes, recibirá algo en nuestro buffer inmediatamente. Ahora tenemos que arreglar todos los datos en el búfer en cosas utiles.
Por suerte para nosotros el router etiquetas de su información. Antes el estacionario añade nombre:, antes el título título y antes de volumen volumen. Así que dejaremos nuestro código buscar la etiqueta adecuada y leer el búfer desde ese punto hasta que encuentra un CR o hasta que el buffer esté vacío. Después de que la información es extraída en el búfer, vaciamos simplemente el buffer que puede ser utilizado para otra petición.
Para ello comenzamos con la lectura de la memoria intermedia en una cadena. Después de eso simplemente podemos limpiar el búfer para que no hay izquierda caracteres no deseados. Vamos a ver en nuestra cadena de uno de los sellos con la var = INSTR (cadena, substr) declaración. Devolverá la posición de nuestra marca en la cadena principal.
posición = Instr (Uart_in_string, "nombre:")
Esto nos dará la posición del primer carácter de la etiqueta. Si no desea agregar la etiqueta en la pantalla, simplemente agregue la cantidad que necesita para empezar la lectura detrás de la etiqueta. En este caso:
posición = posición + 6
Desde aquí tenemos que determinar están cuánto de los datos. Así que desde el punto de posición empezaremos leer un carácter a la vez hasta que encuentre un CR o hasta el último carácter de la cadena. Utilizamos el var = MID (var1, st [, l]) declaración donde var1 = origen, st = punto de partida y yo = la cantidad de caracteres a leer. Así que en nuestro caso:
Longitud = 0
Hacer
Longitud de incr
Posición = posición + longitud
Temp = MID (Uart_in_string, posición, 1)
Lazo hasta Temp = Chr (13) o Temp = ""
Así que ahora sabemos que la longitud de nuestros datos y lo único que queda por hacer, es extraer los datos de la cadena de fuente. Otra vez con la instrucción Mid :
Nombre = Mid (Uart_in_str, longitud de la posición)
El mismo funcionará para el título y el volumen.
Ahora no discutimos pero cómo leer del buffer y vaciarlo. Lectura de la memoria intermedia se hace con var = INKEY(). Esto volver el valor ascii del primer byte en el buffer y luego eliminar ese carácter del búfer. Sólo agregamos cada carácter recibido juntos en una cadena que contiene la totalidad o parte de la memoria intermedia.
Hacer
Uart_buffer = Ischarwaiting() Ischarwaiting() dice cuántos caracteres se esperan en el buffer
Si Uart_buffer > 0 entonces
Uart_in = Inkey()
Uart_in_str = Uart_in_str + Chr(uart_in) Chr transforma el valor ascii del carácter real
End If
Loop hasta que Uart_buffer = 0 o Len(uart_in_str) = 255 Len nos da la longitud de una cadena
Para vaciar el búfer, acabo de leer todo en una cadena hasta Ischarwaiting() = 0
Esto fue todo lo que necesita sabe comunicarse con su router. El resto del código son en su mayoría cosméticos: material gráfico y así sucesivamente.