From 063ae4be6676b3b6c48183e3753238b05547b124 Mon Sep 17 00:00:00 2001 From: notaz Date: Sat, 12 Jul 2014 20:53:45 +0300 Subject: [PATCH] 0.1 release --- COPYING | 24 ++ Makefile | 18 ++ fonts.c | 314 ++++++++++++++++++++ fonts.h | 7 + liveinfo.png | Bin 0 -> 1390 bytes liveinfo.pxml | 48 +++ main.c | 798 ++++++++++++++++++++++++++++++++++++++++++++++++++ preview.jpg | Bin 0 -> 111174 bytes readme.txt | 50 ++++ run.sh | 20 ++ update_pnd.sh | 8 + 11 files changed, 1287 insertions(+) create mode 100644 COPYING create mode 100644 Makefile create mode 100644 fonts.c create mode 100644 fonts.h create mode 100644 liveinfo.png create mode 100644 liveinfo.pxml create mode 100644 main.c create mode 100644 preview.jpg create mode 100644 readme.txt create mode 100755 run.sh create mode 100755 update_pnd.sh diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d44538c --- /dev/null +++ b/COPYING @@ -0,0 +1,24 @@ + + Copyright (c) 2014, notaz + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the organization nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..fe05688 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +CC = $(CROSS_COMPILE)gcc +CFLAGS += -Wall -ggdb +ifndef DEBUG +CFLAGS += -O2 +endif +LDLIBS += -lpthread -lrt + +OBJS = main.o fonts.o + +all: liveinfo + +liveinfo: $(OBJS) + $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LDLIBS) + +clean: + $(RM) liveinfo $(OBJS) + +.PHONY: all clean diff --git a/fonts.c b/fonts.c new file mode 100644 index 0000000..2994023 --- /dev/null +++ b/fonts.c @@ -0,0 +1,314 @@ +#include +#include + +unsigned char fontdata8x8[64*16] = +{ + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x3C,0x42,0x99,0xBD,0xBD,0x99,0x42,0x3C,0x3C,0x42,0x81,0x81,0x81,0x81,0x42,0x3C, + 0xFE,0x82,0x8A,0xD2,0xA2,0x82,0xFE,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0xFE,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x64,0x74,0x7C,0x38,0x00,0x00, + 0x80,0xC0,0xF0,0xFC,0xF0,0xC0,0x80,0x00,0x01,0x03,0x0F,0x3F,0x0F,0x03,0x01,0x00, + 0x18,0x3C,0x7E,0x18,0x7E,0x3C,0x18,0x00,0xEE,0xEE,0xEE,0xCC,0x00,0xCC,0xCC,0x00, + 0x00,0x00,0x30,0x68,0x78,0x30,0x00,0x00,0x00,0x38,0x64,0x74,0x7C,0x38,0x00,0x00, + 0x3C,0x66,0x7A,0x7A,0x7E,0x7E,0x3C,0x00,0x0E,0x3E,0x3A,0x22,0x26,0x6E,0xE4,0x40, + 0x18,0x3C,0x7E,0x3C,0x3C,0x3C,0x3C,0x00,0x3C,0x3C,0x3C,0x3C,0x7E,0x3C,0x18,0x00, + 0x08,0x7C,0x7E,0x7E,0x7C,0x08,0x00,0x00,0x10,0x3E,0x7E,0x7E,0x3E,0x10,0x00,0x00, + 0x58,0x2A,0xDC,0xC8,0xDC,0x2A,0x58,0x00,0x24,0x66,0xFF,0xFF,0x66,0x24,0x00,0x00, + 0x00,0x10,0x10,0x38,0x38,0x7C,0xFE,0x00,0xFE,0x7C,0x38,0x38,0x10,0x10,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x18,0x00,0x18,0x18,0x00, + 0x6C,0x6C,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x7C,0x28,0x7C,0x28,0x00,0x00, + 0x10,0x38,0x60,0x38,0x0C,0x78,0x10,0x00,0x40,0xA4,0x48,0x10,0x24,0x4A,0x04,0x00, + 0x18,0x34,0x18,0x3A,0x6C,0x66,0x3A,0x00,0x18,0x18,0x20,0x00,0x00,0x00,0x00,0x00, + 0x30,0x60,0x60,0x60,0x60,0x60,0x30,0x00,0x0C,0x06,0x06,0x06,0x06,0x06,0x0C,0x00, + 0x10,0x54,0x38,0x7C,0x38,0x54,0x10,0x00,0x00,0x18,0x18,0x7E,0x18,0x18,0x00,0x00, + 0x00,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x04,0x08,0x10,0x20,0x40,0x00,0x00, + 0x38,0x4C,0xC6,0xC6,0xC6,0x64,0x38,0x00,0x18,0x38,0x18,0x18,0x18,0x18,0x7E,0x00, + 0x7C,0xC6,0x0E,0x3C,0x78,0xE0,0xFE,0x00,0x7E,0x0C,0x18,0x3C,0x06,0xC6,0x7C,0x00, + 0x1C,0x3C,0x6C,0xCC,0xFE,0x0C,0x0C,0x00,0xFC,0xC0,0xFC,0x06,0x06,0xC6,0x7C,0x00, + 0x3C,0x60,0xC0,0xFC,0xC6,0xC6,0x7C,0x00,0xFE,0xC6,0x0C,0x18,0x30,0x30,0x30,0x00, + 0x78,0xC4,0xE4,0x78,0x86,0x86,0x7C,0x00,0x7C,0xC6,0xC6,0x7E,0x06,0x0C,0x78,0x00, + 0x00,0x00,0x18,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x18,0x18,0x30, + 0x1C,0x38,0x70,0xE0,0x70,0x38,0x1C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00, + 0x70,0x38,0x1C,0x0E,0x1C,0x38,0x70,0x00,0x7C,0xC6,0xC6,0x1C,0x18,0x00,0x18,0x00, + 0x3C,0x42,0x99,0xA1,0xA5,0x99,0x42,0x3C,0x38,0x6C,0xC6,0xC6,0xFE,0xC6,0xC6,0x00, + 0xFC,0xC6,0xC6,0xFC,0xC6,0xC6,0xFC,0x00,0x3C,0x66,0xC0,0xC0,0xC0,0x66,0x3C,0x00, + 0xF8,0xCC,0xC6,0xC6,0xC6,0xCC,0xF8,0x00,0xFE,0xC0,0xC0,0xFC,0xC0,0xC0,0xFE,0x00, + 0xFE,0xC0,0xC0,0xFC,0xC0,0xC0,0xC0,0x00,0x3E,0x60,0xC0,0xCE,0xC6,0x66,0x3E,0x00, + 0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0x00,0x7E,0x18,0x18,0x18,0x18,0x18,0x7E,0x00, + 0x06,0x06,0x06,0x06,0xC6,0xC6,0x7C,0x00,0xC6,0xCC,0xD8,0xF0,0xF8,0xDC,0xCE,0x00, + 0x60,0x60,0x60,0x60,0x60,0x60,0x7E,0x00,0xC6,0xEE,0xFE,0xFE,0xD6,0xC6,0xC6,0x00, + 0xC6,0xE6,0xF6,0xFE,0xDE,0xCE,0xC6,0x00,0x7C,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00, + 0xFC,0xC6,0xC6,0xC6,0xFC,0xC0,0xC0,0x00,0x7C,0xC6,0xC6,0xC6,0xDE,0xCC,0x7A,0x00, + 0xFC,0xC6,0xC6,0xCE,0xF8,0xDC,0xCE,0x00,0x78,0xCC,0xC0,0x7C,0x06,0xC6,0x7C,0x00, + 0x7E,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0xC6,0xC6,0xC6,0xC6,0xC6,0xC6,0x7C,0x00, + 0xC6,0xC6,0xC6,0xEE,0x7C,0x38,0x10,0x00,0xC6,0xC6,0xD6,0xFE,0xFE,0xEE,0xC6,0x00, + 0xC6,0xEE,0x3C,0x38,0x7C,0xEE,0xC6,0x00,0x66,0x66,0x66,0x3C,0x18,0x18,0x18,0x00, + 0xFE,0x0E,0x1C,0x38,0x70,0xE0,0xFE,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, + 0x60,0x60,0x30,0x18,0x0C,0x06,0x06,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, + 0x18,0x3C,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, + 0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x06,0x3E,0x66,0x66,0x3C,0x00, + 0x60,0x7C,0x66,0x66,0x66,0x66,0x7C,0x00,0x00,0x3C,0x66,0x60,0x60,0x66,0x3C,0x00, + 0x06,0x3E,0x66,0x66,0x66,0x66,0x3E,0x00,0x00,0x3C,0x66,0x66,0x7E,0x60,0x3C,0x00, + 0x1C,0x30,0x78,0x30,0x30,0x30,0x30,0x00,0x00,0x3E,0x66,0x66,0x66,0x3E,0x06,0x3C, + 0x60,0x7C,0x76,0x66,0x66,0x66,0x66,0x00,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x00, + 0x0C,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x38,0x60,0x60,0x66,0x6C,0x78,0x6C,0x66,0x00, + 0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0xEC,0xFE,0xFE,0xFE,0xD6,0xC6,0x00, + 0x00,0x7C,0x76,0x66,0x66,0x66,0x66,0x00,0x00,0x3C,0x66,0x66,0x66,0x66,0x3C,0x00, + 0x00,0x7C,0x66,0x66,0x66,0x7C,0x60,0x60,0x00,0x3E,0x66,0x66,0x66,0x3E,0x06,0x06, + 0x00,0x7E,0x70,0x60,0x60,0x60,0x60,0x00,0x00,0x3C,0x60,0x3C,0x06,0x66,0x3C,0x00, + 0x30,0x78,0x30,0x30,0x30,0x30,0x1C,0x00,0x00,0x66,0x66,0x66,0x66,0x6E,0x3E,0x00, + 0x00,0x66,0x66,0x66,0x66,0x3C,0x18,0x00,0x00,0xC6,0xD6,0xFE,0xFE,0x7C,0x6C,0x00, + 0x00,0x66,0x3C,0x18,0x3C,0x66,0x66,0x00,0x00,0x66,0x66,0x66,0x66,0x3E,0x06,0x3C, + 0x00,0x7E,0x0C,0x18,0x30,0x60,0x7E,0x00,0x0E,0x18,0x0C,0x38,0x0C,0x18,0x0E,0x00, + 0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x00,0x70,0x18,0x30,0x1C,0x30,0x18,0x70,0x00, + 0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,0x10,0x28,0x10,0x54,0xAA,0x44,0x00,0x00, +}; + + +/* The font is generated from Xorg clR5x8.bdf */ +/* +COMMENT Copyright 1989 Dale Schumacher, dal@syntel.mn.org +COMMENT 399 Beacon Ave. +COMMENT St. Paul, MN 55104-3527 +COMMENT +COMMENT Permission to use, copy, modify, and distribute this software and +COMMENT its documentation for any purpose and without fee is hereby +COMMENT granted, provided that the above copyright notice appear in all +COMMENT copies and that both that copyright notice and this permission +COMMENT notice appear in supporting documentation, and that the name of +COMMENT Dale Schumacher not be used in advertising or publicity pertaining to +COMMENT distribution of the software without specific, written prior +COMMENT permission. Dale Schumacher makes no representations about the +COMMENT suitability of this software for any purpose. It is provided "as +COMMENT is" without express or implied warranty. +COMMENT +*/ +unsigned char fontdata6x8[256][8] = { +{ 0x7c>>2, 0x44>>2, 0x7c>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0xff>>2, 0x7c>>2, }, +{ 0x00>>2, 0x00>>2, 0x10>>2, 0x28>>2, 0x44>>2, 0x7c>>2, 0x44>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x78>>2, 0x44>>2, 0x78>>2, 0x44>>2, 0x78>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x38>>2, 0x44>>2, 0x40>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x78>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x78>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x7c>>2, 0x40>>2, 0x78>>2, 0x40>>2, 0x7c>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x7c>>2, 0x40>>2, 0x78>>2, 0x40>>2, 0x40>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x3c>>2, 0x40>>2, 0x4c>>2, 0x44>>2, 0x3c>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x44>>2, 0x7c>>2, 0x44>>2, 0x44>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x38>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x38>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x1c>>2, 0x04>>2, 0x04>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x48>>2, 0x50>>2, 0x60>>2, 0x50>>2, 0x48>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x7c>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x6c>>2, 0x54>>2, 0x54>>2, 0x44>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x64>>2, 0x54>>2, 0x4c>>2, 0x44>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x38>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x78>>2, 0x44>>2, 0x78>>2, 0x40>>2, 0x40>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x38>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x0c>>2, }, +{ 0x00>>2, 0x00>>2, 0x78>>2, 0x44>>2, 0x78>>2, 0x50>>2, 0x4c>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x3c>>2, 0x40>>2, 0x38>>2, 0x04>>2, 0x78>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x7c>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x44>>2, 0x28>>2, 0x28>>2, 0x10>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x54>>2, 0x54>>2, 0x6c>>2, 0x44>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x28>>2, 0x10>>2, 0x28>>2, 0x44>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x28>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x7c>>2, 0x08>>2, 0x10>>2, 0x20>>2, 0x7c>>2, 0x00>>2, }, +{ 0xe0>>2, 0x80>>2, 0xe0>>2, 0x8c>>2, 0xf0>>2, 0x10>>2, 0x10>>2, 0x0c>>2, }, +{ 0x00>>2, 0x10>>2, 0x38>>2, 0x7c>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x00>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x7c>>2, 0x38>>2, 0x10>>2, 0x00>>2, }, +{ 0x00>>2, 0x10>>2, 0x18>>2, 0xfc>>2, 0x18>>2, 0x10>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x20>>2, 0x60>>2, 0xfc>>2, 0x60>>2, 0x20>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, }, +{ 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x00>>2, 0x10>>2, 0x00>>2, }, +{ 0x28>>2, 0x28>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x28>>2, 0x7c>>2, 0x28>>2, 0x7c>>2, 0x28>>2, 0x00>>2, 0x00>>2, }, +{ 0x10>>2, 0x3c>>2, 0x50>>2, 0x38>>2, 0x14>>2, 0x78>>2, 0x10>>2, 0x00>>2, }, +{ 0x60>>2, 0x64>>2, 0x08>>2, 0x10>>2, 0x20>>2, 0x4c>>2, 0x0c>>2, 0x00>>2, }, +{ 0x38>>2, 0x40>>2, 0x40>>2, 0x20>>2, 0x54>>2, 0x48>>2, 0x34>>2, 0x00>>2, }, +{ 0x10>>2, 0x20>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, }, +{ 0x04>>2, 0x08>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x08>>2, 0x04>>2, 0x00>>2, }, +{ 0x40>>2, 0x20>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x20>>2, 0x40>>2, 0x00>>2, }, +{ 0x00>>2, 0x10>>2, 0x54>>2, 0x38>>2, 0x54>>2, 0x10>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x10>>2, 0x10>>2, 0x7c>>2, 0x10>>2, 0x10>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x10>>2, 0x10>>2, 0x20>>2, }, +{ 0x00>>2, 0x00>>2, 0x00>>2, 0x7c>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x04>>2, 0x04>>2, 0x08>>2, 0x08>>2, 0x10>>2, 0x10>>2, 0x20>>2, 0x20>>2, }, +{ 0x38>>2, 0x44>>2, 0x4c>>2, 0x54>>2, 0x64>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x10>>2, 0x30>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x04>>2, 0x08>>2, 0x10>>2, 0x20>>2, 0x7c>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x04>>2, 0x18>>2, 0x04>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x18>>2, 0x18>>2, 0x28>>2, 0x28>>2, 0x7c>>2, 0x08>>2, 0x1c>>2, 0x00>>2, }, +{ 0x7c>>2, 0x40>>2, 0x78>>2, 0x04>>2, 0x04>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x18>>2, 0x20>>2, 0x40>>2, 0x78>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x7c>>2, 0x44>>2, 0x04>>2, 0x08>>2, 0x08>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x44>>2, 0x3c>>2, 0x04>>2, 0x08>>2, 0x30>>2, 0x00>>2, }, +{ 0x00>>2, 0x10>>2, 0x10>>2, 0x00>>2, 0x00>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x00>>2, 0x10>>2, 0x10>>2, 0x00>>2, 0x00>>2, 0x10>>2, 0x10>>2, 0x20>>2, }, +{ 0x00>>2, 0x0c>>2, 0x30>>2, 0xc0>>2, 0x30>>2, 0x0c>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x7c>>2, 0x00>>2, 0x7c>>2, 0x00>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0xc0>>2, 0x30>>2, 0x0c>>2, 0x30>>2, 0xc0>>2, 0x00>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x04>>2, 0x08>>2, 0x10>>2, 0x00>>2, 0x10>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x5c>>2, 0x5c>>2, 0x58>>2, 0x40>>2, 0x38>>2, 0x00>>2, }, +{ 0x10>>2, 0x28>>2, 0x44>>2, 0x44>>2, 0x7c>>2, 0x44>>2, 0x44>>2, 0x00>>2, }, +{ 0x78>>2, 0x44>>2, 0x44>>2, 0x78>>2, 0x44>>2, 0x44>>2, 0x78>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x70>>2, 0x48>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x48>>2, 0x70>>2, 0x00>>2, }, +{ 0x7c>>2, 0x40>>2, 0x40>>2, 0x78>>2, 0x40>>2, 0x40>>2, 0x7c>>2, 0x00>>2, }, +{ 0x7c>>2, 0x40>>2, 0x40>>2, 0x78>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x40>>2, 0x4c>>2, 0x44>>2, 0x44>>2, 0x3c>>2, 0x00>>2, }, +{ 0x44>>2, 0x44>>2, 0x44>>2, 0x7c>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x00>>2, }, +{ 0x7c>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x7c>>2, 0x00>>2, }, +{ 0x1c>>2, 0x04>>2, 0x04>>2, 0x04>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x44>>2, 0x48>>2, 0x50>>2, 0x60>>2, 0x50>>2, 0x48>>2, 0x44>>2, 0x00>>2, }, +{ 0x40>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x7c>>2, 0x00>>2, }, +{ 0x44>>2, 0x6c>>2, 0x54>>2, 0x54>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x00>>2, }, +{ 0x44>>2, 0x64>>2, 0x64>>2, 0x54>>2, 0x4c>>2, 0x4c>>2, 0x44>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x78>>2, 0x44>>2, 0x44>>2, 0x78>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x0c>>2, }, +{ 0x78>>2, 0x44>>2, 0x44>>2, 0x78>>2, 0x50>>2, 0x48>>2, 0x44>>2, 0x00>>2, }, +{ 0x38>>2, 0x44>>2, 0x40>>2, 0x38>>2, 0x04>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x7c>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x44>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x44>>2, 0x44>>2, 0x44>>2, 0x28>>2, 0x28>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x44>>2, 0x44>>2, 0x44>>2, 0x54>>2, 0x54>>2, 0x6c>>2, 0x44>>2, 0x00>>2, }, +{ 0x44>>2, 0x44>>2, 0x28>>2, 0x10>>2, 0x28>>2, 0x44>>2, 0x44>>2, 0x00>>2, }, +{ 0x44>>2, 0x44>>2, 0x28>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x7c>>2, 0x04>>2, 0x08>>2, 0x10>>2, 0x20>>2, 0x40>>2, 0x7c>>2, 0x00>>2, }, +{ 0x1c>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x1c>>2, 0x00>>2, }, +{ 0x20>>2, 0x20>>2, 0x10>>2, 0x10>>2, 0x08>>2, 0x08>>2, 0x04>>2, 0x04>>2, }, +{ 0x70>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x70>>2, 0x00>>2, }, +{ 0x10>>2, 0x28>>2, 0x44>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0xfc>>2, 0x00>>2, }, +{ 0x10>>2, 0x08>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x3c>>2, 0x44>>2, 0x44>>2, 0x4c>>2, 0x34>>2, 0x00>>2, }, +{ 0x40>>2, 0x40>>2, 0x78>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x78>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x3c>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x3c>>2, 0x00>>2, }, +{ 0x04>>2, 0x04>>2, 0x3c>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x3c>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x38>>2, 0x44>>2, 0x7c>>2, 0x40>>2, 0x38>>2, 0x00>>2, }, +{ 0x1c>>2, 0x20>>2, 0x78>>2, 0x20>>2, 0x20>>2, 0x20>>2, 0x20>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x3c>>2, 0x44>>2, 0x44>>2, 0x3c>>2, 0x04>>2, 0x38>>2, }, +{ 0x40>>2, 0x40>>2, 0x78>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x00>>2, }, +{ 0x10>>2, 0x00>>2, 0x30>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x38>>2, 0x00>>2, }, +{ 0x08>>2, 0x00>>2, 0x38>>2, 0x08>>2, 0x08>>2, 0x08>>2, 0x08>>2, 0x70>>2, }, +{ 0x40>>2, 0x40>>2, 0x48>>2, 0x50>>2, 0x60>>2, 0x50>>2, 0x48>>2, 0x00>>2, }, +{ 0x30>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x38>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x68>>2, 0x54>>2, 0x54>>2, 0x54>>2, 0x44>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x58>>2, 0x64>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x38>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x38>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x78>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x78>>2, 0x40>>2, }, +{ 0x00>>2, 0x00>>2, 0x3c>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x3c>>2, 0x04>>2, }, +{ 0x00>>2, 0x00>>2, 0x58>>2, 0x60>>2, 0x40>>2, 0x40>>2, 0x40>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x3c>>2, 0x40>>2, 0x38>>2, 0x04>>2, 0x78>>2, 0x00>>2, }, +{ 0x10>>2, 0x10>>2, 0x7c>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x0c>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x4c>>2, 0x34>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x6c>>2, 0x28>>2, 0x28>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x54>>2, 0x54>>2, 0x54>>2, 0x28>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x28>>2, 0x10>>2, 0x28>>2, 0x44>>2, 0x00>>2, }, +{ 0x00>>2, 0x00>>2, 0x44>>2, 0x44>>2, 0x44>>2, 0x3c>>2, 0x04>>2, 0x38>>2, }, +{ 0x00>>2, 0x00>>2, 0x7c>>2, 0x08>>2, 0x10>>2, 0x20>>2, 0x7c>>2, 0x00>>2, }, +{ 0x04>>2, 0x08>>2, 0x08>>2, 0x10>>2, 0x08>>2, 0x08>>2, 0x04>>2, 0x00>>2, }, +{ 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x10>>2, 0x00>>2, }, +{ 0x40>>2, 0x20>>2, 0x20>>2, 0x10>>2, 0x20>>2, 0x20>>2, 0x40>>2, 0x00>>2, }, +{ 0x20>>2, 0x54>>2, 0x08>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, 0x00>>2, }, +{ 0x00>>2, 0x10>>2, 0x10>>2, 0x28>>2, 0x28>>2, 0x44>>2, 0x7c>>2, 0x00>>2, }, +}; + +/* note: may use 1 extra pixel on the right */ +void basic_text_out16_nf(void *fb, int w, int x, int y, const char *text) +{ + int i, l; + unsigned short *screen; + unsigned short val = 0xffff; + + screen = (unsigned short *)fb + x + y * w; + for (i = 0; x + i * 8 < w; i++, screen += 8) + { + char c = text[i]; + if (c == 0) + break; + if (c == ' ') + continue; + + for (l = 0; l < 8; l++) + { + unsigned char fd = fontdata8x8[c * 8 + l]; + unsigned short *s = screen + l * w; + unsigned char fd1, fdp = 0; + + if (fd&0x80) s[0] = val; + if (fd&0x40) s[1] = val; + if (fd&0x20) s[2] = val; + if (fd&0x10) s[3] = val; + if (fd&0x08) s[4] = val; + if (fd&0x04) s[5] = val; + if (fd&0x02) s[6] = val; + if (fd&0x01) s[7] = val; + + // draw "shadow" (RGB1555 compatible) + if (l > 0) + fdp = fontdata8x8[c * 8 + l - 1]; + + for (fd1 = 0x80; fd1 != 0; fd1 >>= 1, s++) + if (!(fd & (fd1 >> 1)) && ((fdp | fd) & fd1)) + s[1] = (s[1] >> 1) & 0x39ef; + } + } +} + +void basic_text_out_uyvy_nf(void *fb, int w, int x, int y, const char *text) +{ + int i, l; + unsigned short *screen; + + screen = (unsigned short *)fb + x + y * w; + for (i = 0; x + i * 8 < w; i++, screen += 8) + { + char c = text[i]; + if (c == 0) + break; + if (c == ' ') + continue; + + for (l = 0; l < 8; l++) + { + unsigned char fd = fontdata8x8[c * 8 + l]; + unsigned char *s = (void *)(screen + l * w); + unsigned char fd1, fdp = 0; + + if (fd&0x80) s[0 * 2 + 1] = 235; + if (fd&0x40) s[1 * 2 + 1] = 235; + if (fd&0x20) s[2 * 2 + 1] = 235; + if (fd&0x10) s[3 * 2 + 1] = 235; + if (fd&0x08) s[4 * 2 + 1] = 235; + if (fd&0x04) s[5 * 2 + 1] = 235; + if (fd&0x02) s[6 * 2 + 1] = 235; + if (fd&0x01) s[7 * 2 + 1] = 235; + + // draw "shadow" + if (l > 0) + fdp = fontdata8x8[c * 8 + l - 1]; + + for (fd1 = 0x80; fd1 != 0; fd1 >>= 1, s += 2) + if (!(fd & (fd1 >> 1)) && ((fdp | fd) & fd1)) + s[1] /= 2; + } + } +} + +void basic_text_out16(void *fb, int w, int x, int y, const char *texto, ...) +{ + va_list args; + char buffer[256]; + + va_start(args, texto); + vsnprintf(buffer, sizeof(buffer), texto, args); + va_end(args); + + basic_text_out16_nf(fb, w, x, y, buffer); +} diff --git a/fonts.h b/fonts.h new file mode 100644 index 0000000..e565c93 --- /dev/null +++ b/fonts.h @@ -0,0 +1,7 @@ + +extern unsigned char fontdata8x8[64*16]; +extern unsigned char fontdata6x8[256-32][8]; + +void basic_text_out16_nf(void *fb, int w, int x, int y, const char *text); +void basic_text_out16(void *fb, int w, int x, int y, const char *texto, ...); +void basic_text_out_uyvy_nf(void *fb, int w, int x, int y, const char *text); diff --git a/liveinfo.png b/liveinfo.png new file mode 100644 index 0000000000000000000000000000000000000000..839418631ab851e17661832e5614fb7ad699d041 GIT binary patch literal 1390 zcmV-!1(EuRP)A6O6~}+~zBg|^Jf4g*w#S~Ni4!WzNfbiCQdpF3kc#+_+7%lpT^E6r1&h*6i=Yw` zOArW33Me}iBoOHaf`X7xMcRm48lQjKAz5ky8;O=*#QVKx*mwp}*+QYh2JBcv+l>y+?;k}M*1x(R0`lV5zR2u>S^VaJY$*o_5((3_Y3?=dF?~1Vf_)GsVTU&{63zWMIwt0EXq?%)uvhhdz;csne{6> zWBYOoYYhjVnxylOHZd{ERYXa&qn}g}iUqL(u0lje`Ub5v{bqkxj0PbShbpvInuI1o ztRR74d;@mWPih1twuo4iqtH1`ayP{PpohQI#V@5}uioZBzC;v-=&Z&u4imEnF&I{4 z`7t68S&~kS=_kX9S%u%|bNlnR2-o~Q(f9@lgmQI)_MH}YZmobC-9)J(tbO_@p5tK# zhIqv%=_GvW&LX*7E{*e+1wlalW4Fjw^Ymo zUd9-nxiUxgXcjv#+`M^n_{@)vu1zn+jzSkS#D?f!1KxdhnK+I~l4Q>j$1(3dyG*p| zV+RS1MuSG90p>9XNFrcCWi@U!%h}%@CW<0zwHkACbDTVRl1in5<2Y0*6M3$r_b!u9Ld z@qM2&XU<@)B@9F2IA&>SiBqReQLoprc}?sKlgFlb?GJAd!~x13C6FEg1eH_R#Da#! zcWMj<1G?QVg+hT7Cr;4mbg0+sXssC^AE#Qa5{4mB6cK#bCu|1Xzq^LX3NugFK#!&% zUD8Gn4JxBhIR_MUIvp-vyol#{7-KNT0C4r{RYZi<)m4HZz*@_-=bN1U^HDNW9w6NP zaCOHzke&h~$Ohx29rOO@Ryh6JB1$R3Fx+v?=I}Te?(AZH{60so|}6&hyr#^LVaHsZyeK z`vIAZi-{5nWBFZCAz%gVDX~=rH`%O`8IMzVUd#Timg9PaeaFj#2TBg(LAR&~}#||sqR{#J207*qoM6N<$f?7J1W&i*H literal 0 HcmV?d00001 diff --git a/liveinfo.pxml b/liveinfo.pxml new file mode 100644 index 0000000..5ea3c02 --- /dev/null +++ b/liveinfo.pxml @@ -0,0 +1,48 @@ + + + + + Live system info + + + + + + + Live system info + + Live system info + + + Shows CPU, memory, I/O, network and battery information on an always-visible layer, updated once a second. Uses system-reserved OMAP hardware layer, so should be visible in most programs that don't use tv-out (tv-out needs that same layer to send video to TV). + +When you want to exit Live info, just run this pnd again. + +See documentation for information about what each number means. + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/main.c b/main.c new file mode 100644 index 0000000..75082eb --- /dev/null +++ b/main.c @@ -0,0 +1,798 @@ +/* + * pandora live info + * (C) notaz, 2014 + * + * This work is licensed under the terms of 3-clause BSD license. + * See COPYING file in the top-level directory. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fonts.h" + +#define SCREEN_WIDTH 800 +#define SCREEN_HEIGHT 480 +#define WIDTH 80 +#define HEIGHT 480 +#define MEM_SIZE (((WIDTH * HEIGHT * 2 * 2) + 0xfff) & ~0xfff) +#define Y_STEP 9 + +static struct fb_var_screeninfo g_vi; +static uint16_t *g_screen_base, *g_screen; +static unsigned int g_old_mem; +static int g_fd, g_exit; + +#define IS_START(buf, str) \ + !strncmp(buf, str, sizeof(str) - 1) + +static int setup_layer(void) +{ + static const char fbname[] = "/dev/fb2"; + struct omapfb_plane_info pi; + struct omapfb_mem_info mi; + struct omapfb_color_key key; + int ret; + + g_fd = open(fbname, O_RDWR); + if (g_fd == -1) { + fprintf(stderr, "open %s: ", fbname); + perror(NULL); + return 1; + } + + ret = ioctl(g_fd, OMAPFB_QUERY_PLANE, &pi); + if (ret < 0) { + perror("ioctl OMAPFB_QUERY_PLANE"); + return 1; + } + + ret = ioctl(g_fd, OMAPFB_QUERY_MEM, &mi); + if (ret < 0) { + perror("ioctl OMAPFB_QUERY_MEM"); + return 1; + } + + /* must disable when changing stuff */ + if (pi.enabled) { + pi.enabled = 0; + ret = ioctl(g_fd, OMAPFB_SETUP_PLANE, &pi); + if (ret < 0) { + perror("ioctl OMAPFB_SETUP_PLANE (d)"); + return 1; + } + } + + g_old_mem = mi.size; + if (mi.size < MEM_SIZE) { + mi.size = MEM_SIZE; + ret = ioctl(g_fd, OMAPFB_SETUP_MEM, &mi); + if (ret < 0) { + perror("ioctl SETUP_MEM"); + return 1; + } + } + + pi.pos_x = SCREEN_WIDTH - WIDTH; + pi.pos_y = 0; + pi.out_width = WIDTH; + pi.out_height = HEIGHT; + ret = ioctl(g_fd, OMAPFB_SETUP_PLANE, &pi); + if (ret < 0) { + perror("ioctl OMAPFB_SETUP_PLANE (e1)"); + return 1; + } + + ret = ioctl(g_fd, FBIOGET_VSCREENINFO, &g_vi); + if (ret < 0) { + perror("ioctl FBIOGET_VSCREENINFO"); + return 1; + } + + g_vi.xres = g_vi.xres_virtual = WIDTH; + g_vi.yres = HEIGHT; + g_vi.yres_virtual = HEIGHT * 2; + g_vi.bits_per_pixel = 16; + + ret = ioctl(g_fd, FBIOPUT_VSCREENINFO, &g_vi); + if (ret < 0) { + perror("ioctl FBIOPUT_VSCREENINFO"); + return 1; + } + + pi.enabled = 1; + ret = ioctl(g_fd, OMAPFB_SETUP_PLANE, &pi); + if (ret < 0) { + perror("ioctl OMAPFB_SETUP_PLANE (e2)"); + return 1; + } + + memset(&key, 0, sizeof(key)); + key.key_type = OMAPFB_COLOR_KEY_VID_SRC; + key.trans_key = 0x07e0; + + ret = ioctl(g_fd, OMAPFB_SET_COLOR_KEY, &key); + if (ret < 0) { + perror("ioctl OMAPFB_SET_COLOR_KEY"); + return 1; + } + + return 0; +} + +static int check_layer(void) +{ + struct omapfb_plane_info pi; + int ret; + + ret = ioctl(g_fd, OMAPFB_QUERY_PLANE, &pi); + if (ret < 0) { + perror("ioctl OMAPFB_QUERY_PLANE"); + return 1; + } + + if (!pi.enabled) { + printf("something disabled the layer (tv-out?), quitting\n"); + return 1; + } + + return 0; +} + +static void remove_layer(void) +{ + struct omapfb_plane_info pi; + struct omapfb_mem_info mi; + int ret; + + memset(&pi, 0, sizeof(pi)); + pi.enabled = 0; + ret = ioctl(g_fd, OMAPFB_SETUP_PLANE, &pi); + if (ret < 0) + perror("ioctl OMAPFB_SETUP_PLANE (c)"); + + ret = ioctl(g_fd, OMAPFB_QUERY_MEM, &mi); + if (ret < 0) { + perror("ioctl OMAPFB_QUERY_MEM"); + goto out; + } + + if (mi.size != g_old_mem) { + mi.size = g_old_mem; + ret = ioctl(g_fd, OMAPFB_SETUP_MEM, &mi); + if (ret < 0) { + perror("ioctl SETUP_MEM"); + goto out; + } + } + +out: + close(g_fd); + g_fd = -1; +} + +static void handle_signal(int num) +{ + g_exit = 1; +} + +static void flip_fb(void) +{ + static int id; + + g_vi.yoffset = id * HEIGHT; + ioctl(g_fd, FBIOPAN_DISPLAY, &g_vi); + id ^= 1; + g_screen = g_screen_base + id * WIDTH * HEIGHT; +} + +#define s_printf(x, y, fmt, ...) \ + basic_text_out16(g_screen, WIDTH, x, y, fmt, ##__VA_ARGS__); + +static int read_int_file(const char *fn, int *val) +{ + FILE *f; + int ret; + + *val = 0; + f = fopen(fn, "r"); + if (f == NULL) + return 1; + ret = fscanf(f, "%d", val); + fclose(f); + if (ret != 1) + return 1; + + return 0; +} + +static void clear(int h) +{ + int *p = (int *)g_screen; + int l = WIDTH * h / 2; + + for (; l >= 4; l -= 4, p += 4) + p[0] = p[1] = p[2] = p[3] = 0x07e007e0; + for (; l > 0; l--, p++) + *p = 0x07e007e0; +} + +struct proc_stat { + unsigned long idlesum; + unsigned long sys; + unsigned long irqs; + unsigned long ctxt; +}; + +static struct { + struct proc_stat last_st; + int cpu_usage; + int cpu_sys; + int irqs; + int ctxt; + int mem_free; + int mem_huge; + int mem_free_swap; +} stats; + +static void collect_proc_stat(void) +{ + static long hz; + struct proc_stat st; + char buf[256]; + unsigned long wait; + unsigned long iowait; + FILE *f; + + if (hz == 0) { + hz = sysconf(_SC_CLK_TCK); + printf("hz: %ld\n", hz); + } + + f = fopen("/proc/stat", "r"); + if (f == NULL) + return; + + if (fscanf(f, "cpu %*s %*s %lu %lu %lu", + &st.sys, &wait, &iowait) != 3) + goto out; + do { + if (fgets(buf, sizeof(buf), f) == NULL) + goto out; + } while (fscanf(f, "intr %lu", &st.irqs) != 1); + do { + if (fgets(buf, sizeof(buf), f) == NULL) + goto out; + } while (fscanf(f, "ctxt %lu", &st.ctxt) != 1); + + st.idlesum = wait + iowait; + + stats.cpu_usage = hz - (st.idlesum - stats.last_st.idlesum); + stats.cpu_sys = st.sys - stats.last_st.sys; + if (hz != 100) { + stats.cpu_usage = stats.cpu_usage * 100 / hz; + stats.cpu_sys = stats.cpu_sys * 100 / hz; + } + stats.irqs = st.irqs - stats.last_st.irqs; + stats.ctxt = st.ctxt - stats.last_st.ctxt; + +out: + stats.last_st = st; + fclose(f); +} + +static void collect_mem_stat(void) +{ + static const char fn[] = "/proc/meminfo"; + uint32_t total = 0, free = 0, buffers = 0, cached = 0; + uint32_t anonhuge = 0, hugetot = 0, hugefree = 0, hugepgsz = 0; + uint32_t free_swap = 0; + char buf[128]; + FILE *f; + + f = fopen(fn, "r"); + if (f == NULL) + return; + + while (fgets(buf, sizeof(buf), f)) { + if (total == 0 && sscanf(buf, "MemTotal: %u", &total) == 1) + continue; + if (free == 0 && sscanf(buf, "MemFree: %u", &free) == 1) + continue; + if (buffers == 0 && sscanf(buf, "Buffers: %u", &buffers) == 1) + continue; + if (cached == 0 && sscanf(buf, "Cached: %u", &cached) == 1) + continue; + if (free_swap == 0 && sscanf(buf, "SwapFree: %u", &free_swap) == 1) + continue; + if (anonhuge == 0 && sscanf(buf, "AnonHugePages: %u", &anonhuge) == 1) + continue; + if (hugetot == 0 && sscanf(buf, "HugePages_Total: %u", &hugetot) == 1) + continue; + if (hugefree == 0 && sscanf(buf, "HugePages_Free: %u", &hugefree) == 1) + continue; + if (hugepgsz == 0 && sscanf(buf, "Hugepagesize: %u", &hugepgsz) == 1) + continue; + } + + fclose(f); + + hugetot = (hugetot - hugefree) * hugepgsz; + free += buffers + cached; + stats.mem_free = free >> 10; + stats.mem_huge = hugetot >> 10; + stats.mem_free_swap = free_swap >> 10; +} + +struct io_stat { + unsigned long sec_r; + unsigned long sec_w; +}; + +static struct { + struct io_stat last_st; + int read; // kB/s + int write; +} io_stats; + +static void collect_io_stat(void) +{ + unsigned long sec_r, sec_w; + struct io_stat st = { 0, }; + char buf[128]; + FILE *f; + int i; + + for (i = 0; i < 2; i++) { + snprintf(buf, sizeof(buf), "/sys/block/mmcblk%d/stat", i); + f = fopen(buf, "r"); + if (f == NULL) + continue; + + if (fscanf(f, "%*s %*s %lu %*s %*s %*s %lu", + &sec_r, &sec_w) == 2) + { + st.sec_r += sec_r; + st.sec_w += sec_w; + } + fclose(f); + } + + io_stats.read = st.sec_r - io_stats.last_st.sec_r; + io_stats.write = st.sec_w - io_stats.last_st.sec_w; + // assuming 512 byte sectors.. + io_stats.read >>= 1; + io_stats.write >>= 1; + + io_stats.last_st = st; +} + +struct net_stat { + unsigned long rx; + unsigned long tx; +}; + +static struct { + struct net_stat last_st; + int down; // kB/s + int up; + int have_wlan; + int link; + int level; +} net_stats; + +static void collect_net_stat(void) +{ + struct net_stat st = { 0, }; + unsigned long rx, tx; + int found = 0; + char buf[256]; + FILE *f; + + net_stats.down = net_stats.up = + net_stats.have_wlan = net_stats.link = net_stats.level = 0; + + f = fopen("/proc/net/dev", "r"); + if (f == NULL) + return; + + while (!feof(f)) { + static const char fmt[] = + "%255s %lu %*s %*s %*s %*s %*s %*s %lu"; + if (fscanf(f, fmt, buf, &rx, &tx) != 3) + continue; + if (IS_START(buf, "lo")) + continue; + st.rx += rx; + st.tx += tx; + found = 1; + } + fclose(f); + + if (found) { + net_stats.down = st.rx - net_stats.last_st.rx; + net_stats.up = st.tx - net_stats.last_st.tx; + } + net_stats.last_st = st; + + f = fopen("/proc/net/wireless", "r"); + if (f == NULL) + return; + + while (!feof(f)) { + int lnk, lvl; + if (fscanf(f, "%255s %*x %d. %d.", buf, &lnk, &lvl) != 3) + continue; + if (IS_START(buf, "lo")) + continue; + // first one should be enough + net_stats.have_wlan = 1; + net_stats.link = lnk; + net_stats.level = lvl; + break; + } + fclose(f); +} + +static void collect_stats(void) +{ + collect_proc_stat(); + collect_mem_stat(); + collect_io_stat(); + collect_net_stat(); +} + +static char cpu_reg_path[64]; + +static void init_stats(void) +{ + char buf[64]; + int found; + FILE *f; + int i; + + // find the CPU regulator + for (i = found = 0; ; i++) { + snprintf(buf, sizeof(buf), + "/sys/class/regulator/regulator.%d/name", i); + f = fopen(buf, "r"); + if (f == NULL) + break; + fgets(buf, sizeof(buf), f); + fclose(f); + if (IS_START(buf, "vdd_mpu")) { + found = 1; + break; + } + } + + if (found) + snprintf(cpu_reg_path, sizeof(cpu_reg_path), + "/sys/class/regulator/regulator.%d/microvolts", i); + + // do collect so differential stats get sane values + collect_stats(); +} + +static void get_time(int x, int y) +{ + struct timeval tv; + struct tm *t; + char buf[16]; + + gettimeofday(&tv, NULL); + t = localtime(&tv.tv_sec); + strftime(buf, sizeof(buf), "%T", t); + s_printf(x, y, " %s", buf); +} + +static void get_cpu(int x, int y) +{ + s_printf(x, y, "CPU:%5d%%", stats.cpu_usage); +} + +static void get_sys(int x, int y) +{ + s_printf(x, y, "SYS:%5d%%", stats.cpu_sys); +} + +static void get_irq(int x, int y) +{ + s_printf(x, y, "IRQ:%5u", stats.irqs); +} + +static void get_cs(int x, int y) +{ + s_printf(x, y, "CS:%6u", stats.ctxt); +} + +static void get_cpuf(int x, int y) +{ + static const char fn[] = + "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"; + int f; + + if (read_int_file(fn, &f)) + return; + s_printf(x, y, "f:%7dM", f / 1000); +} + +static void get_cpuv(int x, int y) +{ + int v = 0; + + if (!cpu_reg_path[0] || read_int_file(cpu_reg_path, &v)) + return; + s_printf(x, y, "V:%7.3fV", (float)v / 1000000.0f); +} + +static void get_memfree(int x, int y) +{ + s_printf(x, y, "M:%7dM", stats.mem_free); +} + +static void get_memhuge(int x, int y) +{ + s_printf(x, y, "H:%7dM", stats.mem_huge); +} + +static void get_memswap(int x, int y) +{ + s_printf(x, y, "S:%7dM", stats.mem_free_swap); +} + +#define PS_BASE "/sys/class/power_supply/bq27500-0/" + +static void get_bcap(int x, int y) +{ + static const char fnc[] = PS_BASE "capacity"; + int c; + + if (read_int_file(fnc, &c)) + return; + s_printf(x, y, "C:%7d%%", c); +} + +static void get_btime(int x, int y) +{ + static const char fne[] = PS_BASE "time_to_empty_now"; + static const char fnf[] = PS_BASE "time_to_full_now"; + int t = 0; + + if (read_int_file(fne, &t) || t == 0) { + if (read_int_file(fnf, &t)) + return; + } + s_printf(x, y, "t:%4d:%02d", t / 3600, t / 60 % 60); +} + +static void get_bvolts(int x, int y) +{ + static const char fnv[] = PS_BASE "voltage_now"; + int volt = 0; + + if (read_int_file(fnv, &volt)) + return; + + s_printf(x, y, "V:%7.3fV", (float)volt / 1000000.0f); +} + +static void get_bwatts(int x, int y) +{ + static const char fnc[] = PS_BASE "current_now"; + static const char fnv[] = PS_BASE "voltage_now"; + int w, cur = 0, volt = 0; + + if (read_int_file(fnc, &cur)) + return; + if (read_int_file(fnv, &volt)) + return; + + w = (cur / 1000) * (volt / 1000); + s_printf(x, y, "P:%7.3fW", (float)w / 1000000.0f); +} + +static void get_btemp(int x, int y) +{ + static const char fnt[] = PS_BASE "temp"; + int t; + + if (read_int_file(fnt, &t)) + return; + s_printf(x, y, "T:%7.1fC", (float)t / 10.0f); +} + +static void get_ioread(int x, int y) +{ + s_printf(x, y, "R:%5.1fM/s", (float)io_stats.read / 1000.0f); +} + +static void get_iowrite(int x, int y) +{ + s_printf(x, y, "W:%5.1fM/s", (float)io_stats.write / 1000.0f); +} + +static void get_netdown(int x, int y) +{ + s_printf(x, y, "D:%5uK/s", net_stats.down / 1000); +} + +static void get_netup(int x, int y) +{ + s_printf(x, y, "U:%5uK/s", net_stats.up / 1000); +} + +static void get_netsgnl(int x, int y) +{ + s_printf(x, y, "S:%5ddBm", net_stats.level); +} + +int main(int argc, char *argv[]) +{ + static const char socket_name[] = "\0livestats"; + pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; + pthread_cond_t cond; + pthread_condattr_t condattr; + struct sockaddr_un sun; + struct timespec ts; + struct pollfd pfd; + int y = 0, y_max = 0; + int sock; + int ret; + + // look for other instance + sock = socket(PF_UNIX, SOCK_STREAM, 0); + if (sock == -1) { + perror("socket PF_UNIX"); + return 1; + } + + memset(&sun, 0, sizeof(sun)); + sun.sun_family = AF_UNIX; + memcpy(sun.sun_path, socket_name, sizeof(socket_name)); + + ret = connect(sock, (struct sockaddr *)&sun, sizeof(sun)); + if (ret == 0) { + printf("other instance detected, sending quit command\n"); + ret = send(sock, "quit", 4, 0); + if (ret != 4) + perror("send"); + close(sock); + return 0; + } + + // bind/listen for quit command + ret = bind(sock, (struct sockaddr *)&sun, sizeof(sun)); + if (ret != 0) { + perror("bind"); + close(sock); + return 1; + } + + ret = listen(sock, 1); + if (ret != 0) { + perror("listen"); + close(sock); + return 1; + } + + pfd.fd = sock; + pfd.events = POLLIN | POLLPRI; + pfd.revents = 0; + + // clean up on kill too + signal(SIGTERM, handle_signal); + + ret = pthread_condattr_init(&condattr); + ret |= pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC); + ret |= pthread_cond_init(&cond, &condattr); + pthread_condattr_destroy(&condattr); + if (ret != 0) { + fprintf(stderr, "cond init failed\n"); + return 1; + } + + ret = setup_layer(); + if (ret) + return ret; + + g_screen_base = mmap(NULL, MEM_SIZE, PROT_READ | PROT_WRITE, + MAP_SHARED, g_fd, 0); + if (g_screen_base == MAP_FAILED) { + perror("mmap"); + return 1; + } + g_screen = g_screen_base; + clear(HEIGHT); + flip_fb(); + clear(HEIGHT); + + pthread_mutex_lock(&mutex); + ret = clock_gettime(CLOCK_MONOTONIC, &ts); + if (ret != 0) { + perror("clock_gettime CLOCK_MONOTONIC"); + return 1; + } + + nice(-1); + init_stats(); + + while (!g_exit) { + collect_stats(); + + y += Y_STEP; + if (y > y_max) + y_max = y; + clear(y_max); + + y = 0; + get_time (0, y += Y_STEP); + y += Y_STEP / 2; + get_cpu (0, y += Y_STEP); + get_sys (0, y += Y_STEP); + get_irq (0, y += Y_STEP); + get_cs (0, y += Y_STEP); + get_cpuf (0, y += Y_STEP); + get_cpuv (0, y += Y_STEP); + y += Y_STEP / 2; + s_printf(0, y += Y_STEP, "mem"); + get_memfree(0, y += Y_STEP); + get_memswap(0, y += Y_STEP); + if (stats.mem_huge) + get_memhuge(0, y += Y_STEP); + y += Y_STEP / 2; + s_printf(0, y += Y_STEP, "i/o"); + get_ioread (0, y += Y_STEP); + get_iowrite(0, y += Y_STEP); + y += Y_STEP / 2; + s_printf(0, y += Y_STEP, "net"); + get_netdown(0, y += Y_STEP); + get_netup (0, y += Y_STEP); + if (net_stats.have_wlan) + get_netsgnl(0, y += Y_STEP); + y += Y_STEP / 2; + s_printf(0, y += Y_STEP, "batt"); + get_bcap (0, y += Y_STEP); + get_btime (0, y += Y_STEP); + get_bvolts (0, y += Y_STEP); + get_bwatts (0, y += Y_STEP); + get_btemp (0, y += Y_STEP); + + flip_fb(); + + if (check_layer() != 0) + break; + ret = poll(&pfd, 1, 0); + if (ret != 0) { + printf("poll returned %d\n", ret); + break; + } + + ts.tv_sec++; + pthread_cond_timedwait(&cond, &mutex, &ts); + } + + munmap(g_screen_base, MEM_SIZE); + remove_layer(); + close(sock); + + return 0; +} + +// vim:expandtab:sw=2:ts=2 diff --git a/preview.jpg b/preview.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca1344e2e6bb2760640b126abef90f999a3a1d3d GIT binary patch literal 111174 zcmbSy2|QKb*Y_Fjz%^yKh0J7(5R%OE5HimyWTs3JnUV&PIU@5sg$yBzGNh8oJY^O# zN67FVs^72w^S;X2m*rq0zzW^XT$^qnFK_|_=UyzMS%;hcFyi9 z>Hz;~ettxT8Ie4Se4qmbhcoLrmlv7m#o&KKYXYkKGX>xY6AdrM4ICW0FWV)2Q518S4&XxtEEE>JfK5}hYwod!LJs6|EoPd z^_zY;umAOh;a0+*cz`Q!CH;e6-edW_?nva^87Xe|1I?{>F%HQMiA`-H5t*AWJEN@b9Jm8B2hlKNbAV zk7!DT{=^{)NQM7k$T}7M2OkqkKlYm+S-6Z}dO#SNNXDKDqJPWZOVq~2Ne!}|)n3Nv?2oYWX9%le1>Lw}`ZUNRY!QdK~=B@u*aH0)j%sK4b=lLfhDv&un%+r>xdm2$X>mP<$~IQm*6Q#44Ek!J`WUt zS|By>0aygvfN(4dnna#S*}+sW0MrM%z!IPms0A8<8Sp8PhslRt1LYtFGl@Qeg)nrO z7_>Kr6>|(UL#(O7*g;A_8Hj^;A%B<$4u`L!E}*WVM8Q@t6nKa3gYtnC;2w|%yaq;r zNyHnBpgiI+FYqR?g7$*hfzQBmpc(iE5+GjIK-M4v6hr(06WqiSL)w5NlGTC%b0p_^ z08xmhJYWOFf}+IV$U;by0TuKRh6WRX*~Z?-u47}dKA1{a7rX^p;B>%Vz>G=*J&3u2 zX~CYt&SRfp-H~2qa0Rr1EeRR{bw*M2cT5!2z%k975vyI3x>sLs>8%L&mT^BnU3SdSEhi9vp(GFzj#}XajK~ zp1TOikmy6^U>9lw8L<`|hFDRya3x4bNDj?__aF`e5PAuAq7|SeXbhZzj8QW1DWI58 z29^N>q2nlRBtGcCYS;_xh8}}S5C`-Ih$0wq9e2<+hmd?vLurvFQ7mu8)U=AL1oC!$VG*qtuT|=7uaWn=7c_k zEHEkZJSC4=g^7VR;5`U~yht3{gE8O-hy*$bSwJ@6T}%Y*5AuT;r0*IM(N)qq^mKI5(_yLKl zTbTOuLN`@+t%rg#pAS?V4iK{*&t_H#Hh)vRvCzJtmL6+DQBm4+gqlUQ{mLQ23X$QpAC{)Fh!1g(&`(uWNp zesCTZ0aG9mun!`}kixIPGKdw4W^+i4xEYb^M9o6Cpr;`6gn+sS=YtmsDPSykA7a8* zKo#HzlnL|=ngXXGG1PgO1?VCaf-i&q5G6_rCxUd~ zXZQ;og3RD0T#IB5btJCbp+b-Y`xUlE;wqW!C!qomAmZTKQgHk|oY&6t_ z^k$>1(MOOKZpV5OL=p-SOv1d7H)w&x6%!IyA3zimI~S3-iU!|7IEWLv2w8yfn0Po8 zU_D)m<Ku+YeHedL0l0on(!>>1`Go4Fh{_X055R`fdV0((3-H12*!QI#S=0iYl8;b zKu5F#AWU(bz?JXP>q;8f*~RYG6O7t`HI}( zR*-z#1!_UMKoPnQtU>9bc`-wTb`UYd4t@iTk&iG`iEw>K?tU^z1PLJb1PkywVsj;u z0ffOqlnL+ySOsHo3=jrJ!NgJcoe1n?`+2&$o*pnb>>EeW1Ra^WS! zdTMYF$U(V+3&1N-8g&}(ffc}y@GKIcEXavRM(jqN0$YI>Amb5x+)11PI*!zU1Wn>g zG6S6fJCVEf4rm5cflMf7)HjR;rW~70aGPKSi3uC<1+WjtgV&MRxDS*7ZO9YA7I+kt zLUvXFl5_Gw7FY^-3Tg%lfhJ%ZiEBM%#xY1wE0dx(ql2H<7!4 z0Z@&^Fgs{Q+;I2+|LfWG+Q0bVLH2)gg2-zo;iC!TM+f}*KWXqXV%ztBX>iYP+30_1|HvZ#{s$-hiw|grdXSpf zfgd1?|LprC^LGoo{NjOkf45%|*-1q9{{JoeAM>k0_}2fE=Rod2H`Mi?^uNbD!0^hi z{y$?L(#C$vzWaa6!Ur+-d%Qn>{iF9!Oh8D@@DJ@z3r{2S8AVRyO%Fu;3;Q9bFLJ&{ z&T-`2_&qLS&mWn;TX+rOLG}hbgq#O+K;{W=Bj;bXL#_XB*}wJt|1gZyVE^>N?TFr2 z$XWI;?N8sI_FxST;`z@y|Dpfg!ifJ5bs>4=aNbBv{=F}L^B&Z$AY?gE+Gj-(2OYkL zqxg~9B0>WI3{oEaRaHUiEdN%_kEQ-wF+Z03cf}m3TpTC{kup{Z^iM_dX!fDD|5D}N z|GS!hAcIKl4+3%k0S1G`pb4;8EFmEQj+lysn23m&hJuoeik_B{fu5F*j){$rgNfxN zD;*u@8LpE^gjj{sGvCCX(7P_B_JUoAu$m#H3 z7-RvER|A+F+;2n*Yyk2KczFCa2`QJuC^QC3K!_tk7%GrIH-InW?X$#j|gt()}sA*_Vuyb&7aSI8HoDn@M zCMU0;sHCi-s-vr?Z(wL-Y-x4H+Q!z--p$?Px~JC-@1WbkckbT19}*QE6Z!^u%-W&sR^j28B?3nhzSAOV$Z zWLjwhA?s=FWxR!J2kt1F(AbHU1Je#I`|lZc>wjh0KZgBl*8o5aBjHUBlOxr{MGv*$ z&qc)7o)vI^FJ@dJ)|vCZ?-a&%Hx(B4Z`mIDe9`HlZ0<1*Y_aImvpcVIJ2a~zAE9jU zZ>Z1u^h(flZ>TpEL@Te53J9* zzv$8lu5S6vy4_P7u6~|dUt7O))V)2e0f9 z?E_(4Js#FSdtDiy?gJ}D6WT7G5ARByyx92Eez#^_1LtP)lD532hcC%$?8tQqhmbQr zCZnvhHS;CZFva{Q{O;PXOWkx0}i*#MJivAG&&St*)xy_dT6LY>5lrn{ctb$gb#;8B{iTjDh zBDm0F@;;di$4mGWn+j&fc7>0{s4jyOr^reD%P;N&(8V3DnP%@Tt-WNGMfJ~&vs&x- zfAI9nmG*gk;7iKo9wg5D=wkZmRm{4M5#{{zADT6ucNEv{_JQqg>aM3!GfA&@_mPUq zy#9k@T0Ev5T5oo9=bVqvw8-fVY-oFt7`@R>tkvHKe(d-MpV|n0wbuLv856syvpuCT zu_1bKQaG(PCQqNxy)EKhBO$N%-De=y^K`UtiEGM7VJlVaA5HIeI|ie+PNSRSVZ zWwN+*Gisys2kD=k_CE10TIWWbv|G;mP1TClb=9Pfj`caS_$^D~+xlu#bV0`KcJb3^cX8M7Wy7_ot3u@@6F5mG=pNWO1Bk# zMf3{OXb5-piN5uW_{&zsA4BWxzYd$4Vi;YdcinU^y=E5({&CE*7e} zoT;@^ku)dLYV@Gm(Iby}A25A9TcxXNZyWycm6ooREpL>m@|LW|bTc9S+}ft6Q^I+c zXyR+6t2c6HqX=daS*1?~_-6`$DZR=L34Tpv_@gCRCi)z~$0)m1?);m2%WplL~a{63JgsryAN&Egxd-XfKy z;6$nJNp~&nx-~UicU`O}?PP>QvZE(6AI|a1^pR_$-&u(|gH?G=?`yQNMyw42cb)xW z#kQsu!qm#nNT*Wxt7g%#Chry$E@utjN#q#h>z4njHyU+*S-Q?^{2VsrfVs2>{^U4}^f%GM*lYM8K26J66`q1} z%=ClHo<(ymh9+$|wNt}(UZxX5{TbC2HIGKD^`ba9zpyLHv=m)28CFBJo)n~>l#8fe zC9!L8E5z?0fsfw(OtCX8R~CAuz& z#?wUAp1wnCA=4EP2+G$y@@H37h!b7k_eFX8^5h8LA5V#su9mF#D`#R%ZD$)0qCC4b zIkXV2t&;vYjeVH(lmBOa+rpvF>%w8|-5+S8-&Ligy@U0d)K2=zz5V&)j`od>+?Yx0 zr{~CdTlKTTmx_DRWfEdVUDmTzKG}Vf{45x`qrNk5e(pv_;L_-&mn!p5=qAMV6_d#l z-8i*nkDi5dgmZGX20mtCBAo}(Z!X{edTz4Ui7a5IV8vEjtnPdG$vab-)RU(vxAb)r z1JQf)biI1xn%MTSXjHhkn*tY4{8|G;^*$hOARtPre_}qNr!AeTS0;USLa@n+`5_mE z8txs)E4x_;ic-ylvBY*sE{oy6+J$Od6A0Sw6538+uc7RJ=VX0rijXqnuIcyj8lrac z;o;dI5g(Z;_yM%e+oh4}^q_#wn{RHz+dUtjr&Y#TZp2m#Hh;h@q}oV@SMd3%pG%Ov zou4CAu1L-nwu`=a*Szae*~4!3i_DU9<@O^vRX>E?-iQs@s$X~hrawNg-J>jdWzwc5 zrATRPA0YbT^+=_&V@#8Y%kuP*vmXTld`YYqD^Z_2VrE_@FVa7|w@m7%9IH8vmhR)O z+9@^hjI@`esIKeG5h$&?eKJr{1{--xQNf}fj6O+3%pf6}XL;V#^5MG0fQgmL?c4?C z@E?xHK@$nhV!Upgo_@=_{)X(UTLGEJsyn_OJKf^X_Gz@HezMf*g`!x`qiClS%~@={ zGf*XXyX_BgT6_``lCt_-j!}G#m2QH*7hNmJxi>oZ)7p_ zpSeo*)g`jwdlAt6V92W8y5y$C^-Vvmxpz{=BgQl0j+>v}u16{m5E*MPbUI;o1ujl0 zs9(Yh{q&H?K;R9%{0gm%fj1p>oX?gT%>>^yo%Cykn(D5QlzWUCU@30h&1*T&&-k&9 za@_8N*p2TL`v9}K2PNN|lwB0<_q=oUtM+y*UY`PK&Q&+xxVXw~4Vqmen0OL#qrF03 z(Nrl)uxbz7)_K3T#!9_GUBEQ^{cc2J-x0De&f1!#$Q`VE9)G8Q#6{@S+YmkDlandA zOd;(ZRthiU{N-LT#uu?(Wpe76BpC|)()nU}ZdnQMX?Ik(;Ejuw(K^jjUAmK+RRO*? zgg>b8m)C{GJk|5FAj3-S)sz+rlu)p(s1pgC!*_-5d9=RgQDL^wP${xGN2zg4X!`NZ zSvFnJa781SVQw_nL%)Hkw0_h&J>-nYJyYUSD~#T;dY4FBTx*C!y(cZVx(2r6d~7e4 zcE0S+Hnmq=96?vaQYgf+CAHiFuoB!03p-*-C6$lVxrZc=w}lYOnEUM2fwP9%Lqn?O zGWGFco1>IV7s}98j=7wI{DNpT<*JW%MiMj?9(hDz++SpT65Y^G!r9J9^PBRwQV%A- z?6#D76(?)gR+(e<`qCMQZHA`dXWcV@?wNb{26EWc>YiJ@-4=Z#@xJzBc67t}BSH+3KzSn~9GEySTwD|eY zqBUGXS5NE5z5P6F)}1ABS6V@dzM;-q>6|X{0{v`NQO&Jrq3=YGo}XE5;ZdBwy83MW z=j@h&+E|+iiQZUk%^G{eEe54?9f`37zNEO6MuQZ1>aFfN{yI?}12c`dGjH;i=stjJ z{c7j%&GzDJ-u1yv#m~>?@LP&lfZ?&QvqK6K*J}#@+i$6oeXL803@aL2_L3v~RE&F> z*^t3)Wv$!HvX9!6Yu$#fKlN!YqjArzx*++d3ly*JJv8{KvV+-ul@#dTDH~!$XCk29wdw7+2Q{7xTrQan8xA*AWC)HJ1yAX+@{H z*oxFl=&m@8D};0@)e`lLlLmgrN0spYq1DCh4*9%=$2^@*XFm3%8S@%F z3T*cZ@I8$DI4E|CDSB{ahbOBl@@eLS1@*cy(>tQa@A$>WN~H*0r8Z?hGZVTjb$%ZR zcH+#oArwyMX~(fSO-2nWQ=7XABq#R?UpPB-M}d@7(08TDF!*)Z-cF(X6N(#-r29b1 zyw>3BUZCMBrRx0gvkIulhiYVRwsfC$SgJfyK2^lFCelK+^43*Sk7-@Ff3xx;k($#> z(8km61GR6Q*KzQ@)k86xF9~C$MJ`t<7ft#l+j;rSVU|%20&moni zDO{6KU}88w6jl^uNR&EpDenChrb#ObvK-4Ty}F~wAIIqHG4Qlxx6XxXhX--EBXT`L z3ILid^7AXv{18(9j2z>SJ5MK`3znT~v-A*JRVJU(+q!RlEn^357`jzs@|5g-WV<2pEGC0NBr4@Yr|WF1GCr4w}+p9y;G^~Ch?vZgKzh0TnuUOwJr)jjSn8b zb4nyWxy)Znc8Dys_So32$joaI$|2*-sJDe`}`h<=dK` z|A~8DjKN`rZ68SOW8Ahy-W5o0Sp#og;^9aLw z;Z4TL$=I`agWD9CRx?@8W|v)2x3~6WIQFdO)vIa~!;WQwXg4r0b~bsvYs5>9LpXnGk?D>@Au zIvL7e*#rqCrEk!!lKS8*yp)#>#mZ@%$r&4TzxlHPVCF~>L<=~hi?iy zy}XkW{AnK;x0fi*DYHSnBCA!USF?>X`e8brUbW0|e)0~WVGR$AX@1XIII?ARjg{M^5|r>U$b8kTh8^&K<{UT6!Z@$H4~*Fj_}lMR6ka800MBs1pNl8d zMJozQdD|pd-98}QBr7aQZRz&n{-4W`-D~)H=WKpMp2CTJ;I0Qvk<9L-1DwZ7e-A$! zxnojt#XU~5i<-Zl)dss(puS?Mdch#$GnQoCFro7OeSlS{a@K{C0ly@&=f*`x<8lcBku%(GBkV|W z-*8yEzwxZ_qSeD~cA63MVMVu4PoYZxBMXVz){jhHJzKaGxdo87)39ypxi%E6v6!jk zIO}^Y#wC^Bp_a0X4)w99qz=+G!r7m^Chc&4l7{~NXm`3p4Q%LD?MMn zz0lLDPuT~q2+z!NX%8CLoo>AKZV^=(L-BURTF#P=ynV*p(?7p~?WKBBxmMGs50>cg zPqe)xQl5`m+IsHPHl4X<7k-WY$J8jeQ+$A*32QLE-r4slJ!8ENwS zC#0I~UaKgbd!_o=ePbU;E=_69GCTWIIVB0uH=1m};6KWeMcKO7zPl{-I(zSZVy@Lb z@G|d>YD)NHDKTk94*w0QrNBKr%TNhDE7F6O`pG^aiaCvx5OTuUmpY`D@&Wsyl*JZg zW8?e>$lSyCHmTM-oy&e0NG<6ah+U}-^8WqNWS4y)O$U~L`*d0sGcM3_S%ztqJ1aS^;Js_)5J75K zJj|r%n^E2DqnD9+@gyaGlCgZ8g(CCK8e|f5qhywC%+NcFv-J}5lsb}E@0EXhGQ(cU zSGeRp81RE%qB~)CI>=RkVK9)+z#w}^ytCHis#D>nr%_~f@U8b(y#mi)3ThZcVuZm~ zPC~Wi^|nxgM}bO?NgRK+icHk?5FT$K^2YnS-B5^WL1|7!%JrLr?rQyJrzs4Z`#E0W zXJ+n5c4--2zHS{K_KA4=b6I_Q$o$y=0gi-dHcuffX4Qsr~-LiZlj=LaLq^G#ZUTYSV+QjQ)Il5@QkwR}RytrIET3X90=S_Va@KVyGAuAp~Y(aJsM z4Wjw@pNjFHIyh46{#6M_Iz^Cb@vkyC;x(iMiyRbqEDm07WWjw3PvMf>u z$DGzKZ5U(gSkc-4k8~&^Bh6P)v_yB?P{U%N@-v0A7p4L#?jk2jq3T+DZdoL+S zZNHdz=$$!ZVk0#9wf*QBL7g97XYZ|N2g2OB&aWE>UrR&r+e6| zo1c1~@F?tF+)<%4BGG-POh2ozs5_yR!CmgtGNIC^XhX%(!Rg%5D6zyQrV8y19L_mUkd6T7(3xe-LdE&sD5t2SLbkFgD$_C=pK+su4Xb7L zJm*826mG1Jx`dB{=lS>5ta5`hW)j+hw}mo1a#Gy&cGH?{zE3QMyeb#P-_>k=q}@QL z6BJ^HNy5*|Pg>;Sn49Pg163|!V&$K5@eBGYhW8ian`#=poH@69-R3Y;6$a$<*_FY` zEahKM+qNqD>hoU9pjn_^O=V>8(0>uhA*A??bh9|ysAEF%{-frJp1b9m-gz6PGty?w z>}^-K|-%{b{3=u1Pov`|QfA za(E=5iat#Dr{UUo_&`h2DI&_j_g9IS+M}1ZM04cs za3t`YQ{X<=UFLmlFw*dSVF<7L$-j|E z-k^7(BAh=if73EeG+=*}C>*U%=&1XM`isiCr5TQg{8E|b^Q^*$>uHsrZ)MK8KA^gY z8UE^0uBG;{Es^}7YZAs|`&0On>1RN*KmUE3DBz+YVTtWzO)~3uWY15QqzN)H(|F5q zorf|1`B-$wLQ{8tYh3!`y(?p(37TPV69S%3MA_D*ZiNTCZ|6>JL~(3(iC;A?UKtOS zm{;qOJ0J{y_3DP3Ke7aPbFN4Ds8H70u|H_aRTy%UYmy?&nP)~wH|;Xx*wZ(Y%P+fo zzxDelAN9?n9Tu%m#l$VPm_3T1Zi$}waJQe4krDt@!tyZg= zjxoiX57$e~w$o}jw9b`rODsOfv2~epyTHJ(u51#;efrKzrKd?{v)i`X$62D}JHzld z!jkTjM7A-7xX4B+$X&@~;T(U+si1ZRJz}dsr`5zmPZ%Om+ZiAPWLc)BOA2X)m}*_o8-v?oXwPTuh%5u$j6ET;J0ZC_`Xn_S>B*OA11m=hWB17Pf;| zZL^)943KzS^V9Kuj9Kq{(oH|It{TA4-PVNFSCRah|8wTGm2x3R_3$0z^B*(3GT&lD z+RcV|>)qPS=Q&lg8t<(YuGcrYm492ejN&^X@$E5NkN3*CIQn4QVtHJ8l{{yg1O3Ar z=eU#PDMRjk{a%1=Qt(Lk!slDN%NS(_;G?{tBV`kB zdBb=>yS*{SD<@atoUj?aWLHX48?U?)?MFAvc1z`T5XfB#9;VY#M=`p zUhu*zU5bZ_ofOdyLD6@)&SI(N)P<6{x(o^^!yZt%%RVfZ#RZNB!_rg(6Fv$0JokN> z_~o4Azd5{^bGmA~!}G`^`JwZL(ZRP*X2ne|%2F33Iqvx5ZpPcmK= z6_%R?k{ihr^1)2^zCYbu*S1}FNbE{|Ms+QHBTGrhy06nWWlF#1aooZso`Ei(jt6gM zHamTvB-=$8N@sZgp0HY8d|f71qExPqv64G+!&}NmsP4m? z0cm6BE2&@BbfkmAly1o+HyN9jV-{`8RJ&W%b`S%v|k1wtY$VanucIyf%VXAFAe*Kc_h^qSyF zY=MrVV3xY00oQXn>{&x1Vgjc$Dqval-s8*?l*(n@U#ms52rJ0!aoh)9LB0R|SQ95|!6e-{=#vx3x10>7fRA@a^7r zhj3403mdtsi*;^kR~0co&QKoLcDFEn5gaKo%g`%~Urrs*_?Q@cqt|%uW78*v=%z14 zoM!MyL7*PbNal7WcS{ultJX8)cI`A?Aab?pyd+cdhp-Kd79QU)L!4n zeP*W;t;JUwQ$zho-IV+b)uy-4c!3FL*mA)nP^Tn;VV~ z&wppe9TU=hyrrd5c(OA{NJ~LL)?P`bi6A}UY-Te-8kH;OEHP)sf+CO+s@q2xq;fWg zAU%YVx}Q>(gikzI;T#_MzaVi`@>-W=ZIy&_)2IxIi|{mEx>FouT0_!B%&f(z+1PNF z3_9B6Rc^}rL1rbf$xE8&WNp>iZD)|z+^)IQnRmCxLu|7HQne`MU2SuE0y26R>GSe^ zWhd-45O>y<)AhLNR^NWovlh!3=e}7%a{SYAgSwHttEbM?Sas{C6+G>3IwC{gP`I$9 zdy=zY*wLR{_)htTa59Zde`?nkh9l=!t@F&@vX{l}y7%e#e9GybK94KBXmT-W(C7-& z3X6ln9nF%Au4Y`Kkb%mOy7t9;$=&)(y7oN!`n|1GofU%>YbEWQ_Pv_SKAU`v8%6I6 zARdM6?@><^NkxWF~(Y6w0y0VP+L70rayJ!l$mIGvW}>**@Rcf31ugNnoPN8jrkt|MR552qe>P;_b_pr1=w0Fs z|2Fu1>$&hL;unNFvhLIsx)Lx&c9PCFM4BP0lyEt&xzb+s|jQsDSKw{^X~f7c7typ>ZGb? z`R(*(kitf0XsUoqIS>gQi^ekO1E$i83r-;oHCCKHyiY3Emg>#kmf-92u zR$m#z+v;;1`@qn3|CNIE{PhcUBA&g2BlikNiZbs8#;uvR$j>S8>IK^> zBh|s~>&5$k(ZwvwSgyqfAud7##j06Wd+p1Gegz%(b>H|0b1luHCZZ+88#YbJck+*a zQExLP^Un$3DDmGZ;LKya!YZ8m{Xu9f6{Acrp z<%5CyK!!Q;+k$(vv$wyv8LpGKUU`6KCrIb@*2~zgOuB{(evvC_nCm=b4Br}kvYXJa zfq9=7?t11n=Z=8(akGNQr?^BHLrhJqj_m_K?bqer?ly`?)^ete!F{^r?EQAy(XLEx zTtOY-S~`o>MdJB}_JQxYBijbESw3m=;d^mg zUHu93mU5%6ql>zsa-9kIG0_LuvR$t;KYM$#9WH>=ZzCSWyJR@ zO3xQvwpvl%?tkqfHy7N#t?+yw&<_2&ctRe#5QB|=(raDor*-EsrO>cew)2^QXzX&t(lT>ywLUCsXKP4wv8l~(*~i9xE3Q1jnIHI z_WBdMbCs3_->E<5IsHhOvVQxC*P8p~tRg8l_x1}puI4#UEmLJsAMyonKCM&J*M6=@T;FXZ zQLL@;QX8+a#9Zv&!?NW}U(Fi=-#+?w50ulbGdBx61dFEl)VU|e*0?yO=Jtx%sJ$S) z_+hgDKFpehHR$HE*f3| zdd63^cI1{)uSQREmZX0YLo+@^>l|Mu8_4d>V}n%l4DC*lyj{yoOq(%Up9}C?7pgP# z$J5?T?Ktbjnvnmp_K2IFv;DYax4yZ3edhF|^a-%Yc#@{=QpGwtOV2mYUiza0YyR-k za6;9hyXC`a^Qp9PIvsQB$9Wn_@7Q!)Otijol=R-_#I(eoqjFJG(LXa5!XIL45zNbc z*^x>Fr_ZUCsn6;d`YFV~8>Q2El(m8_z|KWFJB$;f8zSRK8=)hwr5eJzX(5_6MwoY; zb3=iIxquaOHseNP?3^Ow<^@}4Ar=fYM>HeT_tuep`M8) zw4+m{_}D3q^RlV7T9igqbXpd-J7}Sxj3t!>N@=1jn5s{xI?wW`XvRVt6GImVUP!?7 zlTcC@VS0cbdFJBg1@;h7SAI?5#rp&mp$k}{Gsq7V*pq;|zU-ll_{@aNkkGtHv-4fY zqV@UMbd@4b<3EQb7puht6jCZ^h{m^x@Z_D7$W{Hs{vZS!!ic*9Bydx4lF#|f-@^*W zb@N$qe&l|yRXu}X=gTg&PJ*+=pQ+!|v$A>M1C7V_wM>(q{BUU&58Z~|xTKuShhCj;Kh=I^`fczd&n zXH>>l*m2bf?uK?xWw@$bd_Qg`eB0IJ@OzU!mdfGkx6S`k`s2!vj)zIlZ?Fv(O-6Cp zw@ZnId!$u%=W>!^Wz*yfs2o|8tE^nh!;=`xg{ieICyahLUQ`XS31Ks=$-ud1P;*r0 zck&1+Y`iFv@};h_waVl7br5vod%-AA{f#~U(Ug}lcL!Bfh%_V|PTqNXgjnT?^@E10Q0EL~b_dGqw{w0r zzOJ)V_N|~Eio%{P46vAt0F73&Fi*ApeU>tmjY{S2X${2Q|3<>BnO5P%4H4^Wu`g6C z$;KpbzL+esnNgEADpY%GuoQYdgN&(w2p>7<5wE?s%{b63+xw#<^|**6`)A-@2HBY> z4XcIM%tpsrn7liKdNY_?I6qv0Stx*_~7Y)A(CBnG8Ad zq7}ldtD7Os^fp=?+!G(P{mNesDQf{6RJNC`yG~}wXp8T;KTpwl%H_c7`pgn4LGFQH zHnb89dbR_kMl_2g0LK|oI<2=DDcYtm%L{b8a$B9Bi{=2|ybL+mCLqO2{pe&nqlcx& z3qPMvV(ZIUX@TWKEbK9K=M?4jIURaafBgKq_v+XreWwUAlg@J@%xu28)Kx$I>_XPi5ZAN>Y8Dn~|Y(Btg1M zN(F%F@J7%G<8Wfv$uq?UE0or~sOVHSqxc9@+!!I7ne#4C`{oLLi*SsDd74!JmQY6b z+CET5At_{c**d40g@E18;Toem1(UwP_Q)5>cd3?=x?~3FN*k_z?sk{#Yjy5%EM?t& zaz3I0Y;C)uWF&$*?#7^_W>e@CF{fH|RGUS9v?E)tOmCuqDNko5^{%eO!pu_PVBKZs zxGo}}PJWT`fO#Grwr6RLpip^9nfgRE(`HCY80X9BanC2)J!TS@?UELXS&wk~n=S+Z z!YyeTYDB`Asd`kA^?3?>eHQyzSA_Qbt#d&}G3&7@C%98M)9Ed(ftZ4o3^ja0wCi>t zx|hk4TgdNR6N~x99lbbB!~WI?MNWoiWz%F|6a@P7HgY<3etJsp1GXKB1%Yg)XZHc} z!s7Mj4=ikveUz%2MuriD{C@sfR87{I=4Nz1O)_@Zlooo+_F`7{0q-)ExdmaR5qA#p z$$fzPar%1mUAx?8Q)|vu^@iNb-4Wu=lGGX3PWhF-f{$rh3RF#pi4|>MkzHSA-E1G$ ztCQ&+mb$)4>*e1-$2HDI#th@-Up{-z$6)~~^I!3OIfoDX=J>LvD{|?0?;dFVV7^Yl zbokY(QDMQbfyMh|+AiNwJeMHTbimxO5amyuhe)Y0UNL3fVI6)s_GL4Vr|YTNt>>N$ zY=H?M8HzqzMU3Aa7P8EDpGsLGfTR3lkFlM*@}vCh{Q>`BDw58(V+=39=AZB|PbTDY zqx{jSq}RtKBl(?@;u6`%0^OZ(oz;t*bHEj;<(%&sYV(AGTFDX(x|Vt0KQp~34;N$X zF+0Op`FJ%%So5uYT-2s1C&=ZPvZ2W7qqIrhvK*35ubC6QyELXK7N=29M(nNKE5(#^ z>O_aH3w&uGxMmSPK(?IfU&H;xgCV8CS15CS19yDKg-)Fzb0^%i_R-kHi*Kx~??Z6z zE2We(c)j(-C&~<6eOsN)&o491sw2yXm(uo=>xz41jE*>;RW`NwiD+iSHYH_VZ^EdA zb(bquyftHcv7U0bG;%GYD}9K}Xwk@7Z3S4aWoWUfYWGQ&wSUo4%(Kv8nN8Wuy_08!aZWhh zFsxL-f55GFJdi1kd~MfGiSD+NpTF_l^`ZnBq8dBNEW=a}HO<|r!U^t-t_bgbsjk*b zob5H?F?;3L5dj z_LrPKPWg(?@r+9$P2V@aa8~q8Uu+aNHj3A_MR8jWN!}b!+!(ar80ZWCDHEc7l{W^v z@rZDZh$e5NsusV5$!WS87r{57TFa^HAZ!^Gku>-bn4psBgvz$~?Q4qJXPt=g(M8MO_b% zJ!SczejlJ}+u;5&ET721+My!#F;V9S;Xcrp95{t}ddBkfw3UlOm4$U&X`@urY2T2N zf+$>AMtx&okW?6lZ?ja%5Y0q*Pf<+iIoX$coL7~VgW*}F5`@>yHzaBS`C;?SB4g1B z1JXeD=C5Ref!p0J_a1-n?l=b0NO4QtVcIb`bz7Tn>PF(ZQskX6_v1?q^`f^7SIY32 zYPa}xrh=5Uqc=jbxt>0t6~5bC_U3kI>Bube(O$OD$T2#dD{-%W_=N5Q%dy+~sL(|Hl8uOB?{7fsy?M}OCQ<5E87=97=pUxv~wt_=_lh~g!O zP8M+yo*m~-ZdwfvsO?^Q&e1^NOv!koh&%Lgafih1!KVXTCp0*HLa^TwGP~JWj=07i z(M%GyfA&W8Mho-XAM$OAzO$;wuf>XHRJBa$n1nR*0era&nN;DYUMCGy3*vl9cwXzO z0NWuiD5(1-bxlAi+|5i^Q0m>ijJH~rG`w&Wnp5QQD5Zvz6plPa47!~@bTZ``*(INj zqb zOcJis=elQ3H}SItIgwX0`f@VIHz>$&rwpTIdo;PQl0=HzQU>k0yWfV+3V~<(X&c!X zlW3kfu$>Tw=R9rB@R7X?wYz$~#%)QcQR66aZi6x=ypI-x143@Ozql7}hX`+1E-3AC zSuSM?+LSy~iTt7EYuZ6sq99A_wB(S5lPXwBM|ZRr0qWZo(Lc*23vD*f-{ht)?K(rg zpu|w_*OC|bAbKs8&|j~t@xpddl*$12sb_OR`+yyld3%1a#pngpo6Hi;{#2nyqy)L| zuNvT(OxYgtpH1iLUg5jP;0|)yev?MwPS_Tr8Hio*jC=7%Zpt%8q>23>0K`B$zr^x` z@}LPHQZq(0Hjf~4OnAD!*_0DG8$}u&)z7*@0qu%63LRF4%+dWs&=HS?FfO%^`lJv& zD8=5cKh+@osN4s>p=*p%MuOB+V)s@v3?uHPePOB$n|A)=M&LR119<%Ck59MGKKf7A zTA=3DKXJtYs_Iexh@AON8-SzJ%}+eh4xT|04FjucGakez(u`{t<37Xr(YQMZbm|Wr zQ2wre732-hk<(k_3_Qr@yR*2lgic z9<*br2>Vt}{EZuraf8!BCV}aJJo?Q^S5l|{0CRigM0%01Wma#BTY(&O$Gara9+-)O zDp2Z%CvUR72hx-}p@1OUzdr#+;6(nbFZ{Qm&6#UJ&m$WQE_{{V)b;8yIq5Z%7@sJkJt(jy1zV@7bk0kz&-*0No}|+!4k!;Tv|AZWI#EYB zgT){9QNob`V9i{Pq|-r<9eiREX>4eFBS^oe5qS%Tr>Z|BEKpTZ8`l#p}4~1zH)S6f@ZjR3_hKKcwOCuLj zJyJy$!*e!zS>&IxJ_3O0SI_RBg=vRT>15BgBjdEu{{UEYvx9h_DcWeZ7G?)ZzCnbX zcch+|cqaho$kwRq+FAQI$R8s|_4bpr?z}|vfkm;IQPTH4&_sIiM&C?aC4b$87>|1* zwSQk}Qh&C$K9pl#(&rb=XU>aYWQR*!e{Hp{{AASiZJD?@boPW-I!w zcL&{Ej?+XsUgQ!6`2tV9TZ60V+#B0qLCD+z6n|RjgoEw&!yVKyMy4|cI$rmAB}&`a zO)PZ1*)jv4d9B~pnrM^lwz=d5iUU>CP>@CauG7q{VvAvB6Z)@t6DyyME9wnJKr3^@ z5IySN9ZybB0XMea@rp61*eeOWwjb|-OH%~Q57e57{r94I29m88Qp~N{AL6cri`x(V z?%OB$z^6^si8#5p{{W10Pg4sy$JE-7bw8go%@NV{1Cpn)>s=L2+0I|KQSI-F0n0ME z@omqP5k;`GoqbQJfrUE<@uBrbq}n&jpbXbY2Fe0Ut$dUPDlDMN+EPkjjnOo<1)R|u zcBJAr1-%?`PYYdWjj6eQAPBCE+ZJeTDcs%!ax?hTfs1blx`b~-e{7@P3G$QM<3)v> z%h;~(z!U|IzVGhG!kvoFTu!nx?GF9qRF<_qrDX*vy?6y+ zg%Wu9*GD>avWfQr90?SER@!h-krY_$=HpcAP=C`L`O$rM)T#df+SX5zNc}6Lt4X$u zphYL@yJH^UBxj5hO2ub98s}1g549^kX&JFv<0Ny=5$o(s#9VXRNEsumy`l{Ik zq&Fksnsz%!Jv~R%k(a@r@Q>1r^+!>FCDi`_!aqvi{ZVL=C7?YcG}`owGH1h1I}t#v z!j7xzAYizO<0%vmR&@_MoA~S%w_b~AK$f=oQXSE)WP+H-G_3`gmG!o`+GSoAKfz2Z z=_65S!qCZ|G*+8e(k)uHbzmn07_MKa02V-sw38j}X1dp}^*iT-7WS!m#b6}~B%hUB zeRb6>q$zp};XVHVVyeV+o}e_1P+k;;7Sdo75^H5=t7_drapAXgTWFozfIsp+UwtW3 zd;uk$cc`CFh}MkavPZgw14*^(;x3hMbjO6^RkcATc93&5w&|{v7Y??T`iR@ypR?l= zu}8?9kG`q?kh&mV3x=GvYS&-11<H32=$(C0N8HwZ6QyoX5 zDcdz`EQF905pa>_cvsK8W4aRh=HRx&fk90P2hjGepQqhzX6nV^zS`}w+ldkKBh(z$ zc_5mmcl~b`A|tD89yom8T=>^qS})RBi&X)yyy`F znjm61ics<=nnNe)R-wg}5rhdeT8QxAa87YkbP@X-h#i3ZYCg7&w?#5!V>GXDEB4B8 zDWz@-!fJDD7g`63g5y`^Y7ASFpYa%)VO|849^xrmi0w&DmabdzMS(4ow{~KDrkXA4 zLz^%^-m22UqChhq?HExUjCxdXH4s10=isVvH>(0i)yt8{@}{8t0QT@n032~ZxIu_9 z)V zKHbw#DJe-QQS7vof%76L(!hK!f6kN~NcUv?DT{|3vqDz37NjeMwxq2m=8|eL)*1sX zx&HtGrKN#96pZmaQl%a00M(c=2z1T|?9C6ZEkT8EAMP3{g%%Q!a$wLU6BPh!Hh>(f z{u4_2;?NJaMn8nnOhoWgF)$4pU>?;2>w7r<^YApGs@X{Wu=#^UFeZ(I;YTT6cmkpg zQqF(9N%#Xt^^Kta09ZVz(!i8<&mxTN_!0QjU#x7&{`CXrMs+Jc{o$eh@TIsCcB9C7 z(ZWt~Q!z(M`d z6lUGH$nT0mTtI=l@uS|3$^@TUU^p$??gnTo-2{n9K3JrMq?0Q9`_i|h$?-V#pa3l! zkFqHJm9xqR!YG2{_vUlV(t?EZfk-GXVQBD#kJf^$Std3o?xk*s$)l6ppIQKHY0Q}$ z6UT9iBc?Ik3HzzwV;i`l1bv<7IHK54*wY!?gd|U;1E#USZ3pE~NRcX$+LgN!55}E< z&((|^7LoT*8ePBH@X_#&Dde8}^GCb{>=fS+8$U(%v6yx_M_uQ zR-uA37-<%SfNk5Kg(vE3FaYoyA1am?24wxz5~UONhuuYi7wTIfp8*j*R1Sq` zK!y?X6)OZJ#$biBLH90s01rLd(re_Kh@VqHvNXXfKHpT$(<_yXFt3kO~gpZ8{ zsl^X;fIH?hMX?#>^i`6SKm-%cc%XV7$dj{i%m8AvDBg?^fgV)u_4X9)ftF81S*bgQ z^SiX>faq&Uk9*{6QN2M*AplR{d(oAX?+=7gsezR}3u;IKOM%*gx*FVm@}rE_u3S)% zkOV-^4J&*I3CC(Jg_!ZsYyfh(@}6k_0H_QoVa3OtYzu^l+avS*DEvW?1OtepQv()y z1&PD14~-Y~0U3v!{{V)zfo1_H=e;j^pRiAsY3gBS9Q_}}#mf1Cic)$F=C^oPP9jFt z6v&a>d@F91l^?UToCzcGprw@KXe4)~sfCy|bPJq^)x}49r1hOWJ~p3p=_x;DDj=HZ zMcBsN6Ud|zg+U@?98p8V8%t%2rt%tmLL~$WrKZ)0pMUbIw;b^nRAz{{wXbrNRDDep5@`Trh!_LbW`cal0*e#cjxuPm zf@Y2ESF~ zd{g<xCrjJpGkP zj>4VM@I3v)A9Y8wZEb1_-!MTS`O}ZoijNGj$VSnDn2bEYd+GY?8aZzlsJEw@LwyWB+1B%`eIp-jqKt>8qc&3U%&{9$i`P8eN zj^G~E9STTay}%eIv}nyTsc9gTr?KO;5+Y;*An;8;a+!3H1RpAKjX7=Ya{?r*DY z#CXYgLxVrX-YLDQ8;Tqm5eLew6{ZDD5DZma&AW`RV#E&Kv`Q@?jMHOFZ)e&c3P}PA zh!Hg+-P9oXZvtCaK50H;n0#ze264pHQFbH|hyZ-4CKWNZ1u~_n7$Acm3P*^nPDkle zWlK;;J6mjQGM#T0dY0Wa#$_Z!{1D|%b>|5Af zw1OLG5>7zRA*<^4de(Kg`j0AtYB>N_Knb9UL!f2vwSrI$3j z5*!3>O9=%hv>2{E)EWaCZm9jSVH;4gAOT(N*Ss5vaX3kmD~6V3RhSEVfgutaINwSablOqum zOH1ns#Al3BlJPtbd%2~h4#v}?*qD|;r#_&viP$HY6yhCT;~6LLr3VR<{ORcxvMYY}0;wf&I#>X8((3eK!ov;)ni5`*-ONi`4x)q~A zLt<65#_+Cw6xuX9BfoJXILe^>DSjfBsh_@-g*v5(?di^c8d?WrVWe6phz|qC6l3$H z4HnRu{h?Ixyu^Rctxs)(_KAt4+}bI$_@PptIpUwCwUez7lcHOWTzWBuskJab5?x1$t1yOZN%?0DSX9 z>Xj&{rsm`1;l)Zy%qn;%wFgw72}#1a#TpP<6Y8O~e`vV}lkc4VG)U4EwLrSKlgI51 zKkW*ibOi7t;YOE8An-?VQ>6~ZlcKr_2KM9+_U4!MGr>h8QG5V$LgY<7;<(`4M3dZ5 z+_Wb$C!EvJg=0TdycHu+eh2vJV@J7+>QAOK8>XBOoWw_X?@Jd;AP}696lp=Y$JIBH z{{W=k#{+bH_@g>i;!GV?;$smM_l}|ph|jGhPs(E=IG)Cnf&wzEFA{O7zCiD^Q@>W< zkRwumi9X=siB2t1DkKkDF!)G~gV2s?I3b`pX>t{`YBwkYoxvo*`BGD7suh0EP;o$* z5`mhN?TbnZ0viZa5P{d zIc$EFITtE0l7uU1?tc1pS4C+gGLYZ|D5Y3Gr9CJL;bp9tQg7r;Ws%J**|n4`6kigc zH-B;}!8gxD1Tqt|X49WZ`1;WoR+T_VgWi8CS`b-UEj6+?8^H&^gN1x3i(1k_KHP~M z{>rS&j%|RojDHcPU0Ga$qC~{c=SGwSFy6KfZrd~e0K)J0&;wlx301>Dr;-}Xef40X z__gstfR!aVR!AU_K=Q{lgxxr@fh&>TOp!)}1V(1D=76dk178ED!S41OWk0l7M9C&D+wtRnsLW`Avq+sGJEyVOg_v+$!w43 zKtHd6hi#Sr0LwW1Yi+A^M!lpktDB8I(85)fZISRetm(QtvXrEAhQ&GJapej#jJRcD zu66MQIc#zK2lb*iJwPB8TF;S5{c7Ep82|?yAjpYNZ%UNw)?k?Twtz_^D)f)}_||$? zg32Fj*Tm-2;k93_DK}k0Koe>Qp4D?#p%!j1m5Yt8a8O1^!~R7~Yf3FJ%j&pjCD3-A z-dp6`Q{6@h{gslt;YzIr!0V1JyQdUCcYFmOl%LL! z5TK$^rMdD16GaY@N8|Mx0)Jyf+Ny4wvt%PF{Di1TRyv%!*o3ThX@FHCtk`tCZ7mlTy**_8ty-l&7{ zF-i~hCf(mx+8E>Zs?XtD4Rfb8eFF4Y-7))RHXaFWLBLU*`?DMxe@E$UUs}`dbqhN+ zJ8x)`w^mdV00K-C%nvFwJE{wfS%(*$NB;ou>tCCv^ra&6sU(l9ZE|BS{{WS4AL-3z z+e!M(>phmkX)7d30=Ozn$Oo|?15qrPxV^Y)+S!8RuSV1aPX7Q=Nx}F9rI~MQ>P0{r zRl1L({{ZDk`p2lysQQXy%HcKB5z$)XkGXE%n6Tq*rP89}0yZm!1#W^2b~RCZX!f6S z?VZCwJk}He3Io z8h5NL+qlp!i2$iBsE}YB3e9wDi#lDJN!Xd$h$K#X8nn_G3^HHbt(g{lvn65(gg>R*yNS z-LwVH{rsgnibRi014*kIbaGv1K|-!tZLo#z5k6I0bJ33l6$F4s%C^^5yY)1oEryw$ zm67pOnskpxUgt6r=> z+uq~lS!9WD^IAuBxS7y?j*|&|_kmpnrw_Uk08oQ9gZeyA>>i#m#cqKSBe?CwWj^J_ zT#_oaL++TYUaYc$XPVpJrci4Wt)eElu=0DIL%4~wB-^1n$Ut&u z%0Z?^O*kMxsbwKa86;%-(xnP+V1@UjOi_YTPGUq8Kp?VDl_)Jq5xM0J!mK-pLYU~>?nggQO5+DG|3)cIv;3EPyi>e8K5W6?xDz~At%Vmpah8% zv)RFDSG<`UuFYy}(<|w+51m7QkrQ8tqi;rK~ zs|Vptp~S0JaHJq7AZgKc0Le+K1lbf2lbG%^PO94x73sz&9Hv2T*(&=J@D+ceXuAAv|Za_ zv;v}V0L<2oD8>?I4$+Sp(<6f?6?VnHi|+7|_}2SP`VH0|VHZiev`St;P)dq{O!?xZ zz4SM&>GtkF?G}p-ps0kX$${{!RHJogMBC<$X8Su807Q55sCVrp+jSLko(*5zXnLE9 zC)h6I{>5LVM{`2d4Z6~7E@eX>vQ|F|rioH9>Oms_8ZzQYN>)NtjDke{^*ZX-=FS-%KdTOdjCY5{cItUgRs4DaCv0E7~^AF|;wofL{qzf6lI|R@kZhT5)R;aIIR+*9^-}fTw$ir%22e<_csz(Cm8Jm6qGm; zc8Qvg!JgFPDngc|karl`W||XLOJu2P5D7kYVi^uLJ@`;LrW$BAkdQmcGk+e_FxC=V2u0n%Ib;N@b5h8x- zWqnDhGNOg6X&4}+NTnXCD`C%}oB5w}tMw06Hln06Cw3JWF6~yM24(te%=ZdZg911{6l0cKe@}v^4btITh zIhY{Dbvam^KQZ{yl5yGY?)KPJYtc@Q(BEb`;8; z-qVOU5jD_W`U~o|#D?t7J3cD|)H+4)Piijd_w5#+Zv`i~JP{qJlw}oR8NyDJ+^JEI zcgl?tNuMf25M;-dDYX=w!8}iub0esf%aEBcPnVSvmohP$V2}>)zKv@t5C9xgu~0yJ z*(8raPcV|Qz}?YL4c_5O(x~U z5|N4I(Jj!VktqcCCbYFiNjoDH>_WlXN%H21B+5x6KDng?5Cn`7oJk(EpxIydWWmfD z#MA*LKmbAW&lHabdW-=d8tmUkKSP>NR&>i6we988FD+_GOJEd`4mqtdzoV{#qm5Sd z6W_y5E1mTbx+7QE^O6}_kL;5%j(gILlgVB{Ok=a;2<*^Qy(DGnrs z4cko-=)+Fp`q(b ztTFtuiOTYRWM#p~14XF?V3lG*sljaIg(#;Zox+qHLQlNW_i-R`>q%0Am9}?hov{_f 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 literal 0 HcmV?d00001 diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..fbcacbd --- /dev/null +++ b/readme.txt @@ -0,0 +1,50 @@ +Live info +--------- + +This is a tool that shows CPU, memory, I/O, network and battery +information on an always-visible layer, updated once a second. +Uses system-reserved OMAP hardware layer, so should be visible +in most programs that don't use tv-out (tv-out needs that same +layer to send video to TV). + +When you want to exit Live info, just run this pnd again. + + +Fields +------ + + 17:40:05 real time clock, hours:minutes:seconds + + CPU: 100% total CPU usage, in percent + SYS: 0% CPU usage by the kernel only + IRQ: 29 CPU interrupts per second + CS: 30 CPU context switches per second + f: 1000M CPU clock frequency, in MHz + V: 1.375V CPU voltage + + mem + M: 414M free RAM, in megabytes + S: 125M free swap space, in megabytes + H: 0M memory used in huge pages, MB (only shown if nonzero) + + i/o + R: 0.0M/s current read throughput from SD cards, in megabytes/s + W: 0.0M/s current write throughput to SD cards, in megabytes/s + + net + D: 0K/s download throughput, kilobytes/s + U: 0K/s upload throughput, kilobytes/s + S: -45dBm wifi signal strength, in dBm + + batt + C: 91% estimated battery charge level (from monitoring chip) + t: 13:14 estimated time to empty/full, hours:minutes + V: 3.960V current battery voltage + P: -1.140W electric power going into battery, negative means discharge + T: 23.2C battery temperature + + +License +------- + +3-clause BSD. Source code included in pnd itself. diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..e54a444 --- /dev/null +++ b/run.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +MSG="Reserved OMAP video layer requires root access, please enter the password." + +if test -f /etc/slackware-version; then + + ktsuss -m "$MSG" ./liveinfo + +else + + t=`which terminal` + if [ -z "$t" ]; then + zenity --error --text='terminal is missing.' + exit 1 + fi + + gksudo -D "SGX driver installer" \ + -m "$MSG" ./liveinfo + +fi diff --git a/update_pnd.sh b/update_pnd.sh new file mode 100755 index 0000000..f6be786 --- /dev/null +++ b/update_pnd.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +if test -z "$PND_MAKE"; then + PND_MAKE=$HOME/dev/pnd/src/pandora-libraries/testdata/scripts/pnd_make.sh +fi + +rm -f *.o +$PND_MAKE -p /tmp/liveinfo.pnd -d . -x liveinfo.pxml -i liveinfo.png -c -- 2.39.5