diff --git a/usb-gadget-service/install_gt.sh b/usb-gadget-service/install_gt.sh index 01a611d..5ba7ed3 100755 --- a/usb-gadget-service/install_gt.sh +++ b/usb-gadget-service/install_gt.sh @@ -55,6 +55,7 @@ install -D -m 0644 schemes/iio_ncm.scheme /usr/local/etc/gt/adi/ install -D -m 0644 schemes/iio_acmx2_rndis.scheme /usr/local/etc/gt/adi/ install -D -m 0744 scripts/iiod_context.sh /usr/local/bin/ +install -D -m 0744 scripts/read-sdp-eeprom /usr/local/bin/ install -D -m 0744 scripts/usb_gadget.sh /usr/local/bin/ install -D -m 0644 udev/99-udc.rules /etc/udev/rules.d/ diff --git a/usb-gadget-service/scripts/iiod_context.sh b/usb-gadget-service/scripts/iiod_context.sh index 0b6f384..0884a3a 100644 --- a/usb-gadget-service/scripts/iiod_context.sh +++ b/usb-gadget-service/scripts/iiod_context.sh @@ -59,6 +59,18 @@ if [ "$?" = "0" ] ; then done fi +# If this is a SDP/ARDZ board, capture the data +if [ -z "$BOARD" ]; then + for f in $(find /sys/ -name eeprom); do + sdp_board_info=$(read-sdp-eeprom $f 2>/dev/null) + if [ -n "$sdp_board_info" ]; then + BOARD=$(echo "$sdp_board_info" | grep "^name:" | cut -d':' -f2 | sed 's/^[[:space:]]*//') + SERIAL=$(echo "$sdp_board_info" | grep "^id:" | cut -d':' -f2 | sed 's/^[[:space:]]*//') + VENDOR="Analog Devices" + fi + done +fi + # If you are a Raspberry Pi HAT, add that if [ -d "/sys/firmware/devicetree/base/hat" ] ; then BOARD=$(sanitize "/sys/firmware/devicetree/base/hat/product_id") diff --git a/usb-gadget-service/scripts/read-sdp-eeprom b/usb-gadget-service/scripts/read-sdp-eeprom new file mode 100755 index 0000000..1384bbc --- /dev/null +++ b/usb-gadget-service/scripts/read-sdp-eeprom @@ -0,0 +1,76 @@ +#!/usr/bin/env python3 + +""" +ADI SDP hardware board information read and parse module + +Based on: +https://github.com/analogdevicesinc/precision-converters-library/blob/3cd2cd98f9c2acce9d8cbd695239fd613003074f/board_info/board_info.c +""" + +import struct +import sys + +DATA_MAX_LEN = 256 +LEGACY_BOARD_ID_LEN = 18 +HEADER_LEN = 10 +HEADER_ID_LEN = 6 +HEADER_DATA_LEN_INDEX = 8 +RECORD_FOOTER_LEN = 3 + +try: + eeprom_path = sys.argv[1] +except IndexError: + print(f"usage: {sys.argv[0]} ", file=sys.stderr) + exit(1) + +debug = "--debug" in sys.argv + +with open(eeprom_path, "rb") as f: + header = f.read(HEADER_LEN) + + if header[:HEADER_ID_LEN] != b"ADISDP": + print(f"Bad header '{header}'", file=sys.stderr) + exit(1) + + data_len = header[HEADER_DATA_LEN_INDEX] - HEADER_LEN + + if data_len > DATA_MAX_LEN: + print(f"Unexpected data len: {data_len}", file=sys.stderr) + exit(1) + + data = f.read(data_len) + + if debug: + print(f"data: {data}") + +board = {} +index = 0 + +while index < data_len: + rec_type, rec_len = struct.unpack_from("