/'
µRtWare is a lightweight publish/subscribe middleware for real-time
applications. It was developed as part of the software habitat for the
Autonomous Mini Robot [1] (AMiRo) but can be used for other purposes as well.

Copyright (C) 2018..2020  Thomas Schöpping et al.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
'/

/'### INTRO ##################################################################'/

@startuml

title **µRtWare**\nOverview\n

!include ./functions.iuml

/'### ENTITIES ###############################################################'/

!startsub ENTITIES

$module("Configuration") {
  !includesub config.uml!ENTITIES
}

$module("Primitives") {
  !includesub primitives.uml!ENTITIES
}

$module("OSAL") {
  !includesub osal.uml!ENTITIES
}

$module("Middleware") {
  !includesub urtware.uml!ENTITIES
}

!endsub

/'### DEPENDENCIES & LAYOUT ##################################################'/

!startsub DEPENDENCIES

!includesub config.uml!DEPENDENCIES

!includesub primitives.uml!DEPENDENCIES
urt_nodestage_t ..> urt_config
urt_topicid_t ..> urt_config
urt_serviceid_t ..> urt_config
urt_delay_t ..> urt_config

!includesub osal.uml!DEPENDENCIES
urt_osCondvar_t ..> urt_delay_t
urt_osThread_t ..> urt_delay_t
urt_osThread_t ..> urt_status_t
urt_osTimer_t ..> urt_delay_t
urt_osTimer_t ..> urt_status_t
urt_events ..> urt_delay_t
urt_events ..> urt_status_t

!includesub urtware.uml!DEPENDENCIES
urt_core_t "1" *-- "1" urt_osEventSource_t
urt_core_t "1" *-- "1" urt_osMutex_t
urt_core_t "1" *-- "1" urt_status_t
urt_core_t ..> urt_nodestage_t
urt_core_t ..> urt_topicid_t
urt_core_t ..> urt_serviceid_t
urt_node_t "1" o-- "1" urt_osThread_t
urt_node_t "1" *-- "1" urt_nodestage_t
urt_node_t "1" *-- "1" urt_osEventListener_t
urt_node_t "0..*" o-- "1" urt_osThreadFunction_t
urt_node_t ..> urt_status_t
urt_nodeSetupCallback_t ..> urt_osEventMask_t
urt_nodeLoopCallback_t ..> urt_osEventMask_t
urt_publisher_t ..> urt_config
urt_publisher_t ..> urt_status_t
urt_publisher_t ..> urt_delay_t
urt_topic_t "1" *-- "1" urt_topicid_t
urt_topic_t "1" *-- "1" urt_osMutex_t
urt_topic_t "1" *-- "1" urt_osEventSource_t
urt_topic_t "1" *-- "1" urt_osCondvar_t
urt_topic_t ..> urt_config
urt_topic_t "1" *-- "0,1" urt_osTimer_t
urt_topic_t ..> urt_status_t
urt_message_t "1" *-- "1" urt_osTime_t
urt_message_t ..> urt_config
urt_message_t ..> urt_status_t
urt_basesubscriber_t "1" *-- "1" urt_osEventListener_t
urt_basesubscriber_t "1" *-- "1" urt_osTime_t
urt_basesubscriber_t ..> urt_config
urt_basesubscriber_t ..> urt_status_t
urt_nrtsubscriber_t "1" *-- "0,2" urt_delay_t
urt_nrtsubscriber_t ..> urt_config
urt_nrtsubscriber_t ..> urt_status_t
urt_srtsubscriber_t "1" *-- "0,1" urt_usefulness_f
urt_srtsubscriber_t "1" *-- "0,2" urt_delay_t
urt_srtsubscriber_t ..> urt_config
urt_srtsubscriber_t ..> urt_status_t
urt_frtsubscriber_t "1" *-- "0..4" urt_delay_t
urt_frtsubscriber_t ..> urt_config
urt_frtsubscriber_t ..> urt_status_t
urt_hrtsubscriber_t "1" *-- "0..5" urt_delay_t
urt_hrtsubscriber_t "1" *-- "1" urt_osTimer_t
urt_hrtsubscriber_t ..> urt_config
urt_hrtsubscriber_t ..> urt_status_t
urt_baserequest_t "1" *-- "1" urt_osMutex_t
urt_baserequest_t "1" *-- "1" urt_osTime_t
urt_baserequest_t "1" *-- "1" urt_osEventSource_t
urt_baserequest_t "1" *-- "1" urt_osEventListener_t
urt_nrtrequest_t "1" *-- "0,2" urt_delay_t
urt_nrtrequest_t ..> urt_config
urt_nrtrequest_t ..> urt_status_t
urt_srtrequest_t "1" *-- "0,1" urt_delay_t
urt_srtrequest_t ..> urt_config
urt_srtrequest_t ..> urt_status_t
urt_srtrequest_t ..> urt_usefulness_f
urt_frtrequest_t "1" *-- "0..4" urt_delay_t
urt_frtrequest_t ..> urt_config
urt_frtrequest_t ..> urt_status_t
urt_hrtrequest_t "1" *-- "0..4" urt_delay_t
urt_hrtrequest_t "1" *-- "0,1" urt_osTimer_t
urt_hrtrequest_t ..> urt_config
urt_hrtrequest_t ..> urt_status_t
urt_service_t "1" *-- "1" urt_serviceid_t
urt_service_t "1" *-- "1" urt_osMutex_t
urt_service_t "1" *-- "1" urt_osEventSource_t
urt_service_t "1" *-- "1" urt_osEventListener_t
urt_service_t ..> urt_config
urt_service_t ..> urt_status_t

!endsub

/'### OUTRO ##################################################################'/

@enduml

