librascontrolmessage.cpp 4.03 KB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "librascontrolmessage.h"

namespace Codificador {

    LibrasControlMessage::LibrasControlMessage() : LibrasControlSection() {
        type = LIBRAS_MGM_TYPE;

        messagelength = 11;
        //resolution = 1;
        timecontrolflag = 0;
        //dictionaryversion = 1;
        privatedatalength = 0;
        privateDataBytes = NULL;
        //dph = 0;
        //dfh = 0;
        //dfw = 0;
        //dpv = 0;
    }

    LibrasControlMessage::~LibrasControlMessage() {

    }

    unsigned short LibrasControlMessage::getMessageLength() {
        return messagelength;
    }

    unsigned char LibrasControlMessage::getResolution() {
        return resolution;
    }

    unsigned char LibrasControlMessage::getDictionaryVersion() {
        return dictionaryversion;
    }

    unsigned short LibrasControlMessage::getDPH() {
        return dph;
    }

    unsigned short LibrasControlMessage::getDPV() {
        return dpv;
    }

    unsigned short LibrasControlMessage::getDFW() {
        return dfw;
    }

    unsigned short LibrasControlMessage::getDFH() {
        return dfh;
    }

    unsigned char LibrasControlMessage::getPrivateDataLength() {
        return privatedatalength;
    }

    unsigned char *LibrasControlMessage::getPrivateDataBytes() {
        return privateDataBytes;
    }

    void LibrasControlMessage::setMessageLength(unsigned short messagelength) {
        this->messagelength = messagelength;
    }

    void LibrasControlMessage::setResolution(string resolution) {
        if(resolution.compare("1920x1080") == 0)
            this->resolution = 0;
        if(resolution.compare("1280x720") == 0)
            this->resolution = 1;
        if(resolution.compare("640x480") == 0)
            this->resolution = 2;
        if(resolution.compare("960x540") == 0)
            this->resolution = 3;
        if(resolution.compare("720x480") == 0)
            this->resolution = 4;
    }

    void LibrasControlMessage::setDictionaryVersion(unsigned char dictionaryversion) {
        this->dictionaryversion = dictionaryversion;
    }

    void LibrasControlMessage::setDPH(unsigned short dph) {
        this->dph = dph;
    }

    void LibrasControlMessage::setDPV(unsigned short dpv) {
        this->dpv = dpv;
    }

    void LibrasControlMessage::setDFW(unsigned short dfw) {
        this->dfw = dfw;
    }

    void LibrasControlMessage::setDFH(unsigned short dfh) {
        this->dfh = dfh;
    }

    void LibrasControlMessage::setPrivateDataLength(unsigned char privatedatalength) {
        this->privatedatalength = privatedatalength;
    }

    void LibrasControlMessage::setPrivateDataBytes(unsigned char *privateDataBytes, int len) {
        if (this->privateDataBytes) {
            delete (this->privateDataBytes);
        }

        this->privateDataBytes = new unsigned char[len];
        memcpy(this->privateDataBytes, privateDataBytes, len);
    }

    unsigned char *LibrasControlMessage::generateBytes(unsigned short *librasLen) {
        unsigned char *librasDataBytes;

        *librasLen = privatedatalength + messagelength + 3;

        librasDataBytes = new unsigned char[*librasLen];

        messageid = MESSAGE_ID_CONTROL;
        messagelength += privatedatalength;

        librasDataBytes[0] = messageid & 0xFF;
        librasDataBytes[1] = (messagelength >> 8) & 0xFF;
        librasDataBytes[2] = messagelength & 0xFF;
        librasDataBytes[3] = ((resolution << 1) & 0x1E) | (timecontrolflag & 0x01);
        librasDataBytes[4] = dictionaryversion & 0xFF;
        librasDataBytes[5] = (dph >> 8) & 0xFF;
        librasDataBytes[6] = dph & 0xFF;
        librasDataBytes[7] = (dpv >> 8) & 0xFF;
        librasDataBytes[8] = dpv & 0xFF;
        librasDataBytes[9] = (dfw >> 8) & 0xFF;
        librasDataBytes[10] = dfw & 0xFF;
        librasDataBytes[11] = (dfh >> 8) & 0xFF;
        librasDataBytes[12] = dfh & 0xFF;
        librasDataBytes[13] = privatedatalength & 0xFF;

        memcpy(librasDataBytes + 11, privateDataBytes, privatedatalength);

        return librasDataBytes;
    }
}