Buscar este blog

domingo, 8 de noviembre de 2015

Mazda CMU v33: Reproducir videos en pantalla


Cuando uno adquiere una cosa con pantalla, lo primero que se le viene a la mente es: ¿se verán bien las pornDIGO... qué resolución tiene? de seguro trae reproductor de DVD (mínimo) o algo por el estilo, pero NO, no pinches tiene nada, T_T ¡te odio Mazda! 

Lo bueno es que hay personas que obvio se preocupan por el entretenimiento de sus pasajeros, ¡ah, qué buenos anfitriones de autos! y han desarrollado algunos métodos para explotar lo que Mazda sigue desarrollando a paso lento.

Hay tres métodos actualmente para poder reproducir videos en la pantalla de 7":
1.- Llamando el video desde un dispositivo externo y forzando a que la interfaz lo ejecute a través de una línea de comandos.
2.- Con la App para Android que corre a través del WiFi.
3.- A través de un dispositivo que se conecta físicamente al CAN; son algo caros y no les tengo mucha confianza que digamos; así como todos conmigo… ayyy u_u

Les explicaré como hacer los dos primeros, pues el tercero no tengo la oportunidad de probarlo. 

Primer Método 
Prepara todo:
1. Pon tu video (de preferencia no muy largo) montada en la raíz de tu USB.
2. Conecta la USB en cualquier puerto del panel.
3. SSHea a tu Mazda. 

En pantalla…
5. En el menú del audio, selecciona la USB. Al menos debes tener 1 archivo con extensión mp3, de lo contrario arrojará que no posee multimedia alguna.
6. Verás que comienza la música, déjala correr y ponle pausa. 

Nota: El nfotainment de Mazda quedará funcionando al 100% en segundo plano. Podrás mover cualquier perilla del control y no afectará la reproducción de la línea de código; aumenta o disminuye el audio a tu consideración. 
La línea para ejecutar el mp4 no es mío. Lo vi aquí. Debes seguir pasos que no le entendí, pero que seguro sí dijo en japonés ¡Ja!

