//
//  Licensed to the Apache Software Foundation (ASF) under one or more
//  contributor license agreements.  See the NOTICE file distributed with
//  this work for additional information regarding copyright ownership.
//  The ASF licenses this file to You under the Apache License, Version 2.0
//  (the "License"); you may not use this file except in compliance with
//  the License.  You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.
//
:imagesdir: ../../images/

== Basic Building Blocs of a Driver / Protocol

The general pipeline for a Protocol looks like the following:

[ditaa,driver-anatomy]
....
+-------------------------------------+
|  Upstream (e.g. PLC4X API           :
+-------------------------------------+
                  |
                  :
                  v
+-------------------------------------+
|  PLC4X Optimizer                    :
|  Possibly collapse requests         |
+-------------------------------------+
                  |
                  :
                  v
+-------------------------------------+
|  Protocol L1                        |
|  Req. to (generated) Message Objects|
+-------------------------------------+
                  |
                  |
                  v
+-------------------------------------+
|  Protocol L2                        |
|  Generated Objects to bytes         |
+-------------------------------------+
                  |
                  |
                  v
+-------------------------------------+
|  Downstream (e.g. Socket for I/O)   :
+-------------------------------------+
....

A driver has the task to assemble the pipeline for the protocol(s).