Пример #1
0
rfid::rfid(QObject *parent, QString port, int baudrate) :
    QObject(parent)
{
    serial = new QAsyncSerial(port, baudrate);

    connect(serial, SIGNAL(lineReceived(QString)),
            this, SLOT(receiveID(QString)));

    sendReset();
}
/**
 * @brief CommWithClient::readMessage
 * 发送数据的格式:数据的长度 + 命令 + 数据(数据长度包括数据本身的长度和命令的长度)
 * 数据的长度:sizeof(quint64)
 * 命令的长度:sizeof(quint16)
 * 命令类型:
 * 发送图片:DATA_IMAGE
 * 发送坐标:DATA_POINT
 */
void CommWithClient::readMessage(){

    qDebug()<<"readMessage";
    QDataStream stream(tcpClient);
    stream.setVersion(QDataStream::Qt_4_7);

    //qDebug()<<"bytesAvailable= "<<tcpClient->bytesAvailable();
    //如果totalMessageSize的长度为0,表明这是一段新的数据
    if(0 ==  totalMessageSize){
        if(tcpClient->bytesAvailable()<(int)(sizeof(quint64)+sizeof(quint16)))
            return;
        //总长度
        stream >> totalMessageSize;
        quint16 cmdType;

        //命令
        stream>>cmdType;
        qDebug()<<"cmdTyed= "<<cmdType;
        //数据部分的长度要减去 sizeof(quint16)和sizeof(quint64)
        totalMessageSize -= sizeof(quint16);
        totalMessageSize -= sizeof(quint64);

        switch(cmdType){
        /*
        case DATA_POINTS:
            status = DATA_POINTS;
            //
            break;
            */
        case DATA_HEAD_PICTURE:
            status = DATA_HEAD_PICTURE;
            receivePixmap();
            break;
        case DATA_RESULT:
            status = DATA_RESULT;
            receivePixmap();
            break;
        case DATA_STU_ID:
            status = DATA_STU_ID;
            receiveID();
            break;
        case DATA_STU_NAME:
            status = DATA_STU_NAME;
            receiveName();
            break;
        default:
            qDebug()<<"Error cmdType: "<<cmdType;
        }
    }else{
        //否则表示这不是一段新的数据
        switch(status){