Revision 6d4ba740
README.md | ||
---|---|---|
1 |
About & License |
|
2 |
=============== |
|
3 |
|
|
4 |
AMiRo-Apps is a collection of applications and configurations for the Autonomous |
|
5 |
Mini Robot (AMiRo) [1]. It is tightly coupled to the AMiRo-OS and uRtWare |
|
6 |
projects, which provide a sophisticated operating system (based on ChibiOS) amd |
|
7 |
a real-time middleware for embedded devices. |
|
8 |
|
|
9 |
Copyright (C) 2018..2020 Thomas Schöpping et al. |
|
10 |
(a complete list of all authors is given below) |
|
11 |
|
|
12 |
This program is free software: you can redistribute it and/or modify |
|
13 |
it under the terms of the GNU General Public License as published by |
|
14 |
the Free Software Foundation, either version 3 of the License, or (at |
|
15 |
your option) any later version. |
|
16 |
|
|
17 |
This program is distributed in the hope that it will be useful, but |
|
18 |
WITHOUT ANY WARRANTY; without even the implied warranty of |
|
19 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
20 |
General Public License for more details. |
|
21 |
|
|
22 |
You should have received a copy of the GNU General Public License |
|
23 |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
24 |
|
|
25 |
This research/work was supported by the Cluster of Excellence |
|
26 |
Cognitive Interaction Technology 'CITEC' (EXC 277) at Bielefeld |
|
27 |
University, which is funded by the German Research Foundation (DFG). |
|
28 |
|
|
29 |
Authors: |
|
30 |
|
|
31 |
- Thomas Schöpping <tschoepp[at]cit-ec.uni-bielefeld.de> |
|
32 |
|
|
33 |
References: |
|
34 |
|
|
35 |
[1] S. Herbrechtsmeier, T. Korthals, T. Schopping and U. Rückert, "AMiRo: A |
|
36 |
modular & customizable open-source mini robot platform," 2016 20th |
|
37 |
International Conference on System Theory, Control and Computing (ICSTCC), |
|
38 |
Sinaia, 2016, pp. 687-692. |
|
39 |
|
|
40 |
-------------------------------------------------------------------------------- |
|
41 |
|
|
42 |
Contents |
|
43 |
======== |
|
44 |
|
|
45 |
1. Required Software |
|
46 |
2. Folder Structure |
|
47 |
|
|
48 |
-------------------------------------------------------------------------------- |
|
49 |
|
|
50 |
1 Required Software |
|
51 |
=================== |
|
52 |
|
|
53 |
Since AMiRo-Apps depends on the AMiRo-OS and µRtWare projects, both are included |
|
54 |
as Git submodules. Use the provided ./setup.sh script to initialize those. When |
|
55 |
AMiRo-OS is fully configured, there is no additional software required by |
|
56 |
AMiRo-Apps. For further details about the initialization follow the instructions |
|
57 |
in the script and refer to the README.md file of AMiRo-OS and µRtWare |
|
58 |
respectively. |
|
59 |
|
|
60 |
|
|
61 |
2 Folder Structure |
|
62 |
================== |
|
63 |
|
|
64 |
At its root, the AMiRo-Apps project has seven folders to distiquish between the |
|
65 |
most fundamental parts: |
|
66 |
|
|
67 |
2.1 `apps/` |
|
68 |
----------- |
|
69 |
|
|
70 |
This folder includes individual applications, which can used by |
|
71 |
configigurations (see `configurations/`). Apps will usually be implemented |
|
72 |
as nodes for the middleware and provide according interfaces via some message |
|
73 |
type(s) (see `messagetypes/`). |
|
74 |
|
|
75 |
2.2 `configurations/` |
|
76 |
--------------------- |
|
77 |
|
|
78 |
Each configuration combines multiple apps and distributes them among any |
|
79 |
supported modules. Furthermore, configurations may modify parameters for each |
|
80 |
module individually. Finally, each configuration should come with a Makefile, so |
|
81 |
a user can just use this to build and flash the whole setup. |
|
82 |
For better understanding, have a look at this example: |
|
83 |
|
|
84 |
- module A: using apps 1, 2 and 3 with parameters X and Y. |
|
85 |
- module B: using apps 1 and 4 with parameter X. |
|
86 |
- module C: using apps 1, 5, 6 and 7 with parameters X and Z. |
|
87 |
- Makefile: setup and build everything. |
|
88 |
|
|
89 |
Note that each configuration needs to explicitely support a module and that |
|
90 |
there can never be an implicit default configuration. |
|
91 |
|
|
92 |
2.3 `doc/` |
|
93 |
---------- |
|
94 |
|
|
95 |
Any documentation related files are located in this directory. |
|
96 |
|
|
97 |
2.4 `messagetypes/` |
|
98 |
------------------- |
|
99 |
|
|
100 |
Apps shoud take advantage of the middleware and thus implement nodes, which |
|
101 |
communicate via messages and/or requests. Such messages/requests may have |
|
102 |
payloads of arbitrary types, which can be defined in this folder. |
|
103 |
|
|
104 |
2.5 `middleware/` |
|
105 |
----------------- |
|
106 |
|
|
107 |
This folder contains the µRtWare submodule and interface files. |
|
108 |
|
|
109 |
2.6 `os/` |
|
110 |
--------- |
|
111 |
|
|
112 |
This folder contains the AMiRo-OS submodule and interface files. |
|
113 |
|
|
114 |
2.7 `tools/` |
|
115 |
------------ |
|
116 |
|
|
117 |
Helpful tools can be found in this dirctory. |
|
118 |
|
README.txt | ||
---|---|---|
1 |
AMiRo-Apps is a collection of applications and configurations for the Autonomous |
|
2 |
Mini Robot (AMiRo) [1]. It is tightly coupled to the AMiRo-OS and uRtWare |
|
3 |
projects, which provide a sophisticated operating system (based on ChibiOS) amd |
|
4 |
a real-time middleware for embedded devices. |
|
5 |
|
|
6 |
Copyright (C) 2018..2019 Thomas Schöpping et al. |
|
7 |
(a complete list of all authors is given below) |
|
8 |
|
|
9 |
This program is free software: you can redistribute it and/or modify |
|
10 |
it under the terms of the GNU General Public License as published by |
|
11 |
the Free Software Foundation, either version 3 of the License, or (at |
|
12 |
your option) any later version. |
|
13 |
|
|
14 |
This program is distributed in the hope that it will be useful, but |
|
15 |
WITHOUT ANY WARRANTY; without even the implied warranty of |
|
16 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
17 |
General Public License for more details. |
|
18 |
|
|
19 |
You should have received a copy of the GNU General Public License |
|
20 |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
21 |
|
|
22 |
This research/work was supported by the Cluster of Excellence |
|
23 |
Cognitive Interaction Technology 'CITEC' (EXC 277) at Bielefeld |
|
24 |
University, which is funded by the German Research Foundation (DFG). |
|
25 |
|
|
26 |
Authors: |
|
27 |
- Thomas Schöpping <tschoepp[at]cit-ec.uni-bielefeld.de> |
|
28 |
- Marc Rothmann |
|
29 |
|
|
30 |
References: |
|
31 |
[1] S. Herbrechtsmeier, T. Korthals, T. Schopping and U. Rückert, "AMiRo: A |
|
32 |
modular & customizable open-source mini robot platform," 2016 20th |
|
33 |
International Conference on System Theory, Control and Computing (ICSTCC), |
|
34 |
Sinaia, 2016, pp. 687-692. |
|
35 |
|
|
36 |
|
|
37 |
|
|
38 |
################################################################################ |
|
39 |
# # |
|
40 |
# RRRRRRRR EEEEEEEE AAA DDDDDDDD MM MM EEEEEEEE # |
|
41 |
# RR RR EE AA AA DD DD MMM MMM EE # |
|
42 |
# RR RR EE AA AA DD DD MMMM MMMM EE # |
|
43 |
# RRRRRRRR EEEEEE AA AA DD DD MM MMM MM EEEEEE # |
|
44 |
# RR RR EE AAAAAAAAA DD DD MM MM EE # |
|
45 |
# RR RR EE AA AA DD DD MM MM EE # |
|
46 |
# RR RR EEEEEEEE AA AA DDDDDDDD MM MM EEEEEEEE # |
|
47 |
# # |
|
48 |
################################################################################ |
|
49 |
|
|
50 |
This file will help you to setup all required software on your system, compile |
|
51 |
the source code, and flash it to the AMiRo modules. |
|
52 |
|
|
53 |
================================================================================ |
|
54 |
|
|
55 |
CONTENTS: |
|
56 |
|
|
57 |
1 Required software |
|
58 |
2 Folder structure |
|
59 |
|
|
60 |
================================================================================ |
|
61 |
|
|
62 |
|
|
63 |
|
|
64 |
1 - REQUIRED SOFTWARE |
|
65 |
--------------------- |
|
66 |
|
|
67 |
Since AMiRo-Apps depends on the AMiRo-OS and uRtWare projects, both are included |
|
68 |
as Git submodules. Use the provided ./setup.sh script to initialize those. When |
|
69 |
AMiRo-OS is fully configured, there is no additional software required by |
|
70 |
AMiRo-Apps. For further details about the initialization follow the instructions |
|
71 |
in the script and refer to the README.txt file of AMiRo-OS and uRtWare |
|
72 |
respectively. |
|
73 |
|
|
74 |
|
|
75 |
|
|
76 |
2 - FOLDER STRUCTURE |
|
77 |
-------------------- |
|
78 |
|
|
79 |
At its root, the AMiRo-Apps projects has six folders to distiquish between the |
|
80 |
most fundamental parts: |
|
81 |
. |
|
82 |
├── apps |
|
83 |
│ This folder includes individual applications, which can used by |
|
84 |
│ configigurations. Apps will usually be implemented as nodes for the |
|
85 |
│ middleware and provide acording interfaces via some message type(s). |
|
86 |
├── configurations |
|
87 |
│ Each configuration combines multiple apps and distributes them among any |
|
88 |
│ supported modules. Furthermore, configurations may modify parameters for |
|
89 |
│ each module individually. Finally, each configuration should come with a |
|
90 |
│ makefile, so a user can just use this to build and flash the whole setup. |
|
91 |
│ For better understanding, have a look at this example: |
|
92 |
│ - module A: using apps 1, 2 and 3 with parameters X and Y. |
|
93 |
│ - module B: using apps 1 and 4 with parameter X. |
|
94 |
│ - module C: using apps 1, 5, 6 and 7 with parameters X and Z. |
|
95 |
│ - Makefile: set and build everything. |
|
96 |
│ Note that each configuration needs to explicitely support a module and |
|
97 |
│ that there can never be an implicit default configuration. |
|
98 |
├── messagetypes |
|
99 |
│ Apps shoud take advantage of the middleware and thus implement nodes, |
|
100 |
│ which communicate via messages. Such messages may have payloads of |
|
101 |
│ arbitrary types, which can be defined in this folder. |
|
102 |
├── middleware |
|
103 |
│ This folder contains the µRtWare submodule and interface files. |
|
104 |
├── os |
|
105 |
│ This folder contains the AMiRo-OS submodule and interface files. |
|
106 |
└── tools |
|
107 |
Usable tools can be found in this dirctory. |
|
108 |
|
|
109 |
================================================================================ |
|
110 |
|
apps/HelloWorld/HelloWorld.mk | ||
---|---|---|
1 | 1 |
################################################################################ |
2 | 2 |
# AMiRo-Apps is a collection of applications for the Autonomous Mini Robot # |
3 | 3 |
# (AMiRo) platform. # |
4 |
# Copyright (C) 2018..2019 Thomas Schöpping et al. #
|
|
4 |
# Copyright (C) 2018..2020 Thomas Schöpping et al. #
|
|
5 | 5 |
# # |
6 | 6 |
# This program is free software: you can redistribute it and/or modify # |
7 | 7 |
# it under the terms of the GNU General Public License as published by # |
... | ... | |
26 | 26 |
# absolue path to this directory |
27 | 27 |
HelloWorldAPP_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) |
28 | 28 |
|
29 |
# middleware selection |
|
30 |
ifeq ($(CONFIG_MIDDLEWARE),) |
|
31 |
CONFIG_MIDDLEWARE := "µRtWare" |
|
32 |
else ifneq ($(CONFIG_MIDDLEWARE),"µRtWare") |
|
33 |
$(error incompatible middleware selected: $(CONFIG_MIDDLEWARE)) |
|
34 |
endif |
|
35 |
|
|
29 | 36 |
# include path |
30 | 37 |
HelloWorldAPP_INC = $(HelloWorldAPP_DIR) |
31 | 38 |
|
apps/HelloWorld/helloworld.c | ||
---|---|---|
1 | 1 |
/* |
2 | 2 |
AMiRo-Apps is a collection of applications for the Autonomous Mini Robot (AMiRo) platform. |
3 |
Copyright (C) 2018..2019 Thomas Schöpping et al.
|
|
3 |
Copyright (C) 2018..2020 Thomas Schöpping et al.
|
|
4 | 4 |
|
5 | 5 |
This program is free software: you can redistribute it and/or modify |
6 | 6 |
it under the terms of the GNU General Public License as published by |
... | ... | |
17 | 17 |
*/ |
18 | 18 |
|
19 | 19 |
#include <helloworld.h> |
20 |
|
|
21 |
#pragma message "Hello World! (.c)" |
apps/HelloWorld/helloworld.h | ||
---|---|---|
1 | 1 |
/* |
2 | 2 |
AMiRo-Apps is a collection of applications for the Autonomous Mini Robot (AMiRo) platform. |
3 |
Copyright (C) 2018..2019 Thomas Schöpping et al.
|
|
3 |
Copyright (C) 2018..2020 Thomas Schöpping et al.
|
|
4 | 4 |
|
5 | 5 |
This program is free software: you can redistribute it and/or modify |
6 | 6 |
it under the terms of the GNU General Public License as published by |
... | ... | |
16 | 16 |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
17 | 17 |
*/ |
18 | 18 |
|
19 |
#ifndef _HELLOWORLD_H_
|
|
20 |
#define _HELLOWORLD_H_
|
|
19 |
#ifndef HELLOWORLD_H
|
|
20 |
#define HELLOWORLD_H
|
|
21 | 21 |
|
22 |
#endif /* _HELLOWORLD_H_ */ |
|
22 |
#pragma message "Hello World! (.h)" |
|
23 |
|
|
24 |
#endif /* HELLOWORLD_H */ |
configurations/HelloWorld/Makefile | ||
---|---|---|
1 | 1 |
################################################################################ |
2 | 2 |
# AMiRo-Apps is a collection of applications for the Autonomous Mini Robot # |
3 | 3 |
# (AMiRo) platform. # |
4 |
# Copyright (C) 2018..2019 Thomas Schöpping et al. #
|
|
4 |
# Copyright (C) 2018..2020 Thomas Schöpping et al. #
|
|
5 | 5 |
# # |
6 | 6 |
# This program is free software: you can redistribute it and/or modify # |
7 | 7 |
# it under the terms of the GNU General Public License as published by # |
... | ... | |
26 | 26 |
# absolue path to this directory |
27 | 27 |
HelloWorldCONF_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) |
28 | 28 |
|
29 |
# list of available modules |
|
30 |
HelloWorldCONF_MODULES = $(patsubst $(HelloWorldCONF_DIR)/modules/%/,%,$(sort $(dir $(wildcard $(HelloWorldCONF_DIR)/modules/*/*)))) |
|
29 |
# list of available/supported modules |
|
30 |
HelloWorldCONF_MODULES_DIR = $(HelloWorldCONF_DIR)/modules/ |
|
31 |
HelloWorldCONF_MODULES = $(patsubst $(HelloWorldCONF_MODULES_DIR)%/,%,$(sort $(dir $(wildcard $(HelloWorldCONF_MODULES_DIR)*/*)))) |
|
31 | 32 |
|
32 |
CLEANTRGS = $(HelloWorldCONF_MODULES:%=clean_%) |
|
33 |
FLASHTRGS = $(HelloWorldCONF_MODULES:%=flash_%) |
|
33 |
HelloWorldCONF_CLEANTRGS = $(HelloWorldCONF_MODULES:%=clean_%)
|
|
34 |
HelloWorldCONF_FLASHTRGS = $(HelloWorldCONF_MODULES:%=flash_%)
|
|
34 | 35 |
|
35 |
.PHONY: all $(MODULES) $(FLASHTRGS) clean $(CLEANTRGS)
|
|
36 |
.PHONY: all $(HelloWorldCONF_MODULES) $(HelloWorldCONF_FLASHTRGS) clean $(HelloWorldCONF_CLEANTRGS)
|
|
36 | 37 |
|
37 | 38 |
all: $(HelloWorldCONF_MODULES) |
39 |
|
|
38 | 40 |
$(HelloWorldCONF_MODULES): |
39 |
$(MAKE) -C $(HelloWorldCONF_DIR)/modules/$@
|
|
41 |
$(MAKE) -C $(HelloWorldCONF_MODULES_DIR)/$@
|
|
40 | 42 |
|
41 |
$(FLASHTRGS): |
|
42 |
$(MAKE) -C $(HelloWorldCONF_DIR)/modules/$(@:flash_%=%) flash
|
|
43 |
$(HelloWorldCONF_FLASHTRGS):
|
|
44 |
$(MAKE) -C $(HelloWorldCONF_MODULES_DIR)/$(@:flash_%=%) flash
|
|
43 | 45 |
|
44 |
clean: $(CLEANTRGS) |
|
45 |
$(CLEANTRGS): |
|
46 |
$(MAKE) -C $(HelloWorldCONF_DIR)/modules/$(@:clean_%=%) clean |
|
46 |
clean: $(HelloWorldCONF_CLEANTRGS) |
|
47 |
$(HelloWorldCONF_CLEANTRGS): |
|
48 |
$(MAKE) -C $(HelloWorldCONF_MODULES_DIR)/$(@:clean_%=%) clean |
configurations/HelloWorld/modules/DiWheelDrive_1-1/Makefile | ||
---|---|---|
1 |
################################################################################ |
|
2 |
# AMiRo-Apps is a collection of applications for the Autonomous Mini Robot # |
|
3 |
# (AMiRo) platform. # |
|
4 |
# Copyright (C) 2018..2019 Thomas Schöpping et al. # |
|
5 |
# # |
|
6 |
# This program is free software: you can redistribute it and/or modify # |
|
7 |
# it under the terms of the GNU General Public License as published by # |
|
8 |
# the Free Software Foundation, either version 3 of the License, or # |
|
9 |
# (at your option) any later version. # |
|
10 |
# # |
|
11 |
# This program is distributed in the hope that it will be useful, # |
|
12 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of # |
|
13 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # |
|
14 |
# GNU General Public License for more details. # |
|
15 |
# # |
|
16 |
# You should have received a copy of the GNU General Public License # |
|
17 |
# along with this program. If not, see <http://www.gnu.org/licenses/>. # |
|
18 |
# # |
|
19 |
# This research/work was supported by the Cluster of Excellence Cognitive # |
|
20 |
# Interaction Technology 'CITEC' (EXC 277) at Bielefeld University, which is # |
|
21 |
# funded by the German Research Foundation (DFG). # |
|
22 |
################################################################################ |
|
23 |
|
|
24 |
|
|
25 |
|
|
26 |
# absolue path to this directory |
|
27 |
APPCONFIG_MODULE_DIR := $(realpath $(dir $(lastword $(MAKEFILE_LIST)))) |
|
28 |
|
|
29 |
# environment setup |
|
30 |
include $(APPCONFIG_MODULE_DIR)/../modules.mk |
|
31 |
|
|
32 |
# include apps |
|
33 |
include $(APPS_DIR)/HelloWorld/HelloWorld.mk |
|
34 |
|
|
35 |
# include directories for configurations |
|
36 |
APPSINC += $(APPCONFIG_MODULE_DIR) \ |
|
37 |
$(HelloWorldAPP_INC) |
|
38 |
|
|
39 |
# C sources |
|
40 |
APPSCSRC += $(HelloWorldAPP_CSRC) |
|
41 |
|
|
42 |
# C++ sources |
|
43 |
APPSCPPSRC += $(HelloWorldAPP_CPPSRC) |
|
44 |
|
|
45 |
# call DiWHeelDrive Makefile module from OS |
|
46 |
all: |
|
47 |
$(MAKE) -C $(OS_DIR)/AMiRo-OS/modules/DiWheelDrive_1-1/ |
|
48 |
|
|
49 |
clean: |
|
50 |
$(MAKE) -C $(OS_DIR)/AMiRo-OS/modules/DiWheelDrive_1-1/ clean |
|
51 |
|
|
52 |
flash: |
|
53 |
$(MAKE) -C $(OS_DIR)/AMiRo-OS/modules/DiWheelDrive_1-1/ flash |
|
54 |
|
configurations/HelloWorld/modules/DiWheelDrive_1-1/mainincludes.hpp | ||
---|---|---|
1 |
/* |
|
2 |
AMiRo-Apps is a collection of applications for the Autonomous Mini Robot (AMiRo) platform. |
|
3 |
Copyright (C) 2018..2019 Thomas Schöpping et al. |
|
4 |
|
|
5 |
This program is free software: you can redistribute it and/or modify |
|
6 |
it under the terms of the GNU General Public License as published by |
|
7 |
the Free Software Foundation, either version 3 of the License, or |
|
8 |
(at your option) any later version. |
|
9 |
|
|
10 |
This program is distributed in the hope that it will be useful, |
|
11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13 |
GNU General Public License for more details. |
|
14 |
|
|
15 |
You should have received a copy of the GNU General Public License |
|
16 |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
17 |
*/ |
|
18 |
|
|
19 |
#ifndef _MAININCLUDES_HPP_ |
|
20 |
#define _MAININCLUDES_HPP_ |
|
21 |
|
|
22 |
#include <urtware.h> |
|
23 |
|
|
24 |
#endif /* _MAININCLUDES_HPP_ */ |
configurations/HelloWorld/modules/DiWheelDrive_1-1/osconf.h | ||
---|---|---|
1 |
/* |
|
2 |
AMiRo-Apps is a collection of applications for the Autonomous Mini Robot (AMiRo) platform. |
|
3 |
Copyright (C) 2018..2019 Thomas Schöpping et al. |
|
4 |
|
|
5 |
This program is free software: you can redistribute it and/or modify |
|
6 |
it under the terms of the GNU General Public License as published by |
|
7 |
the Free Software Foundation, either version 3 of the License, or |
|
8 |
(at your option) any later version. |
|
9 |
|
|
10 |
This program is distributed in the hope that it will be useful, |
|
11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13 |
GNU General Public License for more details. |
|
14 |
|
|
15 |
You should have received a copy of the GNU General Public License |
|
16 |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
17 |
*/ |
|
18 |
|
|
19 |
#ifndef _OSCONF_H_ |
|
20 |
#define _OSCONF_H_ |
|
21 |
|
|
22 |
#include <HelloWorld_osconf.h> |
|
23 |
|
|
24 |
#endif /* _OSCONF_H_ */ |
configurations/HelloWorld/modules/DiWheelDrive_1-1/urtwareconf.h | ||
---|---|---|
1 |
/* |
|
2 |
AMiRo-Apps is a collection of applications for the Autonomous Mini Robot (AMiRo) platform. |
|
3 |
Copyright (C) 2018..2019 Thomas Schöpping et al. |
|
4 |
|
|
5 |
This program is free software: you can redistribute it and/or modify |
|
6 |
it under the terms of the GNU General Public License as published by |
|
7 |
the Free Software Foundation, either version 3 of the License, or |
|
8 |
(at your option) any later version. |
|
9 |
|
|
10 |
This program is distributed in the hope that it will be useful, |
|
11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
13 |
GNU General Public License for more details. |
|
14 |
|