BarryServer : Git

All the code for all my projects
// BarryServer : Git / OrionDesktop / blob / 535aa6298753c88a7d809227cf64962f7924543b / winmgr / main.c

// Related

OrionDesktop

Barry Initial commit 535aa62 (2 years, 4 months ago)
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <sys/fb.h>

FBVarInfo vinfo;
FBFixInfo finfo;
void *lfb;

/* Put a pixel on the screen */
static void
putpixel(int x, int y, int colour)
{
	*((uint32_t *) lfb + (y * vinfo.xres) + x) = colour;
}

/* Main function */
int
main(int argc, char *argv[])
{
	printf("Staring Orion Desktop\n");

	/* Open framebuffer */
	int fb = open("/dev/fb", O_RDWR);
	if (fb == -1) {
		perror("Failed to open framebuffer");
		goto exit_fail;
	}

	/* Get size of framebuffer */
	if (ioctl(fb, FBIOGET_VSCREENINFO, &vinfo) == -1) {
		perror("Failed to get framebuffer variable info");
		goto exit_fail;
	}
	if (ioctl(fb, FBIOGET_FSCREENINFO, &finfo) == -1) {
		perror("Failed to get framebuffer fixed info");
		goto exit_fail;
	}
	printf("Screen is %dx%dx%d\n", vinfo.xres, vinfo.yres, vinfo.bpp);

	/* Map framebuffer */
	lfb = mmap(NULL, finfo.fbmemLen, PROT_READ|PROT_WRITE,
	                 MAP_PRIVATE, fb, 0);
	if ((int) lfb == -1) {
		perror("Failed to map framebuffer");
		goto exit_fail;
	}
	close(fb);
	printf("Framebuffer mapped at %#.8x (%d bytes)\n", lfb, finfo.fbmemLen);

	/* Draw to screen */
	int x, y;
	for (y = 0; y < 720; y++)
		for (x = 0; x < 1280; x++)
			putpixel(x, y, ((x*0xFF)/vinfo.xres)
			         + (((y*0xFF)/vinfo.yres) << 8));

	return 0;

exit_fail:
	if (fb != -1)
		close(fb);
	exit(EXIT_FAILURE);
}