Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
BadOS Project
BWL
提交
b98b15a7
B
BWL
项目概览
BadOS Project
/
BWL
通知
0
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
BWL
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b98b15a7
编写于
6月 11, 2022
作者:
指向BIOS的野指针
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update rwl libraries
上级
0c734573
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
171 addition
and
52 deletion
+171
-52
README.md
README.md
+2
-0
RWLserver/server.cc
RWLserver/server.cc
+1
-15
RWLserver/server.hh
RWLserver/server.hh
+2
-35
dbg/logs.hh
dbg/logs.hh
+2
-2
includes/rwl.hh
includes/rwl.hh
+150
-0
includes/types.hh
includes/types.hh
+9
-0
libs/rwl.cc
libs/rwl.cc
+5
-0
未找到文件。
README.md
浏览文件 @
b98b15a7
# RWS Wayland
`这是一个Wayland混成器的简单实现,用于BiliOS项目的图形环境`
RWLserver/server.cc
浏览文件 @
b98b15a7
...
...
@@ -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
();
//切换到守护进程
}
RWLserver/server.hh
浏览文件 @
b98b15a7
#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
dbg/logs.hh
浏览文件 @
b98b15a7
#ifndef
LOGS_HH
#define
LOGS_HH
#ifndef
__logs_hh_
#define
__logs_hh_
#include <iostream>
...
...
includes/rwl.hh
0 → 100644
浏览文件 @
b98b15a7
#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
includes/types.hh
0 → 100644
浏览文件 @
b98b15a7
#ifndef __types_hh_
#define __types_hh_
#include <iostream>
#include <vector>
typedef
unsigned
long
long
id_t
;
#endif
\ No newline at end of file
libs/rwl.cc
0 → 100644
浏览文件 @
b98b15a7
#include "../includes/rwl.hh"
namespace
rwl
{
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录