ASR_BASE

Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/utils/usbmode/Makefile b/package/utils/usbmode/Makefile
new file mode 100644
index 0000000..33362d3
--- /dev/null
+++ b/package/utils/usbmode/Makefile
@@ -0,0 +1,74 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=usbmode
+PKG_RELEASE:=1
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL=$(PROJECT_GIT)/project/usbmode.git
+PKG_SOURCE_DATE:=2022-02-24
+PKG_SOURCE_VERSION:=3c8595a4e75510f58fa231b145d5506768dcafc9
+PKG_MIRROR_HASH:=e8a40ed3b849c3b9ba9c9823a4631731dcf261d3529f173ff5973f7cc08add15
+CMAKE_INSTALL:=1
+
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=
+
+PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
+
+PKG_DATA_VERSION:=20191128
+PKG_DATA_URL:=http://www.draisberghof.de/usb_modeswitch
+PKG_DATA_PATH:=usb-modeswitch-data-$(PKG_DATA_VERSION)
+PKG_DATA_FILENAME:=$(PKG_DATA_PATH).tar.bz2
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Download/data
+  FILE:=$(PKG_DATA_FILENAME)
+  URL:=$(PKG_DATA_URL)
+  HASH:=3f039b60791c21c7cb15c7986cac89650f076dc274798fa242231b910785eaf9
+endef
+$(eval $(call Download,data))
+
+define Package/usb-modeswitch
+  SECTION:=utils
+  CATEGORY:=Utilities
+  DEPENDS:=+libubox +libblobmsg-json +libusb-1.0
+  TITLE:=USB mode switching utility
+endef
+
+define Build/Prepare
+	$(Build/Prepare/Default)
+	tar xvfj $(DL_DIR)/$(PKG_DATA_FILENAME) -C $(PKG_BUILD_DIR)
+	#remove devices with unsupported modes
+	for filevar in $(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/* ; \
+	do \
+		if grep -q -E '(Quanta|Option|Blackberry|Pantech)Mode' "$$$$filevar" ; then \
+			rm "$$$$filevar" ; \
+		fi \
+	done
+	cp ./data/* $(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/
+	#in order to keep the Lede GIT repo free of filenames with colons,
+	#we name the files xxxx-yyyy
+	# and rename here after copying to the build directory
+	for filevar in $(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/*-* ; \
+	do \
+		[ -f "$$$$filevar" ] || continue ; \
+		FILENAME=$$$$(basename $$$$filevar) ; \
+		NEWNAME=$$$${FILENAME//-/:} ; \
+		rm "$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/$$$$NEWNAME" ; \
+		mv "$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/$$$$FILENAME" "$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/$$$$NEWNAME" ; \
+	done
+endef
+
+define Package/usb-modeswitch/install
+	$(INSTALL_DIR) $(1)/etc/hotplug.d/usb $(1)/etc/init.d $(1)/sbin
+	perl $(PKG_BUILD_DIR)/convert-modeswitch.pl \
+		$(PKG_BUILD_DIR)/$(PKG_DATA_PATH)/usb_modeswitch.d/* \
+		> $(1)/etc/usb-mode.json
+	$(INSTALL_CONF) ./files/usbmode.hotplug $(1)/etc/hotplug.d/usb/20-usb_mode
+	$(INSTALL_BIN) ./files/usbmode.init $(1)/etc/init.d/usbmode
+	$(CP) $(PKG_INSTALL_DIR)/usr/sbin/usbmode $(1)/sbin/
+endef
+
+$(eval $(call BuildPackage,usb-modeswitch))
diff --git a/package/utils/usbmode/data/12d1-1f16 b/package/utils/usbmode/data/12d1-1f16
new file mode 100644
index 0000000..beda01f
--- /dev/null
+++ b/package/utils/usbmode/data/12d1-1f16
@@ -0,0 +1,2 @@
+# Vodafone K5150
+MBIM=1
diff --git a/package/utils/usbmode/data/3426-1f01 b/package/utils/usbmode/data/3426-1f01
new file mode 100644
index 0000000..cd5b7e7
--- /dev/null
+++ b/package/utils/usbmode/data/3426-1f01
@@ -0,0 +1,4 @@
+# Huawei E5785
+TargetVendor=0x3426
+TargetProduct=0x14db
+HuaweiNewMode=1
diff --git a/package/utils/usbmode/files/usbmode.hotplug b/package/utils/usbmode/files/usbmode.hotplug
new file mode 100644
index 0000000..b238894
--- /dev/null
+++ b/package/utils/usbmode/files/usbmode.hotplug
@@ -0,0 +1 @@
+/etc/init.d/usbmode start
diff --git a/package/utils/usbmode/files/usbmode.init b/package/utils/usbmode/files/usbmode.init
new file mode 100755
index 0000000..43e8ec5
--- /dev/null
+++ b/package/utils/usbmode/files/usbmode.init
@@ -0,0 +1,12 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2013 OpenWrt.org
+
+START=20
+USE_PROCD=1
+
+start_service()
+{
+	procd_open_instance
+	procd_set_param command "/sbin/usbmode" -s
+	procd_close_instance
+}