1*2168bbd0SJagpal Singh Gill#!/bin/bash 2*2168bbd0SJagpal Singh Gill 3*2168bbd0SJagpal Singh Gillset -e 4*2168bbd0SJagpal Singh Gillset -u 5*2168bbd0SJagpal Singh Gillset -o pipefail 6*2168bbd0SJagpal Singh Gill 7*2168bbd0SJagpal Singh Gillfunction cleanup() { 8*2168bbd0SJagpal Singh Gill echo -e "\nCaught EXIT signal. Terminating background processes." 9*2168bbd0SJagpal Singh Gill jobs -p | xargs -r kill 2>/dev/null 10*2168bbd0SJagpal Singh Gill echo "Cleanup complete." 11*2168bbd0SJagpal Singh Gill} 12*2168bbd0SJagpal Singh Gilltrap cleanup EXIT 13*2168bbd0SJagpal Singh Gill 14*2168bbd0SJagpal Singh GillDEFAULT_COUNT=2 15*2168bbd0SJagpal Singh GillMODBUS_SERVER="/usr/libexec/phosphor-modbus/mock-modbus-server" 16*2168bbd0SJagpal Singh Gill 17*2168bbd0SJagpal Singh Gillif [ "$#" -eq 0 ]; then 18*2168bbd0SJagpal Singh Gill echo "No count provided. Starting with default count of $DEFAULT_COUNT servers and serial port pairs." 19*2168bbd0SJagpal Singh Gill SERVER_COUNT=$DEFAULT_COUNT 20*2168bbd0SJagpal Singh Gillelif [ "$#" -eq 1 ]; then 21*2168bbd0SJagpal Singh Gill SERVER_COUNT=$1 22*2168bbd0SJagpal Singh Gill if ! [[ "$SERVER_COUNT" =~ ^[0-9]+$ ]]; then 23*2168bbd0SJagpal Singh Gill echo "Error: Count must be a non-negative integer." >&2 24*2168bbd0SJagpal Singh Gill exit 1 25*2168bbd0SJagpal Singh Gill fi 26*2168bbd0SJagpal Singh Gill echo "Starting $SERVER_COUNT $MODBUS_SERVER instances and virtual port pairs." 27*2168bbd0SJagpal Singh Gillelse 28*2168bbd0SJagpal Singh Gill echo "Error: Too many arguments." >&2 29*2168bbd0SJagpal Singh Gill echo "Usage: $0 [<count>]" >&2 30*2168bbd0SJagpal Singh Gill exit 1 31*2168bbd0SJagpal Singh Gillfi 32*2168bbd0SJagpal Singh Gill 33*2168bbd0SJagpal Singh Gill# Create the necessary directory structure for serial ports 34*2168bbd0SJagpal Singh Gillecho "Creating directory /dev/serial/by-path" 35*2168bbd0SJagpal Singh Gillmkdir -p /dev/serial/by-path 36*2168bbd0SJagpal Singh Gill 37*2168bbd0SJagpal Singh Gill# Remove old symlinks to prevent conflicts 38*2168bbd0SJagpal Singh Gillecho "Removing old symlinks from /dev/serial/by-path/..." 39*2168bbd0SJagpal Singh Gillrm -f /dev/serial/by-path/platform-1e6a1000.usb-usb-0:1:1.*-port0 40*2168bbd0SJagpal Singh Gill 41*2168bbd0SJagpal Singh Gill# Loop to create virtual serial port pairs and start modbus servers 42*2168bbd0SJagpal Singh Gillecho "Starting $SERVER_COUNT virtual serial port pairs and $MODBUS_SERVER instances." 43*2168bbd0SJagpal Singh Gillfor (( i=0; i<SERVER_COUNT; i++ )); do 44*2168bbd0SJagpal Singh Gill TTY_USB="/dev/ttyUSB$i" 45*2168bbd0SJagpal Singh Gill TTY_V="/dev/ttyV$i" 46*2168bbd0SJagpal Singh Gill 47*2168bbd0SJagpal Singh Gill # Start the socat process for this pair 48*2168bbd0SJagpal Singh Gill echo " - Starting socat for $TTY_USB and $TTY_V." 49*2168bbd0SJagpal Singh Gill socat -v -x -d -d pty,link="$TTY_USB",rawer,echo=0,b115200 pty,rawer,echo=0,link="$TTY_V",b115200 & 50*2168bbd0SJagpal Singh Gill 51*2168bbd0SJagpal Singh Gill # Wait a moment for socat to create the devices 52*2168bbd0SJagpal Singh Gill sleep 0.5 53*2168bbd0SJagpal Singh Gill 54*2168bbd0SJagpal Singh Gill echo " - Creating symlink for $TTY_USB..." 55*2168bbd0SJagpal Singh Gill ln -sf $TTY_USB "/dev/serial/by-path/platform-1e6a1000.usb-usb-0:1:1.$i-port0" 56*2168bbd0SJagpal Singh Gill 57*2168bbd0SJagpal Singh Gill # Start the $MODBUS_SERVER instance 58*2168bbd0SJagpal Singh Gill echo " - Starting $MODBUS_SERVER instance $i." 59*2168bbd0SJagpal Singh Gill $MODBUS_SERVER $i & 60*2168bbd0SJagpal Singh Gilldone 61*2168bbd0SJagpal Singh Gill 62*2168bbd0SJagpal Singh Gillecho "All background processes have been started." 63*2168bbd0SJagpal Singh Gillecho "Press Ctrl+C to terminate all processes gracefully." 64*2168bbd0SJagpal Singh Gill 65*2168bbd0SJagpal Singh Gill# Keep the script running to manage background jobs 66*2168bbd0SJagpal Singh Gillwait 67