From owner-p4-projects@FreeBSD.ORG Tue Jul 31 21:57:32 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D559B106567A; Tue, 31 Jul 2012 21:57:31 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 966101065678 for ; Tue, 31 Jul 2012 21:57:31 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 74EA48FC0C for ; Tue, 31 Jul 2012 21:57:31 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q6VLvVDI062616 for ; Tue, 31 Jul 2012 21:57:31 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q6VLvVPX062613 for perforce@freebsd.org; Tue, 31 Jul 2012 21:57:31 GMT (envelope-from brooks@freebsd.org) Date: Tue, 31 Jul 2012 21:57:31 GMT Message-Id: <201207312157.q6VLvVPX062613@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 215197 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 31 Jul 2012 21:57:32 -0000 http://p4web.freebsd.org/@@215197?ac=10 Change 215197 by brooks@brooks_ecr_current on 2012/07/31 21:56:49 Add an about box with version information. It is accessble by swiping left to right. To close swipe right to left. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd/pictview/pictview.c#14 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd/pictview/pictview.c#14 (text+ko) ==== @@ -29,8 +29,10 @@ */ #include +#include #include #include +#include #include #include #include @@ -476,6 +478,142 @@ } +static void +show_about(void) +{ + int fd; + u_int32_t rombuf[5]; + u_int32_t bdate, btime, svnrev_bcd, svnrev; + u_int32_t *image; + int year, month, day, hour, minute, second; + char kvbuf[256]; + char *kbuilder, *kconfig, *kdate, *kversion, *kvp; + char *version_string; + size_t len; + + image = malloc(sizeof(u_int32_t) * fb_width * fb_height); + if (image == NULL) + err(1, "show_about() malloc"); + fb_save(image); + + if ((fd = open("/dev/berirom", O_RDONLY)) == -1) { + warn("Unable to open /dev/berirom"); + return; + } + if (read(fd, rombuf, sizeof(rombuf)) != sizeof(rombuf)) { + warn("Unable to read from /dev/berirom"); + return; + } + close(fd); + /* + * bdate is the build date in BCD MMDDYYYY + * i.e. 0x08302012 is August 30th, 2012 + */ + bdate = le32toh(rombuf[0]); + month = ((bdate >> 28) & 0xF) * 10 + ((bdate >> 24) & 0xF); + day = ((bdate >> 20) & 0xF) * 10 + ((bdate >> 16) & 0xF); + year = ((bdate >> 12) & 0xF) * 1000 + ((bdate >> 8) & 0xF) * 100 + + ((bdate >> 4) & 0xF) * 10 + (bdate & 0xF); + + /* + * btime is the build time in BCD 00HHMMSS + * i.e. 0x00173700 is 5:37pm + */ + btime = le32toh(rombuf[1]); + hour = ((btime >> 20) & 0xF) * 10 + ((btime >> 16) & 0xF); + minute = ((btime >> 12) & 0xF) * 10 + ((btime >> 8) & 0xF); + second = ((btime >> 4) & 0xF) * 10 + (btime & 0xF); + + svnrev_bcd = le32toh(rombuf[2]); + svnrev = + 10000000 * ((svnrev_bcd >> 28) & 0xF) + + 1000000 * ((svnrev_bcd >> 24) & 0xF) + + 100000 * ((svnrev_bcd >> 20) & 0xF) + + 10000 * ((svnrev_bcd >> 16) & 0xF) + + 1000 * ((svnrev_bcd >> 12) & 0xF) + + 100 * ((svnrev_bcd >> 8) & 0xF) + + 10 * ((svnrev_bcd >> 4) & 0xF) + + (svnrev_bcd & 0xF); + + len = sizeof(kvbuf); + if (sysctlbyname("kern.version", kvbuf, &len, NULL, 0) == -1) { + warnx("sysctlbyname(kern.version)"); + return; + } + if (len == sizeof(kvbuf)) + kvbuf[len - 1] = '\0'; + kvp = kvbuf; + kversion = kvp; + while (*kvp != ':' && *kvp != '\0') + kvp++; + if (kvp == '\0') { + warnx("malformed kernel version string: '%s'", kversion); + return; + } + kvp[0] = '\0'; + kvp++; + while (*kvp == ' ') + kvp++; + + kdate = kvp; + while (*kvp != '\n' && *kvp != '\0') + kvp++; + if (kvp == '\0') { + warnx("malformed kernel version string"); + return; + } + kvp[0] = '\0'; + kvp++; + while (*kvp == ' ') + kvp++; + + kbuilder = kvp; + while (*kvp != ':' && *kvp != '\0') + kvp++; + if (kvp == '\0') { + warnx("malformed kernel version string"); + return; + } + kvp[0] = '\0'; + kvp++; + + if (*kvp != '/') { + warnx("malformed kernel version string: config is not a path"); + return; + } + while (*kvp != '\n' && *kvp != '\0') + kvp++; + if (kvp == '\0') { + warnx("malformed kernel version string"); + return; + } + kvp[0] = '\0'; + while (*(kvp - 1) != '/') + kvp --; + kconfig = kvp; + + asprintf(&version_string, + "CPU Info:\n" + " Date: %4d-%02d-%02d %02d:%02d:%02d\n" + " SVN Rev: r%d\n" + "\n" + "Kernel Info:\n" + " Version: %s\n" + " Date: %s\n" + " Builder: %s\n" + " Config: %s", /* No terminating new-line */ + year, month, day, hour, minute, second, svnrev, + kversion, kdate, kbuilder, kconfig); + fb_dialog(FBDT_WEST2CLOSE, fb_colour(0, 0, 0), + fb_colour(0, 0, 255), fb_colour(0, 0, 0), + "About the CHERI Demo", version_string); + ts_drain(); + free(version_string); + + fb_post(image); +} + + // display thumb nails int pictview_selector(void) @@ -484,7 +622,10 @@ const int tile=3; // 3 x 3 image tiles int display_image; int j,xi,yi; + int x,y; int imgmap[tile][tile]; + struct tsstate *ts; + // map images to tile locations imgmap[0][0] = SEL_QUILL_IMG; imgmap[1][0] = -1; @@ -523,17 +664,22 @@ // display on fb_fade2on(); - multitouch_release_event(); + ts_drain(); // wait for image selection for(display_image=-1; (display_image<0); ) { - multitouch_pole(); - if(touch_count==1) { // received a touch gesture - int x,y; - x = touch_x0/(fb_width/tile); - y = touch_y0/(fb_height/tile); + ts = ts_poll(); + printf("gesture 0x%02x, (%d, %d)\n", ts->ts_gesture, ts->ts_x1, ts->ts_x2); + switch (ts->ts_gesture) { + case TSG_CLICK: + case TSG2_CLICK: + x = ts->ts_x1 / (fb_width / tile); + y = ts->ts_y1 / (fb_width / tile); display_image = imgmap[x][y]; - // printf("display_image = %1d\n",display_image); + break; + case TSG_EAST: + show_about(); + break; } } @@ -723,6 +869,7 @@ // initialise framebuffers and mtl control for mmap access fb_init(); + fb_load_syscons_font(NULL, "/usr/share/syscons/fonts/iso-8x16.fnt"); fb_text_cursor(255, 255); // various test routines...