driver spb16ch: corretto inizializzazione e pilotaggio schede, aumentato prestazioni di esecuzione script staticizzando in fase di init gli identificativi delle board utilizzate in modo che che non vengano ricalcolati ad ogni esecuzione successiva dello script

This commit is contained in:
lejubila
2017-09-16 17:48:19 +02:00
parent 2f2cfdc720
commit 6afdb24d82
6 changed files with 79 additions and 49 deletions

View File

@@ -496,8 +496,8 @@ NO_SEND_IDENTIFIER=0
# #
# Stato da assegnare ai gpio per abilitare/disabilitare le schede spb16ch # Stato da assegnare ai gpio per abilitare/disabilitare le schede spb16ch
SPB16CH_GPIO_ON=0 SPB16CH_GPIO_ON=1
SPB16CH_GPIO_OFF=1 SPB16CH_GPIO_OFF=0
# Gpio di per gestire l'abilitazione/disabilitazione delle chede spb16ch # Gpio di per gestire l'abilitazione/disabilitazione delle chede spb16ch
SPB16CH1_GPIO=17 # Physical 11 - wPi 0 SPB16CH1_GPIO=17 # Physical 11 - wPi 0

View File

@@ -10,8 +10,6 @@ function drv_spb16ch_board_enable {
local board_id=$1 local board_id=$1
drv_spb16ch_board_disable_all
local a=SPB16CH"$board_id"_GPIO local a=SPB16CH"$board_id"_GPIO
local gpio_n=${!a} local gpio_n=${!a}
@@ -20,6 +18,22 @@ function drv_spb16ch_board_enable {
} }
#
# Disabilita una scheda spb16ch
# $1 identificativo scheda da disabilitare
#
function drv_spb16ch_board_disable {
local board_id=$1
local a=SPB16CH"$board_id"_GPIO
local gpio_n=${!a}
echo "** drv_spb16ch_board_disable() - Disable board: $board_id - gpio $gpio_n"
$GPIO -g write $gpio_n $SPB16CH_GPIO_OFF
}
# #
# Disabilita tutte le schede # Disabilita tutte le schede
# #
@@ -39,3 +53,28 @@ function drv_spb16ch_board_disable_all {
} }
#
# Memorizza in un file di appoggio gli id delle schede spb16ch utilizzate
#
function drv_spb16ch_boards_id_store {
echo "${SPB16CH_USED_ID[@]}" > "$SPB16CH_BOARD_ID_STORE_FILE"
}
#
# Recupera gli di delle schede spb16ch utilizzate leggendoli dal file di appoggio
# $1 identificativi schede da salvare
#
function drv_spb16ch_boards_id_load {
if [ -f "$SPB16CH_BOARD_ID_STORE_FILE" ]; then
for board_id in $(cat "$SPB16CH_BOARD_ID_STORE_FILE")
do
SPB16CH_USED_ID+=("$board_id")
done
else
log_write "spb16ch: file $SPB16CH_BOARD_ID_STORE_FILE not found: remember to run 'piGarden init' to generate the file"
fi
}

View File

@@ -155,4 +155,6 @@ SPB16CH_RELE_MAP[128]="77|1|128|8"
declare -g -a SPB16CH_USED_ID declare -g -a SPB16CH_USED_ID
SPB16CH_USED_ID=() SPB16CH_USED_ID=()
# Nome del file dove memorizzare gli id delle schede utilizzate
declare -g SPB16CH_BOARD_ID_STORE_FILE
SPB16CH_BOARD_ID_STORE_FILE="$STATUS_DIR/spb16ch_board_id_store"

View File

