CodeCamp 2009 – Tarragona


Me complace compartir con vosotros un gran evento para la comunidad de desarrolladores, se trata de una nueva edición del CodeCamp esta vez en Tarragona. Dos días completos dedicados a reunir al mayor número de profesionales, estudiantes y entusiastas entono charlas, mesas redondas y lo más importante un punto de reunión para contactar de tu a tu, con los profesionales más reconocidos de nuestro sector.

Ahora ya no tienes excusa, sin duda el evento más importante de este año, de la comunidad para la comunidad.

No tardes en registrarte : www.codecamp.es

Nos vemos el 17/18 de octubre en Tarragona.
Pep Lluis,

 

Mi primer BASIC Computer

Pep MSC51 

Este fue mi primer ordenador con interprete Basic diseñado construido totalmente a Mano por un tal PepLluis. ¡Menudos tiempos!
Es grato reencontrarme con el después de casi 25 años.

El procesador es un INTEL MCS51 con el interprete Basic incrustado en PROM del propio chip.

Como veis no solo Bill tiene juguetitos de museo :-))
Saludos,

Win7 X64 – XP Mode – USB X64 Drivers

        

Para alguno de nosotros, ya seamos de sistemas o desarrolladores, es habitual encontrarnos frente una situación de problemas cuando intentamos instalar determinados dispositivos USB en sistemas de 64 Bits, en esos casos la respuesta suele ser :

 ‘el fabricante es el responsable de suministrar los adaptadores para su electrónica’

 Cierto, es verdad y es la respuesta correcta, pero de hecho el usuario necesita utilizar su dispositivo y es obvio que no puede esperar indefinidamente a que el fabricante decida suministrar o desarrollar un adaptador para 64 bits y para nuestro sistema operativo.

En algunos escenarios esto representa que el usuario no se decida a instalar la nueva versión de Windows y retroceda a las versiones anteriores con soporte a dichos dispositivos, que traducido significa instalar una versión antigua X86 del sistema. No olvidemos que algunos fabricantes importantes de electrónica están suministrando instaladas las versiones X86 en sus equipos nuevos cuya electrónica es X64 y además algunos incluyen los DVD ‘downgrade’ para instalar XP. Es difícil de entender porque, supongo que puede ser por esto.

Para los ingenieros que decididamente quieran aprovechar la arquitectura de X64 sin renunciar a utilizar estos dispositivos y sus ‘drivers’ existe un buen recurso que puede resolver la situación en algunos casos. SI!, ahora podemos utilizar los viejos dispositivos USB y las antiguas aplicaciones que rodaban en XP utilizando el nuevo ‘XPMode’ de WIN7. porque este incluye soporte para compartir o adjuntar dispositivos USB por lo que solo necesitas instalar el complemento Virtual PC & XPMode en tu sistema, entonces podrás instalar y usar el viejo adaptador USB con tu vieja aplicación rodando sin ningún problema (o al menos eso espero. J), ademas podras lanzar todas las aplicaciones instaladas en XPMode directamente desde el menu de inicio sin arrancar el Visual PC…

Por ejemplo, algunos utilizamos conversores USB-Serie o dispositivos USB para su uso con electrónica de entornos integrados de desarrollo que se comunican con emuladores, depuradores o circuitos especificos, una vez instalados en XPMode se comportan como un autentico XP nativo (además en el continuamos disponiendo del aclamado Hyperterminal).  Sin duda XPMode es una nueva gran característica para no demorar por más tiempo el uso de Windows 7 en su versión X64 por falta de ‘Drivers’.

Espero que esto ayude a sortear (lo sé! No todos!) Pero algunos problemas derivados en la necesidad de utilizar drivers X86 en sistemas X64.

Pep Lluis,

PD. Puedes descargar XPMode para WIN7 siguiendo este link :

http://www.microsoft.com/windows/virtual-pc/download.aspx

Many people found problems when try use their USB devices in X64 system. When report this trouble, the normal answer is :

‘It is the responsibility of the manufacture to provide drivers for their hardware’

Yes! This is true and is the correct response, but in fact the user need use this device and is obvious cannot wait indefinitely to manufacturer regarding if decide deliver or not deliver the driver for x64 system.

In some scenarios this represent that the user does not install the new version of Windows and comeback to older versions or finally in the best of cases simple select to run x86 version of O.S., because normally in some cases and old electronics the manufacturer only give support for x86 versions. Don’t forget some important PC manufacturers deliver only windows x86 versions with new X64 PC hardware, and give included XP DVD’s downgrade. Is hard to understand for why (may be for this)

