aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/linux/modules/wpan.mk
blob: 1e986ee0ca8ebe663175ada97a839945736762c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#
# Copyright (C) 2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.

WPAN_MENU:=WPAN 802.15.4 Support

define KernelPackage/ieee802154
  SUBMENU:=$(WPAN_MENU)
  TITLE:=IEEE-802.15.4 support
  KCONFIG:= \
	CONFIG_IEEE802154 \
	CONFIG_IEEE802154_SOCKET=y \
	CONFIG_IEEE802154_NL802154_EXPERIMENTAL=n
  FILES:= \
	$(LINUX_DIR)/net/ieee802154/ieee802154.ko \
	$(LINUX_DIR)/net/ieee802154/ieee802154_socket.ko@ge4.0
  AUTOLOAD:=$(call AutoLoad,90,ieee802154 ieee802154_socket)
endef

define KernelPackage/ieee802154/description
  IEEE Std 802.15.4 defines a low data rate, low power and low
  complexity short range wireless personal area networks. It was
  designed to organise networks of sensors, switches, etc automation
  devices. Maximum allowed data rate is 250 kb/s and typical personal
  operating space around 10m.
endef

$(eval $(call KernelPackage,ieee802154))

define KernelPackage/mac802154
  SUBMENU:=$(WPAN_MENU)
  TITLE:=MAC-802.15.4 support
  DEPENDS:=+kmod-ieee802154 +kmod-crypto-aead +kmod-lib-crc-ccitt
  KCONFIG:= \
	CONFIG_MAC802154 \
	CONFIG_IEEE802154_DRIVERS=y
  FILES:=$(LINUX_DIR)/net/mac802154/mac802154.ko
  AUTOLOAD:=$(call AutoLoad,91,mac802154)
endef

define KernelPackage/mac802154/description
  This option enables the hardware independent IEEE 802.15.4
  networking stack for SoftMAC devices (the ones implementing
  only PHY level of IEEE 802.15.4 standard).

  Note: this implementation is neither certified, nor feature
  complete! Compatibility with other implementations hasn't
  been tested yet!
endef

$(eval $(call KernelPackage,mac802154))

define KernelPackage/fakelb
  SUBMENU:=$(WPAN_MENU)
  TITLE:=Fake LR-WPAN driver
  DEPENDS:=+kmod-mac802154
  KCONFIG:=CONFIG_IEEE802154_FAKELB
  FILES:=$(LINUX_DIR)/drivers/net/ieee802154/fakelb.ko
  AUTOLOAD:=$(call AutoLoad,92,fakelb)
endef

define KernelPackage/fakelb/description
  Say Y here to enable the fake driver that can emulate a net
  of several interconnected radio devices.
endef

$(eval $(call KernelPackage,fakelb))

define KernelPackage/atusb
  SUBMENU:=$(WPAN_MENU)
  TITLE:=ATUSB transceiver driver
  DEPENDS:=@USB_SUPPORT +kmod-usb-core +kmod-mac802154
  KCONFIG:=CONFIG_IEEE802154_ATUSB
  FILES:=$(LINUX_DIR)/drivers/net/ieee802154/atusb.ko
  AUTOLOAD:=$(call AutoProbe,atusb)
endef

$(eval $(call KernelPackage,atusb))

define KernelPackage/at86rf230
  SUBMENU:=$(WPAN_MENU)
  TITLE:=AT86RF230 transceiver driver
  DEPENDS:=+kmod-mac802154 +kmod-regmap-spi
  KCONFIG:=CONFIG_IEEE802154_AT86RF230 \
	CONFIG_IEEE802154_AT86RF230_DEBUGFS=n \
	CONFIG_SPI=y \
	CONFIG_SPI_MASTER=y
  FILES:=$(LINUX_DIR)/drivers/net/ieee802154/at86rf230.ko
endef

$(eval $(call KernelPackage,at86rf230))

define KernelPackage/mrf24j40
  SUBMENU:=$(WPAN_MENU)
  TITLE:=MRF24J40 transceiver driver
  DEPENDS:=+kmod-mac802154 +kmod-regmap-spi
  KCONFIG:=CONFIG_IEEE802154_MRF24J40 \
	CONFIG_SPI=y \
	CONFIG_SPI_MASTER=y
  FILES:=$(LINUX_DIR)/drivers/net/ieee802154/mrf24j40.ko
endef

$(eval $(call KernelPackage,mrf24j40))

define KernelPackage/cc2520
  SUBMENU:=$(WPAN_MENU)
  TITLE:=CC2520 transceiver driver
  DEPENDS:=+kmod-mac802154
  KCONFIG:=CONFIG_IEEE802154_CC2520 \
	CONFIG_SPI=y \
	CONFIG_SPI_MASTER=y
  FILES:=$(LINUX_DIR)/drivers/net/ieee802154/cc2520.ko
endef

$(eval $(call KernelPackage,cc2520))

define KernelPackage/ieee802154_6lowpan
  SUBMENU:=$(WPAN_MENU)
  TITLE:= 6LoWPAN support over IEEE-802.15.4
  DEPENDS:=+kmod-6lowpan +kmod-ieee802154
  KCONFIG:=CONFIG_IEEE802154_6LOWPAN
  FILES:= \
	$(LINUX_DIR)/net/ieee802154/6lowpan/ieee802154_6lowpan.ko@ge4.0 \
	$(LINUX_DIR)/net/ieee802154/ieee802154_6lowpan.ko@lt4.0
  AUTOLOAD:=$(call AutoLoad,91,ieee802154_6lowpan)