Manos a la obra:
7. Ejecuta la siguiente línea desde la consola SSH (pon el nombre de tu archivo en lugar de "test)

gst-launch filesrc location=/mnt/sda1/test.mp4 typefind=true ! aiurdemux name=demux demux. ! queue max-size-buffers=0 max-size-time=0 ! vpudec ! mfw_v4lsink demux. ! queue max-size-buffers=0 max-size-time=0 ! beepdec ! audioconvert ! 'audio/x-raw-int, channels=2' alsasink

8. Si no te funciona:
Asegúrate de que el nombre de archivo esté bien escrito.
SI la consola te arroja que no puede encontrar el dispositivo, sigue esto:
1. En la consola, escribe: cd /mnt
2. Escribe ls
3. Podrás ver la lista de los dispositivos (sda, sda1, etc). Si lo que ves es sdb, sdb1, entonces solo debes cambiar la "b" por la "a" en la línea. O ponle un “?” en vez de la letra a ó b.

gst-launch filesrc location=/mnt/sd?1/test.mp4 typefind=true ! aiurdemux name=demux demux. ! queue max-size-buffers=0 max-size-time=0 ! vpudec ! mfw_v4lsink demux. ! queue max-size-buffers=0 max-size-time=0 ! beepdec ! audioconvert ! 'audio/x-raw-int, channels=2' alsasink


Te advierto que el script no es ideal, y solo hay tres maneras de detener el video:
a- Espera a que termine el archivo
b- En tu consola llama: Ctrl+C (obvio mantén apretado la tecla Ctrl y luego presiona C)
c- Cierra la consola desde la cual ejecutaste el script.

9.- Todo vuelve a la normalidad
10.- Ponte feliz, ¡ja!

Segundo Método (posible virus)
Lukasz desarrolló una aplicación para Android con la que podemos ejecutar los videos de una manera sencilla y que además nos brinda la oportunidad de pausar, manipular el timeline del video y elegir entre distintos videos guardados en la USB insertada, ¡wow, qué bonito!

Prepara todo:
1.- Crea una carpeta llamada “Movies” en la raíz de tu USB y guarda ahí tus videos.
2.- No olvides poner un archivo *.mp3 en la raíz de la misma.
3.- Conecta tu USB en cualquier puerto.
4.- Conecta tu Mazda por WiFi a tu Hotspot y anota la IP.

En pantalla…
5. En el menú del audio, selecciona la USB. Al menos debes tener 1 archivo con extensión mp3, de lo contrario arrojará que no posee multimedia alguna.
6. Verás que comienza la música, déjala correr y ponle pausa.


Nota: El infotainment de Mazda quedará funcionando al 100% en segundo plano. Podrás mover cualquier perilla del control y no afectará la reproducción de la línea de código; aumenta o disminuye el audio a tu consideración. 


Manos a la obra:

7.- Abre la App en tu Android
8.- Pon la IP que te asignó el HotSpot, deja el usuario y contraseña tal como están; si se borran, recuerda que es “root” como usuario y “jci” como contraseña. 
9.- Dale click a “Get list of movies” y selecciona un video. 
10.- Ponte feliz, ¡ja!

A diferencia del primer método, con esta App puedes pausar, detener e incluso cambiar entre diferentes videos a tu gusto. Es obvio que por ser una App nueva, tiene errores y a veces hay bugs; por ejemplo: si pones en segundo plano la App en tu Android, al momento de volver, parece que se desconecta y al momento de obtener de nuevo la lista de videos, ya no hace nada. Aun así, es el método más sencillo y rápido de reproducir videos en tu pantalla. 

11.- Todo vuelve a la normalidad
12.- Ponte feliz, ¡ja!







Bites, de chocolate =P

Mazda CMU v33: Desactivar Watchdog Timer

Si eres de los que antes de probar en una VM cualquier cambio a un sistema, ya sea modificando un script, eliminando o sobre-escribiendo archivos, etc; sé bienvenido al grupo de los “Manotas” jajaja. Aún recuerdo a mi excelso M. en C. Escobedo de la Heroica ESIME que decía que siempre que un ñoño podía hacer algo bien, llegaba el nombrado arriba y lo echaba todo a perder; claro que yo ni entraba a clases, así que yo salgo bien librado ¡Ja!

Al tocar “en vivo” el CMU corres el riesgo de que el archivo que tocaste contenga errores en el script (bugs), provocando que el WatchDog timer no reconozca el correcto funcionamiento en el sistema y caiga así en un reinicio en bucle (reboot loop), haciendo que el Infotaintment de tu Mazda se reinicie hasta que mueres, ó que se te acabe la batería, y que seguirá haciendo aunque le pongas una nueva. 

Cuando tu CMU entra en este estado, resulta imposible conectarte a través de SSH para intentar revertir los cambios, pues el Watchdog timer lo reiniciará tan rápido que ni el DHCP puede asignarle una IP a tu Mazda. Así que no podemos regresar a un estado anterior. Lástima que aquí no aplique mi Ctrl+Z, ¡ayy u_u!

Por allá en la interné, oz_paulb desarrolló un script que desactiva el Watchdog timer  aprovechando una herramienta que Mazda utiliza (Mazda Retrieval Tool) para extraer un diagnóstico del estado del sistema; sí, pueden ver cuántas veces te has conectado, todo lo que le has movido y todo, TODO tu porno, bueno... no exageremos, quizá eso no, ¡fiiuuf! 

Vamos a recuperar el acceso, sigue los siguientes pasos:

Prepara todo: 
1.- Descarga el siguiente archivo 
2.- En Linux, asegúrate de instalar fping y sshpass:
     apt-get install fping sshpass
3- Abre tu consola1 y ve a la dirección donde extrajiste el Zip
4.-Conecta tu CMU a través del adaptador USB/Ethernet.
5- Ejecuta el siguiente comando:

./fix_watchdog.sh IPADDR

IPADDR2 es la dirección IP que tu DHCP asignó al Infotainment; por ejemplo, a mí un router Huawei me asignó la 192.168.1.73

El script correrá indefinidamente hasta que logre desactivar el Watchdog timer

¡OJo! No todos los DHCP asignarán la misma IP, puedes modificar el rango en el que asignarás las IP y así saber cuál tendrá. Tienes que modificar el script para que pueda funcionar con la que tú obtengas. 

Si no funciona, puedes intentar con la IP original del script, 192.168.42.1 y poner a tu computadora en 192.168.42.2 

6.- Una vez que el script detecte que el Watchdog timer se ha desactivado, el Infotaiment responderá inmediantamente, mostrará en pantalla que se ha logrado desactivar. Entonces podrás modificar, insertar o eliminar el archivo que causó que el sistema entrara en este reboot loop

Notas
1.- Puedes hacerlo también desde MAC; el Zip trae ambos scripts, ejecuta el que corresponda.
2.- No podemos saber la IP por el reinicio que arroja el Watchdog timer, pero puedes saberlo si limitas el rango de IP de tu DHCP. 

Toma en cuenta que este script no desactiva el Watchdog timer por siempre, solo lo hace una vez cada que lo ejecutas. Si tienes problemas, tienes que repetir el proceso desde el paso 4. Obvio no es recomendable que el script sobreviva al reinicio, pues este circuito está diseñado precisamente para los manotas como tú.


Espero te sirva y al menos dejes de ser “el que va por las tortas” del equipo, ¡Ja!


Todo el crédito y reconocimiento a oz_paulb.

Bites

Editar script para Watchdog timer. Mazda CMU


Este procedimiento es para modificar la dirección IP con la que se ejcutará el script que desactiva el Watchdog timer de tu Mazda. El script lo probé en un CMU v33.

Cada DHCP asignará una IP diferente a un equipo cada vez que te conectes a él, tardando algunos segundos en asignarla; así que si el CMU entra en modo reboot loop, el DHCP no tendrá tiempo de asignarle una, por tanto no puedes accesar a través de SSH para corregir el error.

Lo que hace el script es desactivar el Watchdog timer, encargado de verificar errores en el sistema y el responsable de reiniciarlo una y otra vez. Debemos modificarlo para que trabaje con la IP que nuestro DHCP asignará, pero... ¿cómo saberla? Solo ve a la configuración de tu router y limita el rango de IP a por ejemplo, 2, una para la lap con la que entrarás y la otra para el CMU.

Por otro lado, debemos modificar el script con la IP que obtendrá el CMU.

Solo necesitas el script y Linux.
1.- Descarga el siguiente archivo y extraelo donde gustes
2.- Ve a la ruta y abrelo en tu editor preferido. Yo usé vi
3.- Modifica la IP en la línea de IPADDR
4.- Guarda cambios y ya tienes listo el script para operar en la IP de tu DHCP
5.- Ejecuta el script con el CMU conectado a tu router a través del adaptador USB/Ethernet y en estado de reboot loop.
6.- El Watchdog timer se desactivará solo una vez, pero podrás modificar, editar, borrar, etc aquello que creas que hizo caer en este estado al CMU.





Bites.

domingo, 26 de julio de 2015

Café

Tras la llegada de los invasores, su familia y amigos tuvieron que huir. Fue tan repentino que en el momento de desplegar sus alas tomaron direcciones diferentes. Su vida quedó atrás, no por haber huido con rapidez, sino en el tiempo. Los días pasaban y Kibu guardaba la esperanza de volver a verlos, ¡ah!, cómo extrañaba los días en los que podía refrescarse en el río tras un descenso en búsqueda de peces; no olvidaba aquellos abrazos que le daba Hann, su amigo que desde la infancia había compartido con ella bastante historia; y su hermanita, que le había enseñado a volar y a cuidarse, quien siempre tenía un pretexto para acercarse a ella, y también quien le hacía entender que aun pudiendo huir, el nido siempre necesitaría ahí su fuerza, su fe.

Después del viaje se sosegó en el punto más alto que pudo encontrar. Ahí sentía una fuente de calor agradable que provenía de unas altas columnas que además presumían unas luces rojizas que facilitaban su vista; tan altas que supuso nadie podría molestarle en esa escala que había hecho en su viaje al norte.

La luz del día se desvaneció dejando paso a una casi nula visibilidad, y no importaba porque ahí ya no había nada. Se dijo a sí misma que estar ciega resultaría en lo mismo, pues aquél desierto le hacía sentir que ni siquiera estaba con vida.

— ¿Se puede pretender estar cuando no hay nadie para demostrárselo?

Se rindió ante el cansancio con la idea de que en algún momento habría de amanecer.

La obscuridad cedió. Sus grandes ojos le alcanzaban para escudriñar todo el silencioso valle, tan extenso que pensó que podía durar el día entero volando y aun así no alcanzaría el otro extremo y decidió que sería más fácil notar cualquier movimiento desde ahí. Ya no había prisa, pues si hacía las cosas con rapidez, había más tiempo para que la nostalgia invadiera su serenidad.



Cada hora que pasaba, su estómago le recordaba que necesitaba saciarse.

— ¡Vaya!, mira que sobrevivir al exterminio para después tener que morir de hambre, debería ser considerado como una de las muertes más vergonzosas que a alguien pudiere pasarle. — Se dijo con cierta tristeza.

Recorrió algunos kilómetros a la redonda en busca de comida y agua. Consiguió agua de lluvia y comió duraznos de un pequeño árbol que alguien había sembrado cerca de la gigantesca estructura.


El follaje se movió en contra del viento, emitiendo un sonido casi inaudible a pesar de aquella tranquilidad. Kibu puso su total atención en aquella área verde. El movimiento había sido tan repentino que se negó a aceptar que había sido una simple casualidad. Prefería ahorrar fuerza para salir a comer los duraznos o tomar agua, así que solo observó la zona desde el punto que ya había establecido como un hogar. Pasaron las horas y el frío comenzó a calarle a pesar de su plumaje.

Entonces lo vio de nuevo a pesar del cansancio en su mirada, la voz en su interior le aconsejaba que debía bajar y echar un vistazo, no por el hecho de que había algo que comer, sino porque por primera vez después de mucho tiempo sentía que podía cambiar su vida, de nuevo. Así que estiró sus alas y planeó en círculos sobre aquella zona, tratando de observar algún movimiento que le quitara toda duda.

— Vamos Kibu, no estás loca, ahí afuera está alguien que quizá esté esperando ser descubierto, alguien que también se haya quedado solo después de la tragedia.


Era pequeño tan pequeño que podría haberse confundido con una piedra, una a la que parecía haberle crecido un escaso musgo del color de la tierra. Temblaba, pero no podía determinar por qué. Descendió un poco más, asegurándose de hacer el menor ruido posible. Se posó al otro extremo de lo que parecía haber sido una calle, y entonces pudo percatarse que la piedra no era una piedra, sino alguien que tenía los ojos más maravillosos que había visto en su vida. Nunca una mirada le había dado tanta esperanza.

Unas orejas pequeñas brotaron por encima de lo que era su pequeña cabeza, a la vez que sus pupilas se dilataban ante el ángel que tenía enfrente. Tenía miedo, pero se sentía diferente, éste no lo paralizaba, sentía la adrenalina recorrer su pequeño cuerpo pero a la vez le servía como anestésico. Y entonces, cerró los ojos.

La noche comenzaba a entintar el cielo de tonos anaranjados y rojizos, como quien enciende una fogata para tratar de hacerle frente a la fría noche. Kibu se acercó a la bolita que era aquél desconocido, lo tomó entre su pico con la delicadeza que se trata la fragilidad y lo metió donde parecía él había hecho su refugio. Ella acercó unas hojas a manera de nido e hizo guardia durante la noche.




Cuando él despertó, había unos duraznos a su alrededor y agua contenida en el hoyo que alguien había cavado, consiguió moverse hasta este último y bebió. Le sabía un poco ácida, pero no importaba, si los días resultaban amargos, quizá todo debería ser de la misma manera. Se acercó al gigante durazno que era casi de su tamaño y se preguntó si era una especie de prueba para ser digno de comerlos. Rodeó el que parecía más pequeño y abrió su boca para intentar morderlo, después lo golpeó con sus pequeñas patas, pero nada podía abrirlos, ni siquiera su desesperación.

Una ráfaga de aire lo abrazó, sintió estar en peligro y la mejor idea era correr hacia su refugio, pero no podía abandonar ahí esos duraznos. Trató de empujarlos y también de jalarlos, pero eran demasiado pesados para él. Dio algunos brincos en dirección a su refugio y se prometió volver por ellos. Se hizo bolita tras ver que aquella se aproximaba con elegancia hacia él.

— ¡Hola!, ¿conejito? - Dijo ella

Él decidió que el silencio era la mejor respuesta.

— Sé que estás ahí, puedo ver que estás hecho bolita. — Continúo en tono afable.

El conejito entonces abrió los ojos para observarla. Entendió que ella era quien le había llevado de comer y había cavado el hoyo para que pudiera beber.

— H..h..holaa — Dijo con la ternura de quien ignora si fueron sus mejores palabras.

— Te ves un poco mejor, — dijo con una sonrisa en sus labios. — ¿cómo te sientes?

— B..bien, g..gracias. — El tono en su voz aun le temblaba.

Ella pudo notar que los duraznos estaban enteros y como quien comprende por qué algo salió mal, comenzó a desgarrarlos. Los partió en trozos pequeños y se los acercó. El asombro en los ojos del conejito podía describir la densidad de un cielo estrellado.

— Siento no habértelos preparado — dijo en verdad apenada.

— N..no impor... — Comenzó a comer los pequeños trozos con tanta velocidad que Kibu se preocupó.

— Oye, despacio, no quiero que te ahogues, ¿sabes? sería muy tonto morir ahogado después de haber sobrevivido al nudo en la garganta que se siente haber perdido a todos a nuestro alrededor.

Y entonces él comenzó a relajar aquella presteza.

— ¿Cómo te llamas? — Preguntó ella

— Café — Dijo más gordito de lo que era antes de comer.

— ¡Qué bonito nombre! — En verdad le gustaba ese nombre, le quedaba perfecto a aquél pedacito de tierra.

Descansaron unas cuantas horas cerca de su refugio. En realidad no habían hablado mucho, pero se dijeron todo; estaban juntos para recuperar la vida que se les había arrebatado.


Café se sentía ya con más fuerza, así que decidió salir de su zona de confort. Estiró un poco sus pequeñas patas y brincó hasta que se cansó. En su lento ascenso hacia el refugio, miró sin ver que se aproximaba volando el ave. Despreocupado alzo una de sus patitas para informarle que le esperara, pero el ave no entendió, él notó que quien planeaba por encima suyo era de mayor tamaño y de un color ennegrecido.

Aceleró el paso a pesar de la fatiga, tenía que llegar a su refugio y pronto. Ahí, Kibu lo protegería. El ave descendió en picada, tan rápido que ni correr en zigzag le ayudaría en absoluto, así que entró en una zona con mucha hierba y donde unas piedras lo camuflarían. El ave detuvo de golpe el descenso y comenzó a planear elípticamente sobre la zona. Café entrecerró los ojos esperando que no lo viera. Era demasiado tarde. Una vez abajo, se aproximó lo suficiente para poder verlo, comer algo de ese tamaño al menos le quitaría el apetito vespertino.

— ¡Déjalo en paz! — La voz venía de detrás de él.

El ave volteó y sonrío. La voz le pareció tan conocida que no pudo evitar que en su pico se reflejara una sonrisa.

— Hola Kibu, creí que habías muerto.

— ¡Que lo dejes, he dicho! — De nuevo con un tono imperativo.

— Siempre es un gusto saber de ti, también. — Y volteó nuevamente a mirar a su presa.

Kibu se interpuso entre Hann y Café de un brinco.

— Ven, vamos a otro lado, tengo que contarte una historia. — Dijo ella.

— Y quiero escucharla con el apetito calmado. — Seguro de que así sería.

— No te lo permit... — El ala de Hann se encontró con su cabeza de tal manera que por un momento le hizo perder la conciencia.

— El mundo está hecho para los que sabemos lo que somos. Siento que la destrucción de nuestro hábitat también se haya llevado consigo tu raciocinio.

Café corrió entre la maleza y las piedras que tras las lluvias se habían derrumbado de la montaña. En algunos momentos tropezó y se pegó, se ensució con la arcilla de aquellos desprendimientos. —Si me alcanza, al menos no estaré lo suficientemente sabroso como para que me disfrute. — En la huida dejaba atrás los girones que las alas de aquellos dos emitían en una danza que auguraba la ruina.

Cuando ya no le quedaban fuerzas, se escondió tras un pequeño árbol rodeado de setas que le servían de sombrilla. Pensó que esconderse sería la mejor ayuda, al menos hasta que recuperara las fuerzas.

Y entonces, salió.

Tomó una pequeña rama entre se boca, y corrió lo más rápido que pudo al lugar que momentos antes había abandonado.


Ella se encontraba en el frío suelo. La otra ave no estaba. Café se dio cuenta que había sido un error huir, si no hubiera sido tan cobarde... Se acercó y pudo ver que ella aun respiraba y entonces hubo esperanza. Le habló pero no lo escuchó, la tocó y ella solo sintió dolor.

— ¿Por qué todo lo que toco termina así? — Se le salieron las lágrimas.

El crujido en el árbol cercano fue tan ensordecedor. El descenso fue rápido y unas alas negras se cerraron a poca distancia de él.

— La amé hasta el final de los días, solo que ella ya dejó de ser lo que solía ser.

— ¡Ella no merecía esto! — Y agarró la ramita entre sus patas.

El ave avanzó primero lentamente, y después con la velocidad que cae un rayo, su pico ya se encontraba cubriendo a Café.

Bajo el pico, Café estaba hecho bolita sosteniendo con toda su fuerza la ramita, en posición vertical. La ramita estaba afilada de un lado por lo que el ave sintió el ardor en su garganta, como si se hubiese quemado con el mismo sol. Abrió el pico y salió huyendo de ahí sin siquiera trinar por el dolor. Una vez que Café abrió los ojos, notó que lo que lo abrazaba, nuevamente era el frío.

Corrió hacia Kibu y tocó su cabeza húmeda.

— Siento no haberte protegido, por no estar aquí cuando más me necesitaste.

— Café, tú me salvaste. — Musitó.

— ¡No, te he fallado!

— Lo hiciste muy bien. Esto es por lo que vale la pena morir, Café.

— Pero...

— Ven, acércate. — Le pidió ella.

Ella besó su mejilla con la intención de contener la lágrima que recorría el rostro de Café.

— Gracias por darme de beber en este infierno, eres el único que regresó por mí, eres el único por el que éste lugar ahora es mi hogar.

— Quédate conmigo — Imploró

— Sonríe, por favor, quiero verlo...

— ¿Eh? — Confundido

— ¿Ves el horizonte? Él guarda la promesa de un amanecer...

Café asintió.

— Tan parecido a la línea entre tus labios, Café.

Él le regaló la sonrisa más bonita que ella hubiera visto.

FIN.