targets/plc_debug.c
changeset 985 cd8dadcef426
parent 969 1950fe687dde
child 1074 92a009dc5826
--- a/targets/plc_debug.c	Fri Mar 15 00:38:53 2013 +0100
+++ b/targets/plc_debug.c	Fri Mar 15 17:47:53 2013 +0900
@@ -304,128 +304,3 @@
     return wait_error;
 }
 
-
-/* LOGGING
-*/
-
-#define LOG_LEVELS 4
-#define LOG_CRITICAL 0
-#define LOG_WARNING 1
-#define LOG_INFO 2
-#define LOG_DEBUG 3
-
-#ifndef LOG_BUFFER_SIZE
-#define LOG_BUFFER_SIZE (1<<14) /*16Ko*/
-#endif
-#define LOG_BUFFER_MASK (LOG_BUFFER_SIZE-1)
-static char LogBuff[LOG_LEVELS][LOG_BUFFER_SIZE];
-void inline copy_to_log(uint8_t level, uint32_t buffpos, void* buf, uint32_t size){
-    if(buffpos + size < LOG_BUFFER_SIZE){
-        memcpy(&LogBuff[level][buffpos], buf, size);
-    }else{
-        uint32_t remaining = LOG_BUFFER_SIZE - buffpos - 1; 
-        memcpy(&LogBuff[level][buffpos], buf, remaining);
-        memcpy(LogBuff[level], buf + remaining, size - remaining);
-    }
-}
-void inline copy_from_log(uint8_t level, uint32_t buffpos, void* buf, uint32_t size){
-    if(buffpos + size < LOG_BUFFER_SIZE){
-        memcpy(buf, &LogBuff[level][buffpos], size);
-    }else{
-        uint32_t remaining = LOG_BUFFER_SIZE - buffpos; 
-        memcpy(buf, &LogBuff[level][buffpos], remaining);
-        memcpy(buf + remaining, LogBuff[level], size - remaining);
-    }
-}
-
-/* Log buffer structure
-
- |<-Tail1.msgsize->|<-sizeof(mTail)->|<--Tail2.msgsize-->|<-sizeof(mTail)->|...
- |  Message1 Body  |      Tail1      |   Message2 Body   |      Tail2      |
-
-*/
-typedef struct {
-    uint32_t msgidx;
-    uint32_t msgsize;
-    unsigned long tick;
-    IEC_TIME time;
-} mTail;
-
-/* Log cursor : 64b
-   |63 ... 32|31 ... 0|
-   | Message | Buffer |
-   | counter | Index  | */
-static uint64_t LogCursor[LOG_LEVELS] = {0x0,0x0,0x0,0x0};
-
-/* Store one log message of give size */
-int LogMessage(uint8_t level, uint8_t* buf, uint32_t size){
-    if(size < LOG_BUFFER_SIZE - sizeof(mTail)){
-        uint32_t buffpos;
-        uint64_t new_cursor, old_cursor;
-
-        mTail tail;
-        tail.msgsize = size;
-        tail.tick = __tick;
-        PLC_GetTime(&tail.time);
-
-        /* We cannot increment both msg index and string pointer 
-           in a single atomic operation but we can detect having been interrupted.
-           So we can try with atomic compare and swap in a loop until operation
-           succeeds non interrupted */
-        do{
-            old_cursor = LogCursor[level];
-            buffpos = (uint32_t)old_cursor;
-            tail.msgidx = (old_cursor >> 32); 
-            new_cursor = ((uint64_t)(tail.msgidx + 1)<<32) 
-                         | (uint64_t)((buffpos + size + sizeof(mTail)) & LOG_BUFFER_MASK);
-        }while(AtomicCompareExchange64(
-            (long long*)&LogCursor[level],
-            (long long)old_cursor,
-            (long long)new_cursor)!=old_cursor);
-
-        copy_to_log(level, buffpos, buf, size);
-        copy_to_log(level, (buffpos + size) & LOG_BUFFER_MASK, &tail, sizeof(mTail));
-
-        return 1; /* Success */
-    }else{
-    	uint8_t mstr[] = "Logging error : message too big";
-        LogMessage(LOG_CRITICAL, mstr, sizeof(mstr));
-    }
-    return 0;
-}
-
-uint32_t GetLogCount(uint8_t level){
-    return (uint64_t)LogCursor[level] >> 32;
-}
-
-/* Return message size and content */
-uint32_t GetLogMessage(uint8_t level, uint32_t msgidx, char* buf, uint32_t max_size, uint32_t* tick, uint32_t* tv_sec, uint32_t* tv_nsec){
-    uint64_t cursor = LogCursor[level];
-    if(cursor){
-        /* seach cursor */
-        uint32_t stailpos = (uint32_t)cursor; 
-        uint32_t smsgidx;
-        mTail tail;
-        tail.msgidx = cursor >> 32;
-        tail.msgsize = 0;
-
-        /* Message search loop */
-        do {
-            smsgidx = tail.msgidx;
-            stailpos = (stailpos - sizeof(mTail) - tail.msgsize ) & LOG_BUFFER_MASK;
-            copy_from_log(level, stailpos, &tail, sizeof(mTail));
-        }while((tail.msgidx == smsgidx - 1) && (tail.msgidx > msgidx));
-
-        if(tail.msgidx == msgidx){
-            uint32_t sbuffpos = (stailpos - tail.msgsize ) & LOG_BUFFER_MASK; 
-            uint32_t totalsize = tail.msgsize;
-            *tick = tail.tick; 
-            *tv_sec = tail.time.tv_sec; 
-            *tv_nsec = tail.time.tv_nsec; 
-            copy_from_log(level, sbuffpos, buf, 
-                          totalsize > max_size ? max_size : totalsize);
-            return totalsize;
-        }
-    }
-    return 0;
-}