shithub: p9-stm32-example-os

ref: f801657f77f3923ec2388c25bdcb036c8019ba89
dir: /prog/kconsole.c/

View raw version
#include	<u.h>
#include	"dat.h"
#include	"fns.h"
#include	"mem.h"
#include	"libkern/kern.h"

#define	KLOG_MSGLEN	48
#define KLOG_LOGLEN (sizeof(vlong) + KLOG_MSGLEN)

static Queue*	kconsoleq;

void
printinit(void)
{
	kconsoleq = qopen(3 * KLOG_LOGLEN, 0, nil, nil);
}

void
kconsole(void*)
{
	printinit();

	vlong *ts;
	char msg[KLOG_LOGLEN];

	while(qread(kconsoleq, msg, KLOG_LOGLEN) > 0) {
		ts = (vlong*)msg;
		print("%07lld.%03lld %s\n", *ts / 1000, *ts % 1000, &msg[sizeof(vlong)]);
	}
}

Proc*
prog_kconsole(void)
{
	Proc* p;
	p = newprog("kconsole", kconsole, nil, 0, 1024);
	return p;
}

int
kprint(char *fmt, ...)
{
	va_list arg;
	char buf[KLOG_LOGLEN];
	int n;

	va_start(arg, fmt);
	n = vseprint(buf + sizeof(vlong), buf+sizeof(buf), fmt, arg) - buf;
	va_end(arg);
//	if(qfull(kconsoleq))
//		qflush(kconsoleq);

	buf[sizeof(vlong) + n - 1] = 0;
	*((vlong*)buf) = (vlong)(TK2MS(MACHP(0)->ticks));

	qwrite(kconsoleq, buf, KLOG_MSGLEN);
	return n;
}