For engineers that clear decide run with X64 versions, have a good resource to solve this problem, when manufacturer only supply X86 or XP driver versions. Yes! Now you can use old USB devices and XP Applications using XPMode, because now include new support to share or attach USB devices. Just need install Virtual PC & XPMode in your Windows 7 X64 and you can install & use the old USB-Serial Adaptor with your old application running with no problems. (I hope )

For example, many people using USB-Serial legacies or USB Devices are for their use with electronics IDE’s. Now with XPMode you can use all old IDE’s and communicate with debuggers, in circuit emulators or electronic devices installed in XPMode (Virtual PC) like be in native XP (yes in XP still running Hyperterminal “claimed for many people”) and missing in Vista). With no doubt this is a great new feature to no delay more using Windows 7 X64 Version.

I hope this help to solve (I know… not all) but some device driver X86 implementation scenario.

Pep Lluis,

PS. You can download XPMode for WIN7 from : http://www.microsoft.com/windows/virtual-pc/download.aspx 

 

 

 

Serial Port – Enumeración & Disponibilidad – Tambien en C#

 

         Saber sobre la disponibilidad de nuestros puertos serie antes de su selección en un combobox.

  How to know about availability of our computer serial ports before select one from a combo box.

A menudo las aplicaciones que requieren seleccionar un dispositivo antes de efectuar algún tipo de comunicacion, no ofrecen ninguna información adicional sobre el estado del dispositivo. Sobre todo si hablamos del puerto serie, normalmente nos ofrecen una simple enumeración de los COM. Esto último es el causante de que la aplicación nos permita seleccionar un puerto que en ocasiones no existe o está siendo usado por otro programa.

Os propongo una idea con la intención de mejorar y facilitar la selección de este tipo de dispositivos en nuestras aplicaciones.

Básicamente se trata de enumerar en un ‘ComboBox’ personalizado los puertos existentes en nuestro equipo, utilizando el mandato :

My.Computer.Ports.SerialPortNames.ToArray

En el momento de la inicialización del ‘combobox’ asignaremos el evento de ‘DrawItem’ a la función que enriquecerá el aspecto, añadiendo al nombre un rectángulo coloreado y el texto correspondiente a la disponibilidad del puerto.

AddHandler ComboBox1.DrawItem, AddressOf cmbo_SerialPorts_Status

No dudéis en contactar conmigo si necesitáis aclarar o necesitáis entender alguna parte del código.

Para poder darle mayor difusión los comentarios del código están en inglés, aunque si os parece oportuno y necesario puedo posteároslo también en español.

Sometimes our communications applications are required to select any type of external device, and normally these applications are not giving any extra information about their availability. This is the case when talk around serial ports, normally when select the port only have a simple enumeration of COM’s, this may be confusing at time leaving at users selecting inexistent ports or ports that simply are already in use.

With this sample, you can improve and make easy these device selections in our applications.

The main think is enumerate serial port inside our customized ‘ComboBox’, using :

My.Computer.Ports.SerialPortNames.ToArray

After when initialize our combo only need assign ‘DrawItem’ event to function with our personalized combo draw,

AddHandler ComboBox1.DrawItem, AddressOf cmbo_SerialPorts_Status

This function are adding red rectangle and “busy” text when no have availability, and green rectangle and “available” text when the port is free.

Please no doubt in contact with me if you need any other explanation or opinion about this.

 

 SerialEnum_Es

SerialEnum_en 

 

