From cbabae84b2836a19588f2a69641bd54ec2551c23 Mon Sep 17 00:00:00 2001
From: Bob Mottram <bob@robotics.uk.to>
Date: Sun, 23 Oct 2016 10:41:04 +0100
Subject: [PATCH] wifi retries

---
 src/freedombone-wifi | 37 ++++++++++++++++++++++++++++++++++---
 1 file changed, 34 insertions(+), 3 deletions(-)

diff --git a/src/freedombone-wifi b/src/freedombone-wifi
index 014c111d8..671063809 100755
--- a/src/freedombone-wifi
+++ b/src/freedombone-wifi
@@ -47,6 +47,7 @@ WIFI_NETWORKS_FILE=~/${PROJECT_NAME}-wifi.cfg
 NETWORKS_INTERACTIVE=
 WIFI_DISABLE=
 WAIT_SEC=
+WIFI_MAX_RETRIES=5
 
 IFACE=
 IFACE_SECONDARY=
@@ -69,6 +70,7 @@ function show_help {
     echo $'     --networks [filename]         File containing wifi networks'
     echo $'     --createnetworks [filename]   Create file containing wifi networks'
     echo $'     --disable [yes/no]            Disable wifi'
+    echo $'     --retries [number]            Maximum number of retries'
     echo ''
     exit 0
 }
@@ -99,6 +101,10 @@ do
             shift
             WIFI_SSID=${1}
             ;;
+        --retries)
+            shift
+            WIFI_MAX_RETRIES=${1}
+            ;;
         -p|--pass|--passphrase)
             shift
             WIFI_PASSPHRASE=${1}
@@ -160,9 +166,34 @@ if [ ${WIFI_DISABLE} ]; then
 fi
 
 if [ -f ${WIFI_NETWORKS_FILE} ]; then
-    networks_from_file
-    wpa_cli status
-    exit 0
+    wifi_established=
+    wifi_retry_ctr=0
+    while [ ! $wifi_established ]; do
+        if [ ${wifi_retry_ctr} -gt 0 ]; then
+            wpa_action ${WIFI_INTERFACE} stop
+            wpa_cli -i ${WIFI_INTERFACE} terminate
+        fi
+        networks_from_file
+        # allow some time for a connection to be established
+        sleep 5
+        # has it worked?
+        if [[ $(wifi_is_running) != "0" ]]; then
+            wifi_established=1
+            break
+        fi
+        # has the limit of retries been reached?
+        wifi_retry_ctr=$((wifi_retry_ctr+1))
+        if [ ${wifi_retry_ctr} -ge ${WIFI_MAX_RETRIES} ]; then
+            break
+        fi
+    done
+    if [ $wifi_established ]; then
+        wpa_cli status
+        exit 0
+    else
+        echo $'Wifi could not be started'
+        exit 4
+    fi
 fi
 
 if [ ! ${WIFI_SSID} ]; then
-- 
GitLab