librasdatamessage.cpp 2.75 KB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "librasdatamessage.h"

namespace Codificador {

    LibrasDataMessage::LibrasDataMessage(unsigned char *data, int size) : LibrasControlSection() {
        type = LIBRAS_DATA_TYPE;

        messagelength = 4;

        glosadatalength = size;
        glosaDataBytes = NULL;
        //Pode mudar
        sinaislooplength = 1;

        if (size > 0) {
            glosaDataBytes = new unsigned char[glosadatalength];
            memcpy(glosaDataBytes, data, size);
        }
    }

    LibrasDataMessage::~LibrasDataMessage() {
        if (glosaDataBytes) delete [] glosaDataBytes;
    }

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

    unsigned int LibrasDataMessage::getStm() {
        return stm;
    }

    unsigned short LibrasDataMessage::getSinaisLoopLength() {
        return sinaislooplength;
    }

    unsigned char LibrasDataMessage::getGlosaDataLength() {
        return glosadatalength;
    }

    unsigned char *LibrasDataMessage::getGlosaDataBytes() {
        return glosaDataBytes;
    }

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

    void LibrasDataMessage::setStm(unsigned int stm) {
        this->stm = stm;
    }

    void LibrasDataMessage::setSinaisLoopLength(unsigned short sinaislooplength) {
        this->sinaislooplength = sinaislooplength;
    }

    void LibrasDataMessage::setGlosaDataLength(unsigned char glosadatalength) {
        this->glosadatalength = glosadatalength;
    }

    void LibrasDataMessage::setGlosaDataBytes(unsigned char *glosaDataBytes, int len) {
        if (this->glosaDataBytes) {
            delete [] (this->glosaDataBytes);
        }

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

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

        *librasLen = glosadatalength + messagelength + 3;
        sinaislooplength += glosadatalength;

        librasDataBytes = new unsigned char[*librasLen];

        messageid = MESSAGE_ID_DATA;
        messagelength += glosadatalength;

        librasDataBytes[0] = messageid & 0xFF;
        librasDataBytes[1] = (messagelength >> 8) & 0xFF;
        librasDataBytes[2] = messagelength & 0xFF;
        librasDataBytes[3] = timecontrolflag  & 0x01;
        //Ajeitar pra quando tiver STM
        librasDataBytes[4] = (sinaislooplength >> 8) & 0xFF;
        librasDataBytes[5] = sinaislooplength & 0xFF;
        librasDataBytes[6] = glosadatalength & 0xFF;

        memcpy(librasDataBytes + 7, glosaDataBytes, glosadatalength);

        return librasDataBytes;
    }
}