/* Esta funcion maneja el overhead asociado al envio de comandos al dispositivo
 * CSP (Interrogation, Read Barcodes, Clear Barcodes, etc). */
int Csp32Bridge::cspSendCommand (char *aCommand, int nMaxLength)
{
    int i;

    // Aseguremonos que tenemos un puerto seleccionado valido
    if (nCspActivePort < COM1)
        return( COMMUNICATIONS_ERROR );

    // Un tiempo antes de enviar el mensaje
    Sleep ( 120 );

    // Limpiemos la cola de recepcion
    while (SioGetc(nCspActivePort) >= 0);

    // Enviemos el string con el comando
    for ( i = 0; i < nMaxLength; i++)
    {
        SioPutc(nCspActivePort, aCommand[i]);
    }

    // Esperemos la respuesta
    nCspDeviceStatus  = cspGetc();
    aByteBuffer[0] = (char) nCspDeviceStatus;

    // Conversion del estado del dispositivo a los estados definidos en el .h
    nCspDeviceStatus *= -1;

    // Si no hay una respuesta, retornemos un error
    if ( nCspDeviceStatus > 0 )
        return( COMMUNICATIONS_ERROR );

    if ( nCspDeviceStatus != NO_ERROR_ENCOUNTERED )
        return ( nCspDeviceStatus );
    else
        return ( STATUS_OK );
}
void Revolver::TxByte(unsigned char v)
{
	SioPutc(m_RPF_parameters.com, v);
}
/* 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);
}