/*
 * @Description: 
 * @Date: 2020-12-22 18:27:24
 * @LastEditors: CK.Zh
 * @LastEditTime: 2021-01-07 17:54:00
 * @FilePath: \NaviKit_stm32\Middlewares\Log\log.c
 */
/*
 * log.c
 *
 *  Created on: Dec 16, 2020
 *      Author: bookshiyi
 */
#include "log.h"

static bool mutex =false;

void Log(LogLevel_t level,LogPositon_t positon,char *format,...)
{
	if(mutex){
		unsigned char time_out = 100;
		while(mutex && time_out--){//100ms timout for multi-thread use log function
			osDelay(1);
		}
	}

	if(!mutex){
		mutex = true;

			switch(level){
				case trace:  {	printf("[Trace  ] ") ;				}break;
				case debug:  {	printf("[Debug  ] ") ;				}break;
				case info:   {	printf("[Info   ] ") ;				}break;
				case warning:{	printf("[Warning] ") ;				}break;
				case error:	 {	printf("[Error  ] ") ;				}break;
				case fatal:  {	printf("[Fatal  ] ") ;				}break;
				default:	 {	printf("[Undefined Level] ") ;		}break;
			}
			switch (positon)
			{
				case sys:{	printf("SYS: ") ;				}break;
				case som:{	printf("SOM: ") ;				}break;
				case pmb:{	printf("PMB: ") ;				}break;
				default: {	printf("Undefined Position: ") ;}break;
			}
			printf("%u | ",osKernelGetTickCount());
	        va_list args;
	        va_start( args, format );
			print(0, format, args );
			printf("\n") ;
			
		mutex = false;
	}
}

