FreeNOS
Main.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2015 Niek Linnenbank
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include <FreeNOS/User.h>
19#include <KernelLog.h>
20#include <DeviceServer.h>
21#include "SerialDevice.h"
22
23int main(int argc, char **argv)
24{
25 KernelLog log;
26 DeviceServer server("/dev/serial");
27
28 // Create serial device instance
31
32 // Register to DeviceServer
33 Directory *dir = new Directory(server.getNextInode());
34 server.registerDirectory(dir, "/serial0");
35 server.registerDevice(dev, "/serial0/io");
36 server.registerInterrupt(dev, dev->getIrq());
37
38 // Initialize
39 const FileSystem::Result result = server.initialize();
40 if (result != FileSystem::Success)
41 {
42 ERROR("failed to initialize: result = " << (int) result);
43 return 1;
44 }
45
46 // Start serving requests
47 return server.run();
48}
static SerialDevice * create()
Abstract function to create an instance of T.
int run()
Enters an infinite loop, serving incoming requests.
Device driver server.
virtual FileSystem::Result initialize()
Initialize DeviceServer.
void registerDevice(Device *dev, const char *path)
Add a Device.
void registerInterrupt(Device *dev, Size vector)
Register an interrupt vector for the given device.
Directory File functionality.
Definition Directory.h:60
u32 getNextInode()
Get next unused inode.
FileSystem::Result registerDirectory(Directory *dir, const char *path)
Register a new Directory.
Log to the kernel using PrivExec().
Definition KernelLog.h:35
Provides sequential byte stream of incoming (RX) and outgoing (TX) data.
static u32 inodeNumber
Keeps track of inode number for SerialDevices.
u32 getIrq() const
Get interrupt vector.
int main(int argc, char **argv)
Program entry point.
Definition Main.cpp:20
#define ERROR(msg)
Output an error message.
Definition Log.h:61
Result
Result code for filesystem Actions.
Definition FileSystem.h:53