From 8c440ef470ce8a6ee7ac50eaccc3e2700da2ee0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20J=C3=A4ggi?= Date: Mon, 24 Feb 2020 14:43:57 +0100 Subject: [PATCH] ublox-gnss-config: split from gpsd layer, renamed, improved MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes to baud rate config script: + more appropriate name + only one service + baud rate detector is faster in special case + shellcheck conform - no longer creates default config file if file is missing, instead throws error BugzID: 60698 Signed-off-by: Tobias Jäggi --- recipes-connectivity/gpsd/config-gnss-tty.bb | 32 ------ .../gpsd/files/config-gnss-receiver.service | 12 --- .../gpsd/files/config-gnss-tty.service | 12 --- .../gpsd/files/config-gnss-tty.sh | 33 ------ .../.ublox-gnss-config.bb.swp | Bin 0 -> 12288 bytes .../files/gnss-receiver-save-state | 0 .../files/gnss.conf | 0 .../files/ublox-gnss-config.service | 12 +++ .../files/ublox-gnss-config.sh} | 100 ++++++++++++------ .../ublox-gnss-config.bb} | 14 +-- 10 files changed, 85 insertions(+), 130 deletions(-) delete mode 100644 recipes-connectivity/gpsd/config-gnss-tty.bb delete mode 100755 recipes-connectivity/gpsd/files/config-gnss-receiver.service delete mode 100755 recipes-connectivity/gpsd/files/config-gnss-tty.service delete mode 100644 recipes-connectivity/gpsd/files/config-gnss-tty.sh create mode 100644 recipes-connectivity/ublox-gnss-config/.ublox-gnss-config.bb.swp rename recipes-connectivity/{gpsd => ublox-gnss-config}/files/gnss-receiver-save-state (100%) rename recipes-connectivity/{gpsd => ublox-gnss-config}/files/gnss.conf (100%) create mode 100755 recipes-connectivity/ublox-gnss-config/files/ublox-gnss-config.service rename recipes-connectivity/{gpsd/files/config-gnss-receiver.sh => ublox-gnss-config/files/ublox-gnss-config.sh} (72%) rename recipes-connectivity/{gpsd/config-gnss-receiver.bb => ublox-gnss-config/ublox-gnss-config.bb} (73%) diff --git a/recipes-connectivity/gpsd/config-gnss-tty.bb b/recipes-connectivity/gpsd/config-gnss-tty.bb deleted file mode 100644 index 8b4c71a..0000000 --- a/recipes-connectivity/gpsd/config-gnss-tty.bb +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (C) 2020 Tobias Jäggi -# Released under the MIT license (see COPYING.MIT for the terms) -DESCRIPTION = "ttyS3 config service" -HOMEPAGE = "www.netmodule.com" -LICENSE = "MIT" -SECTION = "bsp/firmware" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302" - - -inherit systemd - -SRC_URI = " \ - file://config-gnss-tty.service \ - file://config-gnss-tty.sh \ - " - -S = "${WORKDIR}" - -SYSTEMD_SERVICE_${PN} = " \ - config-gnss-tty.service \ - " - -FILES_${PN} = "${systemd_unitdir}/system ${bindir}" - -do_install() { - install -d ${D}${systemd_unitdir}/system - install -m 644 ${WORKDIR}/config-gnss-tty.service ${D}${systemd_unitdir}/system/ - - install -d ${D}${bindir} - install -m 744 ${WORKDIR}/config-gnss-tty.sh ${D}${bindir}/config-gnss-tty - -} diff --git a/recipes-connectivity/gpsd/files/config-gnss-receiver.service b/recipes-connectivity/gpsd/files/config-gnss-receiver.service deleted file mode 100755 index b0face5..0000000 --- a/recipes-connectivity/gpsd/files/config-gnss-receiver.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=config baud rate on NEO-M8L -Before=config-gnss-tty.service - -[Service] - -Type=oneshot -ExecStart=/usr/bin/config-gnss-receiver -RemainAfterExit=no - -[Install] -WantedBy=multi-user.target diff --git a/recipes-connectivity/gpsd/files/config-gnss-tty.service b/recipes-connectivity/gpsd/files/config-gnss-tty.service deleted file mode 100755 index 8e10872..0000000 --- a/recipes-connectivity/gpsd/files/config-gnss-tty.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=config baud rate of tty used by gnss receiver -Before=gpsd.service - -[Service] - -Type=oneshot -ExecStart=/usr/bin/config-gnss-tty -RemainAfterExit=no - -[Install] -WantedBy=multi-user.target diff --git a/recipes-connectivity/gpsd/files/config-gnss-tty.sh b/recipes-connectivity/gpsd/files/config-gnss-tty.sh deleted file mode 100644 index 7d07c17..0000000 --- a/recipes-connectivity/gpsd/files/config-gnss-tty.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh - -# exit codes: -# 0: success -# 1: $CONFIG_FILE is missing (should have been created by config-gnss-receiver) -# 2: failed to set baud rate of $TTY_INTERFACE to $DESIRED_BAUD_RATE - -TTY_INTERFACE="/dev/ttyS3" -CONFIG_FILE="/etc/gnss.conf" - -# check if CONFIG_FILE exists -if ! test -f "$CONFIG_FILE"; then - # CONFIG_FILE doesn't exist - printf "config file missing\n" - exit 1 # $CONFIG_FILE is missing (should have been created by config-gnss-receiver) -fi - -# read $DESIRED_BAUD_RATE specified in $CONFIG_FILE -read -r DESIRED_BAUD_RATE <<< "$(awk '/br=(\d*)/{print $0}' < $CONFIG_FILE)" -read -r DESIRED_BAUD_RATE <<< "$(echo "$DESIRED_BAUD_RATE" | cut -d'=' -f 2)" - -# set baud rate -stty -F "$TTY_INTERFACE" speed "$DESIRED_BAUD_RATE" > /dev/null - -# verify baud rate -read -r TTYS3_BAUD_RATE <<< "$(stty -F "$TTY_INTERFACE" | awk '/speed .* baud;/{print $2}')" -if [ "$TTYS3_BAUD_RATE" == "$DESIRED_BAUD_RATE" ];then - printf "successfully set baud rate of %s to %s baud\n" "$TTY_INTERFACE" "$DESIRED_BAUD_RATE" - exit 0 # success -else - printf "failed to set baud rate of %s to %s\n" "$TTY_INTERFACE" "$DESIRED_BAUD_RATE" - exit 2 -fi diff --git a/recipes-connectivity/ublox-gnss-config/.ublox-gnss-config.bb.swp b/recipes-connectivity/ublox-gnss-config/.ublox-gnss-config.bb.swp new file mode 100644 index 0000000000000000000000000000000000000000..c982976855d896a8a71d7361df87596ffcfaea50 GIT binary patch literal 12288 zcmeI2%Z?jG6oyZN5D1tg0%eN|$4D~^w;j(V4iH4tZjvVBi`+94MOd`@Qnriq#p-I? zjI0TJo`A4s1L7HA!3M+|fW(Rg4*-ZAoU+>)H)Drv6P=QNwY%!nxqNjz(#Yjjj?4zD zX;%TqC4h_HS|7c+@z?p^ssJB5yx$jU;qjww9^HJr#eDU_++n#Md!vv?sVw(JYER*QtC%? zHs2Hdvoo6OK1p(9Lj<0A0voVhy;@OaUMal6UVHWMnXi}%BmzW$2oM1xKm>>Y5g-CY z;FLf*JO`iR>-lVIGkc!<&og_a2N56wM1Tko0U|&IhyW2F0z`la5CJ0a6cTWJfa@;- z{E1S(|1bXk|L!8d15^X0p`T_L~ zYK-clK198UdI9zKD*!*CQj|m;p`Jti^D@A%s4q|tQ6tnP)CJTAO6B^8%9jQaAOb{y z2oM1xKm>>Y5qJ^;ox0IBnsv)APTS2Bc7qlAL+KX)PJrPMkxZQ+V5N}l?d-7P^lqzj zr*3vm%Cn26coCJ0F;7a;8S@gFrW|eRC&g(HdrmN$@I|uTIv>Pexf$|CD>KpXDr_&? zEsv#odlYxJmiMs;v}CFb@kPvY4)jX7SFLPXzp}^7>xxE~mF- zJa4yEt1FToU`|WrXKq#)W@n4lb#(i%W2!P#Jt7+LM5HV`2Y`K3x96v%-@aoVHk4uJ zwm8*WjYg|!qm9wD414xvZI}mdhyL!3N^N`B@%i5M8n3usueMv+!V4;<@~0NiTLEsj8bd%B~4$)^>Ll@u*>+pa(lKX5F`8;9ifHRE50_^ula<(ZsXL_rB z&ure()Iu+w8>Ku6RYT@saDuQ> /dev/null + # verify baud rate + read -r TTYS3_BAUD_RATE <<< "$(stty -F "$TTY_INTERFACE" | awk '/speed .* baud;/{print $2}')" + if [ "$TTYS3_BAUD_RATE" == "$DESIRED_BAUD_RATE" ];then + return 0 + else + # baud rate configured on $TTY_INTERFACE is not matching baud rate specified in $CONFIG_FILE + return 1 + fi +} # start of main # check if script was launched by systemd @@ -127,24 +139,26 @@ else RESTART_GPSD=0 fi +# TODO: remove this hack in favour of a proper python environment +# hack to get pyserial working +PYTHONPATH=/usr/lib/python3.7/site-packages/ && export PYTHONPATH + # TODO: parse input args to display help which would explain usage of $CONFIG_FILE # check if CONFIG_FILE exists if ! test -f "$CONFIG_FILE"; then # CONFIG_FILE doesn't exist - printf "config file missing\n" - touch $CONFIG_FILE - echo -e "#\n# Define a baud rate to be used by the GNSS receiver\n# This file is part of ublox-gnss-config service\n#\n# Required fields:\n# br: baud rate to be used by the GNSS receiver\n#\n\n\n[default]\nbr=$DEFAULT_BAUD_RATE\n" > $CONFIG_FILE - printf "created default config file %s with %s baud\n" "$CONFIG_FILE" "$DEFAULT_BAUD_RATE" + printf "config file missing\\n" + exit 2 fi # check if SAVE_FILE exists if ! test -f "$SAVE_FILE"; then # SAVE_FILE doesn't exist - printf "save file missing\n" + printf "save file missing\\n" touch $SAVE_FILE echo 0 > $SAVE_FILE - printf "created save file %s\n" "$SAVE_FILE" + printf "created save file %s\\n" "$SAVE_FILE" fi # read $DESIRED_BAUD_RATE specified in $CONFIG_FILE @@ -161,13 +175,13 @@ do fi done if [ "$baud_rate_supported_flag" == "0" ];then - printf "baud rate specified in %s is not supported by receiver %s\n" "$CONFIG_FILE" "$DEVICE_NAME" - printf "supported baud rates are:\n" + printf "baud rate specified in %s is not supported by receiver %s\\n" "$CONFIG_FILE" "$DEVICE_NAME" + printf "supported baud rates are:\\n" for j in "${SUPPORTED_BAUD_RATES[@]}" do printf "%s " "$j" done - printf "\n" + printf "\\n" exit 5 # baud rate specified in $CONFIG_FILE not supported by $DEVICE_NAME fi @@ -177,20 +191,30 @@ if br_receiver="$(poll_baud_rate_receiver "$DESIRED_BAUD_RATE")";then if [ "$br_receiver" == "$DESIRED_BAUD_RATE" ];then # baud rate of receiver is matching baud rate specified in CONFIG_FILE if [ "$(cat "$SAVE_FILE")" == "1" ];then - printf "baud rate of %s is already at %s baud\n" "$DEVICE_NAME" "$DESIRED_BAUD_RATE" - printf "configuration is saved in flash of %s\n" "$DEVICE_NAME" + printf "baud rate of %s is already at %s baud\\n" "$DEVICE_NAME" "$DESIRED_BAUD_RATE" + printf "configuration is saved in flash of %s\\n" "$DEVICE_NAME" + + if set_baud_rate_tty;then + printf "set baud rate of %s to %s baud\\n" "$TTY_INTERFACE" "$DESIRED_BAUD_RATE" + else + printf "failed to set baud rate of %s to %s\\n" "$TTY_INTERFACE" "$DESIRED_BAUD_RATE" + exit 6 + fi + # script can exit exit 0 # baud rate of receiver is already matching $DESIRED_BAUD_RATE else # TODO: this could be way faster by telling the detector which baud rate to use since we already know it - printf "baud rate of %s is already at %s baud\n" "$DEVICE_NAME" "$DESIRED_BAUD_RATE" - printf "configuration is not saved in flash of %s\n" "$DEVICE_NAME" + printf "baud rate of %s is already at %s baud\\n" "$DEVICE_NAME" "$DESIRED_BAUD_RATE" + printf "configuration is not saved in flash of %s\\n" "$DEVICE_NAME" + # hint for the detector + PRESELECTION_BAUD_RATES=("$br_receiver") fi else - printf "baud rates are not matching\n" + printf "baud rates are not matching\\n" fi else - printf "read failed\n" + printf "read failed\\n" fi # determine current baud rate of receiver @@ -198,20 +222,20 @@ args=("2" "${PRESELECTION_BAUD_RATES[@]}") detect_baud_rate "${args[@]}" if [ "$?" == "1" ];then # retry with more baud rates and more tries per baud rate - printf "retrying\n" + printf "retrying\\n" # maybe a time out increase would also work when dealing with lower baud rates? args=("$MAX_ALLOWED_RETRIES" "${SUPPORTED_BAUD_RATES[@]}") detect_baud_rate "${args[@]}" if [ "$?" == "1" ];then - printf "baud rate not detected, even after retry\n" + printf "baud rate not detected, even after retry\\n" exit 1 # unable to detect baud rate fi fi -printf "detected baud rate of %s is %s baud\n" "$DEVICE_NAME" "$DETECTED_BAUD_RATE" +printf "detected baud rate of %s is %s baud\\n" "$DEVICE_NAME" "$DETECTED_BAUD_RATE" # upgrade to $DESIRED_BAUD_RATE baud new_baud_rate_set_flag=0 -for i in $(eval echo {0.."$MAX_ALLOWED_RETRIES"}) +for i in $(eval "echo {0..$MAX_ALLOWED_RETRIES}") do set_baud_rate_receiver "$DETECTED_BAUD_RATE" "$DESIRED_BAUD_RATE" @@ -231,15 +255,15 @@ do done if [ "$new_baud_rate_set_flag" == "0" ];then - printf "baud rate of %s is not set to %s baud or unable to verify, retried %s times\n" "$DEVICE_NAME" "$DESIRED_BAUD_RATE" "$i" + printf "baud rate of %s is not set to %s baud or unable to verify, retried %s times\\n" "$DEVICE_NAME" "$DESIRED_BAUD_RATE" "$i" exit 3 # baud rate not set to $DESIRED_BAUD_RATE or verifiying baud rate failed else - printf "baud rate of %s is set to desired %s baud, it took %s retries\n" "$DEVICE_NAME" "$DESIRED_BAUD_RATE" "$i" + printf "baud rate of %s is set to desired %s baud, it took %s retries\\n" "$DEVICE_NAME" "$DESIRED_BAUD_RATE" "$i" fi # save config to flash config_saved_flag=0 -for i in $(eval echo {0.."$MAX_ALLOWED_RETRIES"}) +for i in $(eval "echo {0..$MAX_ALLOWED_RETRIES}") do if save_receiver_config;then config_saved_flag=1 @@ -251,15 +275,21 @@ do done if [ "$config_saved_flag" == "0" ];then - printf "saving to flash was not successful, retried %s times\n" "$i" + printf "saving to flash was not successful, retried %s times\\n" "$i" exit 4 # saving to flash failed else - printf "saving to flash was successful, it took %s retries\n" "$i" + printf "saving to flash was successful, it took %s retries\\n" "$i" +fi + +if set_baud_rate_tty;then + printf "set baud rate of %s to %s baud\\n" "$TTY_INTERFACE" "$DESIRED_BAUD_RATE" +else + printf "failed to set baud rate of %s to %s\\n" "$TTY_INTERFACE" "$DESIRED_BAUD_RATE" + exit 6 fi # TODO: verify or error handling if [ "$RESTART_GPSD" -eq "1" ]; then - config-gnss-tty # call config-gnss-tty to set baud rate of ttyS3 to the baud rate specified in $CONFIG_FILE before launching gpsd systemctl start gpsd fi diff --git a/recipes-connectivity/gpsd/config-gnss-receiver.bb b/recipes-connectivity/ublox-gnss-config/ublox-gnss-config.bb similarity index 73% rename from recipes-connectivity/gpsd/config-gnss-receiver.bb rename to recipes-connectivity/ublox-gnss-config/ublox-gnss-config.bb index 55a4c47..f0d1c5d 100644 --- a/recipes-connectivity/gpsd/config-gnss-receiver.bb +++ b/recipes-connectivity/ublox-gnss-config/ublox-gnss-config.bb @@ -9,8 +9,8 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda inherit systemd SRC_URI = " \ - file://config-gnss-receiver.service \ - file://config-gnss-receiver.sh \ + file://ublox-gnss-config.service \ + file://ublox-gnss-config.sh \ file://gnss.conf \ file://gnss-receiver-save-state \ " @@ -18,17 +18,17 @@ SRC_URI = " \ S = "${WORKDIR}" SYSTEMD_SERVICE_${PN} = " \ - config-gnss-receiver.service \ + ublox-gnss-config.service \ " FILES_${PN} = "${systemd_unitdir}/system ${bindir} ${localstatedir} ${sysconfdir}" do_install() { install -d ${D}${systemd_unitdir}/system - install -m 644 ${WORKDIR}/config-gnss-receiver.service ${D}${systemd_unitdir}/system/ + install -m 644 ${WORKDIR}/ublox-gnss-config.service ${D}${systemd_unitdir}/system/ install -d ${D}${bindir} - install -m 744 ${WORKDIR}/config-gnss-receiver.sh ${D}${bindir}/config-gnss-receiver + install -m 744 ${WORKDIR}/ublox-gnss-config.sh ${D}${bindir}/ublox-gnss-config install -d ${D}${sysconfdir} install -m 644 ${WORKDIR}/gnss.conf ${D}${sysconfdir}/gnss.conf @@ -37,4 +37,6 @@ do_install() { install -m 644 ${WORKDIR}/gnss-receiver-save-state ${D}${localstatedir}/gnss-receiver-save-state } -RDEPENDS_${PN} = "gpsd" +RDEPENDS_${PN} = "gpsd \ + bash \ + "