//static
QList<QextPortInfo> QextSerialEnumerator::getPorts()
{
    QList<QextPortInfo> ports;

    #ifdef Q_OS_WIN
        OSVERSIONINFO vi;
        vi.dwOSVersionInfoSize = sizeof(vi);
        if (!::GetVersionEx(&vi)) {
            qCritical("Could not get OS version.");
            return ports;
        }
        // Handle windows 9x and NT4 specially
        if (vi.dwMajorVersion < 5) {
            qCritical("Enumeration for this version of Windows is not implemented yet");
        /*if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT)
                EnumPortsWNt4(ports);
            else
                EnumPortsW9x(ports);*/
        } else  //w2k or later
            setupAPIScan(ports);
    #endif /*Q_OS_WIN*/
    #ifdef Q_OS_UNIX
        #ifdef Q_OS_MAC
            scanPortsOSX(ports);
        #else
            qCritical("Enumeration for POSIX systems is not implemented yet.");
        #endif /* Q_OS_MAC */
    #endif /*Q_OS_UNIX*/

    return ports;
}
//static
QList<QextPortInfo> QextSerialEnumerator::getPorts()
{
    QList<QextPortInfo> ports;

    #ifdef _TTY_WIN_
        OSVERSIONINFO vi;
        vi.dwOSVersionInfoSize = sizeof(vi);
        if (!::GetVersionEx(&vi)) {
                qCritical("Could not get OS version.");
                return ports;
        }
        // Handle windows 9x and NT4 specially
        if (vi.dwMajorVersion < 5) {
                qCritical("Enumeration for this version of Windows is not implemented yet");
/*			if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT)
                        EnumPortsWNt4(ports);
                else
                        EnumPortsW9x(ports);*/
        } else	//w2k or later
                setupAPIScan(ports);
    #endif /*_TTY_WIN_*/

    #ifdef _TTY_POSIX_
        QDir devices("/dev");
        devices.setFilter(QDir::System | QDir::Readable | QDir::Writable);

        QStringList filters;
        filters << "ttyS*" << "ttyUSB*" << "ttyACM*";
        devices.setNameFilters(filters);

        QStringList deviceList;
        deviceList = devices.entryList();
        QextPortInfo info;
        if(deviceList.isEmpty())
        {
            info.friendName = "Serial Port (/dev/serial)";
            info.physName = "/dev/serial";
            info.enumName = "/dev/serial";
            info.portName = "/dev/serial";
            ports.append(info);
        }
        else
        {
            for(int i = 0; i < deviceList.count(); i++)
            {
                info.friendName = "/dev/" + deviceList[i];
                info.physName = "/dev/" + deviceList[i];
                info.enumName = "/dev/" + deviceList[i];
                info.portName = "/dev/" + deviceList[i];
                ports.append(info);
            }
        }
    #endif /*_TTY_POSIX_*/
	
    return ports;
}
//static
QList<QextPortInfo> QextSerialEnumerator::getPorts()
{
	QList<QextPortInfo> ports;

	#ifdef _TTY_WIN_
		OSVERSIONINFO vi;
		vi.dwOSVersionInfoSize = sizeof(vi);
		if (!::GetVersionEx(&vi)) {
			qCritical("Could not get OS version.");
			return ports;
		}
		// Handle windows 9x and NT4 specially
		if (vi.dwMajorVersion < 5) {
			qCritical("Enumeration for this version of Windows is not implemented yet");
/*			if (vi.dwPlatformId == VER_PLATFORM_WIN32_NT)
				EnumPortsWNt4(ports);
			else
				EnumPortsW9x(ports);*/
		} else	//w2k or later
			setupAPIScan(ports);
	#endif /*_TTY_WIN_*/
	#ifdef _TTY_POSIX_
		QFileInfoList list = QDir("/dev/").entryInfoList(QDir::AllEntries|QDir::NoDotAndDotDot|QDir::Hidden|QDir::System,QDir::DirsFirst);
		qWarning("Enumeration for POSIX systems is experimental.");
		for (int i = 0; i < list.size(); ++i)
		{
			QFileInfo fileInfo = list.at(i);
			#ifdef Q_OS_IRIX
			if(fileInfo.completeBaseName().contains(QRegExp("^ttyf\\d$")))
			#endif 	/*Q_OS_IRIX*/
			#ifdef Q_OS_HPUX
			if(fileInfo.completeBaseName().contains(QRegExp("^tty\\dp0$")))
			#endif 	/*Q_OS_HPUX*/
			#ifdef Q_OS_SUN
			if(fileInfo.completeBaseName().contains(QRegExp("^tty[a-z]$")))
			#endif 	/*Q_OS_SUN*/
			#ifdef Q_OS_DIGITAL
			if(fileInfo.completeBaseName().contains(QRegExp("^tty0\\d$")))
			#endif 	/*Q_OS_DIGITAL*/
			#ifdef Q_OS_OPENBSD
			if(fileInfo.completeBaseName().contains(QRegExp("^tty0\\d$")))
			#endif 	/*Q_OS_OPENBSD*/
			#ifdef Q_OS_FREEBSD
			if(fileInfo.completeBaseName().contains(QRegExp("^ttyd\\d$")))
			#endif 	/*Q_OS_FREEBSD*/
			#ifdef Q_OS_LINUX
			if(fileInfo.completeBaseName().contains(QRegExp("^ttyS\\d$")))
			#endif 	/*Q_OS_LINUX*/
			{
				QextPortInfo temp;
				temp.enumName="Kernel";
				temp.friendName="Communication Port ("+fileInfo.completeBaseName()+")";
				temp.physName="/dev/"+fileInfo.completeBaseName();
				temp.portName="/dev/"+fileInfo.completeBaseName();
				ports<<temp;
			}
		}
	#endif /*_TTY_POSIX_*/
	
	return ports;
}