También se confundían voces estridentes y melodías de orquestas clásicas acompañadas por instrumentos electrónicos. Todo parecía perderse en la conspiración del caos... (Arturo Azuela, El Matemático)

Cómo encender el teléfono en Windows Mobile con C#

Febrero 25th, 2010 Archivado en Movilidad, Tecnologías .NET | Sin comentarios »

encender-telefono

Recientemente un cliente me pidió, como parte de los requerimientos del proyecto, que para realizar ciertas acciones en su aplicación de Windows Mobile se encendiera y apagara el teléfono automáticamente, sin que el usuario tuviera que intervenir. Concretamente, la aplicación tiene que abrir una conexión de datos GPRS, conectarse a un webservice situado en un servidor de Internet, e intercambiar cierta información con éste. El teléfono no se utiliza para comunicaciones de voz, sólo de datos.

Como era una tarea que nunca antes había realizado, tuve que recurrir a Google para intentar encontrar la solución, alguna solución cercana, a alguna pista que me llevara hacia ella. Pronto la decepción se apropió de mí. Por más que buscaba y buscaba cómo encender el teléfono de Windows Mobile con C#, no encontraba nada, a pesar de que la búsqueda la realizaba en Inglés, el idioma más extendido en la red.

Sin embargo, aunque lentamente, poco a poco me fui acercando a la solución. La causa de la falta de respuestas era que no estaba escribiendo la pregunta correcta. Para un usuario común puede que la frase “encender el teléfono” le resultara natural, pero en términos más técnicos el enfoque correcto es “encender la radio del dispositivo móvil”. Y en Inglés. Algo así como: turn radio on and off windows mobile c#. Aunque en este contexto existen otros posibles sinónimos de turn, como switch o toggle.

Resulta que en la ROM del dispositivo existe una dll no documentada llamada ossvcs.dll, que exporta funciones para controlar los Dispositivos de Radio (Radio Devices). Es decir, los módulos de Bluetooth, Teléfono y Red Inalámbrica (WiFi). Ossvcs.dll exporta las funciones por un número de orden y no por su nombre. Estas funciones pertenecen a un API no administrado, por lo que para invocarlas desde nuestro código C# necesitaremos declarar los prototipos mediante p/Invoke. Las funciones que necesitamos son las siguientes:

[DllImport("ossvcs.dll", EntryPoint = "#276", CharSet = CharSet.Unicode)]
private static extern uint GetWirelessDevice(ref IntPtr pDevice, int pDevVal);

[DllImport("ossvcs.dll", EntryPoint = "#273", CharSet = CharSet.Unicode)]
private static extern uint ChangeRadioState(ref RDD pDevice, int dwState, int saveAction);

[DllImport("ossvcs.dll", EntryPoint = "#280", CharSet = CharSet.Unicode)]
private static extern uint FreeDeviceList(IntPtr pDevice);

Nótese cómo EntryPoint contiene el número de orden que identifica a la función invocada.

De las tres funciones, la que realmente nos interesa es ChangeRadioState(), porque justamente es la que nos permite cambiar el estado de la radio. Es decir, encenderla o apagarla. O dicho de forma llana, encender o apagar el teléfono.

He creado una clase llamada MobileRadio, que expone un único método público estático: SetDeviceState(). Este método acepta dos argumentos de tipo entero. El primero indica el tipo de dispositivo, y el segundo informa el estado al que se desea cambiar. El tipo de dispositivo puede ser uno de los siguientes: Bluetooth, el Teléfono o la Red Inalámbrica (WiFi). No necesitas conocer de memoria los valores enteros que se pueden traspasar. La clase MobileRadio exporta también dos estructuras (RADIODEVTYPE y RADIODEVSTATE) que contienen las constantes necesarias.

Para encender el teléfono basta la siguiente línea de código:

MobileRadio.SetDeviceState(MobileRadio.RADIODEVTYPE.PHONE, MobileRadio.RADIODEVSTATE.ON);

Y para apagarlo, ¿lo adivinas? ;-)

Para conocer el estado actual del teléfono, si está encendido o apagado, utilizamos la propiedad booleana PhoneRadioOff de la clase SystemState, situada en el espacio de nombres Microsoft.WindowsMobile.Status:

Microsoft.WindowsMobile.Status.SystemState.PhoneRadioOff

Esta propiedad es verdadera (true) si la radio del dispositivo está apagada, y falsa (false) en caso contrario.

Puedes descargar el proyecto completo desde aquí.

Enlaces de interés:

Cómo encender el teléfono en Windows Mobile con C#
El código fuente del proyecto

Turn radio on and off as needed
http://community.intermec.com/t5/General-Development-Developer/Turn-radio-on-and-off-as-needed/m-p/138

Controlling the Radio Devices
http://www.teksoftco.com/articles/article%20007/radiodevices.htm

Toggle WiFi/BT/Phone using .NET code only!!!
http://forum.xda-developers.com/showthread.php?t=413159

PInvoke.net: A wiki for .NET developers
http://www.pinvoke.net/

Publicidad


