Imported Upstream version 1.1.0
[platform/upstream/iotivity.git] / resource / docs / c-doc / devdox / dot / ca_overview.gv
1 //******************************************************************
2 //
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 // Note that this diagram is not the best example of efficient
22 // graphviz/doxygen use. It was recreating the look of an existing
23 // graphic and thus is focused too much on appearance over
24 // functionality.
25 //
26
27 digraph G {
28     label = "Abstracted Architecture";
29
30     z [
31         label = "Resource Introspection",
32         shape = box,
33         style = filled,
34         fillcolor="#efefef:#bdbdbd",
35         gradientangle=270,
36         width=8
37     ];
38
39     subgraph cluster_0 {
40         label = "Connectivity Framework";
41         labeljust="l";
42
43         yy [
44             label = "Connectivity API",
45             shape = box,
46             style = filled,
47             color = "#4a7bbd",
48             fillcolor="#e6efff:#a5c5ff",
49             gradientangle=270,
50             width=8
51         ];
52
53         subgraph cluster_1 {
54             label = "Control layer";
55             style=filled;
56             color = "#4a7bbd";
57             fillcolor="#e6efff:#a5c5ff";
58             gradientangle=270;
59
60             node [
61                 style=filled,
62                 color="#9cbd52",
63                 fillcolor="#f7ffe6:#deffad",
64                 gradientangle=270,
65                 shape=box
66             ];
67
68             a0 [label="Network\nConfiguration"];
69             a1 [label="CoAP\nProtocol"];
70             a2 [label="Interface\nController"];
71
72             {rank = same a0 a1 a2}
73         }
74
75         subgraph cluster_2 {
76             label = "Transport Adapter";
77             style=filled;
78             color = "#4a7bbd"
79             fillcolor="#e6efff:#a5c5ff";
80             gradientangle=270;
81             node [
82                 style=filled,
83                 color="#9cbd52",
84                 fillcolor="#f7ffe6:#deffad",
85                 gradientangle=270,
86                 shape=box
87             ];
88
89             bb [label = "Common Adapter Interface", width=5];
90
91             b0 [label="IP\nAdapter"];
92             b1 [label="LE GATT\nAdapter"];
93             b2 [label="BT SPP\nAdapter"];
94             b3 [label="XXX\nAdapter"];
95
96             {rank = same b0 b1 b2 b3}
97         }
98
99         subgraph cluster_3 {
100             label = "Platform Adapter";
101             style=filled;
102             color = "#4a7bbd"
103             fillcolor="#e6efff:#a5c5ff";
104             gradientangle=270;
105             node [
106                 style=filled
107                 color="#7b5aa5"
108                 fillcolor="#f7e6f7:#c5b5ef";
109                 gradientangle=270;
110                 shape=box
111             ];
112
113             c0 [label="Ubuntu\nAdapter\n(ETH/WIFI/BT)"];
114             c1 [label="Android\nAdapter\n(WIFI/BLE/BT)"];
115             c2 [label="Tizen\nAdapter\n(WIFI/BLE/BT)"];
116             c3 [label="Arduino\nAdapter\n(ETH/WIFI/BLE)"];
117             c4 [label="Platform\n(6loWPAN)\n ", color="#f7e6f7"];
118
119             {rank = same c0 c1 c2 c3 c4}
120         }
121     }
122
123     {
124         node [
125             style = filled,
126             fillcolor="#efefef:#bdbdbd",
127             gradientangle=270,
128             shape=box
129         ];
130
131         d0 [label="Ubuntu"];
132         d1 [label="Android"];
133         d2 [label="Tizen"];
134         d3 [label="Arduino"];
135         d4 [label="????"];
136
137         {rank = same d0 d1 d2 d3 d4}
138     }
139
140     subgraph cluster_lgd {
141         label = "Legend";
142
143         node [
144             style = filled,
145             width=0.25,
146             height=0.25,
147             fixedsize=true,
148             shape=box,
149             gradientangle=270
150         ];
151
152         e0 [label=" ", color="#4a7bbd", fillcolor="#e6efff:#a5c5ff"];
153         e1 [label=" ", color="#9cbd52", fillcolor="#f7ffe6:#deffad"];
154         e2 [label=" ", color="#7b5aa5", fillcolor="#f7e6f7:#c5b5ef"];
155         e3 [label=" ", fillcolor="#efefef:#bdbdbd"];
156         e_dummy[shape=point, style=invis];
157
158         edge [penwidth=0,
159               arrowhead=none,
160               fontsize=10];
161         e0 -> e1 [label="CA Component    "];
162         e1 -> e2 [label="CA Module-platform independent    "];
163         e2 -> e3 [label="CA Module-platform specific    "];
164         e3 -> e_dummy [label="External"];
165
166         {rank = same e0 e1 e2 e3 e_dummy}
167     }
168
169     // In order to control placement of the sets of items in a
170     // top-to-bottom placement, invisible edges/arrows are used.
171     // This gives a logcial control for the physical appearance we want.
172     {
173         edge[style = invis];
174
175         // order groups to get top-to-bottom
176         z -> yy
177         yy -> {a0 a2}
178         a1 -> bb
179         {a0 a2} -> {b1 b2}
180         bb -> {b1 b2}
181         {b0 b1 b2 b3} -> c2
182         c0 -> d0
183         c1 -> d1
184         c2 -> d2
185         c3 -> d3
186         d0 -> e0
187         {d2} -> {e1 e2}
188         d4 -> e3
189
190         // order nodes left-to-right
191         a0 -> a1 -> a2
192         b0 -> b1 -> b2 -> b3
193         c0 -> c1 -> c2 -> c3 -> c4
194         d0 -> d1 -> d2 -> d3 -> d4
195         e0 -> e1 -> e2 -> e3
196     }
197 }