Entropy visualizer for Nitpicker
This commit is contained in:
committed by
Norman Feske
parent
33ebdeee1f
commit
a07707f08d
4
recipes/pkg/nit_entropy/README
Normal file
4
recipes/pkg/nit_entropy/README
Normal file
@@ -0,0 +1,4 @@
|
||||
|
||||
Jitter Sponge
|
||||
|
||||
A terminal server that provides an entropy service.
|
||||
1
recipes/pkg/nit_entropy/archives
Normal file
1
recipes/pkg/nit_entropy/archives
Normal file
@@ -0,0 +1 @@
|
||||
_/src/nit_entropy
|
||||
1
recipes/pkg/nit_entropy/hash
Normal file
1
recipes/pkg/nit_entropy/hash
Normal file
@@ -0,0 +1 @@
|
||||
-
|
||||
15
recipes/pkg/nit_entropy/runtime
Normal file
15
recipes/pkg/nit_entropy/runtime
Normal file
@@ -0,0 +1,15 @@
|
||||
<runtime ram="4M" caps="128" binary="nit_entropy">
|
||||
|
||||
<requires>
|
||||
<nitpicker/>
|
||||
<terminal/>
|
||||
</requires>
|
||||
|
||||
<content>
|
||||
<rom label="ld.lib.so"/>
|
||||
<rom label="nit_entropy"/>
|
||||
</content>
|
||||
|
||||
<config/>
|
||||
|
||||
</runtime>
|
||||
2
recipes/src/nit_entropy/content.mk
Normal file
2
recipes/src/nit_entropy/content.mk
Normal file
@@ -0,0 +1,2 @@
|
||||
SRC_DIR = src/app/nit_entropy
|
||||
include $(GENODE_DIR)/repos/base/recipes/src/content.inc
|
||||
1
recipes/src/nit_entropy/hash
Normal file
1
recipes/src/nit_entropy/hash
Normal file
@@ -0,0 +1 @@
|
||||
-
|
||||
6
recipes/src/nit_entropy/used_apis
Normal file
6
recipes/src/nit_entropy/used_apis
Normal file
@@ -0,0 +1,6 @@
|
||||
base
|
||||
os
|
||||
framebuffer_session
|
||||
input_session
|
||||
nitpicker_session
|
||||
terminal_session
|
||||
99
run/nit_entropy.run
Normal file
99
run/nit_entropy.run
Normal file
@@ -0,0 +1,99 @@
|
||||
create_boot_directory
|
||||
|
||||
import_from_depot genodelabs/src/[base_src] \
|
||||
genodelabs/pkg/[drivers_interactive_pkg] \
|
||||
genodelabs/src/nitpicker \
|
||||
genodelabs/src/init
|
||||
|
||||
append config {
|
||||
<config>
|
||||
<parent-provides>
|
||||
<service name="ROM"/>
|
||||
<service name="IRQ"/>
|
||||
<service name="IO_MEM"/>
|
||||
<service name="IO_PORT"/>
|
||||
<service name="PD"/>
|
||||
<service name="RM"/>
|
||||
<service name="CPU"/>
|
||||
<service name="LOG"/>
|
||||
</parent-provides>
|
||||
<default-route>
|
||||
<service name="Nitpicker"> <child name="nitpicker"/> </service>
|
||||
<service name="Timer"> <child name="timer"/> </service>
|
||||
<service name="Terminal"> <child name="terminal"/> </service>
|
||||
<service name="Platform"> <child name="platform_drv"/> </service>
|
||||
<any-service><parent/></any-service>
|
||||
</default-route>
|
||||
|
||||
<default caps="100"/>
|
||||
|
||||
<start name="timer">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
<provides><service name="Timer"/></provides>
|
||||
</start>
|
||||
|
||||
<start name="drivers" caps="1000">
|
||||
<resource name="RAM" quantum="32M" constrain_phys="yes"/>
|
||||
<binary name="init"/>
|
||||
<route>
|
||||
<service name="ROM" label="config"> <parent label="drivers.config"/> </service>
|
||||
<service name="Timer"> <child name="timer"/> </service>
|
||||
<any-service> <parent/> </any-service>
|
||||
</route>
|
||||
<provides>
|
||||
<service name="Input"/> <service name="Framebuffer"/>
|
||||
</provides>
|
||||
</start>
|
||||
|
||||
<start name="nitpicker">
|
||||
<resource name="RAM" quantum="8M"/>
|
||||
<provides><service name="Nitpicker"/></provides>
|
||||
<config>
|
||||
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
|
||||
<domain name="default" layer="2" content="client" label="no" focus="click" hover="always" />
|
||||
<policy label_prefix="pointer" domain="pointer"/>
|
||||
<default-policy domain="default"/>
|
||||
</config>
|
||||
<route>
|
||||
<service name="Input"> <child name="drivers"/> </service>
|
||||
<service name="Framebuffer"> <child name="drivers"/> </service>
|
||||
<any-service> <parent/> <any-child/> </any-service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="pointer">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
</start>
|
||||
|
||||
<start name="nit_entropy">
|
||||
<resource name="RAM" quantum="4M"/>
|
||||
<route>
|
||||
<service name="Nitpicker"> <child name="nitpicker"/> </service>
|
||||
<any-service> <parent/> <any-child/></any-service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="jitter_sponge">
|
||||
<resource name="RAM" quantum="4M"/>
|
||||
<provides><service name="Terminal"/></provides>
|
||||
<route>
|
||||
<any-service> <parent/> <any-child/></any-service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
</config>}
|
||||
|
||||
build {
|
||||
app/nit_entropy
|
||||
server/jitter_sponge
|
||||
}
|
||||
|
||||
install_config $config
|
||||
|
||||
build_boot_image {
|
||||
jitter_sponge
|
||||
nit_entropy
|
||||
libkeccak.lib.so
|
||||
}
|
||||
|
||||
run_genode_until forever
|
||||
97
src/app/nit_entropy/main.cc
Normal file
97
src/app/nit_entropy/main.cc
Normal file
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
* \brief Entropy visualizer
|
||||
* \author Emery Hemingway
|
||||
* \date 2018-11-09
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2018 Genode Labs GmbH
|
||||
*
|
||||
* This file is part of the Genode OS framework, which is distributed
|
||||
* under the terms of the GNU Affero General Public License version 3.
|
||||
*/
|
||||
|
||||
/* Genode includes */
|
||||
#include <terminal_session/connection.h>
|
||||
#include <nitpicker_session/connection.h>
|
||||
#include <framebuffer_session/connection.h>
|
||||
#include <base/attached_dataspace.h>
|
||||
#include <base/heap.h>
|
||||
#include <base/log.h>
|
||||
#include <base/component.h>
|
||||
|
||||
|
||||
namespace Nit_entropy {
|
||||
using namespace Genode;
|
||||
typedef Surface_base::Point Point;
|
||||
typedef Surface_base::Area Area;
|
||||
typedef Surface_base::Rect Rect;
|
||||
|
||||
struct Main;
|
||||
};
|
||||
|
||||
|
||||
struct Nit_entropy::Main
|
||||
{
|
||||
enum { WIDTH = 256, HEIGHT = 256 };
|
||||
|
||||
Genode::Env &_env;
|
||||
|
||||
Heap _heap { _env.ram(), _env.rm() };
|
||||
|
||||
Nitpicker::Connection _nitpicker { _env };
|
||||
|
||||
Framebuffer::Session &_fb = *_nitpicker.framebuffer();
|
||||
|
||||
Terminal::Connection _entropy { _env, "entropy" };
|
||||
|
||||
Dataspace_capability _fb_ds_cap()
|
||||
{
|
||||
using Framebuffer::Mode;
|
||||
Mode mode(WIDTH, HEIGHT, Mode::RGB565);
|
||||
_nitpicker.buffer(mode, false);
|
||||
return _fb.dataspace();
|
||||
}
|
||||
|
||||
Attached_dataspace _fb_ds { _env.rm(), _fb_ds_cap() };
|
||||
|
||||
Nitpicker::Session::View_handle _view = _nitpicker.create_view();
|
||||
|
||||
void _refresh() { _fb.refresh(0, 0, WIDTH, HEIGHT); }
|
||||
|
||||
void _plot()
|
||||
{
|
||||
uint16_t *pixels = _fb_ds.local_addr<uint16_t>();
|
||||
static uint8_t buf[HEIGHT];
|
||||
size_t n = _entropy.read(buf, sizeof(buf));
|
||||
if (n != sizeof(buf)) {
|
||||
Genode::error("read ", n, " bytes of entropy");
|
||||
}
|
||||
|
||||
for (int i = 0; i < HEIGHT; ++i) {
|
||||
uint16_t *row = &pixels[i*WIDTH];
|
||||
row[buf[i]] = ~row[buf[i]];
|
||||
}
|
||||
|
||||
_refresh();
|
||||
}
|
||||
|
||||
Signal_handler<Main> _sync_handler {
|
||||
_env.ep(), *this, &Main::_plot };
|
||||
|
||||
Main(Env &env) : _env(env)
|
||||
{
|
||||
_nitpicker.enqueue<Nitpicker::Session::Command::Geometry>(
|
||||
_view, Rect(Point(0, 0), Area (WIDTH, HEIGHT)));
|
||||
|
||||
_nitpicker.enqueue<Nitpicker::Session::Command::To_front>(
|
||||
_view, Nitpicker::Session::View_handle());
|
||||
_nitpicker.execute();
|
||||
|
||||
_fb.sync_sigh(_sync_handler);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
void Component::construct(Genode::Env &env) {
|
||||
static Nit_entropy::Main inst(env); }
|
||||
3
src/app/nit_entropy/target.mk
Normal file
3
src/app/nit_entropy/target.mk
Normal file
@@ -0,0 +1,3 @@
|
||||
TARGET = nit_entropy
|
||||
SRC_CC = main.cc
|
||||
LIBS = base
|
||||
Reference in New Issue
Block a user