targets/plc_debug.c
changeset 911 ffa24427396a
parent 910 f6d06bdd31e8
child 917 401e44bae7c0
equal deleted inserted replaced
910:f6d06bdd31e8 911:ffa24427396a
   320 }
   320 }
   321 void inline copy_from_log(uint32_t buffpos, void* buf, uint32_t size){
   321 void inline copy_from_log(uint32_t buffpos, void* buf, uint32_t size){
   322     if(buffpos + size < LOG_BUFFER_SIZE){
   322     if(buffpos + size < LOG_BUFFER_SIZE){
   323         memcpy(buf, &LogBuff[buffpos], size);
   323         memcpy(buf, &LogBuff[buffpos], size);
   324     }else{
   324     }else{
   325         uint32_t remaining = LOG_BUFFER_SIZE - buffpos - 1; 
   325         uint32_t remaining = LOG_BUFFER_SIZE - buffpos; 
   326         memcpy(buf, &LogBuff[buffpos], remaining);
   326         memcpy(buf, &LogBuff[buffpos], remaining);
   327         memcpy(buf + remaining, LogBuff, size - remaining);
   327         memcpy(buf + remaining, LogBuff, size - remaining);
   328     }
   328     }
   329 }
   329 }
   330 
   330 
   385 
   385 
   386 /* Return message size and content */
   386 /* Return message size and content */
   387 uint32_t GetLogMessage(uint32_t msgidx, char* buf, uint32_t max_size){
   387 uint32_t GetLogMessage(uint32_t msgidx, char* buf, uint32_t max_size){
   388     uint64_t cursor = LogCursor;
   388     uint64_t cursor = LogCursor;
   389     if(cursor){
   389     if(cursor){
   390         /* feeding cursor values */
       
   391         uint32_t curbuffpos = (uint32_t)cursor;
       
   392         uint32_t curmsgidx = (cursor >> 32);
       
   393 
       
   394         /* seach cursor */
   390         /* seach cursor */
   395         uint32_t stailpos = (curbuffpos - sizeof(mTail)) & LOG_BUFFER_MASK; 
   391         uint32_t stailpos = (uint32_t)cursor; 
   396         uint32_t smsgidx;
   392         uint32_t smsgidx;
   397         mTail tail;
   393         mTail tail;
   398         tail.msgidx = curmsgidx;
   394         tail.msgidx = cursor >> 32;
       
   395         tail.msgsize = 0;
   399 
   396 
   400         /* Message search loop */
   397         /* Message search loop */
   401         do {
   398         do {
   402             smsgidx = tail.msgidx;
   399             smsgidx = tail.msgidx;
       
   400             stailpos = (stailpos - sizeof(mTail) - tail.msgsize ) & LOG_BUFFER_MASK;
   403             copy_from_log(stailpos, &tail, sizeof(mTail));
   401             copy_from_log(stailpos, &tail, sizeof(mTail));
   404             stailpos = (stailpos - sizeof(mTail) - tail.msgsize ) & LOG_BUFFER_MASK;
   402         }while((tail.msgidx == smsgidx - 1) && (tail.msgidx > msgidx));
   405         }while(tail.msgidx == smsgidx - 1 && tail.msgidx > msgidx);
       
   406 
   403 
   407         if(tail.msgidx == msgidx){
   404         if(tail.msgidx == msgidx){
   408             uint32_t sbuffpos = (stailpos - tail.msgsize ) & LOG_BUFFER_MASK; 
   405             uint32_t sbuffpos = (stailpos - tail.msgsize ) & LOG_BUFFER_MASK; 
   409             uint32_t totalsize = tail.msgsize + sizeof(mTail);
   406             uint32_t totalsize = tail.msgsize; /*sizeof(mTail);*/
   410             copy_from_log(stailpos, &tail, totalsize > max_size ? max_size : totalsize);
   407             copy_from_log(sbuffpos, buf, totalsize > max_size ? max_size : totalsize);
   411             return totalsize;
   408             return totalsize;
   412         }
   409         }
   413     }
   410     }
   414     return 0;
   411     return 0;
   415 }
   412 }