mirror of
				https://github.com/Telecominfraproject/wlan-ap.git
				synced 2025-10-31 02:17:58 +00:00 
			
		
		
		
	Compare commits
	
		
			51 Commits
		
	
	
		
			v2.9.0-rc1
			...
			v2.9.0-rc5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | b3493bcf55 | ||
|   | 2b767fb84f | ||
|   | 560e9f326d | ||
|   | 3da1530926 | ||
|   | abcf6dd1fd | ||
|   | 2bcedafe0d | ||
|   | 71fc375a72 | ||
|   | 95bfa265ee | ||
|   | c0cf066900 | ||
|   | 6462efd6bc | ||
|   | 0bce7dc7a4 | ||
|   | a3f0fb23b7 | ||
|   | b9d20e083c | ||
|   | 725899248a | ||
|   | c8685f2352 | ||
|   | 7d10d77e35 | ||
|   | 96c391eaac | ||
|   | c700795895 | ||
|   | 8bcb4c2063 | ||
|   | fce075bd2c | ||
|   | ea95356ebd | ||
|   | 8111566f35 | ||
|   | c952b34858 | ||
|   | 792e3a8a2e | ||
|   | ae75067938 | ||
|   | 81b66ad44b | ||
|   | e193250291 | ||
|   | dc0dae6284 | ||
|   | 7c535de60d | ||
|   | 26192989cd | ||
|   | 317aaadcbd | ||
|   | c670733ea5 | ||
|   | f92617f24a | ||
|   | 337a68cf1d | ||
|   | e09633fc2a | ||
|   | d838391850 | ||
|   | d59e58b794 | ||
|   | ee7bf9671a | ||
|   | c4f0f367bc | ||
|   | 5f649ea1f4 | ||
|   | 397c6df34a | ||
|   | 7a37e9bf0b | ||
|   | e4ed881dd7 | ||
|   | 9aff26b7fb | ||
|   | 5603442a37 | ||
|   | 8a86ae3b7d | ||
|   | 9997af10a5 | ||
|   | 5fec90d4ca | ||
|   | f1a56edd09 | ||
|   | 3f03cfa7c4 | ||
|   | f34db0bb24 | 
							
								
								
									
										2
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/build-dev.yml
									
									
									
									
										vendored
									
									
								
							| @@ -21,7 +21,7 @@ jobs: | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c4', 'cig_wf196', 'cig_wf610d', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'liteon_wpx8324', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'indio_um-305ac', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'indio_um-310ax-v1', 'indio_um-510axp-v1', 'indio_um-510axm-v1', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'meshpp_s618_cp03', 'meshpp_s618_cp01', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4', 'x64_vm', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650' ] | ||||
