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); }
// 串口设置 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); } }