⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.c

📁 超强的嵌入式GUI系统
💻 C
字号:
/***************************************************************************    begin                : Thu Sep 22 2005    copyright            : (C) 2005 - 2007 by Alper Akcan    email                : distchx@yahoo.com ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU Lesser General Public License as        * *   published by the Free Software Foundation; either version 2.1 of the  * *   License, or (at your option) any later version.                       * *                                                                         * ***************************************************************************/#if defined(VIDEO_PSPDEV)#include "../../../lib/xynth_.h"#include "server.h"#include "../helper/helper.h"#include "pspdev.h"#if !defined(PSP_DIRECTACCESS)	#include "../../../lib/mem.h"#endif#if !defined(PSP_BITSPERPIXEL)	#define PSP_BITSPERPIXEL 32#endifs_video_input_t s_video_pspdev_input_keybd = {	VIDEO_INPUT_KEYBD,	s_video_pspdev_kbd_init,	s_video_pspdev_kbd_update,	s_video_pspdev_kbd_uninit,};s_video_input_t s_video_pspdev_input_mouse = {	VIDEO_INPUT_MOUSE,	s_video_pspdev_mouse_init,	s_video_pspdev_mouse_update,	s_video_pspdev_mouse_uninit,};s_video_input_t *s_video_pspdev_input[] = {	&s_video_pspdev_input_keybd,	&s_video_pspdev_input_mouse,	NULL,};s_video_driver_t s_video_pspdev = {	"pspdev",	"/dev/pspdev",	s_video_pspdev_input,	s_video_pspdev_server_init,	s_video_pspdev_server_uninit,	NULL,	NULL,	NULL,	s_video_pspdev_server_surface_update,	NULL,	NULL};void s_video_pspdev_server_uninit (void){	s_video_pspdev_data_t *priv = (s_video_pspdev_data_t *) server->driver->driver_data;	s_thread_join(priv->event_tid, NULL);#if defined(PSP_DIRECTACCESS)#else	s_free((void *) server->window->surface->linear_mem_base);#endif	server->driver->driver_data = NULL;	s_free(priv);}int s_video_pspdev_server_init (s_server_conf_t *cfg){	void *addr;	int pixel_format;	s_video_pspdev_data_t *priv;	priv = (s_video_pspdev_data_t *) s_malloc(sizeof(s_video_pspdev_data_t));	server->driver->driver_data = (void *) priv;        priv->mouse_fd[0] = -1;        priv->mouse_fd[1] = -1;        priv->keybd_fd[0] = -1;        priv->keybd_fd[1] = -1;	server->window->surface->width = 480;	server->window->surface->height = 272;	server->window->surface->bytesperpixel = 4;	server->window->surface->bitsperpixel = 32;	server->window->surface->blueoffset = 0;	server->window->surface->greenoffset = 0;	server->window->surface->redoffset = 0;	server->window->surface->bluelength = 0;	server->window->surface->greenlength = 0;	server->window->surface->redlength = 0;	server->window->surface->colors = 0;		switch (PSP_BITSPERPIXEL) {		case 16:			server->window->surface->colors = 65536;			server->window->surface->bytesperpixel = 2;			server->window->surface->bitsperpixel = 16;			server->window->surface->blueoffset = 11;			server->window->surface->greenoffset = 5;			server->window->surface->redoffset = 0;			server->window->surface->bluelength = 5;			server->window->surface->greenlength = 6;			server->window->surface->redlength = 5;			pixel_format = PSP_DISPLAY_PIXEL_FORMAT_565;			break;		case 32:			server->window->surface->colors = 65536 * 256;			server->window->surface->bytesperpixel = 4;			server->window->surface->bitsperpixel = 32;			server->window->surface->blueoffset = 16;			server->window->surface->greenoffset = 8;			server->window->surface->redoffset = 0;			server->window->surface->bluelength = 8;			server->window->surface->greenlength = 8;			server->window->surface->redlength = 8;			pixel_format = PSP_DISPLAY_PIXEL_FORMAT_8888;			break;		default:			debugf(DSER, "requested bitsperpixel(%d) is not supported", PSP_BITSPERPIXEL);			goto err0;	}		priv->vram_base = (void *) (0x40000000 | (u32) sceGeEdramGetAddr());	sceDisplaySetMode(0, 480, 272);	sceDisplaySetFrameBuf(priv->vram_base, 512, pixel_format, PSP_DISPLAY_SETBUF_NEXTFRAME);#if defined(PSP_DIRECTACCESS)	addr = priv->vram_base;	server->window->surface->linear_buf_pitch = 512;#else	addr = (void *) s_malloc(sizeof(char) * server->window->surface->width * server->window->surface->height * server->window->surface->bytesperpixel);	server->window->surface->need_expose = SURFACE_NEEDEXPOSE;	server->window->surface->linear_buf_pitch = server->window->surface->width;#endif	server->window->surface->linear_mem_base = (unsigned int) addr;	server->window->surface->linear_mem_size = (unsigned int) (sizeof(char) * server->window->surface->width * server->window->surface->height * server->window->surface->bytesperpixel);	server->window->surface->vbuf = (unsigned char *) addr;	server->window->surface->linear_buf = (unsigned char *) addr;	priv->event_tid = s_thread_create(&s_video_pspdev_event_parse, (void *) NULL);	return 0;err0:	s_free(priv);	server->driver->driver_data = NULL;	return -1;}void s_video_pspdev_server_surface_update (s_rect_t *coor){#if defined(PSP_DIRECTACCESS)	return;#else	int y;	s_rect_t clip;	s_rect_t inter;	s_video_pspdev_data_t *priv = (s_video_pspdev_data_t *) server->driver->driver_data;	char *dst = (char *) priv->vram_base;	char *src = (char *) server->window->surface->linear_mem_base;	clip.x = 0;	clip.y = 0;	clip.w = server->window->surface->width;	clip.h = server->window->surface->height;	if (s_rect_intersect(&clip, coor, &inter)) {		return;	}	src += ((inter.x + inter.y * server->window->surface->width) * server->window->surface->bytesperpixel);	dst += ((inter.x + inter.y * 512) * server->window->surface->bytesperpixel);	for (y = 0; y < inter.h; y++) {		switch (server->window->surface->bytesperpixel) {			case 1: s_memcpy1(dst, src, inter.w); break;			case 2: s_memcpy2(dst, src, inter.w); break;			case 4: s_memcpy4(dst, src, inter.w); break;		}		src += (server->window->surface->width * server->window->surface->bytesperpixel);		dst += (512 * server->window->surface->bytesperpixel);	}#endif}#endif /* VIDEO_PSPDEV */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -