提交 b98b15a7 编写于 作者: 指向BIOS的野指针's avatar 指向BIOS的野指针

update rwl libraries

上级 0c734573
# RWS Wayland
`这是一个Wayland混成器的简单实现,用于BiliOS项目的图形环境`
......@@ -2,19 +2,5 @@
int main(int argc, char **argv)
{
switch_to_daemon();
fbinfo.bufferfile = open("/dev/fb0", O_RDWR);
if(!fbinfo.bufferfile)
{
rwl::err("cannot open device /dev/fb0 .");
rwl::rwl_exit(-2);
}
rwl::log("succeeded open device /dev/fb0 .");
fb_var_screeninfo vinfo;
fb_fix_screeninfo finfo;
ioctl(fbinfo.bufferfile, FBIOGET_FSCREENINFO, &finfo);
ioctl(fbinfo.bufferfile, FBIOGET_VSCREENINFO, &vinfo);
mapbuffer(&vinfo, &finfo);
switch_to_daemon(); //切换到守护进程
}
#ifndef SERVER_HH
#define SERVER_HH
#ifndef __server_hh_
#define __server_hh_
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pwd.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <linux/fb.h>
#include "../dbg/logs.hh"
struct framebuffer_info
{
int bufferfile;
long long size;
long long width, height;
char *buffer;
char **coordination;
} fbinfo;
/**
* @brief 切换为守护进程
......@@ -40,22 +25,4 @@ void switch_to_daemon()
freopen("./.rwl/rwl-err", "w", stderr);
}
/**
* @brief 映射缓冲区
*
* @param vinfo
* @param finfo
*/
void mapbuffer(fb_var_screeninfo *vinfo, fb_fix_screeninfo *finfo)
{
fbinfo.size = vinfo->xres * vinfo->yres * vinfo->bits_per_pixel / 8;
fbinfo.width = vinfo->xres;
fbinfo.height = vinfo->yres;
fbinfo.buffer = (char *)mmap(0, fbinfo.size, PROT_READ | PROT_WRITE, MAP_SHARED, fbinfo.bufferfile, 0);
fbinfo.coordination = new char *[fbinfo.height];
for (int i = 0; i < fbinfo.height; i++)
fbinfo.coordination[i] = fbinfo.buffer + i * finfo->line_length + vinfo->xoffset;
}
#endif
#ifndef LOGS_HH
#define LOGS_HH
#ifndef __logs_hh_
#define __logs_hh_
#include <iostream>
......
#ifndef __rwl_hh_
#define __rwl_hh_
#include "types.hh"
namespace rwl
{
class Frame
{
private:
id_t fid; //窗口id
pid_t pid; //进程id
std::string name; //窗口名
void *mbuf; //主缓冲
int64_t pos[2]; //窗口位置
uint64_t size[2]; //窗口大小
void *userbuf; //用户缓冲
int64_t ofset[2]; //用户缓冲位置
uint64_t usersize[2]; //用户缓冲大小
public:
Frame();
Frame(std::string name);
Frame(uint64_t size[2]);
Frame(int64_t position[2], uint64_t size[2]);
Frame(std::string name, uint64_t size[2]);
Frame(std::string name, int64_t position[2], uint64_t size[2]);
~Frame();
void setName(std::string name);
std::string getName();
/**
* 一系列getter函数
*
* 这组函数获取的位置是主缓冲的位置
* 大小是用户缓冲的大小
*/
int64_t getX();
int64_t getY();
int64_t getWidth();
int64_t getHeight();
/**
* @brief 获取主缓冲信息
*
* @param buffer 缓冲区
* @param position 位置
* @param size 大小
* @return int 错误码
*/
int getMainBufferInfo(void *&buffer, int64_t *&position, uint64_t *&size);
/**
* @brief 获取用户缓冲信息
*
* @param buffer 缓冲区
* @param position 位置
* @param size 大小
* @return int 错误码
*/
int getUserBufferInfo(void *&buffer, int64_t *&position, uint64_t *&size);
/**
* 一系列setter函数
*
* 这组函数设置的位置是主缓冲的位置
* 大小是用户缓冲的大小
*/
void setX(int64_t x);
void setY(int64_t y);
int setWidth(uint64_t width);
int setHeight(uint64_t height);
/**
* @brief 设置主缓冲信息
*
* @param buffer 缓冲区
* @param position 窗口位置
* @param size 大小
* @return int 错误码
*/
int setMainBufferInfo(void *buffer, int64_t position[2], uint64_t size[2]);
/**
* @brief 设置用户缓冲信息
*
* @param buffer 缓冲区
* @param position 用户缓冲位置
* @param size 用户缓冲大小
* @return int 错误码
*/
int setUserBufferInfo(void *buffer, int64_t position[2], uint64_t size[2]);
/**
* @brief 根据路径移动窗口
*
* @param path 路径
* @param freq 频率
* @return int 错误码
*/
int moveByPath(std::vector<int[2]> path, uint64_t freq);
};
class Page
{
private:
id_t pgid; //页id
std::vector<pid_t> owners; //所属进程
void *layerbg; //背景层
std::vector<Frame *> layer0; // 0层
std::vector<Frame *> layer1; // 1层
public:
Page();
~Page();
/**
* @brief 添加窗口
*
* @param frame 窗口id
*/
void addFrame(id_t frame);
/**
* @brief 添加窗口
*
* @param frame 窗口
*/
void addFrame(Frame *frame);
/**
* @brief 将窗口提前
*
* @param frame 提前的窗口id
* @return bool 页中是否存在
*/
bool pushFrame(id_t frame);
/**
* @brief 将窗口提前
*
* @param frame 提前的窗口
* @return bool 页中是否存在
*/
bool pushFrame(Frame *frame);
};
};
#endif
#ifndef __types_hh_
#define __types_hh_
#include <iostream>
#include <vector>
typedef unsigned long long id_t;
#endif
\ No newline at end of file
#include "../includes/rwl.hh"
namespace rwl{
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册