Seminarios web de Google AdSense

Octubre 16th, 2009 Archivado en Eventos, Internet | Sin comentarios »

Google

El equipo de Google AdSense acaba de enviar el mensaje que copio más abajo. Tanto si eres usuario de este servicio como si piensas utilizarlo en un futuro próximo, puede que sea de tu interés.

Hola,

Estamos encantados de anunciar los seminarios web planeados para los próximos meses. Puedes registrarte en
https://www.google.com/adsense/support/bin/answer.py?answer=22045&sct=20091014-414.

Seminarios web:
- Optimización avanzada
- Consejos de optimización para diarios online
- Analytics aplicado a AdSense
- Consejos de optimización para foros
- Consejos de optimización para sitios de e-commerce

Para más información sobre el contenido y las fechas, por favor visita el calendario de seminarios web de AdSense,
https://www.google.com/adsense/support/bin/answer.py?answer=22045&sct=20091014-414.

Las plazas son limitadas, así que ¡regístrate hoy!

Un saludo,

El equipo de AdSense

Publicidad


Bing Visual Search, nueva apuesta de Microsoft para las búsquedas en Internet

Septiembre 16th, 2009 Archivado en Internet | Sin comentarios »

Leo en El mundo y en Genbeta que Microsoft ha sacado una versión beta de su nuevo servicio Bing Visual Search, una manera diferente de realizar búsquedas. Por ahora, el servicio sólo está disponible en Estados Unidos, por lo que si vas a www.bing.com/visualsearch desde un país diferente no podrás verlo en acción. Para eso deberás “engañar” al buscador Bing y decirle que estás en USA. Arriba, hacia la derecha, está el enlace para cambiar de país.

Una vez que realices el cambio y vuelvas a entrar en www.bing.com/visualsearch, el buscador te mostrará una página como esta:

Bing Visual Search

Visual Search utiliza Silverlight para presentarnos una interfaz RIA (Rich Internet Application), por lo que intuyo que este servicio será utilizado por Microsoft como Killer Application para favorecer la entrada de Silverlight en la mayor cantidad posible de ordenadores, como parte de su estrategia de competencia frente a Adobe Flex (Flash).

Leer más... Leer el resto de esta entrada »

Publicidad


Gerald Reischl y el engaño de El engaño Google

Septiembre 4th, 2009 Archivado en Libros | Sin comentarios »

Gerald Reischl - El engaño Google

Hace unos días terminé de leer el libro “El engaño Google”. Me había atrapado tiempo atrás mientras paseaba por los pasillos de la Fnac. Desde lo alto de la estantería no cesaba de gritar: ¡Cógeme, cógeme! (perdón si eres mexicano). :-) Tras unos minutos de hojearlo y de convencerme de que tendría una lectura interesante, la Fnac realizó una venta y mi banco vió cómo mi cuenta disminuía en 18 euros. ¡Craso error!

Confieso que tenía dudas acerca de esta entrada, si escribirla o no. Pero como me han preguntado varias veces mi opinión sobre el libro, finalmente he decidido escribirla. La sarta de sandeces que pueblan a “El engaño Google” es tan amplia que no podía quedarme indiferente.

El tema de Google como “Gran hermano” ha dado mucho de qué hablar. Baste realizarle una consulta al propio buscador. Es un asunto realmente interesante, pero una cosa es dar una opinión, acertada o no, bien fundamentada o no, en un foro o blog de internet, y otra cosa es escribir un libro pretendidamente serio sobre la materia. Vaya, que no es lo mismo hablar de fútbol con los amiguetes en un bar, cerveza en mano, que dirigir un verdadero equipo sobre el terreno.

Comento a continuación algunas afirmaciones o fragmentos del libro que, en mi opinión, afectan la credibilidad global del texto. Te prevengo que, si aún no lo has leído, quizás no te guste conocer parte de la película por adelantado.

Leer más... Leer el resto de esta entrada »

Cómo hacer una llamada telefónica en Windows Mobile con C#

Agosto 6th, 2009 Archivado en Movilidad, Tecnologías .NET | 1 Comentario »

telefono

Un teléfono móvil moderno, provisto de Windows Mobile, nos permite abrir archivos de MS Office, leer PDFs, hacer fotos, leer el correo electrónico, acceder a contenidos online por RSS, llevar la agenda de actividades, gestionar nuestros contactos, escuchar música, ver vídeos, chatear, jugar, ejecutar aplicaciones de un amplio rango… Además, por si no fuera suficiente, también sirve para hacer llamadas telefónicas. ;-)

Realizar una llamada telefónica mediante código C# desde una aplicación nuestra de Windows Mobile es algo ridículamente simple, gracias a un recurso que Microsoft ha puesto a nuestra disposición: la clase Phone. Esta clase se encuentra definida dentro del ensamblado Microsoft.WindowsMobile.Telephony (en la DLL microsoft.windowsmobile.telephony.dll), por lo que debemos agregar una referencia a este ensamblado en nuestro proyecto de Visual Studio.

Leer más... Leer el resto de esta entrada »