You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ag...@apache.org on 2021/05/23 22:57:35 UTC
[incubator-nuttx-apps] branch master updated: system/psmq: update
to v0.2.1
This is an automated email from the ASF dual-hosted git repository.
aguettouche pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git
The following commit(s) were added to refs/heads/master by this push:
new 19e2ffe system/psmq: update to v0.2.1
19e2ffe is described below
commit 19e2ffe37e094d47ae60d985944d52b9577f82be
Author: Michał Łyszczek <mi...@bofc.pl>
AuthorDate: Sun May 23 22:36:32 2021 +0200
system/psmq: update to v0.2.1
This release breaks API and ABI by making use of library way
easier and more safe. No app in a nuttx tree uses psmq, so
nothing in-tree will be broken by this change.
Updated license files to Apache 2.0.
Tested on nucleo-f091
Signed-off-by: Michał Łyszczek <mi...@bofc.pl>
---
system/psmq/Kconfig | 44 +++++++++++++++++--------------------
system/psmq/Make.defs | 39 ++++++++++----------------------
system/psmq/Makefile | 61 +++++++++++++++++++--------------------------------
system/psmq/README.md | 24 ++++++++++----------
4 files changed, 68 insertions(+), 100 deletions(-)
diff --git a/system/psmq/Kconfig b/system/psmq/Kconfig
index d3d8178..48e162d 100644
--- a/system/psmq/Kconfig
+++ b/system/psmq/Kconfig
@@ -3,14 +3,17 @@
# see the file kconfig-language.txt in the NuttX tools repository.
#
+comment "psmq requires SYSTEM_EMBEDLOG and !DISABLE_MQUEUE"
+ depends on DISABLE_MQUEUE || !SYSTEM_EMBEDLOG
+
menuconfig SYSTEM_PSMQ
- tristate "psmq"
+ bool "psmq"
default n
depends on !DISABLE_MQUEUE && SYSTEM_EMBEDLOG
---help---
psmq is tool set which allows IPC communication in publish/subscribe way
created on top of posix messege queue. Full documentation is available
- at: https://psmq.kurwinet.pl (despite the domain, it is in english).
+ at: https://psmq.bofc.pl (despite the domain, it is in english).
Library is licensed under BSD 2-clause license. See LICENSE file in
the downloaded code for license details.
@@ -28,30 +31,23 @@ config PSMQ_MAX_CLIENTS
about 12 bytes (may vary depending on architecture) for each
client.
-config PSMQ_PAYLOAD_MAX
+config PSMQ_MSG_MAX
int "Max size of payload"
- default 8
- ---help---
- Defines maximum size of payload that can be sent via psmq.
-
- Both PSMQ_TOPIC_MAX and PSMQ_PAYLOAD_MAX have direct impact on size
- of internal message structures that are copied each time message
- is sent. If you set PSMQ_PAYLOAD_MAX to, let's say 20, and you are
- sending message with payload that takes only 2 byte, then 20 bytes
- will get copied anyway. Same rule applies to topics.
-
-config PSMQ_TOPIC_MAX
- int "Max length of topic"
- default 15
+ range 6 2147483647
+ default 24
---help---
- Defines maximum length any topic can be. That includes first ´/´
- character, but does not include terminating null character. So
- if this is set to 3, then topics "/0", "/01" will be valid, but
- "/012" will be too long.
-
- Library will use PSMQ_TOPIC_MAX + 1 as an array size for topic.
- This means, to prevent unnecessary paddings, use values like 7, or 15
- or 31.
+ Defines maximum size of message that can be sent via psmq.
+ Message consists of topic and payload. Topic is always
+ null-terminated after which payload follows. This allows
+ for some flexibility, ie if PSMQ_MSG_MAX was be 10, then
+ topic could be 3 bytes long and payload 7, but also
+ topic could take 9 bytes and payload only 1.
+
+ This value has direct impact on runtime memory usage by
+ psmq as this increases size of struct that is used when
+ allocating memory for client. This has no impact on
+ number of bytes that are sent because only actual data
+ is sent over mqueue.
config PSMQD_PRIORITY
int "psmqd broker task priority"
diff --git a/system/psmq/Make.defs b/system/psmq/Make.defs
index 2e5c06d..fcf7eff 100644
--- a/system/psmq/Make.defs
+++ b/system/psmq/Make.defs
@@ -1,35 +1,20 @@
############################################################################
# apps/system/psmq/Make.defs
#
-# Copyright (C) 2019 Michał Łyszczek. All rights reserved.
-# Author: Michał Łyszczek <mi...@bofc.pl>
+# 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
#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
+# http://www.apache.org/licenses/LICENSE-2.0
#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# 3. Neither the name NuttX nor the names of its contributors may be
-# used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
+# 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.
#
############################################################################
diff --git a/system/psmq/Makefile b/system/psmq/Makefile
index b8d9920..258d315 100644
--- a/system/psmq/Makefile
+++ b/system/psmq/Makefile
@@ -1,35 +1,20 @@
############################################################################
# apps/system/psmq/Makefile
#
-# Copyright (C) 2019 Michał Łyszczek. All rights reserved.
-# Author: Michał Łyszczek <mi...@bofc.pl>
+# 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
#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
+# http://www.apache.org/licenses/LICENSE-2.0
#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# 3. Neither the name NuttX nor the names of its contributors may be
-# used to endorse or promote products derived from this software
-# without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
-# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
-# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
+# 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.
#
############################################################################
@@ -40,9 +25,9 @@ UNPACK = tar -xzf
PACKEXT = .tar.gz
NXTOOLSDIR = $(APPDIR)/tools
-PSMQ_URL = https://distfiles.kurwinet.pl/psmq
-PSMQ_VERSION = 0.1.0
-PSMQ_SRC_SHA256 = 52dce7d6fcbf84243e11afdb953eea6a6eb405fd81c8e71bc556bb63090e1284
+PSMQ_URL = https://distfiles.bofc.pl/psmq
+PSMQ_VERSION = 0.2.1
+PSMQ_SRC_SHA256 = b029fa06752ad7dce89f6b899f27a08a1bd1ee0a4e1d9df407274f0322bf1946
PSMQ_EXT = tar.gz
PSMQ_SOURCES = psmq-$(PSMQ_VERSION)
PSMQ_TARBALL = $(PSMQ_SOURCES).$(PSMQ_EXT)
@@ -55,21 +40,17 @@ CSRCS = $(PSMQ_SOURCES)/lib/psmq.c \
$(PSMQ_SOURCES)/src/broker.c \
$(PSMQ_SOURCES)/src/cfg.c \
$(PSMQ_SOURCES)/src/globals.c \
- $(PSMQ_SOURCES)/src/topic-list.c
+ $(PSMQ_SOURCES)/src/topic-list.c \
+ $(PSMQ_SOURCES)/src/utils.c
# compile-time options from Kconfig
CFLAGS += -DPSMQ_MAX_CLIENTS=$(CONFIG_PSMQ_MAX_CLIENTS)
-CFLAGS += -DPSMQ_PAYLOAD_MAX=$(CONFIG_PSMQ_PAYLOAD_MAX)
-CFLAGS += -DPSMQ_TOPIC_MAX=$(CONFIG_PSMQ_TOPIC_MAX)
# build psmq as library and disable standalone applications (apps will
# still be compiled but into shared library rather than standalone application
CFLAGS += -DPSMQ_LIBRARY=1
CFLAGS += -DPSMQ_STANDALONE=0
-# psmq cannot be damonized in nuttx
-CFLAGS += -DPSMQ_ENABLE_DAEMON=0
-
# nuttx has no opterr variable
CFLAGS += -DPSMQ_NO_OPTERR=1
@@ -116,8 +97,12 @@ $(PSMQ_SOURCES): $(PSMQ_TARBALL)
$(Q) $(UNPACK) $<
$(Q) touch $@
-create_includes:
- $(Q) $(CP) $(PSMQ_SOURCES)/inc/psmq.h $(APPDIR)/include/system
+$(PSMQ_SOURCES)/inc/psmq.h: $(PSMQ_SOURCES)/inc/psmq.h.in
+ @echo "Generating: $@"
+ $(Q) sed -e "s/@PSMQ_MSG_MAX@/$(CONFIG_PSMQ_MSG_MAX)/" $< > $@
+
+create_includes: $(PSMQ_SOURCES)/inc/psmq.h
+ $(Q) $(CP) $< $(APPDIR)/include/system
context:: $(PSMQ_SOURCES)
$(Q) $(MAKE) create_includes
diff --git a/system/psmq/README.md b/system/psmq/README.md
index 1846cce..0e0d585 100644
--- a/system/psmq/README.md
+++ b/system/psmq/README.md
@@ -4,23 +4,26 @@
to implement publish/subscribe way of inter-process communication on top of
POSIX message queue.
-Manuals, source code and more info at: https://psmq.kurwinet.pl
+Manuals, source code and more info at: https://psmq.bofc.pl
Little demo using `psmqd` broker, `psmq_pub` and `psmq_sub`:
Start broker and make it log to file
```
-nsh> psmqd -b/brok -p/sd/psmqd/psmqd.log
+nsh> psmqd -b/brok -p/sd/psmqd/psmqd.log &
```
-Start subscribe thread that will read all messages send on `/can/*` topic
+Start subscribe thread that will read all messages send on `/can/*` and
+`/adc/*` topic, and dump all readings to file
```
-nsh> psmq_sub -n/sub -b/brok -t/can/* -o/sd/psmq-sub/can.log
+nsh> psmq_sub -n/sub -b/brok -t/can/* -t/adc/* -o/sd/psmq-sub/can.log &
n/connected to broker /brok
-n/subscribed to /can/*
+n/subscribed to: /can/*
+n/subscribed to: /adc/*
n/start receiving data
+n/reply timeout set 100
```
Publish some messages
@@ -39,14 +42,13 @@ nsh> cat /sd/psmq-sub/can.log
```
```
-[1970-01-01 00:00:53] topic: /can/engine/rpm, priority: 0, paylen: 3, payload:
-[1970-01-01 00:00:53] 0x0000 35 30 00 50.
-[1970-01-01 00:00:58] topic: /can/room/10/temp, priority: 0, paylen: 3, payload:
-[1970-01-01 00:00:58] 0x0000 32 33 00 23.
+[2021-05-23 17:53:59] p:0 l: 3 /can/engine/rpm 50
+[2021-05-23 17:53:59] p:0 l: 3 /adc/volt 30
+[2021-05-23 17:53:59] p:0 l: 3 /can/room/10/temp 23
```
-As you can see `/adc/volt` and `/pwm/fan1/speed` haven't been received by
-subscribe thread.
+As you can see `/pwm/fan1/speed` hasn't been received by subscribe thread,
+since we didn't subscribe to it.
Content: