/*
 *  ======== LoggerSM_writeUIAHeader =========
 */
static void LoggerSM_writeUIAHeader(LoggerSM_SharedObj *sharedObj,
    size_t numBytes, unsigned int partitionId)
{
    /* Set length of packet */
    UIAPacket_setEventLength(&(LoggerSM_obj.uiaHdr),
        numBytes + sizeof(UIAPacket_Hdr));

    /* Set sequence number */
    UIAPacket_setSequenceCount(&(LoggerSM_obj.uiaHdr),
        LoggerSM_seq[partitionId]++);

    /* Set moduleId */
    UIAPacket_setLoggerModuleId(&(LoggerSM_obj.uiaHdr), sharedObj->moduleId);

    /* Set priority */
    UIAPacket_setLoggerPriority(&(LoggerSM_obj.uiaHdr),
        UIAPacket_Priority_STANDARD);

    /* Set instanceId */
    UIAPacket_setLoggerInstanceId(&(LoggerSM_obj.uiaHdr),
        sharedObj->instanceId);

    /* Set moduleId */
    UIAPacket_setLoggerModuleId(&(LoggerSM_obj.uiaHdr),
        sharedObj->moduleId);

    /* Set senderAdrs */
    UIAPacket_setSenderAdrs(&(LoggerSM_obj.uiaHdr), partitionId);

    fwrite((char *)&(LoggerSM_obj.uiaHdr), sizeof(UIAPacket_Hdr), 1,
           LoggerSM_obj.outFile);
}
示例#2
0
/*
 *  ======== LoggerStreamer_flush =========
 *  If there is data in the buffer, call the exchange function.
 */
Void LoggerStreamer_flush2(Void)
{
        /* If there is data in the buffer */
        if (LoggerStreamer_module->write
                        > LoggerStreamer_module->buffer + HDR_OFFSET_IN_WORDS) {
                /* Set UIA packet length and sequence number */
                UIAPacket_setEventLength((UIAPacket_Hdr*)LoggerStreamer_module->buffer,
                                (Bits32)((LoggerStreamer_module->write
                                                - LoggerStreamer_module->buffer) * BYTES_IN_WORD));
                UIAPacket_setSequenceCount((UIAPacket_Hdr*)LoggerStreamer_module->buffer,
                                ti_uia_sysbios_LoggerStreamer_uiaPacketSequence);


                /*
                 *  When the application calls flush there will always be empty space
                 *  at the end of the buffer. To let UIA know it should ignore this we
                 *  add a 32 bit Invalid UIA header with the length of the empty space.
                 */
                UIAPacket_setInvalidHdr(LoggerStreamer_module->write,
                                ((UInt32)LoggerStreamer_module->end + WRITE8_SIZE_IN_WORDS* BYTES_IN_WORD
                                                - (UInt32)LoggerStreamer_module->write) );

                /* Set the module write ptr to NULL to prevent log calls in exchange */
                if (LoggerStreamer_testForNullWrPtr) {
                        LoggerStreamer_module->write = NULL;
                }

                if (LoggerStreamer_isBadPacketDetectionEnabled) {
                        LoggerStreamer_validatePacket(LoggerStreamer_module->buffer, LoggerStreamer_bufSize);
                }
                /* Send filled buffer to exchange function */
                LoggerStreamer_module->buffer =
                                (UInt32*)LoggerStreamer_exchangeFxn((Ptr)LoggerStreamer_module->buffer);

                /* Update ptrs to new buffer */
                LoggerStreamer_module->write =
                                LoggerStreamer_module->buffer + HDR_OFFSET_IN_WORDS;
                LoggerStreamer_module->end =
                                LoggerStreamer_module->buffer
                                + (LoggerStreamer_bufSize/sizeof(UInt32)) - WRITE8_SIZE_IN_WORDS;
                ti_uia_sysbios_LoggerStreamer_uiaPacketSequence++;
        }
}