public partial class Form1 : Form
    {
        //Enumerate Serial Ports on Machine
        //Get Serial Port availability
        String[] Puertos = System.IO.Ports.SerialPort.GetPortNames();

 

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            this.comboBox1.DrawMode = DrawMode.OwnerDrawVariable;       //seleccionar mi propio modo de arrastre

            this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;  //aspecto al men desplegable

            this.comboBox1.DataSource = Puertos;                        //puertos serie disponibles

            this.comboBox1.TabIndex = 0;                                //seleccione en primer lugar tabIndex

        }

 

       

        private void comboBox1_DrawItem_1(object sender, DrawItemEventArgs CmboItem)

        {

            // Dibuja el fondo del item.

            CmboItem.DrawBackground();

            // Los valores por defecto si el puerto est disponible.

            string status = «Disponible»;

            SolidBrush brush = new SolidBrush(Color.Green);

            System.Drawing.Font font = this.Font;

            Brush fontbrush = Brushes.Black;

            Rectangle rectangle = new Rectangle(2, CmboItem.Bounds.Top + 2, CmboItem.Bounds.Height – 4, CmboItem.Bounds.Height – 4);

            // Comprobar disponibilidad del puerto

            try

            {

                // Si abre y cierra los puertos sin excepcin.

                // dibuja el item con la fuente por defecto y rectngulo verde.

                System.IO.Ports.SerialPort PortTest = new System.IO.Ports.SerialPort();

                PortTest.PortName = Puertos[CmboItem.Index].ToString();

                PortTest.Open();

                PortTest.Close();

            }

            catch (Exception ex)

            {

                // Si el puerto no est disponible

                // dibuja el item con la fuente cursiva y tachado y rectngulo rojo

                brush = new SolidBrush(Color.Red);

                status = «En Uso»;

                font = new Font(FontFamily.GenericSansSerif, this.Font.Size, FontStyle.Italic ^ FontStyle.Strikeout);

                fontbrush = Brushes.DimGray;

            }

            // llenar item combo con rectangulo.

            CmboItem.Graphics.FillRectangle(brush, rectangle);

            // escribir el texto con la condicin actual del puerto de este item.

            CmboItem.Graphics.DrawString(Puertos[CmboItem.Index].ToString() + » – « + status, font, fontbrush, new RectangleF(CmboItem.Bounds.X + rectangle.Width, CmboItem.Bounds.Y, CmboItem.Bounds.Width, CmboItem.Bounds.Height));

            // dibujar foco del rectngulo cuando el ratn est sobre un item.

            CmboItem.DrawFocusRectangle();

        }

    }

 

Cambiar los ‘SerialPort Settings’ en tiempo de ejecución.

Atendiendo a una consulta de los foros de MSDN, me complace compartir con vosotros una solución para asignar los ajustes de apertura del puerto serie al vuelo.

Entendiendo que en algunas situaciones, puede ser ventajoso poder cambiar la velocidad, paridad, bits… etc, ‘On Line’. Aunque para la mayoría de comunicaciones con dispositivos dichos parámetros son ajustados en tiempo de puesta en marcha y no acostumbran a variar en el transcurso del tiempo.

Esperando os sea útil… Saludos,
Pep Lluis,

PD. Si queréis podéis descargaros la solución de ejemplo en ‘attachments’.

using System;

using System.IO.Ports;

using System.Windows.Forms;

 

namespace SerialPortSettings

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        private void Form1_Load(object sender, EventArgs e)

        {

            // Asignar las Velocidades seleccionables al Combo

            object[] Velocidades = { 19200, 9600, 4800, 2400, 1200 };

            this.comboBox_bits_por_segundo.Items.AddRange(Velocidades);

           

            // Asignar Paridades Seleccionables desde la enumeracion

            foreach (string s in Enum.GetNames(typeof(Parity)))

            {

                this.comboBox_paridad.Items.Add(s);

            }

           

            // Seleccionar los items por defecto

            this.comboBox_bits_por_segundo.SelectedIndex = 0;

            this.comboBox_paridad.SelectedIndex = 0;

            // Abrir el puerto serie con los items por defecto

            SeleccionCambiada(sender,e);

            // Asignar la funcion a ejecutar por disparo de evento al cambio de indice en el combobox

            this.comboBox_bits_por_segundo.SelectedIndexChanged += new System.EventHandler(this.SeleccionCambiada);

            this.comboBox_paridad.SelectedIndexChanged += new System.EventHandler(this.SeleccionCambiada);

        }

 

       

        private void SeleccionCambiada(object sender, EventArgs e)

        {

            // Deberemos añadir un control de excepciones si queremos capturar posibles errores

 

            // Para reasignar valores… primero cerrar el puerto

            this.serialPort1.Close();

            // Asignar los nuevos Settings

            this.serialPort1.BaudRate = Convert.ToInt16(comboBox_bits_por_segundo.Text);

            this.serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), comboBox_paridad.Text);

 

            this.serialPort1.Open();

            // Ver las asignaciones actuales.

            this.Velocidad.Text = this.serialPort1.BaudRate.ToString();

            this.Paridad.Text = this.serialPort1.Parity.ToString();

        }

 

    }

}