|         target: ['actiontec_web7200', 'cig_wf188n', 'cig_wf194c4', 'cig_wf196-us', 'cig_wf196-ca', 'cig_wf610d', 'cig_wf660a', 'cig_wf808', 'cybertan_eww622-a1', 'edgecore_eap101', 'edgecore_eap102', 'edgecore_eap104', 'liteon_wpx8324', 'edgecore_ecs4100-12ph', 'edgecore_ecw5211', 'edgecore_ecw5410', 'edgecore_oap100', 'edgecore_ssw2ac2600', 'edgecore_spw2ac1200', 'edgecore_spw2ac1200-lan-poe', 'hfcl_ion4', 'hfcl_ion4xe', 'hfcl_ion4xi', 'hfcl_ion4x', 'hfcl_ion4x_2', 'indio_um-305ac', 'indio_um-305ax', 'indio_um-325ac', 'indio_um-510ac-v3', 'indio_um-550ac', 'indio_um-310ax-v1', 'indio_um-510axp-v1', 'indio_um-510axm-v1', 'linksys_ea6350-v4', 'linksys_e8450-ubi', 'linksys_ea8300', 'meshpp_s618_cp03', 'meshpp_s618_cp01', 'udaya_a5-id2', 'wallys_dr40x9', 'wallys_dr6018', 'wallys_dr6018_v4', 'x64_vm', 'yuncore_ax840', 'yuncore_fap640', 'yuncore_fap650' ] | ||||
|  | ||||
|     steps: | ||||
|     - uses: actions/checkout@v3 | ||||
|   | ||||
| @@ -70,6 +70,9 @@ caldata_extract() { | ||||
|         local mtd | ||||
|  | ||||
|         mtd=$(find_mtd_chardev $part) | ||||
|         if [ -z "$mtd" ]; then                                  | ||||
|                 mtd=/dev/$(echo $(find_mmc_part $part) | sed 's/^.\{5\}//') | ||||
|         fi                	 | ||||
|         [ -n "$mtd" ] || caldata_die "no mtd device found for partition $part" | ||||
|  | ||||
|         dd if=$mtd of=/lib/firmware/$FIRMWARE iflag=skip_bytes bs=$count skip=$offset count=1 2>/dev/null || \ | ||||
| @@ -187,6 +190,7 @@ ath11k-macs) | ||||
| 		;; | ||||
| 	yuncore,ax840|\ | ||||
| 	edgecore,eap102|\ | ||||
| 	edgecore,eap104|\ | ||||
| 	edgecore,eap106|\ | ||||
| 	indio,um-310ax-v1|\ | ||||
| 	indio,um-510axp-v1|\ | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| #!/bin/sh | ||||
| mac=$(cat /etc/board.json | jsonfilter -e '@["network-device"]["'$DEVICENAME'"]'.macaddr) | ||||
| mac=$(cat /etc/board.json | jsonfilter -e '@["network_device"]["'$DEVICENAME'"]'.macaddr) | ||||
| [ -n "$mac" ] && ip link set $DEVICENAME address $mac | ||||
|   | ||||
| @@ -36,24 +36,39 @@ define Device/cig_wf194c4 | ||||
| endef | ||||
| TARGET_DEVICES += cig_wf194c4 | ||||
|  | ||||
| define Device/cig_wf196 | ||||
|   DEVICE_TITLE := CIG WF196 | ||||
| define Device/cig_wf196_us | ||||
|   DEVICE_TITLE := CIG WF196 (US) | ||||
|   DEVICE_DTS := qcom-ipq807x-wf196 | ||||
|   DEVICE_DTS_CONFIG=config@hk14 | ||||
|   SUPPORTED_DEVICES := cig,wf196 | ||||
|   BLOCKSIZE := 256k | ||||
|   PAGESIZE := 4096 | ||||
|   DEVICE_PACKAGES := ath11k-wifi-cig-wf196 aq-fw-download uboot-envtools kmod-usb3 kmod-usb2 \ | ||||
|   	ath11k-firmware-qcn9000 ath11k-wifi-cig-wf196_6g | ||||
|   DEVICE_PACKAGES := ath11k-wifi-cig-wf196-us aq-fw-download uboot-envtools kmod-usb3 kmod-usb2 \ | ||||
| 	ath11k-firmware-qcn9000 ath11k-wifi-cig-wf196_6g-us \ | ||||
| 	zephyr-v3.3.x-hci_uart-cig_wf196_nrf52833 | ||||
| endef | ||||
| TARGET_DEVICES += cig_wf196 | ||||
| TARGET_DEVICES += cig_wf196_us | ||||
|  | ||||
| define Device/cig_wf196_ca | ||||
|   DEVICE_TITLE := CIG WF196 (CA) | ||||
|   DEVICE_DTS := qcom-ipq807x-wf196 | ||||
|   DEVICE_DTS_CONFIG=config@hk14 | ||||
|   SUPPORTED_DEVICES := cig,wf196 | ||||
|   BLOCKSIZE := 256k | ||||
|   PAGESIZE := 4096 | ||||
|   DEVICE_PACKAGES := ath11k-wifi-cig-wf196-ca aq-fw-download uboot-envtools kmod-usb3 kmod-usb2 \ | ||||
| 	ath11k-firmware-qcn9000 ath11k-wifi-cig-wf196_6g-ca \ | ||||
| 	zephyr-v3.3.x-hci_uart-cig_wf196_nrf52833 | ||||
| endef | ||||
| TARGET_DEVICES += cig_wf196_ca | ||||
|  | ||||
| define Device/edgecore_eap102 | ||||
|   DEVICE_TITLE := Edgecore EAP102 | ||||
|   DEVICE_DTS := qcom-ipq807x-eap102 | ||||
|   DEVICE_DTS_CONFIG=config@ac02 | ||||
|   SUPPORTED_DEVICES := edgecore,eap102 | ||||
|   DEVICE_PACKAGES := ath11k-wifi-edgecore-eap102 kmod-usb2 kmod-usb3 uboot-envtools | ||||
|   DEVICE_PACKAGES := ath11k-wifi-edgecore-eap102 kmod-usb2 kmod-usb3 uboot-envtools \ | ||||
| 	zephyr-v3.3.x-hci_usb-edgecore_eap102_nrf52840 | ||||
| endef | ||||
| TARGET_DEVICES += edgecore_eap102 | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,131 @@ | ||||
| From 39385cb5f3274735b03ed1f8e7ff517b02a0beed Mon Sep 17 00:00:00 2001 | ||||
| From: Johan Hedberg <johan.hedberg@intel.com> | ||||
| Date: Sat, 12 Nov 2016 17:03:07 +0200 | ||||
| Subject: [PATCH] Bluetooth: Fix using the correct source address type | ||||
|  | ||||
| The hci_get_route() API is used to look up local HCI devices, however | ||||
| so far it has been incapable of dealing with anything else than the | ||||
| public address of HCI devices. This completely breaks with LE-only HCI | ||||
| devices that do not come with a public address, but use a static | ||||
| random address instead. | ||||
|  | ||||
| This patch exteds the hci_get_route() API with a src_type parameter | ||||
| that's used for comparing with the right address of each HCI device. | ||||
|  | ||||
| Signed-off-by: Johan Hedberg <johan.hedberg@intel.com> | ||||
| Signed-off-by: Marcel Holtmann <marcel@holtmann.org> | ||||
| --- | ||||
|  include/net/bluetooth/hci_core.h |  2 +- | ||||
|  net/bluetooth/6lowpan.c          |  4 ++-- | ||||
|  net/bluetooth/hci_conn.c         | 26 ++++++++++++++++++++++++-- | ||||
|  net/bluetooth/l2cap_core.c       |  2 +- | ||||
|  net/bluetooth/rfcomm/tty.c       |  2 +- | ||||
|  net/bluetooth/sco.c              |  2 +- | ||||
|  6 files changed, 30 insertions(+), 8 deletions(-) | ||||
|  | ||||
| --- a/include/net/bluetooth/hci_core.h | ||||
| +++ b/include/net/bluetooth/hci_core.h | ||||
| @@ -1003,7 +1003,7 @@ static inline void hci_set_drvdata(struc | ||||
|  } | ||||
|   | ||||
|  struct hci_dev *hci_dev_get(int index); | ||||
| -struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src); | ||||
| +struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, u8 src_type); | ||||
|   | ||||
|  struct hci_dev *hci_alloc_dev(void); | ||||
|  void hci_free_dev(struct hci_dev *hdev); | ||||
| --- a/net/bluetooth/6lowpan.c | ||||
| +++ b/net/bluetooth/6lowpan.c | ||||
| @@ -1102,7 +1102,6 @@ static int get_l2cap_conn(char *buf, bda | ||||
|  { | ||||
|  	struct hci_conn *hcon; | ||||
|  	struct hci_dev *hdev; | ||||
| -	bdaddr_t *src = BDADDR_ANY; | ||||
|  	int n; | ||||
|   | ||||
|  	n = sscanf(buf, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx %hhu", | ||||
| @@ -1113,7 +1112,8 @@ static int get_l2cap_conn(char *buf, bda | ||||
|  	if (n < 7) | ||||
|  		return -EINVAL; | ||||
|   | ||||
| -	hdev = hci_get_route(addr, src); | ||||
| +	/* The LE_PUBLIC address type is ignored because of BDADDR_ANY */ | ||||
| +	hdev = hci_get_route(addr, BDADDR_ANY, BDADDR_LE_PUBLIC); | ||||
|  	if (!hdev) | ||||
|  		return -ENOENT; | ||||
|   | ||||
| --- a/net/bluetooth/hci_conn.c | ||||
| +++ b/net/bluetooth/hci_conn.c | ||||
| @@ -609,7 +609,7 @@ int hci_conn_del(struct hci_conn *conn) | ||||
|  	return 0; | ||||
|  } | ||||
|   | ||||
| -struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src) | ||||
| +struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, uint8_t src_type) | ||||
|  { | ||||
|  	int use_src = bacmp(src, BDADDR_ANY); | ||||
|  	struct hci_dev *hdev = NULL, *d; | ||||
| @@ -630,7 +630,29 @@ struct hci_dev *hci_get_route(bdaddr_t * | ||||
|  		 */ | ||||
|   | ||||
|  		if (use_src) { | ||||
| -			if (!bacmp(&d->bdaddr, src)) { | ||||
| +			bdaddr_t id_addr; | ||||
| +			u8 id_addr_type; | ||||
| + | ||||
| +			if (src_type == BDADDR_BREDR) { | ||||
| +				if (!lmp_bredr_capable(d)) | ||||
| +					continue; | ||||
| +				bacpy(&id_addr, &d->bdaddr); | ||||
| +				id_addr_type = BDADDR_BREDR; | ||||
| +			} else { | ||||
| +				if (!lmp_le_capable(d)) | ||||
| +					continue; | ||||
| + | ||||
| +				hci_copy_identity_address(d, &id_addr, | ||||
| +							  &id_addr_type); | ||||
| + | ||||
| +				/* Convert from HCI to three-value type */ | ||||
| +				if (id_addr_type == ADDR_LE_DEV_PUBLIC) | ||||
| +					id_addr_type = BDADDR_LE_PUBLIC; | ||||
| +				else | ||||
| +					id_addr_type = BDADDR_LE_RANDOM; | ||||
| +			} | ||||
| + | ||||
| +			if (!bacmp(&id_addr, src) && id_addr_type == src_type) { | ||||
|  				hdev = d; break; | ||||
|  			} | ||||
|  		} else { | ||||
| --- a/net/bluetooth/l2cap_core.c | ||||
| +++ b/net/bluetooth/l2cap_core.c | ||||
| @@ -7044,7 +7044,7 @@ int l2cap_chan_connect(struct l2cap_chan | ||||
|  	BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", &chan->src, dst, | ||||
|  	       dst_type, __le16_to_cpu(psm)); | ||||
|   | ||||
| -	hdev = hci_get_route(dst, &chan->src); | ||||
| +	hdev = hci_get_route(dst, &chan->src, chan->src_type); | ||||
|  	if (!hdev) | ||||
|  		return -EHOSTUNREACH; | ||||
|   | ||||
| --- a/net/bluetooth/rfcomm/tty.c | ||||
| +++ b/net/bluetooth/rfcomm/tty.c | ||||
| @@ -178,7 +178,7 @@ static void rfcomm_reparent_device(struc | ||||
|  	struct hci_dev *hdev; | ||||
|  	struct hci_conn *conn; | ||||
|   | ||||
| -	hdev = hci_get_route(&dev->dst, &dev->src); | ||||
| +	hdev = hci_get_route(&dev->dst, &dev->src, BDADDR_BREDR); | ||||
|  	if (!hdev) | ||||
|  		return; | ||||
|   | ||||
| --- a/net/bluetooth/sco.c | ||||
| +++ b/net/bluetooth/sco.c | ||||
| @@ -219,7 +219,7 @@ static int sco_connect(struct sock *sk) | ||||
|   | ||||
|  	BT_DBG("%pMR -> %pMR", &sco_pi(sk)->src, &sco_pi(sk)->dst); | ||||
|   | ||||
| -	hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src); | ||||
| +	hdev = hci_get_route(&sco_pi(sk)->dst, &sco_pi(sk)->src, BDADDR_BREDR); | ||||
|  	if (!hdev) | ||||
|  		return -EHOSTUNREACH; | ||||
|   | ||||
| @@ -0,0 +1,37 @@ | ||||
| From 345bafc04fa2dea44dbdc8bda5633de256a74262 Mon Sep 17 00:00:00 2001 | ||||
| From: Yu Liu <yudiliu@google.com> | ||||
| Date: Mon, 19 Apr 2021 16:53:30 -0700 | ||||
| Subject: [PATCH] Bluetooth: Fix the HCI to MGMT status conversion table | ||||
|  | ||||
| [ Upstream commit 4ef36a52b0e47c80bbfd69c0cce61c7ae9f541ed ] | ||||
|  | ||||
| 0x2B, 0x31 and 0x33 are reserved for future use but were not present in | ||||
| the HCI to MGMT conversion table, this caused the conversion to be | ||||
| incorrect for the HCI status code greater than 0x2A. | ||||
|  | ||||
| Reviewed-by: Miao-chen Chou <mcchou@chromium.org> | ||||
| Signed-off-by: Yu Liu <yudiliu@google.com> | ||||
| Signed-off-by: Marcel Holtmann <marcel@holtmann.org> | ||||
| Signed-off-by: Sasha Levin <sashal@kernel.org> | ||||
| --- | ||||
|  net/bluetooth/mgmt.c | 3 +++ | ||||
|  1 file changed, 3 insertions(+) | ||||
|  | ||||
| --- a/net/bluetooth/mgmt.c | ||||
| +++ b/net/bluetooth/mgmt.c | ||||
| @@ -212,12 +212,15 @@ static u8 mgmt_status_table[] = { | ||||
|  	MGMT_STATUS_TIMEOUT,		/* Instant Passed */ | ||||
|  	MGMT_STATUS_NOT_SUPPORTED,	/* Pairing Not Supported */ | ||||
|  	MGMT_STATUS_FAILED,		/* Transaction Collision */ | ||||
| +	MGMT_STATUS_FAILED,		/* Reserved for future use */ | ||||
|  	MGMT_STATUS_INVALID_PARAMS,	/* Unacceptable Parameter */ | ||||
|  	MGMT_STATUS_REJECTED,		/* QoS Rejected */ | ||||
|  	MGMT_STATUS_NOT_SUPPORTED,	/* Classification Not Supported */ | ||||
|  	MGMT_STATUS_REJECTED,		/* Insufficient Security */ | ||||
|  	MGMT_STATUS_INVALID_PARAMS,	/* Parameter Out Of Range */ | ||||
| +	MGMT_STATUS_FAILED,		/* Reserved for future use */ | ||||
|  	MGMT_STATUS_BUSY,		/* Role Switch Pending */ | ||||
| +	MGMT_STATUS_FAILED,		/* Reserved for future use */ | ||||
|  	MGMT_STATUS_FAILED,		/* Slot Violation */ | ||||
|  	MGMT_STATUS_FAILED,		/* Role Switch Failed */ | ||||
|  	MGMT_STATUS_INVALID_PARAMS,	/* EIR Too Large */ | ||||
| @@ -0,0 +1,52 @@ | ||||
| From 433c3febcb837cf8f2758660c6a89e1d734c55dc Mon Sep 17 00:00:00 2001 | ||||
| From: Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com> | ||||
| Date: Wed, 28 Jul 2021 15:51:04 +0800 | ||||
| Subject: [PATCH] Bluetooth: skip invalid hci_sync_conn_complete_evt | ||||
|  | ||||
| [ Upstream commit 92fe24a7db751b80925214ede43f8d2be792ea7b ] | ||||
|  | ||||
| Syzbot reported a corrupted list in kobject_add_internal [1]. This | ||||
| happens when multiple HCI_EV_SYNC_CONN_COMPLETE event packets with | ||||
| status 0 are sent for the same HCI connection. This causes us to | ||||
| register the device more than once which corrupts the kset list. | ||||
|  | ||||
| As this is forbidden behavior, we add a check for whether we're | ||||
| trying to process the same HCI_EV_SYNC_CONN_COMPLETE event multiple | ||||
| times for one connection. If that's the case, the event is invalid, so | ||||
| we report an error that the device is misbehaving, and ignore the | ||||
| packet. | ||||
|  | ||||
| Link: https://syzkaller.appspot.com/bug?extid=66264bf2fd0476be7e6c [1] | ||||
| Reported-by: syzbot+66264bf2fd0476be7e6c@syzkaller.appspotmail.com | ||||
| Tested-by: syzbot+66264bf2fd0476be7e6c@syzkaller.appspotmail.com | ||||
| Signed-off-by: Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com> | ||||
| Signed-off-by: Marcel Holtmann <marcel@holtmann.org> | ||||
| Signed-off-by: Sasha Levin <sashal@kernel.org> | ||||
| --- | ||||
|  net/bluetooth/hci_event.c | 15 +++++++++++++++ | ||||
|  1 file changed, 15 insertions(+) | ||||
|  | ||||
| --- a/net/bluetooth/hci_event.c | ||||
| +++ b/net/bluetooth/hci_event.c | ||||
| @@ -3748,6 +3748,21 @@ static void hci_sync_conn_complete_evt(s | ||||
|   | ||||
|  	switch (ev->status) { | ||||
|  	case 0x00: | ||||
| +		/* The synchronous connection complete event should only be | ||||
| +		 * sent once per new connection. Receiving a successful | ||||
| +		 * complete event when the connection status is already | ||||
| +		 * BT_CONNECTED means that the device is misbehaving and sent | ||||
| +		 * multiple complete event packets for the same new connection. | ||||
| +		 * | ||||
| +		 * Registering the device more than once can corrupt kernel | ||||
| +		 * memory, hence upon detecting this invalid event, we report | ||||
| +		 * an error and ignore the packet. | ||||
| +		 */ | ||||
| +		if (conn->state == BT_CONNECTED) { | ||||
| +			bt_dev_err(hdev, "Ignoring connect complete event for existing connection"); | ||||
| +			goto unlock; | ||||
| +		} | ||||
| + | ||||
|  		conn->handle = __le16_to_cpu(ev->handle); | ||||
|  		conn->state  = BT_CONNECTED; | ||||
|  		conn->type   = ev->link_type; | ||||
| @@ -0,0 +1,33 @@ | ||||
| From 69f728dac41d13fc3e8d4514684e476ebd0d61f5 Mon Sep 17 00:00:00 2001 | ||||
| From: Wei Yongjun <weiyongjun1@huawei.com> | ||||
| Date: Wed, 13 Oct 2021 16:55:46 +0800 | ||||
| Subject: [PATCH] Bluetooth: Fix debugfs entry leak in hci_register_dev() | ||||
|  | ||||
| [ Upstream commit 5a4bb6a8e981d3d0d492aa38412ee80b21033177 ] | ||||
|  | ||||
| Fault injection test report debugfs entry leak as follows: | ||||
|  | ||||
| debugfs: Directory 'hci0' with parent 'bluetooth' already present! | ||||
|  | ||||
| When register_pm_notifier() failed in hci_register_dev(), the debugfs | ||||
| create by debugfs_create_dir() do not removed in the error handing path. | ||||
|  | ||||
| Add the remove debugfs code to fix it. | ||||
|  | ||||
| Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com> | ||||
| Signed-off-by: Marcel Holtmann <marcel@holtmann.org> | ||||
| Signed-off-by: Sasha Levin <sashal@kernel.org> | ||||
| --- | ||||
|  net/bluetooth/hci_core.c | 1 + | ||||
|  1 file changed, 1 insertion(+) | ||||
|  | ||||
| --- a/net/bluetooth/hci_core.c | ||||
| +++ b/net/bluetooth/hci_core.c | ||||
| @@ -3420,6 +3420,7 @@ int hci_register_dev(struct hci_dev *hde | ||||
|  	return id; | ||||
|   | ||||
|  err_wqueue: | ||||
| +	debugfs_remove_recursive(hdev->debugfs); | ||||
|  	destroy_workqueue(hdev->workqueue); | ||||
|  	destroy_workqueue(hdev->req_workqueue); | ||||
|  err: | ||||
							
								
								
									
										157
									
								
								feeds/mcu/mcu-firmware/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								feeds/mcu/mcu-firmware/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,157 @@ | ||||
| # | ||||
| # Copyright (C) 2023 OpenWrt.org | ||||
| # | ||||
| # This is free software, licensed under the GNU General Public License v2. | ||||
| # See /LICENSE for more information. | ||||
| # | ||||
|  | ||||
| include $(TOPDIR)/rules.mk | ||||
|  | ||||
| PKG_NAME:=mcu-firmware | ||||
| PKG_VERSION:=2023-03-12 | ||||
| PKG_RELEASE:=1 | ||||
|  | ||||
| PKG_MAINTAINER:=Piotr Dymacz <pepe2k@gmail.com> | ||||
|  | ||||
| include $(INCLUDE_DIR)/package.mk | ||||
|  | ||||
| define Package/mcu-fw-default | ||||
|   CATEGORY:=Firmware | ||||
|   SUBMENU:=MCU firmware | ||||
|   SECTION:=firmware | ||||
|   TITLE:=MCU firmware | ||||
| endef | ||||
|  | ||||
|  | ||||
| # Zephyr versions | ||||
| # 4 fields separated with underscore: | ||||
| #   version-name_git-sha_pipeline-id_sha256-of-package | ||||
| ZEPHYR_VERSIONS := \ | ||||
| 	zephyr-v3.3.x_7055d10e538e_3877473859_321a0daf6328698a913c6504d19aa85a5170dfce6039b86d31d2e9162d34af7c \ | ||||
| 	zephyr-main_cf50a3c570bb_3912606668_10922f34cdde9e16cbee76a13a14fb935b9d1fe13eb9136cba31de27033a9c3e | ||||
|  | ||||
| ZEPHYR_FW_CI_URL := https://gitlab.com/pepe2k/zephyr/-/jobs/ | ||||
|  | ||||
| ZEPHYR_FW_TYPES := \ | ||||
| 	hello_world \ | ||||
| 	hci_uart \ | ||||
| 	hci_usb | ||||
|  | ||||
| # Zephyr 'hello_world' targets | ||||
| ZEPHYR_HELLO_WORLD_TARGETS := \ | ||||
| 	cig_wf196_nrf52833 \ | ||||
| 	edgecore_eap102_nrf52840 \ | ||||
| 	nrf52840dongle_nrf52840 | ||||
|  | ||||
| # Zephyr 'hci_uart' targets | ||||
| ZEPHYR_HCI_UART_TARGETS:= \ | ||||
| 	cig_wf196_nrf52833 \ | ||||
| 	edgecore_eap102_nrf52840 \ | ||||
| 	nrf52840dongle_nrf52840 | ||||
|  | ||||
| # Zephyr 'hci_usb' targets | ||||
| ZEPHYR_HCI_USB_TARGETS := \ | ||||
| 	edgecore_eap102_nrf52840 \ | ||||
| 	nrf52840dongle_nrf52840 | ||||
|  | ||||
| word-underscore = $(word $2,$(subst _, ,$1)) | ||||
|  | ||||
| define Download/zephyr-fw | ||||
|   URL:=$(ZEPHYR_FW_CI_URL)$(call word-underscore,$(2),3)/ | ||||
|   URL_FILE:=artifacts/download?file_type=archive | ||||
|   FILE:=$(call word-underscore,$(2),1)-$(call word-underscore,$(2),2).zip | ||||
|   HASH:=$(call word-underscore,$(2),4) | ||||
| endef | ||||
| $(foreach FW,$(ZEPHYR_VERSIONS),$(eval $(call Download,zephyr-fw,$(FW)))) | ||||
|  | ||||
| # $(1) firmware name (e.g. hci_usb) | ||||
| define zephyr-fw-host-support | ||||
|   define Package/zephyr-$(1)-host-support | ||||
|     $(call Package/mcu-fw-default) | ||||
|     DEPENDS:=+mcu | ||||
|     TITLE:=Zephyr '$(1)' common host side support | ||||
|     HIDDEN:=1 | ||||
|   endef | ||||
|  | ||||
|   define Package/zephyr-$(1)-host-support/install | ||||
| 	$(CP) ./files/$(1)/* $$(1)/ | ||||
|   endef | ||||
| endef | ||||
|  | ||||
| # $(1) version (e.g zephyr-v3.3.x) | ||||
| # $(2) firmware name (e.g. hci_usb) | ||||
| # $(3) target/board name (e.g. nrf52840dongle_nrf52840) | ||||
| define zephyr-fw | ||||
|   define Package/$(1)-$(2)-$(3) | ||||
|     $(call Package/mcu-fw-default) | ||||
|     DEPENDS:=+mcu $(call zephyr-fw-deps,$(2)) | ||||
|     TITLE:=Zephyr '$(2)' | ||||
|   endef | ||||
|  | ||||
|   define Package/$(1)-$(2)-$(3)/description | ||||
|     Zephyr '$(1)' based firmware '$(2)' for '$(3)' board | ||||
|   endef | ||||
|  | ||||
|   define Package/$(1)-$(2)-$(3)/install | ||||
| 	$(INSTALL_DIR) $$(1)/lib/firmware/mcu/$(3)/$(1)__$(2) | ||||
| 	$(INSTALL_DATA) $(PKG_BUILD_DIR)/$(1)/$(3)/$(1)__$(2)/*.bin \ | ||||
| 		$$(1)/lib/firmware/mcu/$(3)/$(1)__$(2)/ | ||||
|   endef | ||||
| endef | ||||
|  | ||||
| define zephyr-fw-deps | ||||
| 	$(if $(wildcard ./files/$(1)/*),+zephyr-$(1)-host-support) \ | ||||
| 	$(if $(findstring hci_u,$1),+bluez-daemon +kmod-bluetooth +kmod-crypto-user) | ||||
| endef | ||||
|  | ||||
| define zephyr-fw-unzip | ||||
| 	mkdir -p $(PKG_BUILD_DIR)/$(call word-underscore,$(1),1); \ | ||||
| 	unzip -q -d $(PKG_BUILD_DIR)/$(call word-underscore,$(1),1) \ | ||||
| 	  $(DL_DIR)/$(call word-underscore,$(1),1)-$(call word-underscore,$(1),2).zip; \ | ||||
| 	for fw in $(PKG_BUILD_DIR)/$(call word-underscore,$(1),1)/*.tar.gz; do \ | ||||
| 		$(TAR) -C $(PKG_BUILD_DIR)/$(call word-underscore,$(1),1) --one-top-level -xzf $$$$fw; \ | ||||
| 		rm -rf $$$$fw; \ | ||||
| 	done; | ||||
| endef | ||||
|  | ||||
| define Build/Prepare | ||||
| 	$(foreach FW,$(ZEPHYR_VERSIONS),$(call zephyr-fw-unzip,$(FW))) | ||||
| endef | ||||
|  | ||||
| define Build/Compile | ||||
| endef | ||||
|  | ||||
|  | ||||
| # Generate host side support packages (per firmware type) | ||||
| $(foreach FW,$(ZEPHYR_FW_TYPES),\ | ||||
|   $(if $(wildcard ./files/$(FW)/*),$(eval $(call zephyr-fw-host-support,$(FW))))) | ||||
|  | ||||
| $(foreach FW,$(ZEPHYR_FW_TYPES),\ | ||||
|   $(if $(wildcard ./files/$(FW)/*),$(eval $(call BuildPackage,zephyr-$(FW)-host-support)))) | ||||
|  | ||||
|  | ||||
| # Generate dedicated Zephyr firmware packages (per firmware version, type and board) | ||||
| $(foreach VER,$(ZEPHYR_VERSIONS),\ | ||||
|   $(foreach TARGET,$(ZEPHYR_HELLO_WORLD_TARGETS),\ | ||||
|     $(eval $(call zephyr-fw,$(call word-underscore,$(VER),1),hello_world,$(TARGET))))) | ||||
|  | ||||
| $(foreach VER,$(ZEPHYR_VERSIONS),\ | ||||
|   $(foreach TARGET,$(ZEPHYR_HCI_UART_TARGETS),\ | ||||
|     $(eval $(call zephyr-fw,$(call word-underscore,$(VER),1),hci_uart,$(TARGET))))) | ||||
|  | ||||
| $(foreach VER,$(ZEPHYR_VERSIONS),\ | ||||
|   $(foreach TARGET,$(ZEPHYR_HCI_USB_TARGETS),\ | ||||
|     $(eval $(call zephyr-fw,$(call word-underscore,$(VER),1),hci_usb,$(TARGET))))) | ||||
|  | ||||
|  | ||||
| $(foreach VER,$(ZEPHYR_VERSIONS),\ | ||||
|   $(foreach TARGET,$(ZEPHYR_HELLO_WORLD_TARGETS),\ | ||||
|     $(eval $(call BuildPackage,$(call word-underscore,$(VER),1)-hello_world-$(TARGET))))) | ||||
|  | ||||
| $(foreach VER,$(ZEPHYR_VERSIONS),\ | ||||
|   $(foreach TARGET,$(ZEPHYR_HCI_UART_TARGETS),\ | ||||
|     $(eval $(call BuildPackage,$(call word-underscore,$(VER),1)-hci_uart-$(TARGET))))) | ||||
|  | ||||
| $(foreach VER,$(ZEPHYR_VERSIONS),\ | ||||
|   $(foreach TARGET,$(ZEPHYR_HCI_USB_TARGETS),\ | ||||
|     $(eval $(call BuildPackage,$(call word-underscore,$(VER),1)-hci_usb-$(TARGET))))) | ||||
							
								
								
									
										79
									
								
								feeds/mcu/mcu-firmware/files/hci_uart/etc/mcu.d/hci_uart.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										79
									
								
								feeds/mcu/mcu-firmware/files/hci_uart/etc/mcu.d/hci_uart.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| . /lib/functions.sh | ||||
| . /lib/functions/mcu.sh | ||||
|  | ||||
| attach_hci_controller() { | ||||
| 	local section="$1" | ||||
|  | ||||
| 	local sn | ||||
| 	local pid | ||||
| 	local interface | ||||
| 	local uart_path | ||||
| 	local uart_baud | ||||
| 	local uart_flow | ||||
|  | ||||
| 	[ -n "$section" ] || return 1 | ||||
| 	command -v btattach > /dev/null 2>&1 || return 1 | ||||
|  | ||||
| 	config_load mcu | ||||
| 	config_get sn "$section" sn | ||||
| 	config_get interface "$section" interface | ||||
| 	config_get uart_path "$section" uart_path | ||||
| 	config_get uart_baud "$section" uart_baud "115200" | ||||
| 	config_get uart_flow "$section" uart_flow "0" | ||||
|  | ||||
| 	[ -n "$sn" ] || return 1 | ||||
|  | ||||
| 	if [ "$interface" = "usb" ]; then | ||||
| 		uart_baud="1000000" | ||||
| 		uart_flow="1" | ||||
|  | ||||
| 		dev_found="" | ||||
| 		usb_path="/sys/bus/usb/devices/*" | ||||
| 		for dev_path in $usb_path; do | ||||
| 			dev="$(basename "$dev_path")" | ||||
| 			[[ $dev == *":"* ]] && continue | ||||
|  | ||||
| 			[ "$sn" = "$(cat "${dev_path}/serial" 2>/dev/null)" ] && { | ||||
| 				dev_found="$dev" | ||||
| 				break | ||||
| 			} | ||||
| 		done | ||||
|  | ||||
| 		[ -n "$dev_found" ] || return 1 | ||||
|  | ||||
| 		usb_path="/sys/bus/usb/devices/${dev_found}*/tty/*" | ||||
| 		for tty_path in $usb_path; do | ||||
| 			tty="$(basename "$tty_path")" | ||||
| 			[ -c "/dev/${tty}" ] && { | ||||
| 				uart_path="/dev/${tty}" | ||||
| 				break | ||||
| 			} | ||||
| 		done | ||||
| 	fi | ||||
|  | ||||
| 	[ -c "$uart_path" ] || return 1 | ||||
|  | ||||
| 	# Give MCU some time for BLE controller setup | ||||
| 	sleep 1 | ||||
|  | ||||
| 	if [ "$uart_flow" = "1" ]; then | ||||
| 		btattach -B "$uart_path" -S "$uart_baud" > /dev/null 2>&1 & | ||||
| 	else | ||||
| 		btattach -B "$uart_path" -S "$uart_baud" -N > /dev/null 2>&1 & | ||||
| 	fi | ||||
|  | ||||
| 	pid="$!" | ||||
|  | ||||
| 	kill -0 "$pid" > /dev/null 2>&1 && { | ||||
| 		echo "$pid" > "/var/run/mcu.${sn}.pid" | ||||
| 		return 0 | ||||
| 	} | ||||
|  | ||||
| 	return 1 | ||||
| } | ||||
|  | ||||
| attach_hci_controller "$1" || exit 1 | ||||
|  | ||||
| exit 0 | ||||
							
								
								
									
										50
									
								
								feeds/mcu/mcu/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								feeds/mcu/mcu/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| # | ||||
| # Copyright (C) 2023 OpenWrt.org | ||||
| # | ||||
| # This is free software, licensed under the GNU General Public License v2. | ||||
| # See /LICENSE for more information. | ||||
| # | ||||
|  | ||||
| include $(TOPDIR)/rules.mk | ||||
|  | ||||
| PKG_NAME:=mcu | ||||
| PKG_VERSION:=2023-03-22 | ||||
| PKG_RELEASE=1 | ||||
|  | ||||
| PKG_LICENSE:=GPL-2.0 | ||||
| PKG_LICENSE_FILES:= | ||||
|  | ||||
| PKG_MAINTAINER:=Piotr Dymacz <pepe2k@gmail.com> | ||||
|  | ||||
| include $(INCLUDE_DIR)/package.mk | ||||
|  | ||||
| define Package/mcu | ||||
|   TITLE:=Generic OpenWrt/OpenWiFi MCU config and management handler | ||||
|   CATEGORY:=Utilities | ||||
|   DEPENDS:=+umcumgr +libubox | ||||
|   SECTION:=utils | ||||
| endef | ||||
|  | ||||
| define Package/mcu/conffiles | ||||
|   /etc/config/mcu | ||||
| endef | ||||
|  | ||||
| define Build/Compile | ||||
| endef | ||||
|  | ||||
| define Package/mcu/install | ||||
| 	$(INSTALL_DIR) $(1)/etc/init.d $(1)/etc/hotplug.d/usb $(1)/lib/functions $(1)/etc/uci-defaults | ||||
| 	$(INSTALL_BIN) ./files/mcu.init $(1)/etc/init.d/mcu | ||||
| 	$(INSTALL_DATA) ./files/mcu.hotplug $(1)/etc/hotplug.d/usb/30-mcu | ||||
| 	$(INSTALL_DATA) ./files/mcu.sh $(1)/lib/functions | ||||
| 	$(if $(wildcard ./files/uci-defaults/$(BOARD)_$(SUBTARGET)), \ | ||||
| 		$(INSTALL_DATA) ./files/uci-defaults/$(BOARD)_$(SUBTARGET) \ | ||||
| 		$(1)/etc/uci-defaults/20-mcu, \ | ||||
| 		$(if $(wildcard ./files/uci-defaults/$(BOARD)), \ | ||||
| 			$(INSTALL_DATA) ./files/uci-defaults/$(BOARD) \ | ||||
| 			$(1)/etc/uci-defaults/20-mcu \ | ||||
| 		) \ | ||||
| 	) | ||||
| endef | ||||
|  | ||||
| $(eval $(call BuildPackage,mcu)) | ||||
							
								
								
									
										32
									
								
								feeds/mcu/mcu/files/example.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								feeds/mcu/mcu/files/example.config
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| config mcu 'uart_no_hw_flow' | ||||
| 	option interface	'uart' | ||||
| 	option bootloader	'mcuboot' | ||||
| 	option enable_pin	'mcu-enable' | ||||
| 	option uart_path	'/dev/ttyMSM1' | ||||
| 	option uart_baud	'115200' | ||||
| 	option firmware		'zephyr-main__hello_world' | ||||
| 	option disabled		'1' | ||||
|  | ||||
| config mcu 'uart_with_hw_flow' | ||||
| 	option interface	'uart' | ||||
| 	option bootloader	'mcuboot' | ||||
| 	option enable_pin	'mcu-enable' | ||||
| 	option uart_path	'/dev/ttyMSM1' | ||||
| 	option uart_baud	'1000000' | ||||
| 	option uart_flow	'1' | ||||
| 	option firmware		'zephyr-main__hello_world' | ||||
| 	option disabled		'1' | ||||
|  | ||||
| config mcu 'usb_with_enable_pin' | ||||
| 	option interface	'usb' | ||||
| 	option bootloader	'mcuboot' | ||||
| 	option enable_pin	'mcu-enable' | ||||
| 	option firmware		'zephyr-main__hello_world' | ||||
| 	option disabled		'1' | ||||
|  | ||||
| config mcu 'usb_no_enable_pin' | ||||
| 	option interface	'usb' | ||||
| 	option bootloader	'mcuboot' | ||||
| 	option sn		'ABCDEF1234567890' | ||||
| 	option firmware		'zephyr-main__hello_world' | ||||
| 	option disabled		'1' | ||||
							
								
								
									
										142
									
								
								feeds/mcu/mcu/files/mcu.hotplug
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								feeds/mcu/mcu/files/mcu.hotplug
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| . /lib/functions.sh | ||||
| . /lib/functions/mcu.sh | ||||
|  | ||||
| MCU_SCRIPT_NAME="mcu-hotplug" | ||||
| MCU_CFG_FOUND="0" | ||||
|  | ||||
| mcu_hotplug_setup() { | ||||
| 	local sn | ||||
| 	local fw_type | ||||
| 	local disabled | ||||
|  | ||||
| 	local sn_dev="$2" | ||||
| 	local uart="$3" | ||||
|  | ||||
| 	SECT="$1" | ||||
|  | ||||
| 	MCU_SYSINFO_OUTPUT="" | ||||
| 	MCU_IMGLIST_OUTPUT="" | ||||
|  | ||||
| 	[ "$MCU_CFG_FOUND" = "1" ] && return 0 | ||||
|  | ||||
| 	config_get sn "$SECT" sn | ||||
| 	[ "$sn" != "$sn_dev" ] && return 0 | ||||
|  | ||||
| 	MCU_SCRIPT_NAME="mcu-hotplug.${SECT}" | ||||
| 	MCU_CFG_FOUND="1" | ||||
|  | ||||
| 	mcu_logi "found matching config section '$SECT'" | ||||
|  | ||||
| 	# Section disabled? | ||||
| 	config_get_bool disabled "$SECT" disabled "0" | ||||
| 	[ "$disabled" = "1" ] && { | ||||
| 		mcu_logw "section is disabled in config" | ||||
| 		return 0 | ||||
| 	} | ||||
|  | ||||
| 	# Stop related service | ||||
| 	[ -f "/var/run/mcu.${sn}.pid" ] && { | ||||
| 		kill "$(cat "/var/run/mcu.${sn}.pid" 2>/dev/null)" \ | ||||
| 			> /dev/null 2>&1 | ||||
| 		rm -f "/var/run/mcu.${sn}.pid" > /dev/null 2>&1 | ||||
| 	} | ||||
|  | ||||
| 	mcu_sn_check_and_update "$sn" "$uart" | ||||
| 	[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 	mcu_fw_check_and_update "$uart" | ||||
| 	rc="$?" | ||||
|  | ||||
| 	[ "$rc" = "1" ] && return 1 | ||||
|  | ||||
| 	[ "$rc" = "0" ] && { | ||||
| 		fw_type="$(uci -q get "mcu.${SECT}.firmware" | awk -F '__' '{print $2}')" | ||||
| 		[ -n "$fw_type" ] || return 0 | ||||
|  | ||||
| 		[ -x "${MCU_HS_DIR}/${fw_type}.sh" ] && \ | ||||
| 			"${MCU_HS_DIR}/${fw_type}.sh" "$SECT" | ||||
| 	} | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| # We are looking for ttyACM with specific product name and USB VID:PID | ||||
| [ "$ACTION" = "add" -a \ | ||||
|   "$DRIVER" = "cdc_acm" -a \ | ||||
|   "$DEVTYPE" = "usb_interface" ] && { | ||||
|  | ||||
| 	usb_path="/sys/bus/usb/devices/" | ||||
| 	dev="$(echo "$DEVICENAME" | cut -d ':' -f 1)" | ||||
| 	[ -n "$dev" ] || return 1 | ||||
|  | ||||
| 	p="$(cat "${usb_path}/${dev}/product" 2>/dev/null)" | ||||
| 	id="$(cat "${usb_path}/${dev}/idVendor" 2>/dev/null)" | ||||
| 	id="${id}$(cat "${usb_path}//${dev}/idProduct" 2>/dev/null)" | ||||
| 	sn="$(cat "${usb_path}/${dev}/serial" 2>/dev/null)" | ||||
|  | ||||
| 	[ "$p" = "$MCUBOOT_USB_PRODUCT" -a \ | ||||
| 	 "$id" = "$MCUBOOT_USB_VID_PID" ] || return 0 | ||||
|  | ||||
| 	mcu_logi "found compatible MCU with S/N '$sn' at USB bus '$dev'" | ||||
|  | ||||
| 	# We expect just a single ttyACM interface | ||||
| 	usb_path="/sys/bus/usb/devices/${dev}*/tty/*" | ||||
| 	for tty in $usb_path; do | ||||
| 		[ -c "/dev/$(basename "$tty")" ] && { | ||||
| 			uart_path="/dev/$(basename "$tty")" | ||||
| 			break | ||||
| 		} | ||||
| 	done | ||||
|  | ||||
| 	[ -n "$uart_path" ] || { | ||||
| 		mcu_loge "failed to find ttyACM interface" | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	# Try to acquire lock (init script might be handling this device) | ||||
| 	exec 9>"$MCU_FLOCK_FILE" || return 1 | ||||
| 	flock -n 9 || { | ||||
| 		mcu_logd "lock taken by init script, skipping" | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	config_load mcu | ||||
| 	config_foreach mcu_hotplug_setup mcu "$sn" "$uart_path" | ||||
|  | ||||
| 	# Add new config section for this MCU if no matching found (by S/N) | ||||
| 	[ "$MCU_CFG_FOUND" = "0" ] && { | ||||
| 		MCU_SCRIPT_NAME="mcu-hotplug" | ||||
|  | ||||
| 		sect="${sn:0:8}_usb" | ||||
| 		mcu_logi "no matching MCU config found, adding new (disabled): '$sect'" | ||||
|  | ||||
| 		[ -d /etc/config-shadow ] && { | ||||
| 			uci -c /etc/config-shadow -q batch <<-EOF | ||||
| 				set mcu.${sect}=mcu | ||||
| 				set mcu.${sect}.interface=usb | ||||
| 				set mcu.${sect}.bootloader=mcuboot | ||||
| 				set mcu.${sect}.sn=$sn | ||||
| 				set mcu.${sect}.disabled=1 | ||||
| 				EOF | ||||
|  | ||||
| 			uci -c /etc/config-shadow -q commit mcu | ||||
| 		} | ||||
|  | ||||
| 		uci -q batch <<-EOF | ||||
| 			set mcu.${sect}=mcu | ||||
| 			set mcu.${sect}.interface=usb | ||||
| 			set mcu.${sect}.bootloader=mcuboot | ||||
| 			set mcu.${sect}.sn=$sn | ||||
| 			set mcu.${sect}.disabled=1 | ||||
| 			EOF | ||||
|  | ||||
| 		uci -q commit mcu | ||||
|  | ||||
| 		flock -u 9 | ||||
| 		return 0 | ||||
| 	} | ||||
|  | ||||
| 	flock -u 9 | ||||
| } | ||||
							
								
								
									
										309
									
								
								feeds/mcu/mcu/files/mcu.init
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										309
									
								
								feeds/mcu/mcu/files/mcu.init
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,309 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
|  | ||||
| START=80 | ||||
|  | ||||
| . /lib/functions/mcu.sh | ||||
|  | ||||
| SECT= | ||||
|  | ||||
| mcu_setup_uart() { | ||||
| 	local uart="$1" | ||||
| 	local baud="$2" | ||||
| 	local flow="$3" | ||||
| 	local gpio_path="$4" | ||||
| 	local gpio_on="$5" | ||||
| 	local sn="$6" | ||||
|  | ||||
| 	local fw_type | ||||
|  | ||||
| 	# Take out MCU out of reset and read basic info | ||||
| 	mcu_enable_pin_set "$gpio_path" "$gpio_on" | ||||
| 	sleep 1 | ||||
|  | ||||
| 	mcu_sn_check_and_update "$sn" "$uart" "$baud" "$flow" | ||||
| 	[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 	mcu_fw_check_and_update "$uart" "$baud" "$flow" | ||||
| 	rc="$?" | ||||
|  | ||||
| 	[ "$rc" = "1" ] && return 1 | ||||
|  | ||||
| 	[ "$rc" = "2" ] && { | ||||
| 		sleep 1 | ||||
|  | ||||
| 		mcu_req "boot" "$uart" "$baud" "$flow" | ||||
| 		[ $? -ne 0 ] && return 1 | ||||
| 	} | ||||
|  | ||||
| 	fw_type="$(uci -q get "mcu.${SECT}.firmware" | awk -F '__' '{print $2}')" | ||||
| 	[ -n "$fw_type" ] || return 0 | ||||
|  | ||||
| 	[ -x "${MCU_HS_DIR}/${fw_type}.sh" ] && \ | ||||
| 		"${MCU_HS_DIR}/${fw_type}.sh" "$SECT" | ||||
| } | ||||
|  | ||||
| mcu_setup_usb() { | ||||
| 	local gpio_path="$1" | ||||
| 	local gpio_on="$2" | ||||
| 	local sn="$3" | ||||
| 	local gpio_off="0" | ||||
|  | ||||
| 	local uart | ||||
| 	local fw_type | ||||
|  | ||||
| 	[ "$gpio_on" = "0" ] && gpio_off="1" | ||||
|  | ||||
| 	# If we have S/N in config, only take out the MCU from reset | ||||
| 	[ -n "$sn" ] && { | ||||
| 		mcu_logi "MCU S/N already set, hotplug will perform config" | ||||
| 		mcu_enable_pin_set "$gpio_path" "$gpio_on" | ||||
| 		return 0 | ||||
| 	} | ||||
|  | ||||
| 	# If S/N is missing, we need to take out MCU from reset, find out | ||||
| 	# its S/N and save it for later | ||||
|  | ||||
| 	exec 9>"$MCU_FLOCK_FILE" || { | ||||
| 		mcu_loge "failed to obtain lock (exec fail)!" | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	flock -n 9 || { | ||||
| 		mcu_loge "failed to obtain lock (flock fail)!" | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	usb_path="/sys/bus/usb/devices/*" | ||||
| 	devs_old="" | ||||
| 	for dev_path in $usb_path; do | ||||
| 		dev="$(basename "$dev_path")" | ||||
| 		[[ $dev == *":"* ]] && continue | ||||
|  | ||||
| 		p="$(cat "${dev_path}/product" 2>/dev/null)" | ||||
| 		id="$(cat "${dev_path}/idVendor" 2>/dev/null)" | ||||
| 		id="${id}$(cat "${dev_path}/idProduct" 2>/dev/null)" | ||||
|  | ||||
| 		[ "$p" = "$MCUBOOT_USB_PRODUCT" -a \ | ||||
| 		 "$id" = "$MCUBOOT_USB_VID_PID" ] && \ | ||||
| 			devs_old="$devs_old $dev" | ||||
| 	done | ||||
|  | ||||
| 	mcu_enable_pin_set "$gpio_path" "$gpio_on" | ||||
| 	sleep 2 | ||||
|  | ||||
| 	dev_found="" | ||||
| 	for dev_path in $usb_path; do | ||||
| 		dev="$(basename "$dev_path")" | ||||
| 		[[ $dev == *":"* ]] && continue | ||||
|  | ||||
| 		p="$(cat "${dev_path}/product" 2>/dev/null)" | ||||
| 		id="$(cat "${dev_path}/idVendor" 2>/dev/null)" | ||||
| 		id="${id}$(cat "${dev_path}/idProduct" 2>/dev/null)" | ||||
|  | ||||
| 		[ "$p" = "$MCUBOOT_USB_PRODUCT" -a \ | ||||
| 		 "$id" = "$MCUBOOT_USB_VID_PID" ] && { | ||||
| 			[ -n "$devs_old" ] && { | ||||
| 				if echo "$devs_old" | grep -q "$dev"; then | ||||
| 					continue | ||||
| 				fi | ||||
| 			} | ||||
|  | ||||
| 			dev_found="$dev" | ||||
| 			break | ||||
| 		} | ||||
| 	done | ||||
|  | ||||
| 	[ -n "$dev_found" ] || { | ||||
| 		mcu_loge "failed to find MCU on USB bus" | ||||
| 		mcu_enable_pin_set "$gpio_path" "$gpio_off" | ||||
|  | ||||
| 		flock -u 9 | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	mcu_logd "MCU found on USB bus: '$dev_found'" | ||||
|  | ||||
| 	# We expect just a single ttyACM interface | ||||
| 	usb_path="/sys/bus/usb/devices/${dev_found}*/tty/*" | ||||
| 	for tty_path in $usb_path; do | ||||
| 		tty="$(basename "$tty_path")" | ||||
| 		[ -c "/dev/${tty}" ] && { | ||||
| 			uart="/dev/${tty}" | ||||
| 			break | ||||
| 		} | ||||
| 	done | ||||
|  | ||||
| 	[ -n "$uart" ] || { | ||||
| 		mcu_loge "failed to find ttyACM interface" | ||||
| 		mcu_enable_pin_set "$gpio_path" "$gpio_off" | ||||
|  | ||||
| 		flock -u 9 | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	mcu_sn_check_and_update "$sn" "$uart" | ||||
| 	[ $? -ne 0 ] && { | ||||
| 		mcu_enable_pin_set "$gpio_path" "$gpio_off" | ||||
|  | ||||
| 		flock -u 9 | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	mcu_fw_check_and_update "$uart" | ||||
| 	rc="$?" | ||||
|  | ||||
| 	[ "$rc" = "1" ] && { | ||||
| 		mcu_enable_pin_set "$gpio_path" "$gpio_off" | ||||
|  | ||||
| 		flock -u 9 | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	[ "$rc" = "0" ] && { | ||||
| 		fw_type="$(uci -q get "mcu.${SECT}.firmware" | awk -F '__' '{print $2}')" | ||||
| 		[ -n "$fw_type" -a -x "${MCU_HS_DIR}/${fw_type}.sh" ] && \ | ||||
| 			"${MCU_HS_DIR}/${fw_type}.sh" "$SECT" | ||||
| 	} | ||||
|  | ||||
| 	flock -u 9 | ||||
| } | ||||
|  | ||||
| mcu_setup() { | ||||
| 	local sn | ||||
| 	local action | ||||
| 	local fw_type | ||||
| 	local disabled | ||||
| 	local uart_baud | ||||
| 	local uart_flow | ||||
| 	local uart_path | ||||
| 	local interface | ||||
| 	local bootloader | ||||
| 	local enable_pin | ||||
| 	local gpio_path | ||||
|  | ||||
| 	local gpio_on="1" | ||||
| 	local gpio_off="0" | ||||
|  | ||||
| 	SECT="$1" | ||||
| 	MCU_SCRIPT_NAME="mcu-init.${SECT}" | ||||
|  | ||||
| 	action="$2" | ||||
|  | ||||
| 	MCU_SYSINFO_OUTPUT="" | ||||
| 	MCU_IMGLIST_OUTPUT="" | ||||
|  | ||||
| 	# Section disabled? | ||||
| 	[ "$action" = "start" ] && { | ||||
| 		config_get_bool disabled "$SECT" disabled "0" | ||||
| 		[ "$disabled" = "1" ] && { | ||||
| 			mcu_logw "section is disabled in config" | ||||
| 			return 0 | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	config_get sn "$SECT" sn | ||||
| 	config_get bootloader "$SECT" bootloader | ||||
| 	config_get enable_pin "$SECT" enable_pin | ||||
| 	config_get interface "$SECT" interface | ||||
| 	config_get uart_path "$SECT" uart_path | ||||
| 	config_get uart_baud "$SECT" uart_baud "115200" | ||||
| 	config_get_bool uart_flow "$SECT" uart_flow "0" | ||||
|  | ||||
| 	# Stop related service | ||||
| 	[ "$action" = "stop" ] && { | ||||
| 		[ -n "$sn" -a  -f "/var/run/mcu.${sn}.pid" ] && { | ||||
| 			kill "$(cat "/var/run/mcu.${sn}.pid" 2>/dev/null)" \ | ||||
| 				> /dev/null 2>&1 | ||||
| 			rm -f "/var/run/mcu.${sn}.pid" > /dev/null 2>&1 | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	# As for now, only 'mcuboot' bootloader is supported | ||||
| 	case "$bootloader" in | ||||
| 	"mcuboot") | ||||
| 		command -v umcumgr > /dev/null 2>&1 || { | ||||
| 			mcu_loge "missing 'umcumgr' tool" | ||||
| 			return 1 | ||||
| 		} | ||||
| 		;; | ||||
| 	*) | ||||
| 		mcu_loge "unsupported or unset 'bootloader' option" | ||||
| 		return 1 | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
| 	# Verify 'enable_pin' option | ||||
| 	if [ -z "$enable_pin" ]; then | ||||
| 		# USB based MCU without GPIO based way for reset are fully | ||||
| 		# handled by the hotplug script | ||||
| 		[ "$interface" = "usb" ] && { | ||||
| 			mcu_logw "'enable_pin' option is unset, ignoring" | ||||
| 			return 0 | ||||
| 		} | ||||
|  | ||||
| 		[ "$interface" = "uart" ] && { | ||||
| 			mcu_loge "'enable_pin' option is unset" | ||||
| 			return 1 | ||||
| 		} | ||||
| 	else | ||||
| 		gpio_path="/sys/class/gpio/${enable_pin}" | ||||
| 		[ -d "$gpio_path" ] || { | ||||
| 			mcu_loge "invalid 'enable_pin' option" | ||||
| 			return 1 | ||||
| 		} | ||||
|  | ||||
| 		[ "$(cat "${gpio_path}/active_low")" = "1" ] && { | ||||
| 			gpio_on="0" | ||||
| 			gpio_off="1" | ||||
| 		} | ||||
|  | ||||
| 		# TODO: should we maybe bail out here if the MCU was took out | ||||
| 		#       of reset already before, by something/someone else? | ||||
| 		[ "$(cat "${gpio_path}/value")" = "$gpio_on" ] && { | ||||
| 			if [ "$action" = "start" ]; then | ||||
| 				mcu_logw "MCU already enabled, resetting" | ||||
| 			else | ||||
| 				mcu_logi "disabling MCU" | ||||
| 			fi | ||||
|  | ||||
| 			mcu_enable_pin_set "$gpio_path" "$gpio_off" | ||||
| 			sleep 1 | ||||
| 		} | ||||
| 	fi | ||||
|  | ||||
| 	[ "$action" = "stop" ] && return 0 | ||||
|  | ||||
| 	# For now only 'usb' and 'uart' interfaces are supported | ||||
| 	case "$interface" in | ||||
| 	"uart") | ||||
| 		[ -z "$uart_path" -o ! -c "$uart_path" ] && { | ||||
| 			mcu_loge "invalid or unset 'uart_path' option" | ||||
| 			return 1 | ||||
| 		} | ||||
|  | ||||
| 		mcu_setup_uart "$uart_path" "$uart_baud" "$uart_flow" \ | ||||
| 			       "$gpio_path" "$gpio_on" "$sn" | ||||
| 		;; | ||||
| 	"usb") | ||||
| 		mcu_setup_usb "$gpio_path" "$gpio_on" "$sn" | ||||
| 		;; | ||||
| 	*) | ||||
| 		mcu_loge "unsupported or unset 'interface' option" | ||||
| 		return 1 | ||||
| 		;; | ||||
| 	esac | ||||
| } | ||||
|  | ||||
| start() { | ||||
| 	config_load mcu | ||||
| 	config_foreach mcu_setup mcu "start" | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| stop() { | ||||
| 	config_load mcu | ||||
| 	config_foreach mcu_setup mcu "stop" | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
							
								
								
									
										501
									
								
								feeds/mcu/mcu/files/mcu.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										501
									
								
								feeds/mcu/mcu/files/mcu.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,501 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| . /usr/share/libubox/jshn.sh | ||||
|  | ||||
| # Product name and VID:PID used by OpenWrt/OpenWiFi MCUboot fork | ||||
| MCUBOOT_USB_PRODUCT="MCUboot serial recovery" | ||||
| MCUBOOT_USB_VID_PID="16c005e1" | ||||
|  | ||||
| # Host support and firmware directories | ||||
| MCU_HS_DIR="/etc/mcu.d" | ||||
| MCU_FW_DIR="/lib/firmware/mcu" | ||||
|  | ||||
| MCU_FLOCK_FILE="/tmp/lock/mcu" | ||||
|  | ||||
| MCU_SYSINFO_OUTPUT= | ||||
| MCU_IMGLIST_OUTPUT= | ||||
|  | ||||
| MCU_SCRIPT_NAME="" | ||||
|  | ||||
| # logger helpers | ||||
| mcu_log() { | ||||
| 	if [ -n "$MCU_SCRIPT_NAME" ]; then | ||||
| 		logger -p "$1" -t "${MCU_SCRIPT_NAME}[$$]" "$2" | ||||
| 	else | ||||
| 		logger -p "$1" "$2" | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| mcu_loge() { | ||||
| 	mcu_log "err" "$1" | ||||
| } | ||||
|  | ||||
| mcu_logd() { | ||||
| 	mcu_log "debug" "$1" | ||||
| } | ||||
|  | ||||
| mcu_logi() { | ||||
| 	mcu_log "info" "$1" | ||||
| } | ||||
|  | ||||
| mcu_logn() { | ||||
| 	mcu_log "notice" "$1" | ||||
| } | ||||
|  | ||||
| mcu_logw() { | ||||
| 	mcu_log "warn" "$1" | ||||
| } | ||||
|  | ||||
| mcu_fetch_fwlist() { | ||||
| 	local uart="$1" | ||||
| 	local baud="$2" | ||||
| 	local flow="$3" | ||||
|  | ||||
| 	if [ "$flow" = "1" ]; then | ||||
| 		flow=" -f" | ||||
| 	else | ||||
| 		flow="" | ||||
| 	fi | ||||
|  | ||||
| 	[ -n "$baud" ] || baud="115200" | ||||
|  | ||||
| 	[ -n "$MCU_IMGLIST_OUTPUT" ] && return 0 | ||||
|  | ||||
| 	MCU_IMGLIST_OUTPUT="$(umcumgr -s -d "$uart" -b "$baud$flow" list)" | ||||
| 	[ $? -eq 0 ] || { | ||||
| 		mcu_loge "request 'list' failed (uart='$uart', baud='$baud', flow='$flow')" | ||||
| 		return 1 | ||||
| 	} | ||||
| } | ||||
|  | ||||
| mcu_fetch_sysinfo() { | ||||
| 	local uart="$1" | ||||
| 	local baud="$2" | ||||
| 	local flow="$3" | ||||
|  | ||||
| 	if [ "$flow" = "1" ]; then | ||||
| 		flow=" -f" | ||||
| 	else | ||||
| 		flow="" | ||||
| 	fi | ||||
|  | ||||
| 	[ -n "$baud" ] || baud="115200" | ||||
|  | ||||
| 	[ -n "$MCU_SYSINFO_OUTPUT" ] && return 0 | ||||
|  | ||||
| 	MCU_SYSINFO_OUTPUT="$(umcumgr -s -d "$uart" -b "$baud$flow" sysinfo)" | ||||
| 	[ $? -eq 0 ] || { | ||||
| 		mcu_loge "request 'sysinfo' failed (uart='$uart', baud='$baud', flow='$flow')" | ||||
| 		return 1 | ||||
| 	} | ||||
| } | ||||
|  | ||||
| mcu_get() { | ||||
| 	local param="$1" | ||||
| 	local slot="$2" | ||||
|  | ||||
| 	local value | ||||
| 	local metadata | ||||
| 	local sysinfo_field | ||||
|  | ||||
| 	case "$param" in | ||||
| 	"board"|\ | ||||
| 	"soft_ver"|\ | ||||
| 	"serial_num"|\ | ||||
| 	"active_slot") | ||||
| 		sysinfo_field="$param" | ||||
| 		;; | ||||
| 	"slots_num") | ||||
| 		sysinfo_field="single_slot" | ||||
| 		;; | ||||
| 	"fwname") | ||||
| 		[ -n "$slot" ] || return 1 | ||||
| 		param="image list: slot${slot} fw_name" | ||||
|  | ||||
| 		metadata="$(echo "$MCU_IMGLIST_OUTPUT" | grep "slot${slot}_metadata=" | cut -d '=' -f 2)" | ||||
| 		[ -n "$metadata" ] && { | ||||
| 			json_load "$metadata" | ||||
| 			json_get_var value fw_name | ||||
| 		} | ||||
| 		;; | ||||
| 	"fwsha") | ||||
| 		[ -n "$slot" ] || return 1 | ||||
| 		param="image list: slot${slot}_hash" | ||||
|  | ||||
| 		value="$(echo "$MCU_IMGLIST_OUTPUT" | grep "slot${slot}_hash=" | cut -d '=' -f 2)" | ||||
| 		;; | ||||
| 	*) | ||||
| 		return 1 | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
| 	[ -n "$sysinfo_field" ] && { | ||||
| 		value="$(echo "$MCU_SYSINFO_OUTPUT" | grep "${sysinfo_field}=" | cut -d '=' -f 2)" | ||||
|  | ||||
| 		[ "$sysinfo_field" = "single_slot" ] && { | ||||
| 			[ -n "$value" ] || value="1" | ||||
| 			[ "$value" != "1" ] && value="2" | ||||
| 		} | ||||
|  | ||||
| 		param="sysinfo: $param" | ||||
| 	} | ||||
|  | ||||
| 	[ -n "$value" ] && mcu_logd "$param: '$value'" | ||||
| 	echo "$value" | ||||
| } | ||||
|  | ||||
| mcu_req() { | ||||
| 	local cmd="$1" | ||||
| 	local uart="$2" | ||||
| 	local baud="$3" | ||||
| 	local flow="$4" | ||||
|  | ||||
| 	case "$cmd" in | ||||
| 	"boot"|\ | ||||
| 	"reset") | ||||
| 		;; | ||||
| 	*) | ||||
| 		return 1 | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
| 	if [ "$flow" = "1" ]; then | ||||
| 		flow=" -f" | ||||
| 	else | ||||
| 		flow="" | ||||
| 	fi | ||||
|  | ||||
| 	[ -n "$baud" ] || baud="115200" | ||||
|  | ||||
| 	umcumgr -s -d "$uart" -b "$baud$flow" "$cmd" || { | ||||
| 		mcu_loge "request '$cmd' failed (uart='$uart', baud='$baud', flow='$flow')" | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	mcu_logi "MCU requested '$cmd'" | ||||
| } | ||||
|  | ||||
| mcu_sel_slot() { | ||||
| 	local slot="$1" | ||||
| 	local uart="$2" | ||||
| 	local baud="$3" | ||||
| 	local flow="$4" | ||||
|  | ||||
| 	if [ "$flow" = "1" ]; then | ||||
| 		flow=" -f" | ||||
| 	else | ||||
| 		flow="" | ||||
| 	fi | ||||
|  | ||||
| 	[ -n "$baud" ] || baud="115200" | ||||
|  | ||||
| 	# Request firmware active slot change | ||||
| 	umcumgr -s -d "$uart" -b "$baud$flow" select "$slot" || { | ||||
| 		mcu_loge "request 'select slot' failed (uart='$uart', baud='$baud', flow='$flow')" | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	mcu_logi "active firmware slot changed to: '$slot'" | ||||
| } | ||||
|  | ||||
| mcu_fwfile_sha() { | ||||
| 	local path="$1" | ||||
|  | ||||
| 	local value | ||||
|  | ||||
| 	[ -f "$path" ] || return 1 | ||||
|  | ||||
| 	value="$(umcumgr -s hash "$path" | grep "hash=" | cut -d '=' -f 2)" | ||||
| 	[ -n "$value" ] || return 1 | ||||
|  | ||||
| 	echo "$value" | ||||
| } | ||||
|  | ||||
| mcu_fw_upload() { | ||||
| 	local board="$1" | ||||
| 	local slot="$2" | ||||
| 	local fw_name="$3" | ||||
| 	local uart="$4" | ||||
| 	local baud="$5" | ||||
| 	local flow="$6" | ||||
|  | ||||
| 	local fw_path | ||||
|  | ||||
| 	if [ "$flow" = "1" ]; then | ||||
| 		flow=" -f" | ||||
| 	else | ||||
| 		flow="" | ||||
| 	fi | ||||
|  | ||||
| 	[ -n "$baud" ] || baud="115200" | ||||
|  | ||||
| 	fw_path="${MCU_FW_DIR}/${board}/${fw_name}/slot${slot}.bin" | ||||
| 	umcumgr -q info "$fw_path" > /dev/null 2>&1 || { | ||||
| 		mcu_loge "invalid or missing firmware file: '$fw_path'" | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	mcu_logi "uploading '$fw_name' to slot: '$slot'..." | ||||
|  | ||||
| 	# Upload fw to selected slot (TODO: slots numbering Zephyr vs. MCUboot) | ||||
| 	[ "$slot" = "1" ] && slot="2" | ||||
| 	umcumgr -q -n "$slot" -d "$uart" -b "$baud$flow" upload "$fw_path" || { | ||||
| 		mcu_loge "request 'upload' failed (uart='$uart', baud='$baud', flow='$flow')" | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	mcu_logi "firmware uploaded!" | ||||
| } | ||||
|  | ||||
| mcu_enable_pin_set() { | ||||
| 	local gpio="$1" | ||||
| 	local gpio_value="$2" | ||||
|  | ||||
| 	mcu_logd "setting MCU enable_pin '$(basename "$gpio")' to '$gpio_value'" | ||||
| 	echo "$gpio_value" > "${gpio}/value" 2>/dev/null | ||||
| } | ||||
|  | ||||
| mcu_sn_check_and_update() { | ||||
| 	local sn="$1" | ||||
| 	local uart="$2" | ||||
| 	local baud="$3" | ||||
| 	local flow="$4" | ||||
|  | ||||
| 	local sn_dev | ||||
|  | ||||
| 	# Fetch sysinfo | ||||
| 	mcu_fetch_sysinfo "$uart" "$baud" "$flow" || return 1 | ||||
|  | ||||
| 	sn_dev="$(mcu_get "serial_num")" | ||||
| 	[ -n "$sn_dev" ] || return 1 | ||||
|  | ||||
| 	[ -n "$sn_dev" ] && { | ||||
| 		if [ -z "$sn" ]; then | ||||
| 			[ -d /etc/config-shadow ] && { | ||||
| 				uci -c /etc/config-shadow -q set mcu.${SECT}.sn="$sn_dev" | ||||
| 				uci -c /etc/config-shadow -q commit mcu | ||||
| 			} | ||||
|  | ||||
| 			uci -q set mcu.${SECT}.sn="$sn_dev" | ||||
| 			uci -q commit mcu | ||||
| 		else | ||||
| 			[ "$sn" != "$sn_dev" ] && { | ||||
| 				mcu_loge "MCU S/N mismatch ('$sn_dev' != '$sn')!" | ||||
| 				return 1 | ||||
| 			} | ||||
| 		fi | ||||
| 	} | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| # Returns: | ||||
| # 0 if MCU was requested to boot firmware | ||||
| # 1 on error | ||||
| # 2 if MCU was requested to reset | ||||
| mcu_fw_check_and_update() { | ||||
| 	local uart="$1" | ||||
| 	local baud="$2" | ||||
| 	local flow="$3" | ||||
|  | ||||
| 	local active_slot | ||||
| 	local fw_slots | ||||
| 	local slot0_fw | ||||
| 	local slot0_sha | ||||
| 	local slot1_fw | ||||
| 	local slot1_sha | ||||
| 	local firmware | ||||
| 	local fw0_sha | ||||
| 	local fw1_sha | ||||
| 	local board | ||||
| 	local soft_ver | ||||
|  | ||||
| 	config_get firmware "$SECT" firmware | ||||
| 	[ -n "$firmware" ] || mcu_logw "option 'firmware' unset" | ||||
|  | ||||
| 	# Fetch sysinfo and firmware images list | ||||
| 	mcu_fetch_sysinfo "$uart" "$baud" "$flow" || return 1 | ||||
| 	mcu_fetch_fwlist "$uart" "$baud" "$flow" || return 1 | ||||
|  | ||||
| 	# MCU board name and software version | ||||
| 	board="$(mcu_get "board")" | ||||
| 	[ $? -eq 0 ] || return 1 | ||||
|  | ||||
| 	soft_ver="$(mcu_get "soft_ver")" | ||||
| 	[ $? -eq 0 ] || return 1 | ||||
|  | ||||
| 	# Number of firmware slots and active slot | ||||
| 	fw_slots="$(mcu_get "slots_num")" | ||||
| 	[ $? -eq 0 ] || return 1 | ||||
| 	[ -n "$fw_slots" ] || fw_slots="1" | ||||
|  | ||||
| 	[ "$fw_slots" = "2" ] && { | ||||
| 		active_slot="$(mcu_get "active_slot")" | ||||
| 		[ $? -eq 0 ] || return 1 | ||||
| 	} | ||||
| 	[ -n "$active_slot" ] || active_slot="0" | ||||
|  | ||||
| 	# Firmware available? | ||||
| 	[ -n "$firmware" ] && { | ||||
| 		if [ "$fw_slots" = "2" ]; then | ||||
| 			[ -f "${MCU_FW_DIR}/${board}/${firmware}/slot0.bin" -a \ | ||||
| 			  -f "${MCU_FW_DIR}/${board}/${firmware}/slot1.bin" ] || { | ||||
| 				mcu_loge "firmware '$firmware' doesn't exist" | ||||
| 				return 1 | ||||
| 			} | ||||
|  | ||||
| 			fw1_sha="$(mcu_fwfile_sha "${MCU_FW_DIR}/${board}/${firmware}/slot1.bin")" | ||||
| 		else | ||||
| 			[ -f "${MCU_FW_DIR}/${board}/${firmware}/slot0.bin" ] || { | ||||
| 				mcu_loge "firmware '$firmware' doesn't exist" | ||||
| 				return 1 | ||||
| 			} | ||||
| 		fi | ||||
|  | ||||
| 		fw0_sha="$(mcu_fwfile_sha "${MCU_FW_DIR}/${board}/${firmware}/slot0.bin")" | ||||
| 	} | ||||
|  | ||||
| 	slot0_fw="$(mcu_get "fwname" "0")" | ||||
| 	[ $? -eq 0 ] || return 1 | ||||
|  | ||||
| 	[ -n "$slot0_fw" ] && { | ||||
| 		slot0_sha="$(mcu_get "fwsha" "0")" | ||||
| 		[ $? -eq 0 ] || return 1 | ||||
| 	} | ||||
|  | ||||
| 	[ "$fw_slots" = "2" ] && { | ||||
| 		slot1_fw="$(mcu_get "fwname" "1")" | ||||
| 		[ $? -eq 0 ] || return 1 | ||||
|  | ||||
| 		[ -n "$slot1_fw" ] && { | ||||
| 			slot1_sha="$(mcu_get "fwsha" "1")" | ||||
| 			[ $? -eq 0 ] || return 1 | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	# No target firmware provided, check what's on device and update config | ||||
| 	[ -n "$firmware" ] || { | ||||
| 		firmware="$slot0_fw" | ||||
| 		[ "$active_slot" = "1" ] && firmware="$slot1_fw" | ||||
|  | ||||
| 		[ -n "$firmware" ] && { | ||||
| 			[ -d /etc/config-shadow ] && { | ||||
| 				uci -c /etc/config-shadow -q set mcu.${SECT}.firmware="$firmware" | ||||
| 				uci -c /etc/config-shadow -q commit mcu | ||||
| 			} | ||||
|  | ||||
| 			uci -q set mcu.${SECT}.firmware="$firmware" | ||||
| 			uci -q commit mcu | ||||
|  | ||||
| 			mcu_req "boot" "$uart" "$baud" "$flow" | ||||
| 			[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 			return 0 | ||||
| 		} | ||||
|  | ||||
| 		return 1 | ||||
| 	} | ||||
|  | ||||
| 	# Do we have target firmware installed in the first slot? | ||||
| 	[ "$firmware" = "$slot0_fw" -a "$slot0_sha" = "$fw0_sha" ] && { | ||||
| 		mcu_logi "found matching firmware installed in slot '0'" | ||||
|  | ||||
| 		if [ "$fw_slots" = "2" -a "$active_slot" != "0" ]; then | ||||
| 			mcu_sel_slot "0" "$uart" "$baud" "$flow" | ||||
| 			[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 			# Changing active slots requires MCU reset at the moment | ||||
| 			mcu_req "reset" "$uart" "$baud" "$flow" | ||||
| 			[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 			return 2 | ||||
| 		else | ||||
| 			mcu_req "boot" "$uart" "$baud" "$flow" | ||||
| 			[ $? -ne 0 ] && return 1 | ||||
| 		fi | ||||
|  | ||||
| 		return 0 | ||||
| 	} | ||||
|  | ||||
| 	mcu_logi "no matching firmware found in slot '0'" | ||||
|  | ||||
| 	# Upload firmware and reset on single-slot device | ||||
| 	[ "$fw_slots" = "1" ] && { | ||||
| 		mcu_fw_upload "$board" "0" "$firmware" "$uart" "$baud" "$flow" | ||||
| 		[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 		mcu_req "reset" "$uart" "$baud" "$flow" | ||||
| 		[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 		return 2 | ||||
| 	} | ||||
|  | ||||
| 	# Do we have target firmware installed in the second slot? | ||||
| 	[ "$firmware" = "$slot1_fw" -a "$slot1_sha" = "$fw1_sha" ] && { | ||||
| 		mcu_logi "found matching firmware installed in slot '1'" | ||||
|  | ||||
| 		if [ "$active_slot" != "1" ]; then | ||||
| 			mcu_sel_slot "1" "$uart" "$baud" "$flow" | ||||
| 			[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 			# Changing active slots requires MCU reset at the moment | ||||
| 			mcu_req "reset" "$uart" "$baud" "$flow" | ||||
| 			[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 			return 2 | ||||
| 		else | ||||
| 			mcu_req "boot" "$uart" "$baud" "$flow" | ||||
| 			[ $? -ne 0 ] && return 1 | ||||
| 		fi | ||||
|  | ||||
| 		return 0 | ||||
| 	} | ||||
|  | ||||
| 	mcu_logi "no matching firmware found in slot '1'" | ||||
|  | ||||
| 	# Upload and boot firmware on multi-slot device | ||||
| 	# Always use inactive slot | ||||
| 	if [ "$active_slot" = "0" ]; then | ||||
| 		active_slot="1" | ||||
| 	else | ||||
| 		active_slot="0" | ||||
| 	fi | ||||
|  | ||||
| 	mcu_fw_upload "$board" "$active_slot" "$firmware" "$uart" "$baud" "$flow" | ||||
| 	[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 	mcu_sel_slot "$active_slot" "$uart" "$baud" "$flow" | ||||
| 	[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 	# Changing active slots requires MCU reset at the moment | ||||
| 	mcu_req "reset" "$uart" "$baud" "$flow" | ||||
| 	[ $? -ne 0 ] && return 1 | ||||
|  | ||||
| 	return 2 | ||||
| } | ||||
|  | ||||
| mcu_add_uci_config() { | ||||
| 	local name="$1" | ||||
| 	local interface="$2" | ||||
| 	local bootloader="$3" | ||||
| 	local firmware="$4" | ||||
| 	local enable_pin="$5" | ||||
| 	local uart_path="$6" | ||||
| 	local uart_baud="$7" | ||||
| 	local uart_flow="$8" | ||||
|  | ||||
| 	uci -q set mcu.${name}="mcu" | ||||
| 	uci -q set mcu.${name}.interface="$interface" | ||||
| 	uci -q set mcu.${name}.bootloader="$bootloader" | ||||
| 	uci -q set mcu.${name}.firmware="$firmware" | ||||
|  | ||||
| 	[ -n "$enable_pin" ] && uci -q set mcu.${name}.enable_pin="$enable_pin" | ||||
| 	[ -n "$uart_path" ] && uci -q set mcu.${name}.uart_path="$uart_path" | ||||
| 	[ -n "$uart_baud" ] && uci -q set mcu.${name}.uart_baud="$uart_baud" | ||||
|  | ||||
| 	[ "$uart_flow" = "1" ] && uci -q set mcu.${name}.uart_flow="1" | ||||
|  | ||||
| 	uci -q set mcu.${name}.disabled="0" | ||||
|  | ||||
| 	uci -q commit mcu | ||||
| } | ||||
							
								
								
									
										23
									
								
								feeds/mcu/mcu/files/uci-defaults/ipq807x
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								feeds/mcu/mcu/files/uci-defaults/ipq807x
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| [ -e /etc/config/mcu ] && exit 0 | ||||
|  | ||||
| touch /etc/config/mcu | ||||
|  | ||||
| . /lib/functions.sh | ||||
| . /lib/functions/mcu.sh | ||||
|  | ||||
| board=$(board_name) | ||||
|  | ||||
| case "$board" in | ||||
| cig,wf196) | ||||
| 	mcu_add_uci_config "nrf52833_uart" "uart" "mcuboot" \ | ||||
| 			   "zephyr-v3.3.x__hci_uart" \ | ||||
| 			   "mcu-enable" "/dev/ttyMSM1" "115200" | ||||
| 	;; | ||||
| edgecore,eap102) | ||||
| 	mcu_add_uci_config "nrf52840_usb" "usb" "mcuboot" \ | ||||
| 			   "zephyr-v3.3.x__hci_usb" \ | ||||
| 			   "mcu-enable" | ||||
| 	;; | ||||
| esac | ||||
|  | ||||
| exit 0 | ||||
							
								
								
									
										43
									
								
								feeds/mcu/umcumgr/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								feeds/mcu/umcumgr/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| # | ||||
| # Copyright (C) 2023 OpenWrt.org | ||||
| # | ||||
| # This is free software, licensed under the GNU General Public License v2. | ||||
| # See /LICENSE for more information. | ||||
| # | ||||
|  | ||||
| include $(TOPDIR)/rules.mk | ||||
|  | ||||
| PKG_NAME:=umcumgr | ||||
| PKG_SOURCE_PROTO:=git | ||||
| PKG_SOURCE_URL:=https://gitlab.com/pepe2k/umcumgr | ||||
| PKG_SOURCE_DATE:=2023-03-06 | ||||
| PKG_SOURCE_VERSION:=966606a2868b8e6b0a2c7e129dc45a30e0d9ef87 | ||||
|  | ||||
| PKG_LICENSE:=Apache-2.0 | ||||
| PKG_LICENSE_FILES:= | ||||
|  | ||||
| PKG_MAINTAINER:=Piotr Dymacz <pepe2k@gmail.com> | ||||
|  | ||||
| include $(INCLUDE_DIR)/package.mk | ||||
| include $(INCLUDE_DIR)/cmake.mk | ||||
|  | ||||
| CMAKE_INSTALL:=1 | ||||
|  | ||||
| define Package/umcumgr | ||||
|   SECTION:=utils | ||||
|   CATEGORY:=Utilities | ||||
|   DEPENDS:=+libubox | ||||
|   TITLE:=User space tool for MCUmgr SMP based management | ||||
| endef | ||||
|  | ||||
| define Package/umcumgr/description | ||||
|   Simple user space tool for MCU management over MCUmgr SMP | ||||
|   (Simple Management Protocol) protocol | ||||
| endef | ||||
|  | ||||
| define Package/umcumgr/install | ||||
| 	$(INSTALL_DIR) $(1)/usr/bin | ||||
| 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/umcumgr $(1)/usr/bin/ | ||||
| endef | ||||
|  | ||||
| $(eval $(call BuildPackage,umcumgr)) | ||||
							
								
								
									
										169
									
								
								feeds/ucentral/bluez/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										169
									
								
								feeds/ucentral/bluez/Makefile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,169 @@ | ||||
| # | ||||
| # Copyright (C) 2006-2016 OpenWrt.org | ||||
| # | ||||
| # This is free software, licensed under the GNU General Public License v2. | ||||
| # See /LICENSE for more information. | ||||
| # | ||||
|  | ||||
| include $(TOPDIR)/rules.mk | ||||
|  | ||||
| PKG_NAME:=bluez | ||||
| PKG_VERSION:=5.66 | ||||
| PKG_RELEASE:=1 | ||||
|  | ||||
| PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz | ||||
| PKG_SOURCE_URL:=@KERNEL/linux/bluetooth/ | ||||
| PKG_HASH:=39fea64b590c9492984a0c27a89fc203e1cdc74866086efb8f4698677ab2b574 | ||||
|  | ||||
| PKG_LICENSE:=GPL-2.0-or-later | ||||
| PKG_LICENSE_FILES:=COPYING | ||||
| PKG_MAINTAINER:= | ||||
| PKG_CPE_ID:=cpe:/a:bluez:bluez | ||||
|  | ||||
| PKG_BUILD_PARALLEL:=1 | ||||
| PKG_INSTALL:=1 | ||||
|  | ||||
| include $(INCLUDE_DIR)/package.mk | ||||
| include $(INCLUDE_DIR)/nls.mk | ||||
|  | ||||
| define Package/bluez/Default | ||||
|   TITLE:=Bluetooth | ||||
|   URL:=http://www.bluez.org/ | ||||
| endef | ||||
|  | ||||
| define Package/bluez-libs | ||||
| $(call Package/bluez/Default) | ||||
|   SECTION:=libs | ||||
|   CATEGORY:=Libraries | ||||
|   TITLE+= library | ||||
|   DEPENDS:=+libpthread +USB_SUPPORT:kmod-bluetooth | ||||
| endef | ||||
|  | ||||
| define Package/bluez-utils | ||||
| $(call Package/bluez/Default) | ||||
|   SECTION:=utils | ||||
|   CATEGORY:=Utilities | ||||
|   TITLE+= utilities | ||||
|   DEPENDS:=+bluez-libs | ||||
| endef | ||||
|  | ||||
| define Package/bluez-utils-btmon | ||||
| $(call Package/bluez/Default) | ||||
|   SECTION:=utils | ||||
|   CATEGORY:=Utilities | ||||
|   TITLE+= utilities | ||||
|   DEPENDS:=+bluez-libs +glib2 | ||||
| endef | ||||
|  | ||||
| define Package/bluez-utils-extra | ||||
| $(call Package/bluez/Default) | ||||
|   SECTION:=utils | ||||
|   CATEGORY:=Utilities | ||||
|   TITLE+= additional utilities | ||||
|   DEPENDS:=+bluez-libs +libpthread +librt +glib2 +libncurses +libreadline $(INTL_DEPENDS) $(ICONV_DEPENDS) +dbus | ||||
| endef | ||||
|  | ||||
| define Package/bluez-daemon | ||||
| $(call Package/bluez/Default) | ||||
|   SECTION:=utils | ||||
|   CATEGORY:=Utilities | ||||
|   TITLE+= daemon | ||||
|   DEPENDS:=+bluez-libs +bluez-utils +bluez-utils-extra +glib2 +libncurses +libreadline +dbus +libical $(INTL_DEPENDS) $(ICONV_DEPENDS) | ||||
| endef | ||||
|  | ||||
| define Package/bluez-daemon/conffiles | ||||
| /etc/bluetooth/main.conf | ||||
| /etc/bluetooth/network.conf | ||||
| /etc/bluetooth/input.conf | ||||
| /etc/bluetooth/keys | ||||
| /etc/config/bluetooth | ||||
| endef | ||||
|  | ||||
| TARGET_CFLAGS += -D_GNU_SOURCE -ffunction-sections -fdata-sections | ||||
| TARGET_LDFLAGS += -Wl,--gc-sections | ||||
|  | ||||
| CONFIGURE_ARGS += \ | ||||
| 	--enable-static \ | ||||
| 	--enable-shared \ | ||||
| 	--enable-client \ | ||||
| 	--enable-datafiles \ | ||||
| 	--enable-experimental \ | ||||
| 	--enable-library \ | ||||
| 	--enable-monitor \ | ||||
| 	--enable-obex \ | ||||
| 	--enable-threads \ | ||||
| 	--enable-tools \ | ||||
| 	--disable-android \ | ||||
| 	--disable-cups \ | ||||
| 	--disable-manpages \ | ||||
| 	--disable-sixaxis \ | ||||
| 	--disable-systemd \ | ||||
| 	--disable-test \ | ||||
| 	--disable-udev \ | ||||
| 	--enable-deprecated | ||||
|  | ||||
| define Build/InstallDev | ||||
| 	$(INSTALL_DIR) $(1)/usr/include | ||||
| 	$(CP) $(PKG_INSTALL_DIR)/usr/include/bluetooth $(1)/usr/include/ | ||||
| 	$(INSTALL_DIR) $(1)/usr/lib | ||||
| 	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libbluetooth.{a,so*} $(1)/usr/lib/ | ||||
| 	$(INSTALL_DIR) $(1)/usr/lib/pkgconfig | ||||
| 	$(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/bluez.pc $(1)/usr/lib/pkgconfig/ | ||||
| endef | ||||
|  | ||||
| define Package/bluez-libs/install | ||||
| 	$(INSTALL_DIR) $(1)/usr/lib | ||||
| 	$(CP) $(PKG_INSTALL_DIR)/usr/lib/libbluetooth.so.* $(1)/usr/lib/ | ||||
| endef | ||||
|  | ||||
| define Package/bluez-utils/install | ||||
| 	$(INSTALL_DIR) $(1)/usr/bin | ||||
| 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/bdaddr $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/bluemoon $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/btattach $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ciptool $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/hciattach $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/hciconfig $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/hcidump $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/hcitool $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/hex2hcd $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/l2ping $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/l2test $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rctest $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rfcomm $(1)/usr/bin/ | ||||
| endef | ||||
|  | ||||
| define Package/bluez-utils-btmon/install | ||||
| 	$(INSTALL_DIR) $(1)/usr/bin | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/btmon $(1)/usr/bin/ | ||||
| endef | ||||
|  | ||||
| define Package/bluez-utils-extra/install | ||||
| 	$(INSTALL_DIR) $(1)/usr/bin | ||||
| 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/tools/btmgmt $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/mpris-proxy $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/sdptool $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_BUILD_DIR)/attrib/gatttool $(1)/usr/bin/ | ||||
| endef | ||||
|  | ||||
| define Package/bluez-daemon/install | ||||
| 	$(INSTALL_DIR) $(1)/usr/bin | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/bluetooth/bluetoothd $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/bluetoothctl $(1)/usr/bin/ | ||||
| 	$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/bluetooth/obexd $(1)/usr/bin/ | ||||
| 	$(INSTALL_DIR) $(1)/etc/dbus-1/system.d/ | ||||
| 	$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/bluetooth.conf $(1)/etc/dbus-1/system.d/bluetooth.conf | ||||
| 	$(INSTALL_DIR) $(1)/etc/bluetooth | ||||
| 	$(INSTALL_DIR) $(1)/etc/bluetooth/keys | ||||
| 	$(INSTALL_DATA) $(PKG_BUILD_DIR)/src/main.conf $(1)/etc/bluetooth/main.conf | ||||
| 	$(INSTALL_DATA) $(PKG_BUILD_DIR)/profiles/network/network.conf $(1)/etc/bluetooth/network.conf | ||||
| 	$(INSTALL_DATA) $(PKG_BUILD_DIR)/profiles/input/input.conf $(1)/etc/bluetooth/input.conf | ||||
| 	$(INSTALL_DIR) $(1)/etc/init.d | ||||
| 	$(INSTALL_BIN) ./files/bluetoothd.init $(1)/etc/init.d/bluetoothd | ||||
| endef | ||||
|  | ||||
| $(eval $(call BuildPackage,bluez-libs)) | ||||
| $(eval $(call BuildPackage,bluez-utils)) | ||||
| $(eval $(call BuildPackage,bluez-utils-btmon)) | ||||
| $(eval $(call BuildPackage,bluez-utils-extra)) | ||||
| $(eval $(call BuildPackage,bluez-daemon)) | ||||
							
								
								
									
										14
									
								
								feeds/ucentral/bluez/files/bluetoothd.init
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								feeds/ucentral/bluez/files/bluetoothd.init
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| #!/bin/sh /etc/rc.common | ||||
| # Copyright (C) 2007 OpenWrt.org | ||||
|  | ||||
| #start after dbus (60) | ||||
| START=62 | ||||
| USE_PROCD=1 | ||||
| PROG=/usr/bin/bluetoothd | ||||
|  | ||||
| start_service() { | ||||
| 	ln -snf /etc/bluetooth/keys/ /var/lib/bluetooth | ||||
| 	procd_open_instance | ||||
| 	procd_set_param command "$PROG" -n | ||||
| 	procd_close_instance | ||||
| } | ||||
							
								
								
									
										14
									
								
								feeds/ucentral/bluez/files/givepin
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								feeds/ucentral/bluez/files/givepin
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| # Write bluetooth PIN number here: | ||||
| pin= | ||||
|  | ||||
| if [ -z "$pin" ]; then | ||||
| 	msg="Set bluetooth PIN in file $0" | ||||
| 	logger -p user.err "$msg" | ||||
| 	for i in /dev/pts/* ; do | ||||
| 		[ -w $i ] && echo "$msg" > $i | ||||
| 	done | ||||
| else | ||||
| 	echo "PIN:$pin" | ||||
| fi | ||||
| @@ -0,0 +1,21 @@ | ||||
| From b4f2b77472aeb967d3a7595e8a965785c7a37c87 Mon Sep 17 00:00:00 2001 | ||||
| From: Phil Elwell <phil@raspberrypi.org> | ||||
| Date: Tue, 16 Feb 2016 16:40:46 +0000 | ||||
| Subject: [PATCH 1/4] bcm43xx: Add bcm43xx-3wire variant | ||||
|  | ||||
| --- | ||||
|  tools/hciattach.c | 3 +++ | ||||
|  1 file changed, 3 insertions(+) | ||||
|  | ||||
| --- a/tools/hciattach.c | ||||
| +++ b/tools/hciattach.c | ||||
| @@ -1078,6 +1078,9 @@ struct uart_t uart[] = { | ||||
|  	{ "bcm43xx",    0x0000, 0x0000, HCI_UART_H4,   115200, 3000000, | ||||
|  				FLOW_CTL, DISABLE_PM, NULL, bcm43xx, NULL  }, | ||||
|   | ||||
| +	{ "bcm43xx-3wire",    0x0000, 0x0000, HCI_UART_3WIRE, 115200, 3000000, | ||||
| +				0, DISABLE_PM, NULL, bcm43xx, NULL  }, | ||||
| + | ||||
|  	{ "ath3k",    0x0000, 0x0000, HCI_UART_ATH3K, 115200, 115200, | ||||
|  			FLOW_CTL, DISABLE_PM, NULL, ath3k_ps, ath3k_pm  }, | ||||
|   | ||||
| @@ -0,0 +1,33 @@ | ||||
| From e145c9621f976063e5c573db1f2053d906f63427 Mon Sep 17 00:00:00 2001 | ||||
| From: Phil Elwell <phil@raspberrypi.org> | ||||
| Date: Tue, 16 Feb 2016 16:39:09 +0000 | ||||
| Subject: [PATCH 2/4] bcm43xx: The UART speed must be reset after the firmware | ||||
|  download | ||||
|  | ||||
| --- | ||||
|  tools/hciattach_bcm43xx.c | 6 ++---- | ||||
|  1 file changed, 2 insertions(+), 4 deletions(-) | ||||
|  | ||||
| --- a/tools/hciattach_bcm43xx.c | ||||
| +++ b/tools/hciattach_bcm43xx.c | ||||
| @@ -350,11 +350,8 @@ int bcm43xx_init(int fd, int def_speed, | ||||
|  		return -1; | ||||
|   | ||||
|  	if (bcm43xx_locate_patch(FIRMWARE_DIR, chip_name, fw_path)) { | ||||
| -		fprintf(stderr, "Patch not found, continue anyway\n"); | ||||
| +		fprintf(stderr, "Patch not found for %s, continue anyway\n", chip_name); | ||||
|  	} else { | ||||
| -		if (bcm43xx_set_speed(fd, ti, speed)) | ||||
| -			return -1; | ||||
| - | ||||
|  		if (bcm43xx_load_firmware(fd, fw_path)) | ||||
|  			return -1; | ||||
|   | ||||
| @@ -364,6 +361,7 @@ int bcm43xx_init(int fd, int def_speed, | ||||
|  			return -1; | ||||
|  		} | ||||
|   | ||||
| +		sleep(1); | ||||
|  		if (bcm43xx_reset(fd)) | ||||
|  			return -1; | ||||
|  	} | ||||
| @@ -0,0 +1,20 @@ | ||||
| From d41dc2046dd08d8c95197f677e224506f5b39bdd Mon Sep 17 00:00:00 2001 | ||||
| From: Phil Elwell <phil@raspberrypi.org> | ||||
| Date: Wed, 20 Jan 2016 16:00:37 +0000 | ||||
| Subject: [PATCH 3/4] Increase firmware load timeout to 30s | ||||
|  | ||||
| --- | ||||
|  tools/hciattach.c | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
|  | ||||
| --- a/tools/hciattach.c | ||||
| +++ b/tools/hciattach.c | ||||
| @@ -1227,7 +1227,7 @@ int main(int argc, char *argv[]) | ||||
|  { | ||||
|  	struct uart_t *u = NULL; | ||||
|  	int detach, printpid, raw, opt, i, n, ld, err; | ||||
| -	int to = 10; | ||||
| +	int to = 30; | ||||
|  	int init_speed = 0; | ||||
|  	int send_break = 0; | ||||
|  	pid_t pid; | ||||
| @@ -0,0 +1,20 @@ | ||||
| From 76681284b0ea49852041fdb97a35175089a08781 Mon Sep 17 00:00:00 2001 | ||||
| From: Phil Elwell <phil@raspberrypi.org> | ||||
| Date: Tue, 23 Feb 2016 17:52:29 +0000 | ||||
| Subject: [PATCH 4/4] Move the 43xx firmware into /lib/firmware | ||||
|  | ||||
| --- | ||||
|  tools/hciattach_bcm43xx.c | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
|  | ||||
| --- a/tools/hciattach.h | ||||
| +++ b/tools/hciattach.h | ||||
| @@ -41,7 +41,7 @@ | ||||
|  #define HCI_UART_VND_DETECT	5 | ||||
|   | ||||
|  #ifndef FIRMWARE_DIR | ||||
| -#define FIRMWARE_DIR "/etc/firmware" | ||||
| +#define FIRMWARE_DIR "/lib/firmware/brcm" | ||||
|  #endif | ||||
|   | ||||
|  int read_hci_event(int fd, unsigned char *buf, int size); | ||||
							
								
								
									
										75
									
								
								feeds/ucentral/bluez/patches/201-readline.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								feeds/ucentral/bluez/patches/201-readline.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
| --- a/Makefile.in | ||||
| +++ b/Makefile.in | ||||
| @@ -3598,7 +3598,7 @@ unit_tests = $(am__append_62) unit/test- | ||||
|  @CLIENT_TRUE@					client/player.h client/player.c | ||||
|   | ||||
|  @CLIENT_TRUE@client_bluetoothctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \ | ||||
| -@CLIENT_TRUE@				$(GLIB_LIBS) $(DBUS_LIBS) -lreadline | ||||
| +@CLIENT_TRUE@				$(GLIB_LIBS) $(DBUS_LIBS) -lreadline -lncurses | ||||
|   | ||||
|  @ZSH_COMPLETIONS_TRUE@zshcompletiondir = $(ZSH_COMPLETIONDIR) | ||||
|  @ZSH_COMPLETIONS_TRUE@dist_zshcompletion_DATA = completion/zsh/_bluetoothctl | ||||
| @@ -3877,7 +3877,7 @@ unit_tests = $(am__append_62) unit/test- | ||||
|   | ||||
|  @DEPRECATED_TRUE@@MESH_TRUE@@TOOLS_TRUE@tools_meshctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \ | ||||
|  @DEPRECATED_TRUE@@MESH_TRUE@@TOOLS_TRUE@				lib/libbluetooth-internal.la \ | ||||
| -@DEPRECATED_TRUE@@MESH_TRUE@@TOOLS_TRUE@				$(GLIB_LIBS) $(DBUS_LIBS) -ljson-c -lreadline | ||||
| +@DEPRECATED_TRUE@@MESH_TRUE@@TOOLS_TRUE@				$(GLIB_LIBS) $(DBUS_LIBS) -ljson-c -lreadline -lncurses | ||||
|   | ||||
|  @MESH_TRUE@@TOOLS_TRUE@tools_mesh_cfgclient_SOURCES = tools/mesh-cfgclient.c \ | ||||
|  @MESH_TRUE@@TOOLS_TRUE@				tools/mesh/model.h tools/mesh/config-model.h \ | ||||
| @@ -3891,7 +3891,7 @@ unit_tests = $(am__append_62) unit/test- | ||||
|  @MESH_TRUE@@TOOLS_TRUE@				mesh/crypto.h mesh/crypto.c | ||||
|   | ||||
|  @MESH_TRUE@@TOOLS_TRUE@tools_mesh_cfgclient_LDADD = lib/libbluetooth-internal.la src/libshared-ell.la \ | ||||
| -@MESH_TRUE@@TOOLS_TRUE@						$(ell_ldadd) -ljson-c -lreadline | ||||
| +@MESH_TRUE@@TOOLS_TRUE@						$(ell_ldadd) -ljson-c -lreadline -lncurses | ||||
|   | ||||
|  @MESH_TRUE@@TOOLS_TRUE@tools_mesh_cfgtest_SOURCES = tools/mesh-cfgtest.c | ||||
|  @MESH_TRUE@@TOOLS_TRUE@tools_mesh_cfgtest_LDADD = lib/libbluetooth-internal.la src/libshared-ell.la \ | ||||
| @@ -3948,7 +3948,7 @@ unit_tests = $(am__append_62) unit/test- | ||||
|  @READLINE_TRUE@						tools/obex-client-tool.c | ||||
|   | ||||
|  @READLINE_TRUE@tools_obex_client_tool_LDADD = lib/libbluetooth-internal.la \ | ||||
| -@READLINE_TRUE@			       src/libshared-glib.la $(GLIB_LIBS) -lreadline | ||||
| +@READLINE_TRUE@			       src/libshared-glib.la $(GLIB_LIBS) -lreadline -lncurses | ||||
|   | ||||
|  @READLINE_TRUE@tools_obex_server_tool_SOURCES = $(gobex_sources) $(btio_sources) \ | ||||
|  @READLINE_TRUE@						tools/obex-server-tool.c | ||||
| @@ -3959,15 +3959,15 @@ unit_tests = $(am__append_62) unit/test- | ||||
|  @READLINE_TRUE@tools_bluetooth_player_SOURCES = tools/bluetooth-player.c client/player.c | ||||
|  @READLINE_TRUE@tools_bluetooth_player_LDADD = gdbus/libgdbus-internal.la \ | ||||
|  @READLINE_TRUE@				src/libshared-glib.la \ | ||||
| -@READLINE_TRUE@				$(GLIB_LIBS) $(DBUS_LIBS) -lreadline | ||||
| +@READLINE_TRUE@				$(GLIB_LIBS) $(DBUS_LIBS) -lreadline -lncurses | ||||
|   | ||||
|  @READLINE_TRUE@tools_obexctl_SOURCES = tools/obexctl.c | ||||
|  @READLINE_TRUE@tools_obexctl_LDADD = gdbus/libgdbus-internal.la src/libshared-glib.la \ | ||||
| -@READLINE_TRUE@			$(GLIB_LIBS) $(DBUS_LIBS) -lreadline | ||||
| +@READLINE_TRUE@			$(GLIB_LIBS) $(DBUS_LIBS) -lreadline -lncurses | ||||
|   | ||||
|  @READLINE_TRUE@tools_btmgmt_SOURCES = tools/btmgmt.c src/uuid-helper.c client/display.c | ||||
|  @READLINE_TRUE@tools_btmgmt_LDADD = lib/libbluetooth-internal.la src/libshared-mainloop.la \ | ||||
| -@READLINE_TRUE@				-lreadline | ||||
| +@READLINE_TRUE@				-lreadline -lncurses | ||||
|   | ||||
|  @DEPRECATED_TRUE@@READLINE_TRUE@attrib_gatttool_SOURCES = attrib/gatttool.c attrib/att.c attrib/gatt.c \ | ||||
|  @DEPRECATED_TRUE@@READLINE_TRUE@				attrib/gattrib.c btio/btio.c \ | ||||
| @@ -3976,7 +3976,7 @@ unit_tests = $(am__append_62) unit/test- | ||||
|  @DEPRECATED_TRUE@@READLINE_TRUE@				client/display.h | ||||
|   | ||||
|  @DEPRECATED_TRUE@@READLINE_TRUE@attrib_gatttool_LDADD = lib/libbluetooth-internal.la \ | ||||
| -@DEPRECATED_TRUE@@READLINE_TRUE@			src/libshared-glib.la $(GLIB_LIBS) -lreadline | ||||
| +@DEPRECATED_TRUE@@READLINE_TRUE@			src/libshared-glib.la $(GLIB_LIBS) -lreadline -lncurses | ||||
|   | ||||
|  @CUPS_TRUE@cupsdir = $(libdir)/cups/backend | ||||
|  @CUPS_TRUE@profiles_cups_bluetooth_SOURCES = profiles/cups/main.c \ | ||||
| @@ -3996,7 +3996,7 @@ unit_tests = $(am__append_62) unit/test- | ||||
|  @BTPCLIENT_TRUE@tools_btpclient_DEPENDENCIES = lib/libbluetooth-internal.la $(ell_dependencies) | ||||
|  @BTPCLIENT_TRUE@tools_btpclientctl_SOURCES = tools/btpclientctl.c client/display.c | ||||
|  @BTPCLIENT_TRUE@tools_btpclientctl_LDADD = src/libshared-mainloop.la src/libshared-glib.la \ | ||||
| -@BTPCLIENT_TRUE@				lib/libbluetooth-internal.la -lreadline | ||||
| +@BTPCLIENT_TRUE@				lib/libbluetooth-internal.la -lreadline -lncurses | ||||
|   | ||||
|   | ||||
|  # SPDX-License-Identifier: GPL-2.0 | ||||
							
								
								
									
										10
									
								
								feeds/ucentral/bluez/patches/202-fix-endianness.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								feeds/ucentral/bluez/patches/202-fix-endianness.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| --- a/src/shared/util.h | ||||
| +++ b/src/shared/util.h | ||||
| @@ -15,6 +15,7 @@ | ||||
|  #include <byteswap.h> | ||||
|  #include <string.h> | ||||
|  #include <sys/types.h> | ||||
| +#include <endian.h> | ||||
|   | ||||
|  #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) | ||||
|  #define BIT(n)  (1 << (n)) | ||||
							
								
								
									
										49
									
								
								feeds/ucentral/bluez/patches/203-obexd_without_systemd.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								feeds/ucentral/bluez/patches/203-obexd_without_systemd.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| Submitted By:            Armin K. <krejzi at email dot com> | ||||
| Date:                    2013-04-29 | ||||
| Initial Package Version: 5.17 | ||||
| Upstream Status:         unknown | ||||
| Origin:                  Arch Linux (Giovanni Campagna) | ||||
| Description:             Allow using obexd without systemd in the user session | ||||
|  | ||||
| Not all sessions run systemd --user (actually, the majority | ||||
| doesn't), so the dbus daemon must be able to spawn obexd | ||||
| directly, and to do so it needs the full path of the daemon. | ||||
| --- | ||||
|  Makefile.obexd                      | 4 ++-- | ||||
|  obexd/src/org.bluez.obex.service    | 4 ---- | ||||
|  obexd/src/org.bluez.obex.service.in | 4 ++++ | ||||
|  3 files changed, 6 insertions(+), 6 deletions(-) | ||||
|  delete mode 100644 obexd/src/org.bluez.obex.service | ||||
|  create mode 100644 obexd/src/org.bluez.obex.service.in | ||||
|  | ||||
| --- a/Makefile.obexd | ||||
| +++ b/Makefile.obexd | ||||
| @@ -2,12 +2,12 @@ | ||||
|  if SYSTEMD | ||||
|  systemduserunitdir = $(SYSTEMD_USERUNITDIR) | ||||
|  systemduserunit_DATA = obexd/src/obex.service | ||||
| +endif | ||||
|   | ||||
|  dbussessionbusdir = $(DBUS_SESSIONBUSDIR) | ||||
|  dbussessionbus_DATA = obexd/src/org.bluez.obex.service | ||||
| -endif | ||||
|   | ||||
| -EXTRA_DIST += obexd/src/obex.service.in obexd/src/org.bluez.obex.service | ||||
| +EXTRA_DIST += obexd/src/obex.service.in obexd/src/org.bluez.obex.service.in | ||||
|   | ||||
|  if OBEX | ||||
|   | ||||
| --- a/obexd/src/org.bluez.obex.service | ||||
| +++ /dev/null | ||||
| @@ -1,4 +0,0 @@ | ||||
| -[D-BUS Service] | ||||
| -Name=org.bluez.obex | ||||
| -Exec=/bin/false | ||||
| -SystemdService=dbus-org.bluez.obex.service | ||||
| --- /dev/null | ||||
| +++ b/obexd/src/org.bluez.obex.service.in | ||||
| @@ -0,0 +1,4 @@ | ||||
| +[D-BUS Service] | ||||
| +Name=org.bluez.obex | ||||
| +Exec=@libexecdir@/obexd | ||||
| +SystemdService=dbus-org.bluez.obex.service | ||||
| @@ -0,0 +1,47 @@ | ||||
| From 2c3bba7b38be03834162e34069156f1fd49f0528 Mon Sep 17 00:00:00 2001 | ||||
| From: "antoine.belvire@laposte.net" <antoine.belvire@laposte.net> | ||||
| Date: Tue, 27 Mar 2018 20:30:26 +0200 | ||||
| Subject: adapter: Don't refresh adv_manager for non-LE devices | ||||
|  | ||||
| btd_adv_manager_refresh is called upon MGMT_SETTING_DISCOVERABLE setting change | ||||
| but as only LE adapters have an adv_manager, this leads to segmentation fault | ||||
| for non-LE devices: | ||||
|  | ||||
| 0  btd_adv_manager_refresh (manager=0x0) at src/advertising.c:1176 | ||||
| 1  0x0000556fe45fcb02 in settings_changed (settings=<optimized out>, | ||||
|     adapter=0x556fe53f7c70) at src/adapter.c:543 | ||||
| 2  new_settings_callback (index=<optimized out>, length=<optimized out>, | ||||
|     param=<optimized out>, user_data=0x556fe53f7c70) at src/adapter.c:573 | ||||
| 3  0x0000556fe462c278 in request_complete (mgmt=mgmt@entry=0x556fe53f20c0, | ||||
|     status=<optimized out>, opcode=opcode@entry=7, index=index@entry=0, | ||||
|     length=length@entry=4, param=0x556fe53eb5f9) at src/shared/mgmt.c:261 | ||||
| 4  0x0000556fe462cd9d in can_read_data (io=<optimized out>, | ||||
|     user_data=0x556fe53f20c0) at src/shared/mgmt.c:353 | ||||
| 5  0x0000556fe46396e3 in watch_callback (channel=<optimized out>, | ||||
|     cond=<optimized out>, user_data=<optimized out>) | ||||
|     at src/shared/io-glib.c:170 | ||||
| 6  0x00007fe351c980e5 in g_main_context_dispatch () | ||||
|    from /usr/lib64/libglib-2.0.so.0 | ||||
| 7  0x00007fe351c984b0 in ?? () from /usr/lib64/libglib-2.0.so.0 | ||||
| 8  0x00007fe351c987c2 in g_main_loop_run () from /usr/lib64/libglib-2.0.so.0 | ||||
| 9  0x0000556fe45abc75 in main (argc=<optimized out>, argv=<optimized out>) | ||||
|     at src/main.c:770 | ||||
|  | ||||
| This commit prevents the call to btd_adv_manager_refresh for non-LE devices. | ||||
| --- | ||||
|  src/adapter.c | 3 ++- | ||||
|  1 file changed, 2 insertions(+), 1 deletion(-) | ||||
|  | ||||
| --- a/src/adapter.c | ||||
| +++ b/src/adapter.c | ||||
| @@ -634,7 +634,9 @@ static void settings_changed(struct btd_ | ||||
|  		 */ | ||||
|  		if (!adapter->discovery_discoverable) | ||||
|  			store_adapter_info(adapter); | ||||
| -		btd_adv_manager_refresh(adapter->adv_manager); | ||||
| + | ||||
| +		if (adapter->supported_settings & MGMT_SETTING_LE) | ||||
| +			btd_adv_manager_refresh(adapter->adv_manager); | ||||
|  	} | ||||
|   | ||||
|  	if (changed_mask & MGMT_SETTING_BONDABLE) { | ||||
							
								
								
									
										27
									
								
								feeds/ucentral/bluez/patches/206-sync.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								feeds/ucentral/bluez/patches/206-sync.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| --- a/obexd/client/sync.c | ||||
| +++ b/obexd/client/sync.c | ||||
| @@ -209,7 +209,7 @@ static void sync_remove(struct obc_sessi | ||||
|  	g_dbus_unregister_interface(conn, path, SYNC_INTERFACE); | ||||
|  } | ||||
|   | ||||
| -static struct obc_driver sync = { | ||||
| +static struct obc_driver sync2 = { | ||||
|  	.service = "SYNC", | ||||
|  	.uuid = SYNC_UUID, | ||||
|  	.target = OBEX_SYNC_UUID, | ||||
| @@ -228,7 +228,7 @@ int sync_init(void) | ||||
|  	if (!conn) | ||||
|  		return -EIO; | ||||
|   | ||||
| -	err = obc_driver_register(&sync); | ||||
| +	err = obc_driver_register(&sync2); | ||||
|  	if (err < 0) { | ||||
|  		dbus_connection_unref(conn); | ||||
|  		conn = NULL; | ||||
| @@ -245,5 +245,5 @@ void sync_exit(void) | ||||
|  	dbus_connection_unref(conn); | ||||
|  	conn = NULL; | ||||
|   | ||||
| -	obc_driver_unregister(&sync); | ||||
| +	obc_driver_unregister(&sync2); | ||||
|  } | ||||
							
								
								
									
										12
									
								
								feeds/ucentral/bluez/patches/210-util-define-MAX_INPUT.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								feeds/ucentral/bluez/patches/210-util-define-MAX_INPUT.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| --- a/src/shared/util.c | ||||
| +++ b/src/shared/util.c | ||||
| @@ -23,6 +23,9 @@ | ||||
|  #include <dirent.h> | ||||
|  #include <limits.h> | ||||
|  #include <string.h> | ||||
| +#ifndef MAX_INPUT | ||||
| +#define MAX_INPUT _POSIX_MAX_INPUT | ||||
| +#endif | ||||
|   | ||||
|  #ifdef HAVE_SYS_RANDOM_H | ||||
|  #include <sys/random.h> | ||||
| @@ -10,7 +10,7 @@ add_rate() { | ||||
| 	config_get ssid "$cfg" ssid | ||||
| 	config_get ingress "$cfg" ingress | ||||
| 	config_get egress "$cfg" egress | ||||
| 	ubus call ratelimit defaults_set '{"name": "'$ssid'", "rate_ingress": "'$ingress'mbit", "rate_egress": "'$egress'mbit" }' | ||||
| 	ubus call ratelimit defaults_set "{\"name\": \"$ssid\", \"rate_ingress\": \""$ingress"mbit\", \"rate_egress\": \""$egress"mbit\" }" | ||||
| } | ||||
|  | ||||
| reload_service() { | ||||
|   | ||||
							
								
								
									
										31
									
								
								feeds/ucentral/rtty/patches/300-throttle.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								feeds/ucentral/rtty/patches/300-throttle.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| Index: rtty-7.1.4/src/rtty.c | ||||
| =================================================================== | ||||
| --- rtty-7.1.4.orig/src/rtty.c | ||||
| +++ rtty-7.1.4/src/rtty.c | ||||
| @@ -36,6 +36,8 @@ | ||||
|  #include "utils.h" | ||||
|  #include "command.h" | ||||
|   | ||||
| +#include <poll.h> | ||||
| + | ||||
|  extern int force_exit; | ||||
|  extern int connected; | ||||
|   | ||||
| @@ -84,7 +86,7 @@ static void pty_on_read(struct ev_loop * | ||||
|      struct tty *tty = container_of(w, struct tty, ior); | ||||
|      struct rtty *rtty = tty->rtty; | ||||
|      struct buffer *wb = &rtty->wb; | ||||
| -    static uint8_t buf[4096]; | ||||
| +    static uint8_t buf[32* 1024]; | ||||
|      int len; | ||||
|   | ||||
|      while (1) { | ||||
| @@ -394,6 +396,8 @@ static void on_net_write(struct ev_loop | ||||
|   | ||||
|      if (buffer_length(&rtty->wb) < 1) | ||||
|          ev_io_stop(loop, w); | ||||
| + | ||||
| +    poll(NULL, 0, 100); | ||||
|  } | ||||
|   | ||||
|  static void on_net_connected(int sock, void *arg) | ||||
| @@ -30,6 +30,8 @@ let config; | ||||
| let wan_ports; | ||||
| let carrier = {}; | ||||
| let boot_file = "/tmp/booted"; | ||||
| let ucentral_running = false; | ||||
| let pending_events = []; | ||||
|  | ||||
| function config_load() { | ||||
| 	uci.load('event'); | ||||
| @@ -55,10 +57,13 @@ function event(object, verb, payload) { | ||||
| 		type += '.' + verb; | ||||
|  | ||||
| 	if (match(object, type, config.realtime?.filter)) | ||||
| 		if (ucentral_running) | ||||
| 			ubus.call('ucentral', 'event', { | ||||
| 				type, | ||||
| 				payload | ||||
| 			}); | ||||
| 		else  | ||||
| 			push(pending_events, {type, payload}); | ||||
|  | ||||
| 	else if (!config.bulk?.interval || match(object, type, config.bulk?.filter)) | ||||
| 		ubus.call('ucentral', 'telemetry', { | ||||
| @@ -79,7 +84,7 @@ let handlers = { | ||||
| 			ssid: hapd.ssid, | ||||
| 			bssid: hapd.bssid, | ||||
| 		}); | ||||
| 		if (ratelimit) { | ||||
| 		if (ratelimit && !wildcard(notify.data.phy, 'wlanc*')) { | ||||
| 			let msg = { | ||||
| 				device: hapd.ifname, | ||||
| 				address: notify.data.address, | ||||
| @@ -225,6 +230,12 @@ function log_subscriber_remove_cb(remove) { | ||||
| 	printf('dhcp remove: %.J\n', remove); | ||||
| } | ||||
|  | ||||
| function send_pending_events() { | ||||
| 	for (let payload in pending_events) | ||||
| 		ubus.call('ucentral', 'event', payload); | ||||
| 	pending_events = []; | ||||
| } | ||||
|  | ||||
| function unsub_object(add, id, path) { | ||||
| 	let object = split(path, '.'); | ||||
|  | ||||
| @@ -240,6 +251,13 @@ function unsub_object(add, id, path) { | ||||
| 		printf('adding %s\n', path); | ||||
| 		log_subscriber.subscribe(path); | ||||
| 		break; | ||||
| 	case 'ucentral': | ||||
| 		if(add) { | ||||
| 			ucentral_running = true; | ||||
| 			send_pending_events(); | ||||
| 		} else | ||||
| 			ucentral_running = false; | ||||
| 		break; | ||||
| 	} | ||||
| 	if (object[0] == 'hostapd' && object[1]) { | ||||
| 		if (add) | ||||
|   | ||||
| @@ -24,7 +24,8 @@ function timer_cb() { | ||||
| 			params: { | ||||
| 				active: true, | ||||
| 				override_dfs: false, | ||||
| 				verbose: false, | ||||
| 				verbose: +config.wifiscan.verbose, | ||||
| 				information_elements: +config.wifiscan.information_elements, | ||||
| 				periodic: true, | ||||
| 				serial: 'foo', | ||||
| 			} | ||||
|   | ||||
| @@ -4,10 +4,9 @@ PKG_NAME:=ucentral-schema | ||||
| PKG_RELEASE:=1 | ||||
|  | ||||
| PKG_SOURCE_URL=https://github.com/Telecominfraproject/wlan-ucentral-schema.git | ||||
| PKG_MIRROR_HASH:=d7ba8e7cc26526144397d910d6eabe491ebf878a18ecb80a8bc84b17606ac57d | ||||
| PKG_SOURCE_PROTO:=git | ||||
| PKG_SOURCE_DATE:=2022-05-29 | ||||
| PKG_SOURCE_VERSION:=5287f72bb7608e6562739682f20823f02812ddd9 | ||||
| PKG_SOURCE_VERSION:=caac3f11f790d2819bf9e41189c3cf99a5d18a78 | ||||
|  | ||||
| PKG_MAINTAINER:=John Crispin <john@phrozen.org> | ||||
| PKG_LICENSE:=BSD-3-Clause | ||||
|   | ||||
| @@ -12,10 +12,12 @@ cig,wf194c4|\ | ||||
| cig,wf194c|\ | ||||
| cig,wf610d|\ | ||||
| cig,wf808|\ | ||||
| cig,wf660a|\ | ||||
| cig,wf196) | ||||
| cig,wf660a) | ||||
| 	ucidef_set_wifi_country 'US' | ||||
| 	;; | ||||
| cig,wf196) | ||||
| 	ucidef_set_wifi_country "$(cat /lib/firmware/country)" | ||||
| 	;; | ||||
| esac | ||||
|  | ||||
| board_config_flush | ||||
|   | ||||
| @@ -0,0 +1,100 @@ | ||||
| { | ||||
| 	"uuid": 2, | ||||
| 	"radios": [ | ||||
| 		{ | ||||
| 			"band": "5G", | ||||
| 			"country": "CA", | ||||
| 			"channel-mode": "HE", | ||||
| 			"channel-width": 80, | ||||
| 			"channel": 32 | ||||
| 		} | ||||
| 	], | ||||
|  | ||||
| 	"interfaces": [ | ||||
| 		{ | ||||
| 			"name": "WAN", | ||||
| 			"role": "upstream", | ||||
| 			"ethernet": [ | ||||
| 				{ | ||||
| 					"select-ports": [ | ||||
| 						"WAN*" | ||||
| 					] | ||||
| 				} | ||||
| 			], | ||||
| 			"ipv4": { | ||||
| 				"addressing": "dynamic" | ||||
| 			}, | ||||
| 			"ssids": [ | ||||
| 				{ | ||||
| 					"name": "OpenWifi", | ||||
| 					"wifi-bands": [ | ||||
| 						"5G" | ||||
| 					], | ||||
| 					"bss-mode": "ap", | ||||
| 					"encryption": { | ||||
| 						"proto": "wpa2", | ||||
| 						"ieee80211w": "optional" | ||||
| 					}, | ||||
| 					"radius": { | ||||
| 						"authentication": { | ||||
| 							"host": "192.168.178.192", | ||||
| 							"port": 1812, | ||||
| 							"secret": "secret", | ||||
| 							"secondary": { | ||||
| 								"host": "192.168.178.193", | ||||
| 								"port": 1812, | ||||
| 								"secret": "secret2" | ||||
| 							} | ||||
| 						}, | ||||
| 						"accounting": { | ||||
| 							"host": "192.168.178.192", | ||||
| 							"port": 1813, | ||||
| 							"secret": "secret", | ||||
| 							"secondary": { | ||||
| 								"host": "192.168.178.193", | ||||
| 								"port": 1813, | ||||
| 								"secret": "secret2" | ||||
| 							} | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| 			] | ||||
| 		}, | ||||
| 		{ | ||||
| 			"name": "LAN", | ||||
| 			"role": "downstream", | ||||
| 			"services": [ "ssh" ], | ||||
| 			"ethernet": [ | ||||
| 				{ | ||||
| 					"select-ports": [ | ||||
| 						"LAN*" | ||||
| 					] | ||||
| 				} | ||||
| 			], | ||||
| 			"ipv4": { | ||||
| 				"addressing": "static", | ||||
| 				"subnet": "192.168.1.1/24", | ||||
| 				"dhcp": { | ||||
| 					"lease-first": 10, | ||||
| 					"lease-count": 100, | ||||
| 					"lease-time": "6h" | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| 		} | ||||
| 	], | ||||
| 	"metrics": { | ||||
| 		"statistics": { | ||||
| 			"interval": 120, | ||||
| 			"types": [ "ssids", "lldp", "clients" ] | ||||
| 		}, | ||||
| 		"health": { | ||||
| 			"interval": 120 | ||||
| 		} | ||||
| 	}, | ||||
| 	"services": { | ||||
| 		"ssh": { | ||||
| 			"port": 22 | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -74,7 +74,9 @@ | ||||
| 			"filters": [ "probe", "auth", "assoc", "disassoc", "deauth", "local-deauth", "inactive-deauth", "key-mismatch", "beacon-report", "radar-detected"] | ||||
| 		}, | ||||
| 		"wifi-scan": { | ||||
| 			"interval": 60 | ||||
| 			"interval": 60, | ||||
| 			"verbose": true, | ||||
| 			"information-elements": false | ||||
| 		}, | ||||
| 		"telemetry": { | ||||
| 			"interval": 15, | ||||
|   | ||||
| @@ -13,4 +13,4 @@ function phy_get() { | ||||
| } | ||||
|  | ||||
| let phys = phy_get(); | ||||
| printf("%d\n", phys[0].max_ap_assoc); | ||||
| printf("%d\n", phys[0].max_ap_assoc || 32); | ||||
|   | ||||
| @@ -5,9 +5,9 @@ PKG_RELEASE:=1 | ||||
|  | ||||
| PKG_SOURCE_PROTO:=git | ||||
| PKG_SOURCE_URL=https://github.com/blogic/udevmand.git | ||||
| PKG_MIRROR_HASH:=51bcf59754ef87913c40f2f1c708c8d2d2eb0ad5fc128a5c891e54ea4b3b035e | ||||
| PKG_MIRROR_HASH:=0c234de7e8aca07fcabb7685bd899f0c0c82303c2be61e89364abf1d28b089e7 | ||||
| PKG_SOURCE_DATE:=20220112 | ||||
| PKG_SOURCE_VERSION:=3d2b67b180679a6f5687e8d318a66a7cbad3fa7b | ||||
| PKG_SOURCE_VERSION:=979aca4764c10312b62b4e34c7e9f58e22f86b76 | ||||
| CMAKE_INSTALL:=1 | ||||
|  | ||||
| PKG_LICENSE:=LGPL-2.1 | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| Status: 302 Found | ||||
| Location: http://{{env.SERVER_ADDR}}/hotspot/?redir={{env.headers.host}} | ||||
| Location: http://{{env.SERVER_ADDR}}/hotspot/?redir={{env.headers.host}}{{env.REQUEST_URI}} | ||||
| Content-Type: text/html | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,10 @@ function auth_client(ctx) { | ||||
| 	let payload = portal.radius_init(ctx); | ||||
|  | ||||
| 	payload.logoff_url = sprintf('http://%s:3990/', ctx.env.SERVER_ADDR); | ||||
| 	if (ctx.query_string.username && ctx.query_string.response) { | ||||
| 	if (ctx.query_string.username && ctx.query_string.password && !portal.config.uam.uam_secret) { | ||||
| 		payload.username = ctx.query_string.username; | ||||
| 		payload.password = ctx.query_string.password; | ||||
| 	} else if (ctx.query_string.username && ctx.query_string.response) { | ||||
| 		let challenge = uam.md5(portal.config.uam.challenge, ctx.format_mac); | ||||
|  | ||||
| 		payload.username = ctx.query_string.username; | ||||
|   | ||||
| @@ -29,7 +29,8 @@ ALLWIFIBOARDS:= \ | ||||
| 	cig-wf660a \ | ||||
| 	cig-wf194c \ | ||||
| 	cig-wf194c4 \ | ||||
| 	cig-wf196 \ | ||||
| 	cig-wf196-ca \ | ||||
| 	cig-wf196-us \ | ||||
| 	cybertan-eww622-a1 \ | ||||
| 	edgecore-eap101 \ | ||||
| 	gl-ax1800 \ | ||||
| @@ -86,9 +87,14 @@ $(call Package/ath11k-wifi-default) | ||||
|     TITLE:=board-2.bin for QCOM IPQ6122 eval kits | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-wifi-cig-wf196_6g | ||||
| define Package/ath11k-wifi-cig-wf196_6g-ca | ||||
| $(call Package/ath11k-wifi-default) | ||||
|     TITLE:=cig-wf196 6G bdf | ||||
|     TITLE:=cig-wf196 6G bdf CA | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-wifi-cig-wf196_6g-us | ||||
| $(call Package/ath11k-wifi-default) | ||||
|     TITLE:=cig-wf196 6G bdf US | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-wifi-gl-ax1800 | ||||
| @@ -198,9 +204,16 @@ define Package/ath11k-wifi-qcom-qcn9000/install | ||||
| 	$(INSTALL_DATA) ./board-2.bin.QCN9000 $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board-2.bin | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-wifi-cig-wf196_6g/install | ||||
| define Package/ath11k-wifi-cig-wf196_6g-ca/install | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN9074/hw1.0/ | ||||
| 	$(INSTALL_DATA) ./board-cig-wf196_6g.bin.QCN9074 $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board.bin | ||||
| 	$(INSTALL_DATA) ./board-cig-wf196_6g-ca.bin.QCN9074 $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board.bin | ||||
| 	echo -n 'CA' > $(1)/lib/firmware/country | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-wifi-cig-wf196_6g-us/install | ||||
| 	$(INSTALL_DIR) $(1)/lib/firmware/ath11k/QCN9074/hw1.0/ | ||||
| 	$(INSTALL_DATA) ./board-cig-wf196_6g-us.bin.QCN9074 $(1)/lib/firmware/ath11k/QCN9074/hw1.0/board.bin | ||||
| 	echo -n 'US' > $(1)/lib/firmware/country | ||||
| endef | ||||
|  | ||||
| define Package/ath11k-wifi-gl-ax1800/install | ||||
| @@ -240,7 +253,8 @@ $(eval $(call generate-ath11k-wifi-package,cig-wf188n,Cigtech WF188n)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cig-wf660a,Cigtech WF660a)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cig-wf194c,Cigtech WF194c)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cig-wf194c4,Cigtech WF194c4)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cig-wf196,Cigtech WF196)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cig-wf196-ca,Cigtech WF196 CA)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cig-wf196-us,Cigtech WF196 US)) | ||||
| $(eval $(call generate-ath11k-wifi-package,cybertan-eww622-a1,CyberTan EWW622 A1)) | ||||
| $(eval $(call generate-ath11k-wifi-package,sercomm-wallaby,Sercomm Kiwi)) | ||||
| $(eval $(call generate-ath11k-wifi-package,wallys-dr6018,Wallys DR6018)) | ||||
| @@ -265,6 +279,7 @@ $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq6122)) | ||||
| $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq8074)) | ||||
| $(eval $(call BuildPackage,ath11k-wifi-qcom-ipq6018)) | ||||
| $(eval $(call BuildPackage,ath11k-wifi-qcom-qcn9000)) | ||||
| $(eval $(call BuildPackage,ath11k-wifi-cig-wf196_6g)) | ||||
| $(eval $(call BuildPackage,ath11k-wifi-cig-wf196_6g-ca)) | ||||
| $(eval $(call BuildPackage,ath11k-wifi-cig-wf196_6g-us)) | ||||
| $(eval $(call BuildPackage,ath11k-wifi-motorola-q14)) | ||||
| $(eval $(call BuildPackage,ath11k-wifi-hfcl-ion4xi)) | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-wifi/board-cig-wf196-ca.bin.IPQ8074
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-wifi/board-cig-wf196-ca.bin.IPQ8074
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-wifi/board-cig-wf196_6g-us.bin.QCN9074
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								feeds/wifi-ax/ath11k-wifi/board-cig-wf196_6g-us.bin.QCN9074
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -31,7 +31,7 @@ index 6fcf139beb..d7c1324184 100755 | ||||
| +		mkdir -p ${WORKING_PATH} | ||||
| +	fi | ||||
| +	for ip in ${capwap}; do | ||||
| +		echo ${ip} >> ${DHCP_OPT_FILE_TMP} | ||||
| +		echo -n ${ip} >> ${DHCP_OPT_FILE_TMP} | ||||
| +	done | ||||
| +	if ! cmp -s "${DHCP_OPT_FILE}" "${DHCP_OPT_FILE_TMP}"; then | ||||
| +		mv ${DHCP_OPT_FILE_TMP} ${DHCP_OPT_FILE} | ||||
|   | ||||
							
								
								
									
										17
									
								
								profiles/cig_wf196-ca.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								profiles/cig_wf196-ca.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| --- | ||||
| profile: cig_wf196_ca | ||||
| target: ipq807x | ||||
| subtarget: ipq807x | ||||
| description: Build image for the CIG WF196 (CA) | ||||
| image: bin/targets/ipq807x/ipq807x/openwrt-ipq807x-cig_wf196_ca-squashfs-sysupgrade.tar | ||||
| feeds: | ||||
|   - name: ipq807x | ||||
|     path: ../../feeds/ipq807x | ||||
| include: | ||||
|   - wifi-ax | ||||
|   - ucentral-ap | ||||
| packages: | ||||
|   - ath11k-fwtest | ||||
|   - ftm | ||||
| diffconfig: | | ||||
|   CONFIG_KERNEL_IPQ_MEM_PROFILE=0 | ||||
							
								
								
									
										17
									
								
								profiles/cig_wf196-us.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								profiles/cig_wf196-us.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| --- | ||||
| profile: cig_wf196_us | ||||
| target: ipq807x | ||||
| subtarget: ipq807x | ||||
| description: Build image for the CIG WF196 (US) | ||||
| image: bin/targets/ipq807x/ipq807x/openwrt-ipq807x-cig_wf196_us-squashfs-sysupgrade.tar | ||||
| feeds: | ||||
|   - name: ipq807x | ||||
|     path: ../../feeds/ipq807x | ||||
| include: | ||||
|   - wifi-ax | ||||
|   - ucentral-ap | ||||
| packages: | ||||
|   - ath11k-fwtest | ||||
|   - ftm | ||||
| diffconfig: | | ||||
|   CONFIG_KERNEL_IPQ_MEM_PROFILE=0 | ||||
| @@ -10,6 +10,7 @@ feeds: | ||||
| include: | ||||
|   - wifi-ax | ||||
|   - ucentral-ap | ||||
|   - mcu | ||||
| packages: | ||||
|   - ath11k-fwtest | ||||
|   - ftm | ||||
							
								
								
									
										15
									
								
								profiles/edgecore_eap102-zephyr.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								profiles/edgecore_eap102-zephyr.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| --- | ||||
| profile: edgecore_eap102 | ||||
| target: ipq807x | ||||
| subtarget: ipq807x | ||||
| description: Build image for the Edgecore EAP102 | ||||
| image: bin/targets/ipq807x/ipq807x/openwrt-ipq807x-edgecore_eap102-squashfs-sysupgrade.tar | ||||
| feeds: | ||||
|   - name: ipq807x | ||||
|     path: ../../feeds/ipq807x | ||||
| include: | ||||
|   - wifi-ax | ||||
|   - ucentral-ap | ||||
|   - mcu | ||||
| diffconfig: | | ||||
|   CONFIG_KERNEL_IPQ_MEM_PROFILE=0 | ||||
							
								
								
									
										9
									
								
								profiles/mcu.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								profiles/mcu.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| --- | ||||
| description: Add MCU support related dependencies | ||||
| feeds: | ||||
|   - name: mcu | ||||
|     path: ../../feeds/mcu | ||||
|  | ||||
| packages: | ||||
|   - umcumgr | ||||
|   - bluez | ||||
		Reference in New Issue
	
	Block a user