/* Esta funcion trata de cerrar cualquier conexion anteriormente abierta */
int Csp32Bridge::cspRestore()
{
    int nRetStatus = COMMUNICATIONS_ERROR;

    // are we attempting to close a valid port?
    if (nCspActivePort >= COM1)
    {
        // close any previously opened ports...
        nRetStatus = SioDone(nCspActivePort);
    }

    // initialize the dll interface...
    cspInitParms();

    // return status...
    if (nRetStatus < 0)
        return (COMMUNICATIONS_ERROR);
    else
        return (STATUS_OK);
}
Revolver::~Revolver()
{
	SioDone(m_RPF_parameters.com);
}
/* Esta funcion obtiene informacion referente al puerto COM especificado en la clase */
int Csp32Bridge::cspGetCommInfo(int nComPort)
{
    DWORD TimeMark;     // Usado para medir el delay de tiempo
    int  i;                // Data leida del puerto serial/modem
    int  portType;     // SERIAL_RS232 | SERIAL_MODEM si el puerto es valido
    int  Next;         // indice para un arreglo
    char *Expect;       // Un puntero a los datos esperados

    portType = SERIAL_RS232;    // Esto asume que estamos en un puerto RS232 valido
    Expect = "OK";              // Esperemos un "OK" si todo va bien
    Next = 0;                   // Indice para Expect[]

    // Veamos si podemos acceder al puerto
    if ( SioReset(nComPort, RX_QUE_SIZE, TX_QUE_SIZE) < 0)
        return( SioWinError(NULL, 0));  // El puerto no es accesible, reportemos el problem

    // Establescamos las lineas de control RTS y CTS
    SioDTR(nComPort,'S');
    SioRTS(nComPort,'S');

    // Enviemos un retorno de acarreo para inicializar el puerto...
    SioPutc(nComPort,'\r');

    // Si esto es un modem, deberia especificar un puerto DSRs
    if (SioDSR(nComPort) != 0)
    {
        /* Un conector DSR envolvente tambien deberia configurar un DSR, asi que debemos verificar
         * el "modem", enviemosle un comando AT*/
        SioPutc(nComPort,'\r');
        Sleep(250);                 // Dejemos que otras cosas corran
        SioPutc(nComPort,'A');
        Sleep(250);                 // Dejemos que otras cosas corran
        SioPutc(nComPort,'T');
        Sleep(250);                 // Dejemos que otras cosas corran
        SioPutc(nComPort,'\r');

        // Si esto es un modem, deberiamos recibir un OK
        Next = 0;
        TimeMark = SioTimer() + 2000;
        while (SioTimer() < TimeMark)
        {
            // Leamos cualquier dato de entrada del puerto serial...
            i = SioGetc(nComPort);
            if (i > -1)
            {
                // Ok, tenemos un caracter, ahora a compararlo con la respuesta esperada...
                if ((char)i == Expect[Next])
                {
                    Next++;
                    if (Next == 2)
                    {
                        portType = SERIAL_MODEM;
                        break;
                    }
                }
            }
        } // Fin del while (Era necesario comentarlo?)
    }

    // Liberemos el puerto ahora que tenemos la informacion
    SioDone(nComPort);

    // Y reportemos que tipo de dispositivo tenemos en frente
    return (portType);
}