diff --git a/applications/apertif/commissioning/central_commands_unb2.sh b/applications/apertif/commissioning/central_commands_unb2.sh new file mode 100644 index 0000000000000000000000000000000000000000..e5456fe139c4d838dd1ac29cab77e2066ce072be --- /dev/null +++ b/applications/apertif/commissioning/central_commands_unb2.sh @@ -0,0 +1,210 @@ +#!/bin/bash +############################################################################### +# +# Copyright (C) 2017 +# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +# +# 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/>. +# +############################################################################### + + +# Author: +# . Daniel van der Schuur +# . Boudewijn Hut +# . Pieter Donker +# Purpose: +# . Run UniBoard2 commands on local correlator LCU to start data streams +# Usage: +# . called by main.py + +############################################################################### +# Parse arguments +############################################################################### +APP=$1 # apertif, arts_sc1, arts_sc4 +TELS=$2 +UNBS2=$3 +OPTIONS=$4 +POL=$5 +MAC="False" + +if [ -z "$6" ]; then + echo "MAC argument not supplied" +elif [ "$6" == "True" ]; then + MAC="True" +fi + +echo central_commands.sh: Using MAC : $MAC +echo central_commands.sh: Application : $APP +echo central_commands.sh: Telescopes : $TELS +echo central_commands.sh: UniBoards2 : $UNBS2 +echo central_commands.sh: Options : $OPTIONS +echo central_commands.sh: Polarisation : $POL + + +FAC_DESIGN=arts_unb2b_sc4_fwd-r19573 +IMAGE=/home/donker/images/${FAC_DESIGN}.rbf +# Select correct firmware image for this application +if [[ "$APP" == "apertif-ag" ]] || [[ "$APP" == "apertif-dev" ]]; then + IMAGE=/home/hargreaves/arts_unb2b_sc3_single-r19606.rbf +fi + + +#Extract the RBF file names (without path and extention) +IMAGE_FILENAME=$(basename "$IMAGE") +IMAGE_RBFNAME="${IMAGE_FILENAME%.*}" + +############################################################################### +# Destination MAC/IP adresses of output streams +############################################################################### + +# Cluster node 1 used for single UNB testing +ARTS001_40G_ETH_DST_MAC=14038001611793 #0x0cc47a197411 +#ARTS001_40G_IP_DST_ADDR=3232237569 # 192.168.8.1 +ARTS001_40G_IP_DST_ADDR=3232258049 # 192.168.8.1 + +# Arrays for addresses of all cluster nodes +ARTSCLUSTER_40G_ETH_DST_MAC=(14038001611793 14038001611885 14038001611664 14038006166662 14038001611870 \ + 14038006166622 14038001611665 14038001611669 14038001611661 14038001611666 \ + 14038001611668 14038001611703 14038001611836 14038006166667 14038006166666 \ + 14038001611788 14038001611790 14038006166671 14038001611853 14038001611672 \ + 14038001611690 14038001611800 14038001611657 14038001611794 14038001611659 \ + 14038006166661 14038001611841 14038006166670 14038001611799 14038001611801 \ + 14038001611846 14038001611656 14038001611851 14038001611716 14038001611827 \ + 14038006166745 14038006166683 14038001611688 14038001611674 14038001611804) + +ARTSCLUSTER_40G_ETH_DST_IP=(3232258049 3232258050 3232258051 3232258052 3232258053 \ + 3232258054 3232258055 3232258056 3232258057 3232258058 \ + 3232258059 3232258060 3232258061 3232258062 3232258063 \ + 3232258064 3232258065 3232258066 3232258067 3232258068 \ + 3232258069 3232258070 3232258071 3232258072 3232258073 \ + 3232258074 3232258075 3232258076 3232258077 3232258078 \ + 3232258079 3232258080 3232258081 3232258082 3232258083 \ + 3232258084 3232258085 3232258086 3232258087 3232258088) + +if [ "$MAC" == "True" ]; then + echo central_commands.sh: Returning environment variables + return 0 +fi + +############################################################################### +# Compare required application images against images stored in flash +############################################################################### +# Get memory map of current images +python $UPE/peripherals/util_system_info.py --unb2 $UNBS2 --pn2 0:3 -n 4 + +# Revert to facory image so we can reflash/load the user firmware +python $UPE/peripherals/util_wdi.py --unb2 $UNBS2 --pn2 0:3 -n 0 + +# Wait until the factory images are online +sleep 14 # It takes at least a second + +if [[ "$IMAGE_RBFNAME" != "$FAC_DESIGN" ]]; then + + # Get memory map of factory image + python $UPE/peripherals/util_system_info.py --unb2 $UNBS2 --pn2 0:3 -n 4 + + # Load all firmware images from flash + python $UPE/peripherals/util_epcs.py --unb2 $UNBS2 --pn2 0:3 -n 8 & + + # Wait until the user images are online + sleep 14 + + # Get memory map of the user images + python $UPE/peripherals/util_system_info.py --unb2 $UNBS2 --pn2 0:3 -n 4 + + # Print the user firmware image design names + python $UPE/peripherals/util_system_info.py --unb2 $UNBS2 --pn2 0:3 -n 2 +fi + +# Get number of required images actually running on the FPGAs +ACT_IMAGE=$(python $UPE/peripherals/util_system_info.py --unb2 $UNBS2 --pn2 0:3 -n 2 | grep -c $IMAGE_RBFNAME) +echo -n "Image $IMAGE_RBFNAME found running on $ACT_IMAGE processing nodes: " + +NOF_UNIBOARDS2=$(echo $UNBS2, | grep -o ',' | wc -l) +NOF_REQUIRED_MATCHING_IMAGES=$(($NOF_UNIBOARDS2 * 4)) + +if [ "$OPTIONS" == "noflash" ]; then + echo Continuing without processing node reflash due to noflash option + FLASH=FALSE +elif [ "$ACT_IMAGE" == "$NOF_REQUIRED_MATCHING_IMAGES" ]; then + echo Continuing without processing node reflash + FLASH=FALSE +else + echo Firmware images will be rewritten to flash + FLASH=TRUE +fi + +############################################################################### +# Flash and reload application images if needed +############################################################################### +if [ "$FLASH" == "TRUE" ]; then + # Revert to facory image so we can reflash/load the user firmware + python $UPE/peripherals/util_wdi.py --unb2 $UNBS2 --pn2 0:3 -n 0 + + # Wait until the factory images are online + sleep 14 # It takes at least a second + + # Get memory map of factory image + python $UPE/peripherals/util_system_info.py --unb2 $UNBS2 --pn2 0:3 -n 4 + + # Write image to flash if needed + python $UPE/peripherals/util_epcs.py --unb2 $UNBS2 --pn2 0:3 -n 4 -s $IMAGE + + # Load the application images + + # Wait until PPS + python $UPE/peripherals/util_ppsh.py --unb2 $UNBS2 --bn 0 -n 4 + + # Load all dish firmware images from flash + python $UPE/peripherals/util_epcs.py --unb2 $UNBS2 --pn2 0:3 -n 8 & + + # Wait until the user images are online + sleep 14 + + # Get memory map of the user images + python $UPE/peripherals/util_system_info.py --unb2 $UNBS2 --pn2 0:3 -n 4 + + # Print the user firmware image design names + python $UPE/peripherals/util_system_info.py --unb2 $UNBS2 --pn2 0:3 -n 2 +fi + + +############################################################################### +# Set destination MAC/IP/Ports +############################################################################### +UNBS2_LOOP="${UNBS2//,/ }" + +stream_string_ip=`echo ${ARTSCLUSTER_40G_ETH_DST_IP[@]}` +stream_string_ip=${stream_string//[ ]/,} + +stream_string_mac=`echo ${ARTSCLUSTER_40G_ETH_DST_MAC[@]}` +stream_string_mac=${stream_string//[ ]/,} + +if [ ${APP:0:8} == "apertif-" ]; then # set output ip/mac if apertif-ag or apertif-dev + for UNB in $UNBS2_LOOP + do + # Send each CB to its own cluster node + for NODENO in {0..3} + do + echo "set output tab demo for $NODEMO" + python $SVN/RadioHDL/trunk/applications/arts/designs/arts_unb2b_sc3/tb/python/pi_arts_unb2b_sc3_output_tab.py --unb2 ${UNB} --pn2 ${NODENO} --stream 0:39 -n 1 -r ${stream_string_ip} + python $SVN/RadioHDL/trunk/applications/arts/designs/arts_unb2b_sc3/tb/python/pi_arts_unb2b_sc3_output_tab.py --unb2 ${UNB} --pn2 ${NODENO} --stream 0:39 -n 2 -r ${stream_string_mac} + done + done +fi + + + diff --git a/applications/apertif/commissioning/central_status_unb2.sh b/applications/apertif/commissioning/central_status_unb2.sh new file mode 100755 index 0000000000000000000000000000000000000000..ce100cfec93cd97dd0f2b62059c9301e0f44fa83 --- /dev/null +++ b/applications/apertif/commissioning/central_status_unb2.sh @@ -0,0 +1,94 @@ +#!/bin/bash +############################################################################### +# +# Copyright (C) 2017 +# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/> +# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands +# +# 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/>. +# +############################################################################### + +# Author: +# . Daniel van der Schuur +# . Pieter Donker +# Purpose: +# . Check the status of the central UniBoards2 +# Usage: +# . Run after central_commands.sh, with the same arguments + +APP=$1 # apertif, arts_sc1, arts_sc4 +TELS=$2 +UNBS=$3 +OPTIONS=$4 +POL=$5 +MAC="False" + +if [ -z "$6" ]; then + echo "MAC argument not supplied" +elif [ "$6" == "True" ]; then + MAC="True" +fi + +echo central_status_unb2.sh: Using MAC : $MAC +echo central_status_unb2.sh: Application : $APP +echo central_status_unb2.sh: Telescopes : $TELS +echo central_status_unb2.sh: UniBoards2 : $UNBS +echo central_status_unb2.sh: Options : $OPTIONS +echo central_status_unb2.sh: Polarisation : $POL + +NOF_UNIBOARDS=$(echo $UNBS, | grep -o ',' | wc -l) + +if [ "$OPTIONS" == "precheck" ]; then + ############################################################################### + # Pre (command sequence) check + ############################################################################### + echo "central_status_unb2.sh: Performing pre-check" + echo "central_status_unb2.sh: Targeted UniBoards:" $UNBS + + # Replace the commas in the lists with spaces + UNBS_NOCOMMAS=${UNBS//,/ } + + for UNB in $UNBS_NOCOMMAS; do + timeout 0.2 ping -c 1 10.99.$UNB.1 >/dev/null 2>&1 && UNBS_ONLINE+=$UNB' ' + done + + if [ -z "$UNBS_ONLINE" ]; then + echo central_status_unb2.sh: Error - all passed central UniBoards offline + else + # Replace the spaces in the lists with commas + UNBS_ONLINE=${UNBS_ONLINE// /,} + # Remove the last comma character rom the lists + UNBS_ONLINE=${UNBS_ONLINE::-1} + + echo "central_status_unb2.sh: Online UniBoards2:" $UNBS_ONLINE + + if [ "$UNBS_ONLINE" == "$UNBS" ]; then + echo central_status_unb2.sh: Passed - all passed UniBoards2 online + else + echo central_status_unb2.sh: Error - one or more Uniboards2 offline + fi + fi +else + ############################################################################### + # Post (command sequence) check + ############################################################################### + echo "central_status_unb2.sh: Performing post-check" + UNB_FACTORY=$(python $UPE/peripherals/util_system_info.py --unb2 $UNBS --pn2 0:3 -n 2 | grep -c arts_unb2b_sc4_fwd) + if [ "$UNB_FACTORY" == "0" ]; then + echo central_status_unb2.sh: Passed - Found the application images online + else + echo central_status_unb2.sh: Passed - one or more unb2 FPGAs is running arts_unb2b_sc4_fwd + fi +fi