/** * Frame a string for output to MTT. Characters not in [0x20, 0x7e] * are converted to blanks (0x20). * * @param p_dest (out) pointer to destination buffer * @param p_src (in) pointer to source buffer * @param buflen (in) size of the destination buffer * @return int frame length, or -1 on error **/ int BCMMTT_FrameString(char *p_dest, const char *p_src, int buflen) { int slen = MTTLOG_StringLen(p_src); int n; char *pSbuf; unsigned long systime; if (slen == 0) return 0; if (slen > buflen - MTTLOG_NumFrameBytes) return 0; systime = MTTLOG_GetTime(); pSbuf = p_dest; *pSbuf++ = MTTLOG_FrameSync0; *pSbuf++ = MTTLOG_FrameSync1; if (CpCrashDumpInProgress()) *pSbuf++ = cp_crash_frame_counter++; else pSbuf++; *pSbuf++ = MTTLOG_MttVersion; *pSbuf++ = (systime >> 24); *pSbuf++ = (systime >> 16) & 0xff; *pSbuf++ = (systime >> 8) & 0xff; *pSbuf++ = (systime) & 0xff; *pSbuf++ = MTTLOG_MsgTypeASCII >> 8; *pSbuf++ = MTTLOG_MsgTypeASCII & 0xFF; *pSbuf++ = slen >> 8; *pSbuf++ = slen & 0xFF; if (CpCrashDumpInProgress()) { n = pSbuf - p_dest; *pSbuf++ = MTTLOG_Checksum16((unsigned char *)p_dest, n); } else pSbuf++; while (*p_src) { /* [0x20 .. 0x7E] is range of 'printable' characters */ if (*p_src < 0x20 || *p_src > 0x7E) { *pSbuf++ = ' '; p_src++; } else { *pSbuf++ = *p_src++; } } n = MTTLOG_Checksum16((unsigned char *)(pSbuf - slen), slen); *pSbuf++ = n >> 8; *pSbuf++ = n & 0xFF; return MTTLOG_NumFrameBytes + slen; }
/** * Frame ap crash string for output to MTT. * * @param p_header(out) pointer to destination header buffer * @param p_trailer(out) pointer to destination trailer buffer * @param p_src (in) pointer to source buffer * @return int string length, or 0 on error **/ int BCMMTT_FrameString_nocopy(char *p_header, char *p_trailer, const char *p_src) { int slen = MTTLOG_StringLen(p_src); int n; char *pSbuf; unsigned long systime; if (slen == 0) return 0; systime = MTTLOG_GetTime(); pSbuf = p_header; *pSbuf++ = MTTLOG_FrameSync0; *pSbuf++ = MTTLOG_FrameSync1; *pSbuf++ = ap_crash_frame_counter++; *pSbuf++ = MTTLOG_MttVersion; *pSbuf++ = (systime >> 24); *pSbuf++ = (systime >> 16) & 0xff; *pSbuf++ = (systime >> 8) & 0xff; *pSbuf++ = (systime) & 0xff; *pSbuf++ = MTTLOG_MsgTypeASCII >> 8; *pSbuf++ = MTTLOG_MsgTypeASCII & 0xFF; *pSbuf++ = slen >> 8; *pSbuf++ = slen & 0xFF; n = pSbuf - p_header; *pSbuf++ = MTTLOG_Checksum16((unsigned char *)p_header, n); n = MTTLOG_Checksum16((unsigned char *)(p_src), slen); *p_trailer++ = n >> 8; *p_trailer++ = n & 0xFF; return slen; }
/** * Function build log loss MTT message * @param ptr (in) allocated memory pointer **/ unsigned int BCMLOG_BuildLogLossMessage(char *ptr) { int slen; int n; char *pSbuf; unsigned int systime; systime = MTTLOG_GetTime(); snprintf(ptr + MTT_HEADER_SIZE, BCMLOG_LOGLOSS_SIZE, logloss_format, log_error.logLostStartTime, systime, log_error.msgLostQue, log_error.msgLostMem, log_error.logLostSioFull, log_error.logLostSioSem, log_error.copyLostMem, log_error.msgLostInit); slen = strlen(ptr + MTT_HEADER_SIZE); if (slen >= BCMLOG_LOGLOSS_SIZE) return 0; pSbuf = ptr; *pSbuf++ = MTTLOG_FrameSync0; *pSbuf++ = MTTLOG_FrameSync1; pSbuf++; /* reserved for frame counter */ *pSbuf++ = MTTLOG_MttVersion; *pSbuf++ = (systime >> 24); *pSbuf++ = (systime >> 16) & 0xff; *pSbuf++ = (systime >> 8) & 0xff; *pSbuf++ = (systime) & 0xff; *pSbuf++ = MTTLOG_MsgTypeASCII >> 8; *pSbuf++ = MTTLOG_MsgTypeASCII & 0xFF; *pSbuf++ = slen >> 8; *pSbuf++ = slen & 0xFF; pSbuf++; /* reserved for checksum */ n = MTTLOG_Checksum16((unsigned char *)(ptr + MTT_HEADER_SIZE), slen); pSbuf += slen; *pSbuf++ = n >> 8; *pSbuf++ = n & 0xFF; return MTTLOG_NumFrameBytes + slen; }
/** * Return the MTT frame header required for MTT signal payload of specified size * * @param inPayloadSize (in) size of MTT payload to be sent * @param outFrameHdrBuf (out) buffer where frame header should be stored * (allocated by caller) * @return int size of header written to outFrameHdrBuf or -1 on error **/ int BCMMTT_MakeMTTSignalHeader( unsigned short inPayloadSize, unsigned char* outFrameHdrBuf ) { unsigned char* pHbuf; unsigned short i; unsigned long trace_time_stamp; trace_time_stamp = timer_get_tick_count() / 32; pHbuf = outFrameHdrBuf; *pHbuf++ = MTTLOG_FrameSync0; *pHbuf++ = MTTLOG_FrameSync1; if (CpCrashDumpInProgress()) *pHbuf++ = cp_crash_frame_counter++; else pHbuf++; *pHbuf++ = MTTLOG_MttVersion; *pHbuf++ = trace_time_stamp>>24; *pHbuf++ = (trace_time_stamp>>16)&0xFF; *pHbuf++ = (trace_time_stamp>>8)&0xFF; *pHbuf++ = trace_time_stamp & 0xFF; i = MTTLOG_MsgTypeSDL; *pHbuf++ = i>>8; *pHbuf++ = i & 0xFF; *pHbuf++ = inPayloadSize>>8; *pHbuf++ = inPayloadSize & 0xFF; // done at logging driver to assure sequential increase of if (CpCrashDumpInProgress()) { *pHbuf++ = MTTLOG_Checksum16( outFrameHdrBuf, 12 ); } else pHbuf++; return (int)(pHbuf - outFrameHdrBuf); }