From: Jian-Hong Pan <starnight@g.ncu.edu.tw> To: "Andreas Färber" <afaerber@suse.de> Cc: netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Marcel Holtmann <marcel@holtmann.org>, "David S . Miller" <davem@davemloft.net>, Dollar Chen <dollar.chen@wtmec.com>, Ken Yu <ken.yu@rakwireless.com>, linux-wpan@vger.kernel.org, Stefan Schmidt <stefan@datenfreihafen.org>, Jian-Hong Pan <starnight@g.ncu.edu.tw> Subject: [PATCH V2 3/7] net: lorawan: Add LoRaWAN API declaration for LoRa devices Date: Tue, 6 Nov 2018 00:55:41 +0800 [thread overview] Message-ID: <20181105165544.5215-4-starnight@g.ncu.edu.tw> (raw) In-Reply-To: <fc737f3940bbe91341fb15d85ac11931eb56d1fc.1535039998.git.starnight@g.ncu.edu.tw> Add public LoRaWAN API for compatible LoRa device drivers. Signed-off-by: Jian-Hong Pan <starnight@g.ncu.edu.tw> --- V2: - Split the LoRaWAN class module patch in V1 into LoRaWAN socket and LoRaWAN Soft MAC modules - Merge the lrw_operations: set_bw, set_mod, set_sf into set_dr - Use SPDX license identifiers include/linux/lora/lorawan.h | 137 +++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 include/linux/lora/lorawan.h diff --git a/include/linux/lora/lorawan.h b/include/linux/lora/lorawan.h new file mode 100644 index 000000000000..684c9e2eb018 --- /dev/null +++ b/include/linux/lora/lorawan.h @@ -0,0 +1,137 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause */ +/*- + * LoRaWAN compatible hardware's definitions + * + * Copyright (c) 2018 Jian-Hong, Pan <starnight@g.ncu.edu.tw> + * + */ + +#ifndef __LORAWAN_H__ +#define __LORAWAN_H__ + +#include <linux/skbuff.h> +#include <linux/random.h> + +/* List the role of the LoRaWAN hardware */ +enum { + LRW_GATEWAY, + LRW_CLASS_A_NODE, + LRW_CLASS_B_NODE, + LRW_CLASS_C_NODE, +}; + +/* List the RF modes */ +enum { + LRW_LORA, + LRW_FSK, +}; + +/** + * lrw_dr - This structure holds the RF related configuration of the data rate. + * @bw: + * Bandwidth in Hz + * + * @sf: + * Spread factor of CSS modulation used by LoRa mode + * + * @mode: + * LoRa or FSK mode + */ +struct lrw_dr { + u32 bw; + u8 sf; + u8 mode; +}; + +#define LRW_DEVADDR_LEN (sizeof(__le32)) + +/* List the LoRa device's states of LoRaWAN hardware */ +enum { + LRW_STOP, + LRW_START, + LRW_STATE_IDLE, + LRW_STATE_TX, + LRW_STATE_RX, +}; + +/** + * lrw_hw - This structure holds the LoRa device of LoRaWAN hardware. + * @priv: + * points to the private data of the LoRa device + */ +struct lrw_hw { + void *priv; +}; + +/** + * lrw_operations - Lists the LoRaWAN device/interface's operations. + * These are callback functions for the LoRaWAN module. Compatible LoRa device + * driver should implement some of them according to the usage. The + * unimplemented callback functions must be assigned as NULL. + * + * @start: + * called when the interface is being up state + * + * @stop: + * called when the interface is being down state + * + * @xmit_async: + * called to xmit the data through the interface asynchronously + * + * @set_txpower: + * called to set xmitting RF power in mBm of the interface + * + * @set_frq: + * called to set carrier frequency in Hz of the interface + * + * @set_dr: + * called to set related RF configuration of the LoRaWAN data rate + * + * @start_rx_window: + * called to ask the LoRa device open a receiving window + * + * @set_state: + * called to set the LoRa device's working state + */ +struct lrw_operations { + int (*start)(struct lrw_hw *); + void (*stop)(struct lrw_hw *); + + int (*xmit_async)(struct lrw_hw *, struct sk_buff *); + int (*set_txpower)(struct lrw_hw *, s32); + int (*set_frq)(struct lrw_hw *, u32); + int (*set_dr)(struct lrw_hw *, struct lrw_dr *); + int (*start_rx_window)(struct lrw_hw *, u32); + int (*set_state)(struct lrw_hw *, u8); +}; + +struct lrw_hw *lrw_alloc_hw(size_t, struct lrw_operations *); +void lrw_free_hw(struct lrw_hw *); +int lrw_register_hw(struct lrw_hw *); +void lrw_unregister_hw(struct lrw_hw *); +void lrw_rx_irqsave(struct lrw_hw *, struct sk_buff *); +void lrw_xmit_complete(struct lrw_hw *, struct sk_buff *); + +static inline void lrw_random_addr(u64 *addr) +{ + get_random_bytes(addr, sizeof(u64)); +} + +void lrw_set_deveui(struct lrw_hw *, u64); +u64 lrw_get_deveui(struct lrw_hw *); +void lrw_set_appeui(struct lrw_hw *, u64); +u64 lrw_get_appeui(struct lrw_hw *); +void lrw_set_devaddr(struct lrw_hw *, u32); +u32 lrw_get_devaddr(struct lrw_hw *); + +enum { + LRW_APPKEY, + LRW_NWKSKEY, + LRW_APPSKEY, +}; + +#define LRW_KEY_LEN 16 + +int lrw_set_key(struct lrw_hw *, u8, u8 *, size_t); + +#endif -- 2.19.1
WARNING: multiple messages have this Message-ID (diff)
From: starnight@g.ncu.edu.tw (Jian-Hong Pan) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH V2 3/7] net: lorawan: Add LoRaWAN API declaration for LoRa devices Date: Tue, 6 Nov 2018 00:55:41 +0800 [thread overview] Message-ID: <20181105165544.5215-4-starnight@g.ncu.edu.tw> (raw) In-Reply-To: <fc737f3940bbe91341fb15d85ac11931eb56d1fc.1535039998.git.starnight@g.ncu.edu.tw> Add public LoRaWAN API for compatible LoRa device drivers. Signed-off-by: Jian-Hong Pan <starnight@g.ncu.edu.tw> --- V2: - Split the LoRaWAN class module patch in V1 into LoRaWAN socket and LoRaWAN Soft MAC modules - Merge the lrw_operations: set_bw, set_mod, set_sf into set_dr - Use SPDX license identifiers include/linux/lora/lorawan.h | 137 +++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 include/linux/lora/lorawan.h diff --git a/include/linux/lora/lorawan.h b/include/linux/lora/lorawan.h new file mode 100644 index 000000000000..684c9e2eb018 --- /dev/null +++ b/include/linux/lora/lorawan.h @@ -0,0 +1,137 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause */ +/*- + * LoRaWAN compatible hardware's definitions + * + * Copyright (c) 2018 Jian-Hong, Pan <starnight@g.ncu.edu.tw> + * + */ + +#ifndef __LORAWAN_H__ +#define __LORAWAN_H__ + +#include <linux/skbuff.h> +#include <linux/random.h> + +/* List the role of the LoRaWAN hardware */ +enum { + LRW_GATEWAY, + LRW_CLASS_A_NODE, + LRW_CLASS_B_NODE, + LRW_CLASS_C_NODE, +}; + +/* List the RF modes */ +enum { + LRW_LORA, + LRW_FSK, +}; + +/** + * lrw_dr - This structure holds the RF related configuration of the data rate. + * @bw: + * Bandwidth in Hz + * + * @sf: + * Spread factor of CSS modulation used by LoRa mode + * + * @mode: + * LoRa or FSK mode + */ +struct lrw_dr { + u32 bw; + u8 sf; + u8 mode; +}; + +#define LRW_DEVADDR_LEN (sizeof(__le32)) + +/* List the LoRa device's states of LoRaWAN hardware */ +enum { + LRW_STOP, + LRW_START, + LRW_STATE_IDLE, + LRW_STATE_TX, + LRW_STATE_RX, +}; + +/** + * lrw_hw - This structure holds the LoRa device of LoRaWAN hardware. + * @priv: + * points to the private data of the LoRa device + */ +struct lrw_hw { + void *priv; +}; + +/** + * lrw_operations - Lists the LoRaWAN device/interface's operations. + * These are callback functions for the LoRaWAN module. Compatible LoRa device + * driver should implement some of them according to the usage. The + * unimplemented callback functions must be assigned as NULL. + * + * @start: + * called when the interface is being up state + * + * @stop: + * called when the interface is being down state + * + * @xmit_async: + * called to xmit the data through the interface asynchronously + * + * @set_txpower: + * called to set xmitting RF power in mBm of the interface + * + * @set_frq: + * called to set carrier frequency in Hz of the interface + * + * @set_dr: + * called to set related RF configuration of the LoRaWAN data rate + * + * @start_rx_window: + * called to ask the LoRa device open a receiving window + * + * @set_state: + * called to set the LoRa device's working state + */ +struct lrw_operations { + int (*start)(struct lrw_hw *); + void (*stop)(struct lrw_hw *); + + int (*xmit_async)(struct lrw_hw *, struct sk_buff *); + int (*set_txpower)(struct lrw_hw *, s32); + int (*set_frq)(struct lrw_hw *, u32); + int (*set_dr)(struct lrw_hw *, struct lrw_dr *); + int (*start_rx_window)(struct lrw_hw *, u32); + int (*set_state)(struct lrw_hw *, u8); +}; + +struct lrw_hw *lrw_alloc_hw(size_t, struct lrw_operations *); +void lrw_free_hw(struct lrw_hw *); +int lrw_register_hw(struct lrw_hw *); +void lrw_unregister_hw(struct lrw_hw *); +void lrw_rx_irqsave(struct lrw_hw *, struct sk_buff *); +void lrw_xmit_complete(struct lrw_hw *, struct sk_buff *); + +static inline void lrw_random_addr(u64 *addr) +{ + get_random_bytes(addr, sizeof(u64)); +} + +void lrw_set_deveui(struct lrw_hw *, u64); +u64 lrw_get_deveui(struct lrw_hw *); +void lrw_set_appeui(struct lrw_hw *, u64); +u64 lrw_get_appeui(struct lrw_hw *); +void lrw_set_devaddr(struct lrw_hw *, u32); +u32 lrw_get_devaddr(struct lrw_hw *); + +enum { + LRW_APPKEY, + LRW_NWKSKEY, + LRW_APPSKEY, +}; + +#define LRW_KEY_LEN 16 + +int lrw_set_key(struct lrw_hw *, u8, u8 *, size_t); + +#endif -- 2.19.1
next prev parent reply other threads:[~2018-11-05 16:57 UTC|newest] Thread overview: 162+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-08-23 17:15 [RFC 0/3 net] lorawan: Add LoRaWAN soft MAC module Jian-Hong Pan 2018-08-23 17:15 ` Jian-Hong Pan 2018-08-23 17:15 ` Jian-Hong Pan 2018-08-23 17:15 ` [RFC 1/3 net] lorawan: Add LoRaWAN class module Jian-Hong Pan 2018-08-23 17:15 ` Jian-Hong Pan 2018-08-23 17:15 ` Jian-Hong Pan 2018-08-23 17:43 ` Randy Dunlap 2018-08-23 17:43 ` Randy Dunlap 2018-08-23 17:43 ` Randy Dunlap 2018-08-23 17:43 ` Randy Dunlap 2018-08-24 15:58 ` Jian-Hong Pan 2018-08-24 15:58 ` Jian-Hong Pan 2018-08-24 15:58 ` Jian-Hong Pan 2018-09-23 16:40 ` Andreas Färber 2018-09-23 16:40 ` Andreas Färber 2018-09-23 16:40 ` Andreas Färber 2018-09-26 15:52 ` Jian-Hong Pan 2018-09-26 15:52 ` Jian-Hong Pan 2018-09-26 15:52 ` Jian-Hong Pan 2018-11-05 16:55 ` [PATCH V2 0/7] net: lorawan: Add LoRaWAN soft MAC module Jian-Hong Pan 2018-11-05 16:55 ` Jian-Hong Pan 2018-11-05 16:55 ` [PATCH V2 1/7] net: lorawan: Add macro and definition for LoRaWAN Jian-Hong Pan 2018-11-05 16:55 ` Jian-Hong Pan 2018-11-05 16:55 ` [PATCH V2 2/7] net: lorawan: Add LoRaWAN socket module Jian-Hong Pan 2018-11-05 16:55 ` Jian-Hong Pan 2018-11-05 18:16 ` David Miller 2018-11-05 18:16 ` David Miller 2018-11-06 14:28 ` Jian-Hong Pan 2018-11-06 14:28 ` Jian-Hong Pan 2018-11-14 16:01 ` [PATCH V3 0/7] net: lorawan: Add LoRaWAN soft MAC module Jian-Hong Pan 2018-11-14 16:01 ` Jian-Hong Pan 2018-11-14 16:01 ` [PATCH V3 1/7] net: lorawan: Add macro and definition for LoRaWAN Jian-Hong Pan 2018-11-14 16:01 ` Jian-Hong Pan 2018-11-14 16:12 ` Andreas Färber 2018-11-14 16:12 ` Andreas Färber 2018-11-17 6:47 ` Jian-Hong Pan 2018-11-17 6:47 ` Jian-Hong Pan 2018-11-17 6:47 ` Jian-Hong Pan 2018-11-14 16:01 ` [PATCH V3 2/7] net: lorawan: Add LoRaWAN socket module Jian-Hong Pan 2018-11-14 16:01 ` Jian-Hong Pan 2018-11-17 4:32 ` David Miller 2018-11-17 4:32 ` David Miller 2018-11-17 14:54 ` Jian-Hong Pan 2018-11-17 14:54 ` Jian-Hong Pan 2018-12-04 14:13 ` [PATCH V4 0/6] net: lorawan: Add LoRaWAN soft MAC module Jian-Hong Pan 2018-12-04 14:13 ` Jian-Hong Pan 2018-12-04 14:13 ` [PATCH V4 1/6] net: lorawan: Add LoRaWAN socket module Jian-Hong Pan 2018-12-04 14:13 ` Jian-Hong Pan 2018-12-04 14:13 ` [PATCH V4 2/6] net: lorawan: Add LoRaWAN API declaration for LoRa devices Jian-Hong Pan 2018-12-04 14:13 ` Jian-Hong Pan 2018-12-04 14:13 ` [PATCH V4 3/6] net: maclorawan: Add maclorawan module declaration Jian-Hong Pan 2018-12-04 14:13 ` Jian-Hong Pan 2018-12-04 14:13 ` [PATCH V4 4/6] net: maclorawan: Implement the crypto of maclorawan module Jian-Hong Pan 2018-12-04 14:13 ` Jian-Hong Pan 2018-12-04 14:13 ` [PATCH V4 5/6] net: maclorawan: Implement maclorawan class module Jian-Hong Pan 2018-12-04 14:13 ` Jian-Hong Pan 2018-12-04 20:45 ` Alan Cox 2018-12-04 20:45 ` Alan Cox 2018-12-04 20:45 ` Alan Cox 2018-12-09 8:27 ` Jian-Hong Pan 2018-12-09 8:27 ` Jian-Hong Pan 2018-12-16 10:18 ` [PATCH v5 0/6] net: lorawan: Add LoRaWAN soft MAC module Jian-Hong Pan 2018-12-16 10:18 ` Jian-Hong Pan 2018-12-17 13:51 ` Jiri Pirko 2018-12-17 13:51 ` Jiri Pirko 2018-12-16 10:18 ` [PATCH v5 1/6] net: lorawan: Add LoRaWAN socket module Jian-Hong Pan 2018-12-16 10:18 ` Jian-Hong Pan 2018-12-29 7:27 ` Andreas Färber 2018-12-29 7:27 ` Andreas Färber 2019-01-07 14:47 ` Jian-Hong Pan 2019-01-07 14:47 ` Jian-Hong Pan 2019-01-07 14:47 ` Jian-Hong Pan 2019-01-13 14:51 ` Jian-Hong Pan 2019-01-13 14:51 ` Jian-Hong Pan 2019-01-13 14:51 ` Jian-Hong Pan 2018-12-16 10:18 ` [PATCH v5 2/6] net: lorawan: Add LoRaWAN API declaration for LoRa devices Jian-Hong Pan 2018-12-16 10:18 ` Jian-Hong Pan 2018-12-16 10:18 ` [PATCH v5 3/6] net: maclorawan: Add maclorawan module declaration Jian-Hong Pan 2018-12-16 10:18 ` Jian-Hong Pan 2018-12-16 10:18 ` [PATCH v5 4/6] net: maclorawan: Implement the crypto of maclorawan module Jian-Hong Pan 2018-12-16 10:18 ` Jian-Hong Pan 2018-12-16 10:18 ` [PATCH v5 5/6] net: maclorawan: Implement maclorawan class module Jian-Hong Pan 2018-12-16 10:18 ` Jian-Hong Pan 2018-12-17 14:02 ` Jiri Pirko 2018-12-17 14:02 ` Jiri Pirko 2018-12-18 14:27 ` Jian-Hong Pan 2018-12-18 14:27 ` Jian-Hong Pan 2018-12-18 14:27 ` Jiri Pirko 2018-12-18 14:27 ` Jiri Pirko 2018-12-18 15:34 ` Jian-Hong Pan 2018-12-18 15:34 ` Jian-Hong Pan 2018-12-18 18:49 ` Andreas Färber 2018-12-18 18:49 ` Andreas Färber 2018-12-19 11:27 ` Ben Whitten 2018-12-19 11:27 ` Ben Whitten 2018-12-19 11:27 ` Ben Whitten 2018-12-19 16:26 ` Jian-Hong Pan 2018-12-19 16:26 ` Jian-Hong Pan 2018-12-20 9:20 ` Xue Liu 2018-12-20 16:00 ` Jian-Hong Pan 2018-12-28 8:11 ` Netlink userspace tools for LoRa(WAN), FSK, Sigfox, BLE, etc. (was: [PATCH v5 5/6] net: maclorawan: Implement maclorawan class module) Andreas Färber 2018-12-28 15:49 ` Alexander Aring 2018-12-20 10:19 ` [PATCH v5 5/6] net: maclorawan: Implement maclorawan class module Ben Whitten 2018-12-20 10:19 ` Ben Whitten 2018-12-20 15:31 ` Andreas Färber 2018-12-20 15:31 ` Andreas Färber 2018-12-20 15:31 ` Andreas Färber 2018-12-16 10:19 ` [PATCH v5 6/6] net: lorawan: List LORAWAN in menuconfig Jian-Hong Pan 2018-12-16 10:19 ` Jian-Hong Pan 2018-12-17 8:50 ` Xue Liu 2018-12-17 8:50 ` Xue Liu 2018-12-17 14:19 ` Andreas Färber 2018-12-17 14:19 ` Andreas Färber 2018-12-18 13:50 ` Xue Liu 2018-12-18 13:50 ` Xue Liu 2018-12-24 15:32 ` Alexander Aring 2018-12-24 15:32 ` Alexander Aring 2018-12-28 4:57 ` Andreas Färber 2018-12-28 4:57 ` Andreas Färber 2018-12-28 15:43 ` Alexander Aring 2018-12-28 15:43 ` Alexander Aring 2018-12-29 6:28 ` Andreas Färber 2018-12-29 6:28 ` Andreas Färber 2018-12-04 14:13 ` [PATCH V4 " Jian-Hong Pan 2018-12-04 14:13 ` Jian-Hong Pan 2018-11-14 16:01 ` [PATCH V3 3/7] net: lorawan: Add LoRaWAN API declaration for LoRa devices Jian-Hong Pan 2018-11-14 16:01 ` Jian-Hong Pan 2018-11-14 16:01 ` [PATCH V3 4/7] net: maclorawan: Add maclorawan module declaration Jian-Hong Pan 2018-11-14 16:01 ` Jian-Hong Pan 2018-11-17 4:32 ` David Miller 2018-11-17 4:32 ` David Miller 2018-11-17 6:32 ` Jian-Hong Pan 2018-11-17 6:32 ` Jian-Hong Pan 2018-11-14 16:01 ` [PATCH V3 5/7] net: maclorawan: Implement the crypto of maclorawan module Jian-Hong Pan 2018-11-14 16:01 ` Jian-Hong Pan 2018-11-14 16:01 ` [PATCH V3 6/7] net: maclorawan: Implement maclorawan class module Jian-Hong Pan 2018-11-14 16:01 ` Jian-Hong Pan 2018-11-14 16:01 ` [PATCH V3 7/7] net: lorawan: List LORAWAN in menuconfig Jian-Hong Pan 2018-11-14 16:01 ` Jian-Hong Pan 2018-11-05 16:55 ` Jian-Hong Pan [this message] 2018-11-05 16:55 ` [PATCH V2 3/7] net: lorawan: Add LoRaWAN API declaration for LoRa devices Jian-Hong Pan 2018-11-05 16:55 ` [PATCH V2 4/7] net: maclorawan: Add maclorawan module declaration Jian-Hong Pan 2018-11-05 16:55 ` Jian-Hong Pan 2018-11-05 16:55 ` [PATCH V2 5/7] net: maclorawan: Implement the crypto of maclorawan module Jian-Hong Pan 2018-11-05 16:55 ` Jian-Hong Pan 2018-11-05 16:55 ` Jian-Hong Pan 2018-11-05 16:55 ` [PATCH V2 6/7] net: maclorawan: Implement maclorawan class module Jian-Hong Pan 2018-11-05 16:55 ` Jian-Hong Pan 2018-11-05 16:55 ` [PATCH V2 7/7] net: lorawan: List LORAWAN in menuconfig Jian-Hong Pan 2018-11-05 16:55 ` Jian-Hong Pan 2018-08-23 17:15 ` [RFC 2/3 net] lorawan: Add macro and definition for LoRaWAN class modlue Jian-Hong Pan 2018-08-23 17:15 ` Jian-Hong Pan 2018-08-23 17:15 ` Jian-Hong Pan 2018-09-23 16:06 ` Andreas Färber 2018-09-23 16:06 ` Andreas Färber 2018-09-23 16:06 ` Andreas Färber 2018-09-26 14:46 ` Jian-Hong Pan 2018-09-26 14:46 ` Jian-Hong Pan 2018-09-26 14:46 ` Jian-Hong Pan 2018-08-23 17:15 ` [RFC 3/3 net] lorawan: List LORAWAN in menuconfig Jian-Hong Pan 2018-08-23 17:15 ` Jian-Hong Pan 2018-08-23 17:15 ` Jian-Hong Pan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20181105165544.5215-4-starnight@g.ncu.edu.tw \ --to=starnight@g.ncu.edu.tw \ --cc=afaerber@suse.de \ --cc=davem@davemloft.net \ --cc=dollar.chen@wtmec.com \ --cc=ken.yu@rakwireless.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-wpan@vger.kernel.org \ --cc=marcel@holtmann.org \ --cc=netdev@vger.kernel.org \ --cc=stefan@datenfreihafen.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.