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
+}