/' µ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 . '/ /'### INTRO ##################################################################'/ @startuml title **µRtWare**\nurtServiceInit()\n /'### PARAMETERS & RETURN ####################################################'/ note -- **service** : urt_service_t* -- The service to initialize. Must not be ""NULL"". -- **id** : urt_serviceid_t -- Unique, numeric identifier of the service. -- **callback** : urt_servicefunc_t* -- Callabck function to be executed by this service. Must not be ""NULL"". ==== -- **return** : urt_status_t -- Returns ""URT_STATUS_OK"" on success. Returns ""URT_STATUS_SERVICE_DUPLICATE"" if another service with the same identifier already exists. endnote /'### PROCEDURE ##############################################################'/ start :initialize members; note * **next** ← ""NULL"" * **id** ← id * urtMutexInit(**lock**) * **callback** ← callback .. URT_CFG_RPC_PROFILING == true .. * **minDuration** ← 0xF..F * **maxDuration** ← 0 * **sumDurations** ← 0 * **numCalls** ← 0 * **numTimeouts** ← 0 endnote :lock core; :access first service; while (Service is not ""NULL""\nand service ID is lower?) is (yes) :proceed to next service; endwhile (no) if (Current service is ""NULL""?) then (yes) :append self to core's list of services; :unlock core; stop note Returns ""URT_STATUS_OK"": endnote elseif (Current service ID is greater?) then (yes) :insert self in front of current service; :unlock core; stop note Returns ""URT_STATUS_OK"": endnote else (no) :unlock core; stop note Returns ""URT_STATUS_SERVICE_DUPLICATE"": endnote endif /'### OUTRO ##################################################################'/ @enduml