1#!/bin/bash
2
3CMD=$1
4SLED_INDEX=$2
5
6CHIP_NUM=0
7USB2_SEL0_A_PIN_OFFSET=0
8USB2_SEL1_A_PIN_OFFSET=0
9USB2_SEL0_B_PIN_OFFSET=0
10USB2_SEL1_B_PIN_OFFSET=0
11
12init_gpio_pin_info()
13{
14    local pin_info
15
16    read -r -a pin_info < <(gpiofind USB2_SEL0_A)
17    CHIP_NUM="${pin_info[0]}"
18    USB2_SEL0_A_PIN_OFFSET="${pin_info[1]}"
19    read -r -a pin_info < <(gpiofind USB2_SEL1_A)
20    USB2_SEL1_A_PIN_OFFSET="${pin_info[1]}"
21    read -r -a pin_info < <(gpiofind USB2_SEL0_B)
22    USB2_SEL0_B_PIN_OFFSET="${pin_info[1]}"
23    read -r -a pin_info < <(gpiofind USB2_SEL1_B)
24    USB2_SEL1_B_PIN_OFFSET="${pin_info[1]}"
25}
26
27set_usbmux_gpio()
28{
29    gpioset "$CHIP_NUM" \
30    "$USB2_SEL0_A_PIN_OFFSET"="$1" \
31    "$USB2_SEL1_A_PIN_OFFSET"="$2" \
32    "$USB2_SEL0_B_PIN_OFFSET"="$3" \
33    "$USB2_SEL1_B_PIN_OFFSET"="$4"
34}
35
36print_help()
37{
38    echo "Usage:"
39    echo "    bletchley-usbmux-util off"
40    echo "    bletchley-usbmux-util on <SLED_INDEX>"
41    echo ""
42    echo "SLED_INDEX: 1 - 6"
43    echo ""
44}
45
46usb_mux_off()
47{
48    set_usbmux_gpio 1 1 1 1
49}
50
51usb_mux_sled1()
52{
53    usb_mux_off
54    sleep 2
55    set_usbmux_gpio 0 0 1 1
56}
57
58usb_mux_sled2()
59{
60    usb_mux_off
61    sleep 2
62    set_usbmux_gpio 1 0 1 1
63}
64
65usb_mux_sled3()
66{
67    usb_mux_off
68    sleep 2
69    set_usbmux_gpio 0 1 1 1
70}
71
72usb_mux_sled4()
73{
74    usb_mux_off
75    sleep 2
76    set_usbmux_gpio 1 1 0 0
77}
78
79usb_mux_sled5()
80{
81    usb_mux_off
82    sleep 2
83    set_usbmux_gpio 1 1 1 0
84}
85
86usb_mux_sled6()
87{
88    usb_mux_off
89    sleep 2
90    set_usbmux_gpio 1 1 0 1
91}
92
93init_gpio_pin_info
94
95if [ "$CMD" == "off" ]; then
96    usb_mux_off
97elif [ "$CMD" == "on" ]; then
98    if [ "$SLED_INDEX" -eq 1 ]; then
99        usb_mux_sled1
100    elif [ "$SLED_INDEX" -eq 2 ]; then
101        usb_mux_sled2
102    elif [ "$SLED_INDEX" -eq 3 ]; then
103        usb_mux_sled3
104    elif [ "$SLED_INDEX" -eq 4 ]; then
105        usb_mux_sled4
106    elif [ "$SLED_INDEX" -eq 5 ]; then
107        usb_mux_sled5
108    elif [ "$SLED_INDEX" -eq 6 ]; then
109        usb_mux_sled6
110    else
111        echo "Invalid SLED index: $SLED_INDEX"
112        print_help
113        exit 1
114    fi
115    sleep 1
116else
117    echo "Invalid command: $CMD"
118    print_help
119    exit 1
120fi
121
122exit 0
123