@@ -5,8 +5,10 @@ function drv_spb16ch_init {
declare -a address_used declare -a address_used
address_used=() address_used=()
SPB16CH_USED_ID=()
local address="" local address=""
local board_id=""
# Cerca gli indirizzi delle schede spb16ch utilizzate per i rele utilizzati per le zone # Cerca gli indirizzi delle schede spb16ch utilizzate per i rele utilizzati per le zone
for i in $(seq $EV_TOTAL) for i in $(seq $EV_TOTAL)
@@ -18,8 +20,10 @@ function drv_spb16ch_init {
local rele_data=${SPB16CH_RELE_MAP[$rele_id]} local rele_data=${SPB16CH_RELE_MAP[$rele_id]}
if [[ ! -z $rele_data ]]; then if [[ ! -z $rele_data ]]; then
local address_num=${rele_data:0:2} local address_num=${rele_data:0:2}
local board_id=${rele_data:9:1}
if [[ ! " ${address_used[@]} " =~ " ${address_num} " ]]; then if [[ ! " ${address_used[@]} " =~ " ${address_num} " ]]; then
address_used+=("$address_num") address_used+=("$address_num")
SPB16CH_USED_ID+=("$board_id")
fi fi
fi fi
fi fi
@@ -33,24 +37,17 @@ function drv_spb16ch_init {
local rele_data=${SPB16CH_RELE_MAP[$rele_id]} local rele_data=${SPB16CH_RELE_MAP[$rele_id]}
if [[ ! -z $rele_data ]]; then if [[ ! -z $rele_data ]]; then
local address_num=${rele_data:0:2} local address_num=${rele_data:0:2}
local board_id=${rele_data:9:1}
if [[ ! " ${address_used[@]} " =~ " ${address_num} " ]]; then if [[ ! " ${address_used[@]} " =~ " ${address_num} " ]]; then
address_used+=("$address_num") address_used+=("$address_num")
SPB16CH_USED_ID+=("$board_id")
fi fi
fi fi
fi fi
done done
# Esegue l'inizializzazione delle schede spb16ch trovate # Memorizza gli id delle schede usate
local address_num drv_spb16ch_boards_id_store
for address_num in ${address_used[@]}
do
echo "****** Inizializzazione address_num = $address_num *******"
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num 0
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 25 255 0
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num 1
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 25 255 0
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num 0
done
# Esegue l'inizializzazione dei gpio che gestiscono l'abilitazine/disabilitazione delle schede # Esegue l'inizializzazione dei gpio che gestiscono l'abilitazine/disabilitazione delle schede
local board_id local board_id
@@ -62,6 +59,24 @@ function drv_spb16ch_init {
echo "******** Number used board: $board_id - inizializzazione gpio $gpio_n" echo "******** Number used board: $board_id - inizializzazione gpio $gpio_n"
$GPIO -g mode $gpio_n out $GPIO -g mode $gpio_n out
done done
drv_spb16ch_board_disable_all
# Esegue l'inizializzazione delle schede spb16ch trovate
local address_num=""
local board_num=""
for i in ${!address_used[@]}
do
address_num=${address_used[$i]}
board_num=${SPB16CH_USED_ID[$i]}
drv_spb16ch_board_enable $board_num
echo "****** Inizializzazione address_num = $address_num - board_num = $board_num *******"
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num 0
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 25 255 0
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num 1
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py 25 255 0
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num 0
drv_spb16ch_board_disable $board_id
done
} }

View File

@@ -35,6 +35,8 @@ function drv_spb16ch_rele_open {
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num $channel_num $DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num $channel_num
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py $address_num $rele_num 0 $DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py $address_num $rele_num 0
drv_spb16ch_board_disable $board_id
} }
# #
@@ -64,5 +66,7 @@ function drv_spb16ch_rele_close {
$DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num $channel_num $DIR_SCRIPT/drv/spb16ch/scripts/mux_channel.py $address_num $channel_num
$DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py $address_num $rele_num 1 $DIR_SCRIPT/drv/spb16ch/scripts/gpo_init.py $address_num $rele_num 1
drv_spb16ch_board_disable $board_id
} }

View File

@@ -4,39 +4,9 @@
# #
function drv_spb16ch_setup { function drv_spb16ch_setup {
# Cerca gli identificativi delle schede spb16ch utilizzate per i rele utilizzati per le zone drv_spb16ch_boards_id_load
for i in $(seq $EV_TOTAL) echo "*********** drv_spb16ch_setup: identificativi schede caricati: ${SPB16CH_USED_ID[@]}"
do
local a=EV"$i"_GPIO
local gpio="${!a}"
if [[ "$gpio" == drv:spb16ch:* ]]; then
local rele_id=`echo $gpio | $CUT -d':' -f3,3`
local rele_data=${SPB16CH_RELE_MAP[$rele_id]}
if [[ ! -z $rele_data ]]; then
local board_id=${rele_data:9:1}
if [[ ! " ${SPB16CH_USED_ID[@]} " =~ " ${board_id} " ]]; then
SPB16CH_USED_ID+=("$board_id")
fi
fi
fi
done
# Cerca gli identificativi schede spb16ch utilizzate che gestiscono l'alimentazione delle elettrovalvole bistabili
for gpio in "$SUPPLY_GPIO_1" "$SUPPLY_GPIO_2"
do
if [[ "$gpio" == drv:spb16ch:* ]]; then
local rele_id=`echo $gpio | $CUT -d':' -f3,3`
local rele_data=${SPB16CH_RELE_MAP[$rele_id]}
if [[ ! -z $rele_data ]]; then
local board_id=${rele_data:9:1}
if [[ ! " ${SPB16CH_USED_ID[@]} " =~ " ${board_id} " ]]; then
SPB16CH_USED_ID+=("$board_id")
fi
fi
fi
done
echo "Identificativi board spb16ch utilizzate: ${SPB16CH_USED_ID[@]}"
} }