endef

define KernelPackage/ieee802154_6lowpan/description
 IPv6 compression over IEEE 802.15.4
endef

$(eval $(call KernelPackage,ieee802154_6lowpan))
>().getAbsolutePath())) { if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { return false; } } return true; } /** * Opens the preferred installed file manager on Android and shows a toast if no manager is * installed. * * @param fragment * @param last default selected Uri, not supported by all file managers * @param mimeType can be text/plain for example * @param requestCode requestCode used to identify the result coming back from file manager to * onActivityResult() in your activity */ public static void openFile(Fragment fragment, Uri last, String mimeType, int requestCode) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setData(last); intent.setType(mimeType); try { fragment.startActivityForResult(intent, requestCode); } catch (ActivityNotFoundException e) { // No compatible file manager was found. Toast.makeText(fragment.getActivity(), R.string.no_filemanager_installed, Toast.LENGTH_SHORT).show(); } } public static void saveFile(final FileDialogCallback callback, final FragmentManager fragmentManager, final String title, final String message, final File defaultFile, final String checkMsg) { // Message is received after file is selected Handler returnHandler = new Handler() { @Override public void handleMessage(Message message) { if (message.what == FileDialogFragment.MESSAGE_OKAY) { callback.onFileSelected( new File(message.getData().getString(FileDialogFragment.MESSAGE_DATA_FILE)), message.getData().getBoolean(FileDialogFragment.MESSAGE_DATA_CHECKED)); } } }; // Create a new Messenger for the communication back final Messenger messenger = new Messenger(returnHandler); DialogFragmentWorkaround.INTERFACE.runnableRunDelayed(new Runnable() { @Override public void run() { FileDialogFragment fileDialog = FileDialogFragment.newInstance(messenger, title, message, defaultFile, checkMsg); fileDialog.show(fragmentManager, "fileDialog"); } }); } public static void saveFile(Fragment fragment, String title, String message, File defaultFile, int requestCode) { saveFile(fragment, title, message, defaultFile, requestCode, null); } public static void saveFile(final Fragment fragment, String title, String message, File defaultFile, final int requestCode, String checkMsg) { saveFile(new FileDialogCallback() { @Override public void onFileSelected(File file, boolean checked) { Intent intent = new Intent(); intent.setData(Uri.fromFile(file)); fragment.onActivityResult(requestCode, Activity.RESULT_OK, intent); } }, fragment.getActivity().getSupportFragmentManager(), title, message, defaultFile, checkMsg); } @TargetApi(Build.VERSION_CODES.KITKAT) public static void openDocument(Fragment fragment, String mimeType, int requestCode) { openDocument(fragment, mimeType, false, requestCode); } /** * Opens the storage browser on Android 4.4 or later for opening a file * * @param fragment * @param mimeType can be text/plain for example * @param multiple allow file chooser to return multiple files * @param requestCode used to identify the result coming back from storage browser onActivityResult() in your */ @TargetApi(Build.VERSION_CODES.KITKAT) public static void openDocument(Fragment fragment, String mimeType, boolean multiple, int requestCode) { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType(mimeType); intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, multiple); fragment.startActivityForResult(intent, requestCode); } /** * Opens the storage browser on Android 4.4 or later for saving a file * * @param fragment * @param mimeType can be text/plain for example * @param suggestedName a filename desirable for the file to be saved * @param requestCode used to identify the result coming back from storage browser onActivityResult() in your */ @TargetApi(Build.VERSION_CODES.KITKAT) public static void saveDocument(Fragment fragment, String mimeType, String suggestedName, int requestCode) { Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType(mimeType); intent.putExtra("android.content.extra.SHOW_ADVANCED", true); // Note: This is not documented, but works intent.putExtra(Intent.EXTRA_TITLE, suggestedName); fragment.startActivityForResult(intent, requestCode); } public static String getFilename(Context context, Uri uri) { String filename = null; try { Cursor cursor = context.getContentResolver().query(uri, new String[]{OpenableColumns.DISPLAY_NAME}, null, null, null); if (cursor != null) { if (cursor.moveToNext()) { filename = cursor.getString(0); } cursor.close(); } } catch (Exception ignored) { // This happens in rare cases (eg: document deleted since selection) and should not cause a failure } if (filename == null) { String[] split = uri.toString().split("/"); filename = split[split.length - 1]; } return filename; } public static long getFileSize(Context context, Uri uri) { return getFileSize(context, uri, -1); } public static long getFileSize(Context context, Uri uri, long def) { long size = def; try { Cursor cursor = context.getContentResolver().query(uri, new String[]{OpenableColumns.SIZE}, null, null, null); if (cursor != null) { if (cursor.moveToNext()) { size = cursor.getLong(0); } cursor.close(); } } catch (Exception ignored) { // This happens in rare cases (eg: document deleted since selection) and should not cause a failure } return size; } /** * Retrieve thumbnail of file, document api feature and thus KitKat only */ public static Bitmap getThumbnail(Context context, Uri uri, Point size) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { return DocumentsContract.getDocumentThumbnail(context.getContentResolver(), uri, size, null); } else { return null; } } public static String readableFileSize(long size) { if (size <= 0) return "0"; final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"}; int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; } public static interface FileDialogCallback { public void onFileSelected(File file, boolean checked); } }