Date: Tue, 31 Jul 2012 21:57:31 GMT From: Brooks Davis <brooks@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 215197 for review Message-ID: <201207312157.q6VLvVPX062613@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
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 <sys/types.h> +#include <sys/endian.h> #include <sys/ioctl.h> #include <sys/stat.h> +#include <sys/sysctl.h> #include <sys/wait.h> #include <stdio.h> #include <stdlib.h> @@ -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...
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207312157.q6VLvVPX062613>