mirror of
https://github.com/apache/nuttx.git
synced 2025-12-17 18:25:22 +08:00
Squashed commit of the following:
commit cb79778a3044ae97a1cc615dfa24099144f04bd0 Author: Gregory Nutt <gnutt@nuttx.org> Date: Thu Jul 27 11:46:31 2017 -0600 Spirit: Bring in last of QI interfaces. commit 0245b330a33aa73531b82ae261b1312be9922e0f Author: Gregory Nutt <gnutt@nuttx.org> Date: Thu Jul 27 10:14:34 2017 -0600 Spirit: Add general interfaces. commit 121845a8f229ec2c88e5721da5512135f6624ee5 Author: Gregory Nutt <gnutt@nuttx.org> Date: Thu Jul 27 09:41:23 2017 -0600 Spirit: Bring in last of GPIO interfaces. commit 279bfcc92bcd0cfa48c0ed7862fa2b75fbee99b8 Author: Gregory Nutt <gnutt@nuttx.org> Date: Wed Jul 26 17:09:19 2017 -0600 Spirit: Add some missing configuration options: Add register -level debug options. commit 4be89324a5908e35afc70373c279f4d05f62b48f Merge: 66e87f9bb3598386ef90Author: Gregory Nutt <gnutt@nuttx.org> Date: Wed Jul 26 15:36:20 2017 -0600 Merge remote-tracking branch 'origin/master' into spirit commit 66e87f9bb3ef75fddf25400bc08475c5e6ad4c30 Author: Gregory Nutt <gnutt@nuttx.org> Date: Wed Jul 26 15:19:56 2017 -0600 Spirit: Brings in last of PktBasic logic. commit 8b4c89d6a103003fa04363e2c2ae7b9ee390bf49 Author: Gregory Nutt <gnutt@nuttx.org> Date: Wed Jul 26 11:55:50 2017 -0600 Spirit: Bring in AES and MBUS logic. commit d00022d39ab0ce839de29386949481e5c24feff3 Author: Gregory Nutt <gnutt@nuttx.org> Date: Wed Jul 26 09:22:03 2017 -0600 Spirit: Bring in remainder of calibration interfaces. commit 40b4b2f902e04293f8940551a97a9a24a48988dd Author: Gregory Nutt <gnutt@nuttx.org> Date: Wed Jul 26 08:44:32 2017 -0600 Spirit: Bring in DirectRF interfaces. commit 7c109608e1a2989f3edbc2fd939a2d225fff382a Author: Gregory Nutt <gnutt@nuttx.org> Date: Wed Jul 26 07:46:19 2017 -0600 Spirit: Add CSMA support. commit 0f88896595d162c4ac6138e7b1af2fc35c865b3d Author: Gregory Nutt <gnutt@nuttx.org> Date: Tue Jul 25 18:57:43 2017 -0600 Spirit: Add some initial TX logic to network driver. commit 4dc7058dfcdcf40980578680b7e1a4206dea4ea2 Author: Gregory Nutt <gnutt@nuttx.org> Date: Tue Jul 25 17:02:11 2017 -0600 Spirit: Completes ports of spirit_management.* files commit c904eef51d929e041b87d0c8aff6fa3c2f895341 Merge: 91e985a877c9ff8cbab9Author: Gregory Nutt <gnutt@nuttx.org> Date: Tue Jul 25 15:15:04 2017 -0600 Merge remote-tracking branch 'origin/master' into spirit commit 91e985a87729017a66d19276c4d47681064f95ea Author: Gregory Nutt <gnutt@nuttx.org> Date: Tue Jul 25 15:13:54 2017 -0600 Spirit: Add a few more functions that will soon be needed for packet transmission. commit b5981d29983907c2194fbc26af4b72ad532bee78 Author: Gregory Nutt <gnutt@nuttx.org> Date: Tue Jul 25 13:30:07 2017 -0600 Spirit: Finish off some initialization issues; Started some interrupt handling logic. commit c21073e0bc2870b3d9ba40bdfdfd5151ce4f5890 Author: Gregory Nutt <gnutt@nuttx.org> Date: Tue Jul 25 09:35:52 2017 -0600 Spirit: Completes very basic radio initialization for network driver commit 1b544334361c54f46bcf0ba313c125932e8dafc6 Author: Gregory Nutt <gnutt@nuttx.org> Date: Tue Jul 25 07:58:30 2017 -0600 Spirit: Add more radio initialization logic... getting closer. commit 45d1047db60843c57d394ec910c63e7c127671e0 Author: Gregory Nutt <gnutt@nuttx.org> Date: Mon Jul 24 19:15:33 2017 -0600 Spirit: add some CSMA initialization logic commit bcf55c71336d48947fe19bb09a799169852301c2 Merge: 89e9d426e92fc0fbcf7eAuthor: Gregory Nutt <gnutt@nuttx.org> Date: Mon Jul 24 16:47:11 2017 -0600 Merge remote-tracking branch 'origin/master' into spirit commit 89e9d426e91c056e659fccf5e5c4392618f8f777 Author: Gregory Nutt <gnutt@nuttx.org> Date: Mon Jul 24 16:44:19 2017 -0600 Update some comments commit 9c5d8a5833350006ed389e898b11c8c8a20e5f4f Author: Gregory Nutt <gnutt@nuttx.org> Date: Mon Jul 24 16:15:54 2017 -0600 Spirit: Rename drivers/wireless/spirit/src to lib. Move Spirit network driver out of IEEE802.15.4 into drivers/wireless/spirit/drivers commit cabc0ec9e6eb558dcb715ab17264383aa0105e7a Merge: 87b616414a6bd744c4b3Author: Gregory Nutt <gnutt@nuttx.org> Date: Mon Jul 24 15:38:40 2017 -0600 Merge remote-tracking branch 'origin/master' into spirit commit 87b616414a79c01a71acea78f8258e05325c1996 Author: Gregory Nutt <gnutt@nuttx.org> Date: Mon Jul 24 15:37:27 2017 -0600 Spirit radio driver is mutating into a standalone network driver. commit 507798233868a661ae8adad3e3aa117075a7a146 Author: Gregory Nutt <gnutt@nuttx.org> Date: Mon Jul 24 13:32:08 2017 -0600 Spirit: More radio initialization logic commit 33af25704ce9ca83d576300d153cfe31cc6d2576 Author: Gregory Nutt <gnutt@nuttx.org> Date: Mon Jul 24 12:19:14 2017 -0600 Spirit: Beginning of radio initialization logic commit 97b20014c016e55952a8f9d8f4ae29e2cc555b23 Author: Gregory Nutt <gnutt@nuttx.org> Date: Mon Jul 24 09:42:06 2017 -0600 Spirit: More initialization logic. commit 295d8e27824c0417fccea2344b30bb5c93ffbabe Author: Gregory Nutt <gnutt@nuttx.org> Date: Sun Jul 23 15:39:53 2017 -0600 Spirit: Add header file containing enumeration of commands. commit 8a2d9dd8eb9cc70cbcdd1b913fc9022b9c9ec8da Author: Gregory Nutt <gnutt@nuttx.org> Date: Sun Jul 23 11:33:50 2017 -0600 Spirit: Add GPIO initialization logic commit 8b6d80c44f92024c45a6ba63ba1af3fdafe94dc3 Author: Gregory Nutt <gnutt@nuttx.org> Date: Sun Jul 23 10:07:25 2017 -0600 Spirit: Add interrupt control logic. commit 423f846fe5c914f92a4bfea4d9d1fa33de1c77a5 Author: Gregory Nutt <gnutt@nuttx.org> Date: Sat Jul 22 19:06:52 2017 -0600 Spirit: Yet a little more radio initialization logic. commit 5895b979823e51ddde5ad52e6de66a8ad662e883 Author: Gregory Nutt <gnutt@nuttx.org> Date: Sat Jul 22 15:36:05 2017 -0600 Spirit: A little more radio initialization logic. commit 86311ab30aad386203c181c792847dd1d37f9a02 Author: Gregory Nutt <gnutt@nuttx.org> Date: Sat Jul 22 13:02:32 2017 -0600 Spirit: A miniscule amount of radio initialization logic. commit ad55e89d5ee12ea1eeea95fcd38ff3da0db4416a Merge: 90a7666655f4e46b0da7Author: Gregory Nutt <gnutt@nuttx.org> Date: Sat Jul 22 10:56:30 2017 -0600 Merge remote-tracking branch 'origin/master' into spirit commit 90a766665534b05da0157dbc383cb06a98c86a79 Author: Gregory Nutt <gnutt@nuttx.org> Date: Sat Jul 22 10:52:52 2017 -0600 Spirit1: A few fixes for a clean build of initial configuration (not much there yet) commit bbbf04c223230a52a7705a2161128265cfbaa480 Merge: 623d54a7f72319ea53a9Author: Gregory Nutt <gnutt@nuttx.org> Date: Sat Jul 22 09:53:57 2017 -0600 Merge remote-tracking branch 'origin/master' into spirit commit 623d54a7f719e9032099f88f38203efee4b80722 Author: Gregory Nutt <gnutt@nuttx.org> Date: Sat Jul 22 09:43:52 2017 -0600 b-l475e-iot01a: Add a configuration for testing sprit radio. commit d309d73d9f4665f9d870eb03531f450043d9389d Merge: 52c3ddfae6d88dc9b2e5Author: Gregory Nutt <gnutt@nuttx.org> Date: Sat Jul 22 09:02:06 2017 -0600 Merge remote-tracking branch 'origin/master' into spirit commit 52c3ddfae6802e111c2b5cf1207baf21a61dd00b Author: Gregory Nutt <gnutt@nuttx.org> Date: Sat Jul 22 08:33:04 2017 -0600 Spirit: Add register definition header file. commit 8d842ab5e8f9ca653b42f9ee88dc279f06b4fa98 Author: Gregory Nutt <gnutt@nuttx.org> Date: Fri Jul 21 17:27:03 2017 -0600 b-l475e-iot01a: Add initial, unverified support for the SPSRGF/Spirit1 module. commit 73d902a1048616fb9c2dd2147cabcd8ee78e19ac Author: Gregory Nutt <gnutt@nuttx.org> Date: Fri Jul 21 15:49:43 2017 -0600 Spirit: Fixes to get skeleton IEEE 802.15.4 driver build. commit ebc5a8387bb94f0cc3827533795f3e4a33207e67 Author: Gregory Nutt <gnutt@nuttx.org> Date: Fri Jul 21 15:16:29 2017 -0600 Spirit1: Add framework for IEEE 802.15.4 driver. Does not yet build. commit 52e195a7ae14ddb18bdd56258f4877381d2501ca Author: Gregory Nutt <gnutt@nuttx.org> Date: Fri Jul 21 14:02:42 2017 -0600 Spirit: A little more SPI logic. commit 90048d0c5b8a5af4d81a15d99535c84ed38d8ae9 Author: Gregory Nutt <gnutt@nuttx.org> Date: Fri Jul 21 11:19:06 2017 -0600 Spirit: Build directories setup. Some initial files added, mostly just to verify build. commit 8273a381ac1f6bb081b292b5e73226185e9e634c Author: Gregory Nutt <gnutt@nuttx.org> Date: Fri Jul 21 08:34:04 2017 -0600 USB composite: Remove references to CDC/ACM and USB MSC from composite logic. They are no longer coupled.
This commit is contained in:
@@ -20,6 +20,21 @@ config WL_SPIRIT_SPIFREQUENCY
|
||||
The default is the absolution maximum and you may likely have to
|
||||
reduce this for your board.
|
||||
|
||||
config WL_SPIRIT_REGDEBUG
|
||||
bool "Enable register level debug"
|
||||
default n
|
||||
depenes ont DEBUG_WIRELESS_INFO
|
||||
---help---
|
||||
Enable logic to dump each value read from and written to the Sprit
|
||||
registers.
|
||||
|
||||
config WL_SPIRIT_FIFODUMP
|
||||
bool "Enable debug FIFO dump"
|
||||
default n
|
||||
depenes ont DEBUG_WIRELESS_INFO
|
||||
---help---
|
||||
Enable logic to dump data written to and read from the linear FIFO.
|
||||
|
||||
endif
|
||||
|
||||
source drivers/wireless/spirit/drivers/Kconfig
|
||||
|
||||
@@ -14,4 +14,46 @@ config SPIRIT_NETDEV
|
||||
|
||||
if SPIRIT_NETDEV
|
||||
|
||||
config SPIRIT_PKTLEN
|
||||
int "Fixed packet length"
|
||||
default 96
|
||||
range 1 96 if !SPIRIT_FIFOS
|
||||
range 1 65535 if SPIRIT_FIFOS
|
||||
---help---
|
||||
Fixed pkt sizes are used. This setting describes that fixed packet
|
||||
size.
|
||||
|
||||
config SPIRIT_FIFOS
|
||||
bool "FIFO Watermarks"
|
||||
default n
|
||||
depends on EXPERIMENTAL
|
||||
---help---
|
||||
The Spirit hardware can provided interrupts when indicate when the
|
||||
RX or TX FIFOs are almost full or empty. This is useful for
|
||||
supporting very large packets, larger than the FIFO size. The RX/TX
|
||||
FIFO size is 96 bytes. As long as the packet size is less then or
|
||||
equal 96 bytes, this feature is not needed.
|
||||
|
||||
NOTE: Marked experimental because this feature is not yet implement
|
||||
(hooks are present). You should not enable this feature unless you
|
||||
plan to implement the feature.
|
||||
|
||||
config SPIRIT_PKTLEN
|
||||
int "Fixed packet length"
|
||||
default 96
|
||||
range 1 96 if !SPIRIT_FIFOS
|
||||
range 1 65535 if SPIRIT_FIFOS
|
||||
---help---
|
||||
Fixed pkt sizes are used. This setting describes that fixed packet
|
||||
size.
|
||||
|
||||
config SPIRIT_MTU
|
||||
int "MTU"
|
||||
default 596
|
||||
---help---
|
||||
6LoWPAN support fragmenting and reassembly of large IPv6 packets.
|
||||
Each fragment will be up CONFIG_SPIRIT_PKTLEN in length. An single
|
||||
IPv6 packet maybe fragment into several such frames. This setting
|
||||
provides the MTU which is the largest fully assembled IPv6 packet that can be sent.
|
||||
|
||||
endif # SPIRIT_NETDEV
|
||||
|
||||
@@ -96,7 +96,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_SPIRIT_PKTLEN
|
||||
# define CONFIG_SPIRIT_PKTLEN 128
|
||||
# define CONFIG_SPIRIT_PKTLEN 96
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_SPIRIT_MTU
|
||||
@@ -1733,13 +1733,13 @@ int spirit_hw_initialize(FAR struct spirit_driver_s *priv,
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = spirit_qi_sqicheck(spirit, S_ENABLE);
|
||||
ret = spirit_qi_enable_sqicheck(spirit, S_ENABLE);
|
||||
if (ret < 0)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = spirit_qi_set_rssithreshold(spirit, SPIRIT_CCA_THRESHOLD);
|
||||
ret = spirit_qi_set_rssithreshold_dbm(spirit, SPIRIT_CCA_THRESHOLD);
|
||||
if (ret < 0)
|
||||
{
|
||||
return ret;
|
||||
|
||||
@@ -47,6 +47,8 @@
|
||||
* Pre-processor Definitions
|
||||
******************************************************************************/
|
||||
|
||||
#define SPIRIT_GENERAL_LIBVERSION() "Spirit1_Libraries_v.3.2.0"
|
||||
|
||||
/* Macros used in debug assertions */
|
||||
|
||||
#define IS_MODE_EXT(mode) (mode == MODE_EXT_XO || mode == MODE_EXT_XIN)
|
||||
|
||||
@@ -37,6 +37,31 @@
|
||||
#ifndef __DRIVERS_WIRELESS_SPIRIT_INCLUDE_SPIRIT_GPIO_H
|
||||
#define __DRIVERS_WIRELESS_SPIRIT_INCLUDE_SPIRIT_GPIO_H
|
||||
|
||||
/* This module can be used to configure the Spirit GPIO pins to perform
|
||||
* specific functions. The structure gpioIRQ can be used to specify these
|
||||
* features for one of the four Spirit GPIO pin.
|
||||
*
|
||||
* The following example shows how to configure a pin (GPIO 3) to be used as
|
||||
* an IRQ source for a microcontroller using the spirit_gpio_initialize()
|
||||
* function.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* struct spirit_gpio_init_s g_gpio_init =
|
||||
* {
|
||||
* SPIRIT_GPIO_3,
|
||||
* SPIRIT_GPIO_MODE_DIGITAL_OUTPUT_LP,
|
||||
* SPIRIT_GPIO_DIG_OUT_IRQ
|
||||
* };
|
||||
*
|
||||
* ...
|
||||
*
|
||||
* spirit_gpio_initialize(&g_gpio_init);
|
||||
*
|
||||
* NOTE: Please read the functions documentation for the other GPIO
|
||||
* features.
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
* Included Files
|
||||
******************************************************************************/
|
||||
@@ -96,6 +121,24 @@
|
||||
(iosel == SPIRIT_GPIO_DIG_IN_TX_DATA_INPUT_FOR_DIRECTRF) ||\
|
||||
(iosel == SPIRIT_GPIO_DIG_IN_DATA_WAKEUP) ||\
|
||||
(iosel == SPIRIT_GPIO_DIG_IN_EXT_CLOCK_AT_34_7KHZ))
|
||||
#define IS_SPIRIT_GPIO_LEVEL(level) \
|
||||
(((level) == LOW) || ((level) == HIGH))
|
||||
#define IS_SPIRIT_CLOCK_OUTPUT_XO(ratio) \
|
||||
(((ratio) == XO_RATIO_1) || ((ratio) == XO_RATIO_2_3) || \
|
||||
((ratio) == XO_RATIO_1_2) || ((ratio) == XO_RATIO_1_3) || \
|
||||
((ratio) == XO_RATIO_1_4) || ((ratio) == XO_RATIO_1_6) || \
|
||||
((ratio) == XO_RATIO_1_8) || ((ratio) == XO_RATIO_1_12) || \
|
||||
((ratio) == XO_RATIO_1_16) || ((ratio) == XO_RATIO_1_24) || \
|
||||
((ratio) == XO_RATIO_1_36) || ((ratio) == XO_RATIO_1_48) || \
|
||||
((ratio) == XO_RATIO_1_64) || ((ratio) == XO_RATIO_1_96) || \
|
||||
((ratio) == XO_RATIO_1_128) || ((ratio) == XO_RATIO_1_192))
|
||||
#define IS_SPIRIT_CLOCK_OUTPUT_RCO(ratio) \
|
||||
(((ratio) == RCO_RATIO_1) || ((ratio) == RCO_RATIO_1_128))
|
||||
#define IS_SPIRIT_CLOCK_OUTPUT_EXTRA_CYCLES(cycles) \
|
||||
(((cycles) == EXTRA_CLOCK_CYCLES_0) || \
|
||||
((cycles) == EXTRA_CLOCK_CYCLES_64) || \
|
||||
((cycles) == EXTRA_CLOCK_CYCLES_256) || \
|
||||
((cycles) == EXTRA_CLOCK_CYCLES_512))
|
||||
|
||||
/******************************************************************************
|
||||
* Public Types
|
||||
@@ -210,12 +253,81 @@ struct spirit_gpio_init_s
|
||||
* can be a value of enum spirit_gpio_io_e */
|
||||
};
|
||||
|
||||
/* SPIRIT OutputLevel enumeration. */
|
||||
|
||||
enum spirit_outputlevel_e
|
||||
{
|
||||
LOW = 0,
|
||||
HIGH = 1
|
||||
};
|
||||
|
||||
/* SPIRIT clock output XO prescaler enumeration. */
|
||||
|
||||
enum spirit_clockoutput_xoprescaler_e
|
||||
{
|
||||
XO_RATIO_1 = 0x00, /* XO Clock signal available on the GPIO divided by 1 */
|
||||
XO_RATIO_2_3 = 0x02, /* XO Clock signal available on the GPIO divided by 2/3 */
|
||||
XO_RATIO_1_2 = 0x04, /* XO Clock signal available on the GPIO divided by 1/2 */
|
||||
XO_RATIO_1_3 = 0x06, /* XO Clock signal available on the GPIO divided by 1/3 */
|
||||
XO_RATIO_1_4 = 0x08, /* XO Clock signal available on the GPIO divided by 1/4 */
|
||||
XO_RATIO_1_6 = 0x0a, /* XO Clock signal available on the GPIO divided by 1/6 */
|
||||
XO_RATIO_1_8 = 0x0C, /* XO Clock signal available on the GPIO divided by 1/8 */
|
||||
XO_RATIO_1_12 = 0x0e, /* XO Clock signal available on the GPIO divided by 1/12 */
|
||||
XO_RATIO_1_16 = 0x10, /* XO Clock signal available on the GPIO divided by 1/16 */
|
||||
XO_RATIO_1_24 = 0x12, /* XO Clock signal available on the GPIO divided by 1/24 */
|
||||
XO_RATIO_1_36 = 0x14, /* XO Clock signal available on the GPIO divided by 1/36 */
|
||||
XO_RATIO_1_48 = 0x16, /* XO Clock signal available on the GPIO divided by 1/48 */
|
||||
XO_RATIO_1_64 = 0x18, /* XO Clock signal available on the GPIO divided by 1/64 */
|
||||
XO_RATIO_1_96 = 0x1a, /* XO Clock signal available on the GPIO divided by 1/96 */
|
||||
XO_RATIO_1_128 = 0x1c, /* XO Clock signal available on the GPIO divided by 1/128 */
|
||||
XO_RATIO_1_192 = 0x1e /* XO Clock signal available on the GPIO divided by 1/196 */
|
||||
};
|
||||
|
||||
/* SPIRIT Clock Output RCO prescaler enumeration. */
|
||||
|
||||
enum spirit_clockoutput_rcoprescaler_e
|
||||
{
|
||||
RCO_RATIO_1 = 0x00, /* RCO Clock signal available on the GPIO divided by 1 */
|
||||
RCO_RATIO_1_128 = 0x01 /* RCO Clock signal available on the GPIO divided by 1/128 */
|
||||
};
|
||||
|
||||
/* SPIRIT Extra Clock Cycles enumeration. */
|
||||
|
||||
enum spirit_extra_clockcycles_e
|
||||
{
|
||||
EXTRA_CLOCK_CYCLES_0 = 0x00, /* 0 extra clock cycles provided to the MCU
|
||||
* before switching to STANDBY * state */
|
||||
EXTRA_CLOCK_CYCLES_64 = 0x20, /* 64 extra clock cycles provided to the
|
||||
* MCU before switching to STANDBY state */
|
||||
EXTRA_CLOCK_CYCLES_256 = 0x40, /* 256 extra clock cycles provided to the
|
||||
* MCU before switching to STANDBY state */
|
||||
EXTRA_CLOCK_CYCLES_512 = 0x60 /* 512 extra clock cycles provided to the
|
||||
* MCU before switching to STANDBY state */
|
||||
};
|
||||
|
||||
/* SPIRIT Clock Output initialization structure definition. */
|
||||
|
||||
struct spirit_clockoutput_init_s
|
||||
{
|
||||
uint8_t xoprescaler; /* Specifies the XO Ratio as clock output. This
|
||||
* parameter can be any value from enum
|
||||
* spirit_clockoutput_xoprescaler_e */
|
||||
|
||||
uint8_t rcoprescaler; /* Specifies the RCO Ratio as clock output. This
|
||||
* parameter can be any value from enum
|
||||
* spirit_clockoutput_rcoprescaler_e */
|
||||
|
||||
uint8_t xtracycles; /* Specifies the Extra Clock Cycles provided before
|
||||
* entering in Standby State. This parameter can
|
||||
* be any value from enum spirit_extra_clockcycles_e */
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Public Function Prototypes
|
||||
******************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
* Name:
|
||||
* Name: spirit_gpio_initialize
|
||||
*
|
||||
* Description:
|
||||
* Initializes the Spirit GPIOx according to the specified parameters in
|
||||
@@ -235,4 +347,232 @@ struct spirit_gpio_init_s
|
||||
int spirit_gpio_initialize(FAR struct spirit_library_s *spirit,
|
||||
FAR const struct spirit_gpio_init_s *gpioinit);
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_enable_tempsensor
|
||||
*
|
||||
* Description:
|
||||
* Enables or Disables the output of temperature sensor on SPIRIT GPIO_0.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* newstate - Bew state for temperature sensor.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_gpio_enable_tempsensor(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_functional_state_e newstate);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_set_outputlevel
|
||||
*
|
||||
* Description:
|
||||
* Forces SPIRIT GPIO_x configured as digital output, to VDD or GND.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* gpio - Specifies the GPIO to be configured. This parameter can be one
|
||||
* of following values:
|
||||
*
|
||||
* SPIRIT_GPIO_0: SPIRIT GPIO_0
|
||||
* SPIRIT_GPIO_1: SPIRIT GPIO_1
|
||||
* SPIRIT_GPIO_2: SPIRIT GPIO_2
|
||||
* SPIRIT_GPIO_3: SPIRIT GPIO_3
|
||||
*
|
||||
* level - Specifies the level. This parameter can be: HIGH or LOW.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_gpio_set_outputlevel(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_gpio_pin_e gpio,
|
||||
enum spirit_outputlevel_e level);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_get_outputlevel
|
||||
*
|
||||
* Description:
|
||||
* Returns output value (VDD or GND) of SPIRIT GPIO_x, when it is configured
|
||||
* as digital output.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* gpio - Specifies the GPIO to be read. This parameter can be one of
|
||||
* following values:
|
||||
*
|
||||
* SPIRIT_GPIO_0: SPIRIT GPIO_0
|
||||
* SPIRIT_GPIO_1: SPIRIT GPIO_1
|
||||
* SPIRIT_GPIO_2: SPIRIT GPIO_2
|
||||
* SPIRIT_GPIO_3: SPIRIT GPIO_3
|
||||
*
|
||||
* Returned Value:
|
||||
* Logical level of selected GPIO configured as digital output. This
|
||||
* parameter can be: HIGH or LOW.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
enum spirit_outputlevel_e
|
||||
spirit_gpio_get_outputlevel(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_gpio_pin_e gpio);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_enable_clockoutput
|
||||
*
|
||||
* Description:
|
||||
* Enables or Disables the MCU clock output.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* newstate - New state for the MCU clock output. This parameter can be:
|
||||
* S_ENABLE or S_DISABLE.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_gpio_enable_clockoutput(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_functional_state_e newstate);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_clockoutput_initialize
|
||||
*
|
||||
* Description:
|
||||
* Initializes the SPIRIT Clock Output according to the specified parameters
|
||||
* in the xClockOutputInitStruct.
|
||||
*
|
||||
* NOTE: The function spirit_gpio_enable_clockoutput() must be called in order to
|
||||
* enable or disable the MCU clock dividers.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* clockoutput - Pointer to a struct spirit_clockoutput_init_s structure
|
||||
* that contains the configuration information for the SPIRIT
|
||||
* Clock Output.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_gpio_clockoutput_initialize(FAR struct spirit_library_s *spirit,
|
||||
FAR const struct spirit_clockoutput_init_s *clockoutput);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_set_xoprescaler
|
||||
*
|
||||
* Description:
|
||||
* Sets the XO ratio as clock output.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* xoprescaler - the XO prescaler to be used as clock output. This
|
||||
* parameter can be any value from enum
|
||||
* spirit_clockoutput_xoprescaler_e .
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_gpio_set_xoprescaler(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_clockoutput_xoprescaler_e xoprescaler);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_get_xoprescaler
|
||||
*
|
||||
* Description:
|
||||
* Returns the settled XO prescaler as clock output.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* Settled XO prescaler used for clock output.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
enum spirit_clockoutput_xoprescaler_e
|
||||
spirit_gpio_get_xoprescaler(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_set_rcoprescaler
|
||||
*
|
||||
* Description:
|
||||
* Sets the RCO ratio as clock output
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* rcoprescaler - The RCO prescaler to be used as clock output. This
|
||||
* parameter can be any value from enum
|
||||
* spirit_clockoutput_rcoprescaler_e .
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_gpio_set_rcoprescaler(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_clockoutput_rcoprescaler_e rcoprescaler);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_get_rcoprescaler
|
||||
*
|
||||
* Description:
|
||||
* Returns the settled RCO prescaler as clock output.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* Settled RCO prescaler used for clock output.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
enum spirit_clockoutput_rcoprescaler_e
|
||||
spirit_gpio_get_rcoprescaler(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_set_extracycles
|
||||
*
|
||||
* Description:
|
||||
* Sets the RCO ratio as clock output.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* xtracycles - The number of extra clock cycles provided before switching
|
||||
* to STANDBY state. This parameter can be any value of enum
|
||||
* spirit_extra_clockcycles_e.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_gpio_set_extracycles(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_extra_clockcycles_e xtracycles);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_gpio_get_extracycles
|
||||
*
|
||||
* Description:
|
||||
* Returns the settled RCO prescaler as clock output.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* Settled number of extra clock cycles provided before switching to STANDBY
|
||||
* state.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
enum spirit_extra_clockcycles_e
|
||||
spirit_gpio_get_extracycles(FAR struct spirit_library_s *spirit);
|
||||
|
||||
#endif /* __DRIVERS_WIRELESS_SPIRIT_INCLUDE_SPIRIT_GPIO_H*/
|
||||
|
||||
@@ -37,6 +37,28 @@
|
||||
#ifndef __DRIVERS_WIRELESS_SPIRIT_INCLUDE_SPIRIT_QI_H
|
||||
#define __DRIVERS_WIRELESS_SPIRIT_INCLUDE_SPIRIT_QI_H
|
||||
|
||||
/* This module can be used to configure and read some quality indicators
|
||||
* used by Spirit. API to set thresholds and to read values in raw mode or in
|
||||
* dBm are provided.
|
||||
*
|
||||
* Example:
|
||||
*
|
||||
* float rssi;
|
||||
* uint8_t pqi;
|
||||
* uint8_t sqi;
|
||||
*
|
||||
* spirit_qi_enable_pqicheck(spirit, S_ENABLE);
|
||||
* spirit_qi_enable_sqicheck(spirit, S_ENABLE);
|
||||
*
|
||||
* ...
|
||||
*
|
||||
* rssi = spirit_qi_get_rssidbm(spirit);
|
||||
* pqi = spirit_qi_get_pqi(spirit);
|
||||
* sqi = spirit_qi_get_sqi(spirit);
|
||||
*
|
||||
* ...
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
* Included Files
|
||||
******************************************************************************/
|
||||
@@ -48,20 +70,37 @@
|
||||
* Pre-processor Definitions
|
||||
******************************************************************************/
|
||||
|
||||
/* Macro to obtain the RSSI value in dBm (type float) */
|
||||
|
||||
#define spirit_qi_get_rssidbm(spirit) \
|
||||
(-120.0 + ((float)(spirit_qi_get_rssi(spirit) - 20)) / 2)
|
||||
|
||||
/* Macros used in debug assertions */
|
||||
|
||||
#define IS_PQI_THR(value) \
|
||||
(value == PQI_TH_0 || value == PQI_TH_1 ||\
|
||||
value == PQI_TH_2 || value == PQI_TH_3 ||\
|
||||
value == PQI_TH_4 || value == PQI_TH_5 ||\
|
||||
value == PQI_TH_6 || value == PQI_TH_7 ||\
|
||||
value == PQI_TH_8 || value == PQI_TH_9 ||\
|
||||
value == PQI_TH_10 || value == PQI_TH_11 ||\
|
||||
value == PQI_TH_12 || value == PQI_TH_13 ||\
|
||||
value == PQI_TH_14 || value == PQI_TH_15)
|
||||
#define IS_SQI_THR(value) \
|
||||
(value == SQI_TH_0 || value == SQI_TH_1 || \
|
||||
(value == SQI_TH_0 || value == SQI_TH_1 || \
|
||||
value == SQI_TH_2 || value == SQI_TH_3)
|
||||
#define IS_RSSI_FILTER_GAIN(value) \
|
||||
(value==RSSI_FG_0 || value==RSSI_FG_1 ||\
|
||||
value==RSSI_FG_2 || value==RSSI_FG_3 ||\
|
||||
value==RSSI_FG_4 || value==RSSI_FG_5 ||\
|
||||
value==RSSI_FG_6 || value==RSSI_FG_7 ||\
|
||||
value==RSSI_FG_8 || value==RSSI_FG_9 ||\
|
||||
value==RSSI_FG_10 || value==RSSI_FG_11 ||\
|
||||
value==RSSI_FG_12 || value==RSSI_FG_13 ||\
|
||||
value==RSSI_FG_14 || value==RSSI_FG_15)
|
||||
(value == RSSI_FG_0 || value == RSSI_FG_1 ||\
|
||||
value == RSSI_FG_2 || value == RSSI_FG_3 ||\
|
||||
value == RSSI_FG_4 || value == RSSI_FG_5 ||\
|
||||
value == RSSI_FG_6 || value == RSSI_FG_7 ||\
|
||||
value == RSSI_FG_8 || value == RSSI_FG_9 ||\
|
||||
value == RSSI_FG_10 || value == RSSI_FG_11 ||\
|
||||
value == RSSI_FG_12 || value == RSSI_FG_13 ||\
|
||||
value == RSSI_FG_14 || value == RSSI_FG_15)
|
||||
#define IS_CS_MODE(mode) \
|
||||
(mode == CS_MODE_STATIC_3DB || mode == CS_MODE_DYNAMIC_6DB || \
|
||||
mode == CS_MODE_DYNAMIC_12DB || mode == CS_MODE_DYNAMIC_18DB)
|
||||
|
||||
/* Range for the RSSI Threshold in dBm */
|
||||
|
||||
@@ -76,14 +115,36 @@ extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/* PQI threshold value enumeration. */
|
||||
|
||||
enum spirit_pqi_threshold_e
|
||||
{
|
||||
PQI_TH_0 = 0x00,
|
||||
PQI_TH_1 = 0x04,
|
||||
PQI_TH_2 = 0x08,
|
||||
PQI_TH_3 = 0x0c,
|
||||
PQI_TH_4 = 0x10,
|
||||
PQI_TH_5 = 0x14,
|
||||
PQI_TH_6 = 0x18,
|
||||
PQI_TH_7 = 0x1c,
|
||||
PQI_TH_8 = 0x20,
|
||||
PQI_TH_9 = 0x24,
|
||||
PQI_TH_10 = 0x28,
|
||||
PQI_TH_11 = 0x2c,
|
||||
PQI_TH_12 = 0x30,
|
||||
PQI_TH_13 = 0x34,
|
||||
PQI_TH_14 = 0x38,
|
||||
PQI_TH_15 = 0x3c
|
||||
};
|
||||
|
||||
/* SQI threshold value enumeration. */
|
||||
|
||||
enum spirit_sqi_threshold_e
|
||||
{
|
||||
SQI_TH_0 = 0x00,
|
||||
SQI_TH_1 = 0x40,
|
||||
SQI_TH_2 = 0x80,
|
||||
SQI_TH_3 = 0xC0
|
||||
SQI_TH_0 = 0x00,
|
||||
SQI_TH_1 = 0x40,
|
||||
SQI_TH_2 = 0x80,
|
||||
SQI_TH_3 = 0xc0
|
||||
};
|
||||
|
||||
/* RSSI filter gain value enumeration. */
|
||||
@@ -108,12 +169,42 @@ enum spirit_rssi_filtergain_e
|
||||
RSSI_FG_15 = 0xf0
|
||||
};
|
||||
|
||||
/* CS mode enumeration. */
|
||||
|
||||
enum spirit_csmode_e
|
||||
{
|
||||
CS_MODE_STATIC_3DB = 0x00,
|
||||
CS_MODE_DYNAMIC_6DB = 0x04,
|
||||
CS_MODE_DYNAMIC_12DB = 0x08,
|
||||
CS_MODE_DYNAMIC_18DB = 0x0c
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Public Function Prototypes
|
||||
******************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_sqicheck
|
||||
* Name: spirit_qi_enable_pqicheck
|
||||
*
|
||||
* Description:
|
||||
* Enables/Disables the PQI Preamble Quality Indicator check. The running
|
||||
* peak PQI is compared to a threshold value and the preamble valid IRQ is
|
||||
* asserted as soon as the threshold is passed.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* newstate - New state for PQI check.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_enable_pqicheck(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_functional_state_e newstate);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_enable_sqicheck
|
||||
*
|
||||
* Description:
|
||||
* Enables/Disables the Synchronization Quality Indicator check. The
|
||||
@@ -129,8 +220,46 @@ enum spirit_rssi_filtergain_e
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_sqicheck(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_functional_state_e newstate);
|
||||
int spirit_qi_enable_sqicheck(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_functional_state_e newstate);
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_set_pqithreshold
|
||||
*
|
||||
* Description:
|
||||
* Sets the PQI threshold. The preamble quality threshold is 4*PQI_TH
|
||||
* (PQI_TH = 0..15).
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* pqithr - Parameter of the formula above.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_set_pqithreshold(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_pqi_threshold_e pqithr);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_get_pqithreshold
|
||||
*
|
||||
* Description:
|
||||
* Returns the PQI threshold. The preamble quality threshold is 4*PQI_TH
|
||||
* (PQI_TH = 0..15).
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* PQI threshold (PQI_TH of the formula above).
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
enum spirit_pqi_threshold_e
|
||||
spirit_qi_get_pqithreshold(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_set_sqithreshold
|
||||
@@ -172,10 +301,146 @@ int spirit_qi_set_sqithreshold(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_sqi_threshold_e
|
||||
spirit_qi_get_sqithreshold(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_get_pqi
|
||||
*
|
||||
* Description:
|
||||
* Returns the PQI value.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* PQI value.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
uint8_t spirit_qi_get_pqi(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_get_sqi
|
||||
*
|
||||
* Description:
|
||||
* Returns the SQI value.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* SQI value.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
uint8_t spirit_qi_get_sqi(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_get_lqi
|
||||
*
|
||||
* Description:
|
||||
* Returns the LQI value.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* LQI value.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
uint8_t spirit_qi_get_lqi(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_get_cs
|
||||
*
|
||||
* Description:
|
||||
* Returns the CS status.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* CS value (S_SET or S_RESET).
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
enum spirit_flag_status_e spirit_qi_get_cs(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_get_rssi
|
||||
*
|
||||
* Description:
|
||||
* Returns the RSSI value. The measured power is reported in steps of half a
|
||||
* dB from 0 to 255 and is offset in such a way that -120 dBm corresponds to
|
||||
* 20.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* RSSI value.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
uint8_t spirit_qi_get_rssi(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_set_rssithreshold
|
||||
*
|
||||
* Description:
|
||||
* Sets the RSSI threshold.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* rssithr - RSSI threshold reported in steps of half a dBm with a -130
|
||||
* dBm offset.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_set_rssithreshold(FAR struct spirit_library_s *spirit,
|
||||
uint8_t rssithr);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_get_rssithreshold
|
||||
*
|
||||
* Description:
|
||||
* Returns the RSSI threshold.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* RSSI threshold.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
uint8_t spirit_qi_get_rssithreshold(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_calc_rssithreshold
|
||||
*
|
||||
* Description:
|
||||
* Computes the RSSI threshold from its dBm value according to the formula:
|
||||
* (RSSI[Dbm] + 130)/0.5
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* dbmvalue - RSSI threshold reported in dBm.
|
||||
*
|
||||
* Returned Value:
|
||||
* RSSI threshold corresponding to dBm value.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
uint8_t spirit_qi_calc_rssithreshold(FAR struct spirit_library_s *spirit,
|
||||
int dbmvalue);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_set_rssithreshold_dbm
|
||||
*
|
||||
* Description:
|
||||
* Sets the RSSI threshold from its dBm value according to the formula:
|
||||
* (RSSI[Dbm] + 130)/0.5.
|
||||
*
|
||||
@@ -188,7 +453,143 @@ enum spirit_sqi_threshold_e
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_set_rssithreshold(FAR struct spirit_library_s *spirit,
|
||||
int dbmvalue);
|
||||
int spirit_qi_set_rssithreshold_dbm(FAR struct spirit_library_s *spirit,
|
||||
int dbmvalue);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_set_rssifiltergain
|
||||
*
|
||||
* Description:
|
||||
* Sets the RSSI filter gain. This parameter sets the bandwidth of a low
|
||||
* pass IIR filter (RSSI_FLT register, allowed values 0..15), a lower values
|
||||
* gives a faster settling of the measurements but lower precision. The
|
||||
* recommended value for such parameter is 14.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* rssfg - RSSI filter gain value.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_set_rssifiltergain(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_rssi_filtergain_e rssfg);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_get_rssifiltergain
|
||||
*
|
||||
* Description:
|
||||
* Returns the RSSI filter gain.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* RSSI filter gain.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
enum spirit_rssi_filtergain_e
|
||||
spirit_qi_get_rssifiltergain(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_set_csmode
|
||||
*
|
||||
* Description:
|
||||
* Sets the CS Mode. When static carrier sensing is used (cs_mode = 0), the
|
||||
* carrier sense signal is asserted when the measured RSSI is above the
|
||||
* value specified in the RSSI_TH register and is deasserted when the RSSI
|
||||
* falls 3 dB below the same threshold. When dynamic carrier sense is used
|
||||
* (cs_mode = 1, 2, 3), the carrier sense signal is asserted if the signal
|
||||
* is above the threshold and a fast power increase of 6, 12 or 18 dB is
|
||||
* detected; it is deasserted if a power fall of the same amplitude is
|
||||
* detected.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* csmode - CS mode selector.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_set_csmode(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_csmode_e csmode);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_get_csmode
|
||||
*
|
||||
* Description:
|
||||
* Returns the CS Mode.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
*
|
||||
* Returned Value:
|
||||
* CS mode.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
enum spirit_csmode_e spirit_qi_get_csmode(FAR struct spirit_library_s *spirit);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_enable_cstimeout
|
||||
*
|
||||
* Description:
|
||||
* Enables/Disables the CS Timeout Mask. If enabled CS value contributes to
|
||||
* timeout disabling.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* newstate - New state for CS Timeout Mask.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_enable_cstimeout(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_functional_state_e newstate);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_enable_pqitimeout
|
||||
*
|
||||
* Description:
|
||||
* Enables/Disables the PQI Timeout Mask. If enabled PQI value contributes
|
||||
* to timeout disabling.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* newstate - New state for PQI Timeout Mask.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_enable_pqitimeout(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_functional_state_e newstate);
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_qi_enable_sqitimeout
|
||||
*
|
||||
* Description:
|
||||
* Enables/Disables the SQI Timeout Mask. If enabled SQI value contributes
|
||||
* to timeout disabling.
|
||||
*
|
||||
* Input Parameters:
|
||||
* spirit - Reference to a Spirit library state structure instance
|
||||
* newstate - New state for SQI Timeout Mask.
|
||||
*
|
||||
* Returned Value:
|
||||
* Zero (OK) on success; a negated errno value on failure.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
int spirit_qi_enable_sqitimeout(FAR struct spirit_library_s *spirit,
|
||||
enum spirit_functional_state_e newstate);
|
||||
|
||||
#endif /* __DRIVERS_WIRELESS_SPIRIT_INCLUDE_SPIRIT_GENERAL_H*/
|
||||
|
||||
@@ -38,7 +38,8 @@
|
||||
CSRCS += spirit_radio.c spirit_pktbasic.c spirit_pktcommon.c
|
||||
CSRCS += spirit_pktmbus.c spirit_directrf.c spirit_qi.c spirit_calibration.c
|
||||
CSRCS += spirit_management.c spirit_aes.c spirit_csma.c spirit_linearfifo.c
|
||||
CSRCS += spirit_irq.c spirit_timer.c spirit_gpio.c spirit_spi.c
|
||||
CSRCS += spirit_irq.c spirit_timer.c spirit_gpio.c spirit_general.c
|
||||
CSRCS += spirit_spi.c
|
||||
|
||||
# Include Spirit driver build support
|
||||
|
||||
|
||||
539
drivers/wireless/spirit/lib/spirit_general.c
Normal file
539
drivers/wireless/spirit/lib/spirit_general.c
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -65,6 +65,113 @@
|
||||
* Private Functions
|
||||
******************************************************************************/
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_dump_buffer
|
||||
*
|
||||
* Description:
|
||||
* Dump a data buffer to the SYSLOG.
|
||||
*
|
||||
* Parameters:
|
||||
* buffer - The buffer to be dumped
|
||||
* buflen - The length of the buffer in bytes.
|
||||
*
|
||||
* Returned Value:
|
||||
* None
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#if defined(CONFIG_WL_SPIRIT_REGDEBUG) || defined(CONFIG_WL_SPIRIT_FIFODUMP)
|
||||
static void spirit_dump_buffer(FAR const uint8_t *buffer, unsigned int buflen)
|
||||
{
|
||||
char outbuf[16*3 + 3]; /* 16 hex bytes + 2 space separator + NUL termination */
|
||||
FAR char *ptr;
|
||||
unsigned int i;
|
||||
unsigned int j:
|
||||
unsigned int maxj:
|
||||
|
||||
for (i = 0; i < buflen; i += 16)
|
||||
{
|
||||
maxj = 16;
|
||||
if (i + maxj > buflen)
|
||||
{
|
||||
maxj = buflen - i;
|
||||
}
|
||||
|
||||
ptr = outbuf;
|
||||
for (j = 0; j < maxj; j++)
|
||||
{
|
||||
if (j = 8)
|
||||
{
|
||||
*outbuf++ = ' ';
|
||||
*outbuf++ = ' ';
|
||||
}
|
||||
|
||||
sprintf(outbuf, "%02x ", *buffer++);
|
||||
outbuf += 3;
|
||||
}
|
||||
|
||||
*outbuf = '\0';
|
||||
wlinfo(" %s\n", outbuf)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_regdebug
|
||||
*
|
||||
* Description:
|
||||
* Dump a register access.
|
||||
*
|
||||
* Parameters:
|
||||
* msg - Describes the access
|
||||
* header - Two byte header before the access
|
||||
* buffer - The buffer to be dumped
|
||||
* buflen - The length of the buffer in bytes.
|
||||
*
|
||||
* Returned Value:
|
||||
* None
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef CONFIG_WL_SPIRIT_REGDEBUG
|
||||
static void spirit_regdebug(FAR const char *msg, FAR uint8_t *header,
|
||||
FAR const uint8_t *buffer, unsigned int buflen)
|
||||
{
|
||||
wlinfo("%-8s: %02x %02x\n", header[0], header[1]);
|
||||
spirit_dump_buffer(buffer, buflen);
|
||||
}
|
||||
#else
|
||||
# define spirit_regdebug(msg,header,buffer,buflen)
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_fifodebug
|
||||
*
|
||||
* Description:
|
||||
* Dump a FIFO access.
|
||||
*
|
||||
* Parameters:
|
||||
* msg - Describes the access
|
||||
* header - Two byte header before the access
|
||||
* buffer - The buffer to be dumped
|
||||
* buflen - The length of the buffer in bytes.
|
||||
*
|
||||
* Returned Value:
|
||||
* None
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef CONFIG_WL_SPIRIT_FIFODUMP
|
||||
static void spirit_fifodebug(FAR const char *msg, FAR uint8_t *header,
|
||||
FAR const uint8_t *buffer, unsigned int buflen)
|
||||
{
|
||||
wlinfo("%-8s: %02x %02x\n", header[0], header[1]);
|
||||
spirit_dump_buffer(buffer, buflen);
|
||||
}
|
||||
#else
|
||||
# define spirit_fifodebug(msg,header,buffer,buflen)
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Name: spirit_lock
|
||||
*
|
||||
@@ -187,6 +294,8 @@ int spirit_reg_read(FAR struct spirit_library_s *spirit, uint8_t regaddr,
|
||||
|
||||
SPI_SELECT(spirit->spi, SPIDEV_WIRELESS(0), false);
|
||||
spirit_unlock(spirit->spi);
|
||||
|
||||
spirit_regdebug("READ", header, buffer, buflen);
|
||||
return OK;
|
||||
}
|
||||
|
||||
@@ -218,6 +327,7 @@ int spirit_reg_write(FAR struct spirit_library_s *spirit, uint8_t regaddr,
|
||||
|
||||
header[0] = WRITE_HEADER;
|
||||
header[1] = regaddr;
|
||||
spirit_regdebug("WRITE", header, buffer, buflen);
|
||||
|
||||
/* Lock the SPI bus and select the Spirit device */
|
||||
|
||||
@@ -268,6 +378,7 @@ int spirit_command(FAR struct spirit_library_s *spirit, uint8_t cmd)
|
||||
|
||||
header[0] = COMMAND_HEADER;
|
||||
header[1] = cmd;
|
||||
spirit_regdebug("CMD", header, NULL, 0);
|
||||
|
||||
/* Lock the SPI bus and select the Spirit device */
|
||||
|
||||
@@ -338,6 +449,8 @@ int spirit_fifo_read(FAR struct spirit_library_s *spirit, FAR uint8_t *buffer,
|
||||
|
||||
SPI_SELECT(spirit->spi, SPIDEV_WIRELESS(0), false);
|
||||
spirit_unlock(spirit->spi);
|
||||
|
||||
spirit_fifodebug("FIFO IN", header, buffer, buflen);
|
||||
return OK;
|
||||
}
|
||||
|
||||
@@ -368,6 +481,7 @@ int spirit_fifo_write(FAR struct spirit_library_s *spirit,
|
||||
|
||||
header[0] = WRITE_HEADER;
|
||||
header[1] = LINEAR_FIFO_ADDRESS;
|
||||
spirit_fifodebug("FIFO OUT", header, buffer, buflen);
|
||||
|
||||
/* Lock the SPI bus and select the Spirit device */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user