Ejemplo n.º 1
0
QString QUsbHid::getSerialNumberString(bool* r)
{
    return getIndexedString(device_desc.iSerialNumber,r);
}
Ejemplo n.º 2
0
QString QUsbHid::getProductString(bool* r)
{
    return getIndexedString(device_desc.iProduct,r);
}
Ejemplo n.º 3
0
void QWbXmlReader::nextToken()
{
    char ch;
    int fullTag;

again:
    // Bail out if we already saw EOF previously.
    if ( d->sawEOF )
        return;

    // Get the next character and check for EOF.
    if ( ! ( d->input->getChar(&ch) ) ) {
        d->tokenType = QWbXmlToken_EOF;
        d->sawEOF = true;
        return;
    }

    // Determine the kind of token that we have.
    switch (ch) {

        case WBXML_SWITCH_PAGE:
        {
            if ( d->tagMode )
                d->tagPage = readByte() << 6;
            else
                d->attrPage = readByte() << 8;
            goto again;
        }
        // Not reached.

        case WBXML_END:
        {
            // End of current tag or attribute context.
            if ( d->tagMode ) {
                d->tokenType = QWbXmlToken_EndTag;
            } else if ( d->hasContent ) {
                d->tokenType = QWbXmlToken_EndAttrs;
                d->tagMode = true;
            } else {
                d->tokenType = QWbXmlToken_EndTag;
                d->tagMode = true;
            }
        }
        break;

        case WBXML_ENTITY:
        {
            // Unicode character entity.
            d->tokenType = QWbXmlToken_String;
            d->tokenValue = QString( QChar( (ushort)readInt() ) );
        }
        break;

        case WBXML_STR_I:
        {
            // Inline string value.
            d->tokenType = QWbXmlToken_String;
            d->tokenValue = readString();
        }
        break;

        case WBXML_EXT_I_0:
        case WBXML_EXT_I_1:
        case WBXML_EXT_I_2:
        {
            // Inline string extension token - not used at present.
            readString();
            goto again;
        }
        // Not reached.

        case WBXML_PI:
        {
            // Processing instruction, which is followed by attributes.
            d->tokenType = QWbXmlToken_PI;
            d->tagMode = false;
            d->hasContent = false;
        }
        break;

        case WBXML_EXT_T_0:
        case WBXML_EXT_T_1:
        case WBXML_EXT_T_2:
        {
            // Integer-based extension token - not used at present.
            readInt();
            goto again;
        }
        // Not reached.

        case WBXML_STR_T:
        {
            // Reference into the string table.
            d->tokenType = QWbXmlToken_String;
            d->tokenValue = getIndexedString( readInt() );
        }
        break;

        case WBXML_EXT_0:
        case WBXML_EXT_1:
        case WBXML_EXT_2:
        {
            // Byte-based extension token - not used at present.
            goto again;
        }
        // Not reached.

        case WBXML_OPAQUE:
        {
            // Opaque binary data - read and resolve it.
            QByteArray opaque;
            int len = readInt();
            while ( len > 0 && !(d->sawEOF) ) {
                if ( ! d->input->getChar(&ch) ) {
                    d->sawEOF = true;
                } else {
                    opaque.resize( opaque.size() + 1 );
                    opaque[opaque.size() - 1] = ch;
                }
                --len;
            }
            d->tokenType = QWbXmlToken_String;
            d->tokenValue = resolveOpaque( d->currentAttr, opaque );
        }
        break;

        default:
        {
            if ( d->tagMode ) {
                // Handle tag names.
                if ( (ch & WBXML_TAG_MASK) == WBXML_LITERAL ) {
                    d->tokenValue = getIndexedString( readInt() );
                } else {
                    fullTag = (ch & WBXML_TAG_MASK) | d->tagPage;
                    if ( d->tags.contains( fullTag ) ) {
                        d->tokenValue = d->tags[fullTag];
                    } else {
                        d->tokenValue = "x-tag-" + QString::number( fullTag );
                    }
                }
                d->tokenType = QWbXmlToken_Tag;
                if ( ( ch & WBXML_HAS_ATTRS ) != 0 ) {
                    d->tagMode = false;
                }
                if ( ( ch & WBXML_HAS_CONTENT ) != 0 ) {
                    d->hasContent = true;
                } else {
                    d->hasContent = false;
                }
            } else {
                // Handle attribute names.
                if ( ch == WBXML_LITERAL ) {
                    d->tokenType = QWbXmlToken_AttrStart;
                    d->tokenValue = getIndexedString( readInt() );
                } else {
                    fullTag = ( ch & 0xFF ) | d->attrPage;
                    if ( d->attrs.contains( fullTag ) ) {
                        d->tokenValue = d->attrs[fullTag];
                    } else {
                        d->tokenValue = "x-attr-" + QString::number( fullTag );
                    }
                    if ( ( ch & 0x80 ) == 0 )
                        d->tokenType = QWbXmlToken_AttrStart;
                    else
                        d->tokenType = QWbXmlToken_String;
                }
            }
        }
        break;
    }
}
Ejemplo n.º 4
0
QString QUsbHid::getManufacturerString(bool* r)
{
    return getIndexedString(device_desc.iManufacturer,r);
}
Ejemplo n.º 5
0
/*!
    Parse the WBXML data from the specified "input" device.
*/
bool QWbXmlReader::parse( QIODevice& input )
{
    // The parse process is pointless if there is no content handler.
    if ( ! d->contentHandler )
        return false;

    // Initialize the token parsing state.
    d->input = &input;
    d->tokenType = QWbXmlToken_Tag;
    d->tokenValue = QString();
    d->tagPage = 0;
    d->attrPage = 0;
    d->tagMode = true;
    d->hasContent = false;
    d->codec = 0;
    d->sawEOF = false;

    // Start the document.
    if ( ! d->contentHandler->startDocument() )
        return false;

    // Parse the header information.
    readByte();             // Skip the version number.
    int publicid = readInt();
    int publicindex = -1;
    if ( publicid == 0 )
        publicindex = readInt();
    int charset = readInt();
    if ( charset <= 0 )
        charset = 106;      // Default to UTF-8.
    d->codec = QTextCodec::codecForMib( charset );
    if ( !(d->codec) )
        d->codec = QTextCodec::codecForMib( 106 );

    // Load the string table.
    int len = readInt();
    if ( len > 0 ) {
        d->stringTable.resize( (uint)len );
        if ( input.read( d->stringTable.data(), (uint)len ) != len ) {
            return false;
        } else if ( d->stringTable.data()[len - 1] != 0x00 ) {
            return false;
        }
    }

    // Notify the lexical handler of the document type's publicid.
    if ( d->lexicalHandler ) {
        QString id;
        if ( publicid == 0 )
            id = getIndexedString( publicindex );
        else if ( publicid >= 2 && publicid < (int)num_builtin_publicids )
            id = builtin_publicids[publicid];
        if ( !id.isEmpty() ) {
            if ( ! d->lexicalHandler->startDTD
                    ( QString(), id, QString() ) ) {
                return false;
            }
            if ( ! d->lexicalHandler->endDTD() ) {
                return false;
            }
        }
    }

    // Parse the top-level document element body.
    nextToken();
    parseElementBody();

    // End the document.
    return d->contentHandler->endDocument();
}