fb_test.c revision 365aff4dc3f21d14b03633f3629f69d71b39c74e
1e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project/* 2e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * 4e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * you may not use this file except in compliance with the License. 6e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * You may obtain a copy of the License at 7e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * 8e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * 10e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * See the License for the specific language governing permissions and 14e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project * limitations under the License. 15e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project */ 16e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 17e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <stdlib.h> 18e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <unistd.h> 19e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 20e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <fcntl.h> 21e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <stdio.h> 22e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 23e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <sys/ioctl.h> 24e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <sys/mman.h> 25e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <sys/types.h> 26e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <time.h> 27e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 28e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <linux/fb.h> 29e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <linux/kd.h> 30e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 31e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include <pixelflinger/pixelflinger.h> 32e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 33e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project#include "minui.h" 34e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 35e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projecttypedef struct { 36e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project GGLSurface texture; 37e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned cwidth; 38e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned cheight; 39e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project unsigned ascent; 40e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} GRFont; 41e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 42e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic GGLContext *gr_context = 0; 43e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic GGLSurface gr_framebuffer[2]; 44e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic unsigned gr_active_fb = 0; 45e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 46e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic int gr_fb_fd = -1; 47e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic int gr_vt_fd = -1; 48e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 49e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic struct fb_var_screeninfo vi; 50e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstruct fb_fix_screeninfo fi; 51e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstruct timespec tv, tv2; 52e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 53e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic void dumpinfo(struct fb_fix_screeninfo *fi, 54e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project struct fb_var_screeninfo *vi); 55e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 56e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic int get_framebuffer(GGLSurface *fb) 57e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 58e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int fd; 59e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project void *bits; 60e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 61e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fd = open("/dev/graphics/fb0", O_RDWR); 62acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin if (fd < 0) { 63acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin printf("cannot open /dev/graphics/fb0, retrying with /dev/fb0\n"); 64acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin if ((fd = open("/dev/fb0", O_RDWR)) < 0) { 65acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin perror("cannot open /dev/fb0"); 66acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin return -1; 67acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin } 68e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 69e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 70e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(ioctl(fd, FBIOGET_FSCREENINFO, &fi) < 0) { 71e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project perror("failed to get fb0 info"); 72e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return -1; 73e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 74e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 75e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(ioctl(fd, FBIOGET_VSCREENINFO, &vi) < 0) { 76e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project perror("failed to get fb0 info"); 77e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return -1; 78e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 79e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 80e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project dumpinfo(&fi, &vi); 81e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 82e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project bits = mmap(0, fi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); 83e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(bits == MAP_FAILED) { 84e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project perror("failed to mmap framebuffer"); 85e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return -1; 86e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 87e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 88e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->version = sizeof(*fb); 89e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->width = vi.xres; 90e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->height = vi.yres; 91e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->stride = fi.line_length / (vi.bits_per_pixel >> 3); 92e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->data = bits; 93e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->format = GGL_PIXEL_FORMAT_RGB_565; 94e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 95e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb++; 96e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 97e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->version = sizeof(*fb); 98e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->width = vi.xres; 99e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->height = vi.yres; 100e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->stride = fi.line_length / (vi.bits_per_pixel >> 3); 101e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->data = (void*) (((unsigned) bits) + vi.yres * vi.xres * 2); 102e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fb->format = GGL_PIXEL_FORMAT_RGB_565; 103e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 104e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return fd; 105e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 106e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 107e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic void set_active_framebuffer(unsigned n) 108e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 109e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(n > 1) return; 110e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project vi.yres_virtual = vi.yres * 2; 111e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project vi.yoffset = n * vi.yres; 112e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(ioctl(gr_fb_fd, FBIOPUT_VSCREENINFO, &vi) < 0) { 113e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr,"active fb swap failed!\n"); 114365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin } else 115365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin printf("active buffer: %d\n", n); 116e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 117e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 118e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectstatic void dumpinfo(struct fb_fix_screeninfo *fi, struct fb_var_screeninfo *vi) 119e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 120e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr,"vi.xres = %d\n", vi->xres); 121e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr,"vi.yres = %d\n", vi->yres); 122e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr,"vi.xresv = %d\n", vi->xres_virtual); 123e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr,"vi.yresv = %d\n", vi->yres_virtual); 124e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr,"vi.xoff = %d\n", vi->xoffset); 125e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr,"vi.yoff = %d\n", vi->yoffset); 126e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr, "vi.bits_per_pixel = %d\n", vi->bits_per_pixel); 127e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 128e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project fprintf(stderr, "fi.line_length = %d\n", fi->line_length); 129e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 130e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 131e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 132e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectint gr_init(void) 133e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 134acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin int fd = -1; 135e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 136acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin if (!access("/dev/tty0", F_OK)) { 137acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin fd = open("/dev/tty0", O_RDWR | O_SYNC); 138acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin if(fd < 0) 139acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin return -1; 140e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 141acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin if(ioctl(fd, KDSETMODE, (void*) KD_GRAPHICS)) { 142acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin close(fd); 143acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin return -1; 144acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin } 145e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 146e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 147e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project gr_fb_fd = get_framebuffer(gr_framebuffer); 148e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 149e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if(gr_fb_fd < 0) { 150acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin if (fd >= 0) { 151acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin ioctl(fd, KDSETMODE, (void*) KD_TEXT); 152acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin close(fd); 153acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin } 154e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return -1; 155e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 156e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 157e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project gr_vt_fd = fd; 158e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 159e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project /* start with 0 as front (displayed) and 1 as back (drawing) */ 160e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project gr_active_fb = 0; 161e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project set_active_framebuffer(0); 162e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 163e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return 0; 164e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 165e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 166e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectvoid gr_exit(void) 167e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 168e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project close(gr_fb_fd); 169e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project gr_fb_fd = -1; 170e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 171acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin if (gr_vt_fd >= 0) { 172acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin ioctl(gr_vt_fd, KDSETMODE, (void*) KD_TEXT); 173acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin close(gr_vt_fd); 174acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin gr_vt_fd = -1; 175acbb5bc99bccf7e625cc73fb1aaa90355bedb733Dima Zavin } 176e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 177e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 178e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectint gr_fb_width(void) 179e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 180e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return gr_framebuffer[0].width; 181e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 182e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 183e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectint gr_fb_height(void) 184e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 185e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return gr_framebuffer[0].height; 186e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 187e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 188e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectuint16_t red = 0xf800; 189e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectuint16_t green = 0x07e0; 190e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectuint16_t blue = 0x001f; 191e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 192e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectvoid draw_grid(int w, int h, uint16_t* loc) { 193e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int i, j; 194e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int v; 195e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int stride = fi.line_length / (vi.bits_per_pixel >> 3); 196e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 197e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (j = 0; j < h/2; j++) { 198e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (i = 0; i < w/2; i++) 199e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project loc[i + j*(stride)] = red; 200e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (; i < w; i++) 201e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project loc[i + j*(stride)] = green; 202e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 203e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (; j < h; j++) { 204e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (i = 0; i < w/2; i++) 205e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project loc[i + j*(stride)] = blue; 206e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (; i < w; i++) 207e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project loc[i + j*(stride)] = 0xffff; 208e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 209e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 210e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 211e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 212e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectvoid clear_screen(int w, int h, uint16_t* loc) 213e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project{ 214e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int i,j; 215e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int stride = fi.line_length / (vi.bits_per_pixel >> 3); 216e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 217e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (j = 0; j < h; j++) 218e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project for (i = 0; i < w; i++) 219e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project loc[i + j*(stride)] = 0x0000; 220e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 221e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 222e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Projectint main(int argc, char **argv) { 223e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int w; 224e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project int h; 225365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin int id = 0; 226e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project gr_init(); 227e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project w = vi.xres; 228e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project h = vi.yres; 229e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project clear_screen(w, h, (uint16_t *)gr_framebuffer[0].data); 230365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin clear_screen(w, h, (uint16_t *)gr_framebuffer[1].data); 231e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 232e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project if (argc > 2) { 233e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project w = atoi(argv[1]); 234e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project h = atoi(argv[2]); 235e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project } 236e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 237365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin if (argc > 3) 238365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin id = !!atoi(argv[3]); 239365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin 240365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin draw_grid(w, h, (uint16_t *)gr_framebuffer[id].data); 241365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin set_active_framebuffer(!id); 242365aff4dc3f21d14b03633f3629f69d71b39c74eDima Zavin set_active_framebuffer(id); 243e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project 244e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project return 0; 245e16cb84e2324f05334d18dcf5956f20f44262b62The Android Open Source Project} 246