int Csp32Bridge::cspInit(int nComPort)
{
    // El usuario trata de abrir un puerto valido?
    if (nComPort >= COM1)
    {
        // Cierra cualquier otro puerto abierto previamente
        if (nCspActivePort >= COM1)
            cspRestore();

        // Ahora tratamos de inicializar el puerto escogido
        if (SioReset(nComPort, RX_QUE_SIZE, TX_QUE_SIZE) < 0)
        {
            // Esto ocurrira si ningun puerto esta activo
            return(nCspActivePort = COMMUNICATIONS_ERROR);
        }
        else
        {
            // En caso contrario, el nuevo puerto activo sera el escogido...
            nCspActivePort = nComPort;
        }

        // Establece los parametros del puerto para asegurar la compatibilidad con el lector
        SioParms(nCspActivePort, OddParity, OneStopBit, WordLength8);
        SioBaud(nCspActivePort, Baud2400);
        SioDTR(nCspActivePort, SET_LINE);
        SioRTS(nCspActivePort, SET_LINE);
        return (STATUS_OK);
    }

    return (BAD_PARAM);
}
Esempio n. 2
0
// 串口设置
void CAis_NetDlg::PortSet(void)
{

    HKEY hKey;

    comflag = 0;
    if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Hardware\\DeviceMap\\SerialComm", NULL, KEY_READ, &hKey) == ERROR_SUCCESS) // 打开串口注册表
    {
        int i=0;
        char portName[256];
        CString my_com;
        DWORD dwLong,dwSize;

        while(1)  //WIN7 code
        {
            dwLong = dwSize = sizeof(portName);
            if( ::RegEnumValue( hKey, i, portName, &dwLong, NULL, NULL, (PUCHAR)commName, &dwSize ) == ERROR_NO_MORE_ITEMS ) // 枚举串口
            {
                if (siostate == 1)
                {
                    MessageBox("网位仪设备未连接!","提示");
                }
                siostate = 0;
                break;
            }

            if( strncmp("\\Device\\Silabser",portName,16)==0)   //Device\\ProlificSerial0
            {
                comflag = 1;

                if( commName[4] == 0)   //串口个数为个位数
                {
                    comflagnum = 0;
                    i = 0;
                }
                else                    //串口个数为双数
                {
                    comflagnum = 1;
                    i = 0;
                }

                if(comflagnum == 0)	  commport = commName[3]-0x30-1;
                else if(comflagnum == 1)   commport = (commName[3]-0x30)*10 + commName[4]-0x30-1;

                SioReset(commport,100,100);
                SioBaud(commport,WSC_Baud9600);//设置波特率
                SioParms(commport, WSC_NoParity ,WSC_OneStopBit, WSC_WordLength8);//配置参数

                break;
            }
            i++;
        }

        if(comflag == 0)
        {
            GetDlgItem(IDC_Com)->ShowWindow(SW_HIDE);
        }
        else if(comflag == 1)
        {
            GetDlgItem(IDC_Com)->ShowWindow(SW_SHOW);
            GetDlgItem(IDC_Com)->SetWindowText(commName);
        }

        RegCloseKey(hKey);
    }
}