Squashed commit of the following:

commit 3fcf84a9a2673e1e1466ce5b114d7b73c257e515
Author: Gregory Nutt <gnutt@nuttx.org>
Date:   Fri Jul 28 12:00:31 2017 -0600

    Spirit: Brings in the last of the PktCommon interfaces.

commit d26ebd901ba4ba84910e99b4e728b98c30fa4c0b
Author: Gregory Nutt <gnutt@nuttx.org>
Date:   Fri Jul 28 09:54:52 2017 -0600

    Spirit: Add a few more PktCommon interfaces.

commit b5cb8041d50233a4abb8fb4d1dcef5428ae2c2b2
Author: Gregory Nutt <gnutt@nuttx.org>
Date:   Fri Jul 28 09:33:31 2017 -0600

    libc/termios:  Remember block comments before empty file sections.

commit 0fcab2c1c8c74442d40bd5e8c6af50a34f8a5821
Author: Sebastien Lorquet <sebastien@lorquet.fr>
Date:   Fri Jul 28 09:31:00 2017 -0600

    tcdrain implementation based on a new term ioctl

commit 797d4adf7d41068c671f0217d369b797b269de1a
Author: Stefan Kolb <Stefan.Kolb@avat.de>
Date:   Fri Jul 28 09:19:04 2017 -0600

    We discovered a problem with the samv7 mcan driver which results, under some circumstances, in a very high CPU load.

    The problem occurs, and is easily reproducible, if the device is connected to a CAN network with a wrongly configured CAN speed (baud rate). In our tests we set the CAN speed of the device to 1000000 and the speed of the other CAN nodes to 500000. The device is restarted and sends a CANopen “bootup message” to the CAN network. This results in huge amount of errors messages on the CAN bus, probably because of the CAN feature for acknowledging error messages. The error messages can’t be read by the device because of the misconfigured CAN speed, instead the CAN chip reports lots of errors, which are reported to the application which uses the CAN driver (CONFIG_CAN_ERRORS is enabled).

    The CAN errors are reported from the CAN chip via interrupts and thus the interrupt load is very high in this scenario. To fix the problem the driver now disables each RX error interrupt after it is occurred. The RX error interrupts are turned back on if at least one CAN message is received successfully.

commit e298f48e96d9e34017dcab8e4d87032862ae9322
Author: Gregory Nutt <gnutt@nuttx.org>
Date:   Fri Jul 28 09:06:26 2017 -0600

    Spirit:  Bring in PktStack interfaces.

commit 4a0f00a7058312dcf6ac392689b9f69112f613ec
Merge: 855cf97130 b458934ac4
Author: Gregory Nutt <gnutt@nuttx.org>
Date:   Thu Jul 27 18:05:02 2017 -0600

    Merge remote-tracking branch 'origin/master' into spirit

commit 855cf9713052a851a1daeb3842db2edd6ff6f658
Author: Gregory Nutt <gnutt@nuttx.org>
Date:   Thu Jul 27 18:03:56 2017 -0600

    Spirit Network Driver:  Add some hooks that will eventually support address filtering.

commit 3b3fb24ea86cf8233b034871d5c550f47ab852e6
Author: Gregory Nutt <gnutt@nuttx.org>
Date:   Thu Jul 27 17:13:21 2017 -0600

    Spirit: Add a PktStack header file.

commit 705e8fff6a21264ab751fb34c107cb109430ac89
Author: Gregory Nutt <gnutt@nuttx.org>
Date:   Thu Jul 27 15:00:03 2017 -0600

    Spirit:  Bring in last of timer interfaces.

commit f8984b2f82e165f5bba132d6b099222d1beb1fbd
Merge: cb79778a30 f287cc25d6
Author: Gregory Nutt <gnutt@nuttx.org>
Date:   Thu Jul 27 11:57:01 2017 -0600

    Merge remote-tracking branch 'origin/master' into spirit

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: 66e87f9bb3 598386ef90
Author: 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: 91e985a877 c9ff8cbab9
Author: 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: 89e9d426e9 2fc0fbcf7e
Author: 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: 87b616414a 6bd744c4b3
Author: 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: 90a7666655 f4e46b0da7
Author: 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: 623d54a7f7 2319ea53a9
Author: 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: 52c3ddfae6 d88dc9b2e5
Author: 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:
Gregory Nutt 2017-07-28 12:01:05 -06:00
parent ee4b69f0d3
commit 47791442a0
18 changed files with 4255 additions and 166 deletions

View File

@ -3454,6 +3454,19 @@ static int mcan_interrupt(int irq, void *context, FAR void *arg)
{
canerr("ERROR: RX %08x\n", pending & MCAN_RXERR_INTS);
/* To prevent Interrupt-Flooding the current active
* RX error interupts are disabled. After successfully
* receiving at least one CAN packet all RX error interrupts
* are turned back on.
*
* The Interrupt-Flooding can for example occure if the
* configured CAN speed does not match the speed of the other
* CAN nodes in the network.
*/
ie &= ~(pending & MCAN_RXERR_INTS);
mcan_putreg(priv, SAM_MCAN_IE_OFFSET, ie);
/* Clear the error indications */
mcan_putreg(priv, SAM_MCAN_IR_OFFSET, MCAN_RXERR_INTS);
@ -3617,6 +3630,11 @@ static int mcan_interrupt(int irq, void *context, FAR void *arg)
config->msgram.rxfifo1 +
(ndx * priv->config->rxfifo1esize),
priv->config->rxfifo1esize);
/* Turning back on all configured RX error interrupts */
ie |= (priv->rxints & MCAN_RXERR_INTS);
mcan_putreg(priv, SAM_MCAN_IE_OFFSET, ie);
}
/* Acknowledge reading the FIFO entry */
@ -3651,6 +3669,11 @@ static int mcan_interrupt(int irq, void *context, FAR void *arg)
config->msgram.rxfifo0 +
(ndx * priv->config->rxfifo0esize),
priv->config->rxfifo0esize);
/* Turning back on all configured RX error interrupts */
ie |= (priv->rxints & MCAN_RXERR_INTS);
mcan_putreg(priv, SAM_MCAN_IE_OFFSET, ie);
}
/* Acknowledge reading the FIFO entry */

View File

@ -253,7 +253,7 @@ static const struct pktbasic_init_s g_pktbasic_init =
SPIRIT_SYNC_WORD, /* syncwords */
SPIRIT_PREAMBLE_LENGTH, /* premblen */
SPIRIT_SYNC_LENGTH, /* synclen */
SPIRIT_LENGTH_TYPE, /* fixedvarlen */
SPIRIT_LENGTH_TYPE, /* fixvarlen */
SPIRIT_LENGTH_WIDTH, /* pktlenwidth */
SPIRIT_CRC_MODE, /* crcmode */
SPIRIT_CONTROL_LENGTH, /* ctrllen */
@ -526,6 +526,19 @@ static int spirit_transmit(FAR struct spirit_driver_s *priv)
goto errout_with_iob;
}
#ifndef CONFIG_SPIRIT_PROMISCOUS
/* Set the destination address */
#warning Missing logic
#if 0
ret = spirit_pktcommon_set_txdestaddr(spirit, txdestaddr);
if (ret < 0)
{
goto errout_with_iob;
}
#endif
#endif
/* Enable CSMA */
ret = spirit_csma_enable(spirit, S_ENABLE);
@ -848,7 +861,7 @@ static void spirit_interrupt_work(FAR void *arg)
/* Read the packet into the I/O buffer */
DEBUGVERIFY(spirit_fifo_read(spirit, iob->io_data, count));
iob->io_len = spirit_pktbasic_rxpktlen(spirit);
iob->io_len = spirit_pktbasic_get_rxpktlen(spirit);
DEBUGVERIFY(spirit_command(spirit, CMD_FLUSHRXFIFO));
priv->state = DRIVER_STATE_IDLE;
@ -1201,6 +1214,7 @@ static int spirit_ifup(FAR struct net_driver_s *dev)
goto error_with_ifalmostup;
}
#ifndef CONFIG_SPIRIT_PROMISCOUS
/* Instantiate the assigned node address */
#warning Missing logic
@ -1210,6 +1224,7 @@ static int spirit_ifup(FAR struct net_driver_s *dev)
{
goto error_with_ifalmostup;
}
#endif
#endif
/* Set and activate a timer process */

View File

@ -125,12 +125,12 @@ struct pktbasic_init_s
* number of bytes in synclen has been stored.
* This parameter can be any value of enum
* pkt_synlen_e */
uint8_t fixedvarlen; /* Specifies if a fixed length of packet has to
uint8_t fixvarlen; /* Specifies if a fixed length of packet has to
* be used. This parameter can be any value of
* enum pkt_fixvar_len_e */
uint8_t pktlenwidth; /* Specifies the size of the length of packet
* in bits. This field is useful only if the
* field fixedvarlen is set to BASIC_LENGTH_VAR.
* field fixvarlen is set to BASIC_LENGTH_VAR.
* For Basic packets the length width is
* log2(max payload length + control length
* (0 to 4) + address length (0 or 1)). */
@ -272,7 +272,7 @@ int spirit_pktbasic_get_addrsetup(FAR struct spirit_library_s *spirit,
int spirit_pktbasic_set_format(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktbase_set_addrfield
* Name: spirit_pkbasic_enable_addrlen
*
* Description:
* Sets the address length for SPIRIT Basic packets.
@ -286,11 +286,11 @@ int spirit_pktbasic_set_format(FAR struct spirit_library_s *spirit);
*
******************************************************************************/
int spirit_pktbase_set_addrfield(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e txdestaddr);
int spirit_pkbasic_enable_addrlen(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e txdestaddr);
/******************************************************************************
* Name: spirit_pktbase_get_addrfield
* Name: spirit_pkbasic_isenabled_addrlen
*
* Description:
* Specifies if the Address field for SPIRIT Basic packets is enabled or
@ -305,7 +305,7 @@ int spirit_pktbase_set_addrfield(FAR struct spirit_library_s *spirit,
******************************************************************************/
enum spirit_functional_state_e
spirit_pktbase_get_addrfield(FAR struct spirit_library_s *spirit);
spirit_pkbasic_isenabled_addrlen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktbasic_set_payloadlen
@ -348,7 +348,7 @@ int spirit_pktbasic_set_payloadlen(FAR struct spirit_library_s *spirit,
uint16_t spirit_pktbase_get_payloadlen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktbasic_rxpktlen
* Name: spirit_pktbasic_get_rxpktlen
*
* Description:
* Returns the packet length field of the received packet.
@ -361,7 +361,7 @@ uint16_t spirit_pktbase_get_payloadlen(FAR struct spirit_library_s *spirit);
*
******************************************************************************/
uint16_t spirit_pktbasic_rxpktlen(FAR struct spirit_library_s *spirit);
uint16_t spirit_pktbasic_get_rxpktlen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktbasic_set_varlen

View File

@ -104,8 +104,20 @@
(mode == PKT_CRC_MODE_24BITS))
#define IS_PKT_CONTROL_LENGTH(len) \
((len == PKT_CONTROL_LENGTH_0BYTES) || (len == PKT_CONTROL_LENGTH_1BYTE) || \
(len == PKT_CONTROL_LENGTH_2BYTES) || (len == PKT_CONTROL_LENGTH_3BYTES) || \
(len == PKT_CONTROL_LENGTH_2BYTES) || (len == PKT_CONTROL_LENGTH_3BYTES) || \
(len == PKT_CONTROL_LENGTH_4BYTES))
#define IS_PKT_SYNCWORD(word) \
(((word) == PKT_SYNC_WORD_1) || ((word) == PKT_SYNC_WORD_2) || \
((word) == PKT_SYNC_WORD_3) || ((word) == PKT_SYNC_WORD_4))
#define IS_PKT_MAXRETX(nretx) \
(((nretx) == PKT_DISABLE_RETX) || ((nretx) == PKT_N_RETX_1) || \
((nretx) == PKT_N_RETX_2) || ((nretx) == PKT_N_RETX_3) || \
((nretx) == PKT_N_RETX_4) || ((nretx) == PKT_N_RETX_5) || \
((nretx) == PKT_N_RETX_6) || ((nretx) == PKT_N_RETX_7) || \
((nretx) == PKT_N_RETX_8) || ((nretx) == PKT_N_RETX_9) || \
((nretx) == PKT_N_RETX_10) || ((nretx) == PKT_N_RETX_11) || \
((nretx) == PKT_N_RETX_12) || ((nretx) == PKT_N_RETX_13) || \
((nretx) == PKT_N_RETX_14) || ((nretx) == PKT_N_RETX_15))
/******************************************************************************
* Public Types
@ -120,7 +132,7 @@ extern "C"
enum pkt_preamblen_e
{
PKT_PREAMBLE_LENGTH_01BYTE = 0x00, /* Preamble length 1 byte */
PKT_PREAMBLE_LENGTH_01BYTE = 0x00, /* Preamble length 1 byte */
PKT_PREAMBLE_LENGTH_02BYTES = 0x08, /* Preamble length 2 bytes */
PKT_PREAMBLE_LENGTH_03BYTES = 0x10, /* Preamble length 3 bytes */
PKT_PREAMBLE_LENGTH_04BYTES = 0x18, /* Preamble length 4 bytes */
@ -194,6 +206,38 @@ enum pkt_ctrllen_e
PKT_CONTROL_LENGTH_4BYTES /* Control length 4 bytes */
};
/* Sync words enumeration for SPIRIT packets. */
enum spirit_pktsyncword_e
{
PKT_SYNC_WORD_1 = 0x01, /* Index of the 1st sync word */
PKT_SYNC_WORD_2, /* Index of the 2nd sync word */
PKT_SYNC_WORD_3, /* Index of the 3rd sync word */
PKT_SYNC_WORD_4 /* Index of the 4th sync word */
};
/* Max retransmissions number enumeration for SPIRIT packets. */
enum spirit_maxretx_e
{
PKT_DISABLE_RETX = 0x00, /* No retrasmissions */
PKT_N_RETX_1 = 0x10, /* Max retrasmissions 1 */
PKT_N_RETX_2 = 0x20, /* Max retrasmissions 2 */
PKT_N_RETX_3 = 0x30, /* Max retrasmissions 3 */
PKT_N_RETX_4 = 0x40, /* Max retrasmissions 4 */
PKT_N_RETX_5 = 0x50, /* Max retrasmissions 5 */
PKT_N_RETX_6 = 0x60, /* Max retrasmissions 6 */
PKT_N_RETX_7 = 0x70, /* Max retrasmissions 7 */
PKT_N_RETX_8 = 0x80, /* Max retrasmissions 8 */
PKT_N_RETX_9 = 0x90, /* Max retrasmissions 9 */
PKT_N_RETX_10 = 0xa0, /* Max retrasmissions 10 */
PKT_N_RETX_11 = 0xb0, /* Max retrasmissions 11 */
PKT_N_RETX_12 = 0xc0, /* Max retrasmissions 12 */
PKT_N_RETX_13 = 0xd0, /* Max retrasmissions 13 */
PKT_N_RETX_14 = 0xe0, /* Max retrasmissions 14 */
PKT_N_RETX_15 = 0xf0 /* Max retrasmissions 15 */
};
/******************************************************************************
* Public Function Prototypes
******************************************************************************/
@ -232,6 +276,96 @@ int spirit_pktcommon_set_controllen(FAR struct spirit_library_s *spirit,
uint8_t spirit_pktcommon_get_controllen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_preamblen
*
* Description:
* Sets the PREAMBLE field Length mode for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* preamblen - Length of PREAMBLE field in bytes.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_preamblen(FAR struct spirit_library_s *spirit,
enum pkt_preamblen_e preamblen);
/******************************************************************************
* Name: spirit_pktcommon_get_preamblen
*
* Description:
* Returns the PREAMBLE field Length mode for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Preamble field length in bytes.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_preamblen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pkt_set_synclen
*
* Description:
* Sets the SYNC field Length for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* synclen - Length of SYNC field in bytes.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pkt_set_synclen(FAR struct spirit_library_s *spirit,
enum pkt_synlen_e synclen);
/******************************************************************************
* Name: spirit_pktcommon_get_synclen
*
* Description:
* Returns the SYNC field Length for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Sync field length in bytes.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_synclen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_fixvarlen
*
* Description:
* Sets fixed or variable payload length mode for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* fixvarlen - Variable or fixed length.
* PKT_FIXED_LENGTH_VAR -> variable (the length is extracted
* from the received packet).
* PKT_FIXED_LENGTH_FIX -> fix (the length is set by PCKTLEN0
* and PCKTLEN1).
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_fixvarlen(FAR struct spirit_library_s *spirit,
enum pkt_fixvar_len_e fixvarlen);
/******************************************************************************
* Name: spirit_pktcommon_enable_crcfilter
*
@ -251,6 +385,835 @@ uint8_t spirit_pktcommon_get_controllen(FAR struct spirit_library_s *spirit);
int spirit_pktcommon_enable_crcfilter(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate);
/******************************************************************************
* Name: spirit_pktcommon_isenabled_crcfilter
*
* Description:
* Returns the CRC filtering enable bit.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* CRC filtering state.
*
******************************************************************************/
enum spirit_functional_state_e
spirit_pktcommon_isenabled_crcfilter(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_crcmode
*
* Description:
* Sets the CRC mode for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* crcmode - Length of CRC field in bytes.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_crcmode(FAR struct spirit_library_s *spirit,
enum pkt_crcmode_e crcmode);
/******************************************************************************
* Name: spirit_pktcommon_get_crcmode
*
* Description:
* Returns the CRC mode for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Crc mode.
*
******************************************************************************/
enum pkt_crcmode_e
spirit_pktcommon_get_crcmode(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_enable_whitening
*
* Description:
* Enables or Disables WHITENING for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* newstate - New state for WHITENING mode.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_enable_whitening(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate);
/******************************************************************************
* Name: spirit_pktcommon_enable_fec
*
* Description:
* Enables or Disables FEC for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* newstate - New state for FEC mode.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_enable_fec(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate);
/******************************************************************************
* Name: spirit_pktcommon_set_syncword
*
* Description:
* Sets a specific SYNC word for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* syncwordno - SYNC word number to be set.
* syncword - SYNC word.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_syncword(FAR struct spirit_library_s *spirit,
enum spirit_pktsyncword_e syncwordno,
uint8_t syncword);
/******************************************************************************
* Name: spirit_pktcommon_get_syncword
*
* Description:
* Returns a specific SYNC word for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* syncwordno - SYNC word number to be get.
*
* Returned Value:
* Sync word x.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_syncword(FAR struct spirit_library_s *spirit,
enum spirit_pktsyncword_e syncwordno);
/******************************************************************************
* Name: spirit_pktcommon_set_syncwords
*
* Description:
* Sets multiple SYNC words for SPIRIT packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* syncwords - SYNC words to be set with format: 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
* synclen - SYNC length in bytes. The 32bit word passed will be stored in
* the SYNCx registers from the MSb until the number of bytes in
* synclen has been stored.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_syncwords(FAR struct spirit_library_s *spirit,
uint32_t syncwords, enum pkt_synlen_e synclen);
/******************************************************************************
* Name: spirit_pktcommon_get_syncwords
*
* Description:
* Returns multiple SYNC words for SPIRIT packets.
*
* Input Parameters:
* spiri - Reference to a Spirit library state structure instance
* synclen - SYNC length in bytes. The 32bit word passed will be stored in
* the SYNCx registers from the MSb until the number of bytes in
* synclen has been stored.
*
* Returned Value:
* Sync words. The format of the read 32 bit word is 0x|SYNC1|SYNC2|SYNC3|SYNC4|.
*
******************************************************************************/
uint32_t spirit_pktcommon_get_syncwords(FAR struct spirit_library_s *spirit,
enum pkt_synlen_e synclen);
/******************************************************************************
* Name: spirit_pktcommon_get_varlen
*
* Description:
* Returns the variable length width (in number of bits).
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Variable length width in bits.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_varlen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_txdestaddr
*
* Description:
* Sets the destination address for the Tx packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* txdestaddr - Destination address.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_txdestaddr(FAR struct spirit_library_s *spirit,
uint8_t txdestaddr);
/******************************************************************************
* Name: spirit_pktcommon_get_txdestaddr
*
* Description:
* Returns the settled destination address.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Transmitted destination address.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_txdestaddr(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_nodeaddress
*
* Description:
* Sets the node my address. When the filtering on my address is on, if the
* destination address extracted from the received packet is equal to the
* content of the my address, then the packet is accepted (this is the
* address of the node).
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* srcaddr - Address of the present node.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_nodeaddress(FAR struct spirit_library_s *spirit,
uint8_t srcaddr);
/******************************************************************************
* Name: spirit_pktcommon_get_nodeaddress
*
* Description:
* Returns the address of the present node.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* My address (address of this node).
*
******************************************************************************/
uint8_t spirit_pktcommon_get_nodeaddress(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_bcastaddr
*
* Description:
* Sets the broadcast address. If the destination address extracted from the
* received packet is equal to the content of the BROADCAST_ADDR register,
* then the packet is accepted.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* bcastaddr - Broadcast address.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_bcastaddr(FAR struct spirit_library_s *spirit,
uint8_t bcastaddr);
/******************************************************************************
* Name: spirit_pktcommon_get_bcastaddr
*
* Description:
* Returns the broadcast address.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Broadcast address.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_bcastaddr(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_mcastaddr
*
* Description:
* Sets the multicast address. When the multicast filtering is on, if the
* destination address extracted from the received packet is equal to the
* content of the MULTICAST_ADDR register, then the packet is accepted.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* mcastaddr - Multicast address.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_mcastaddr(FAR struct spirit_library_s *spirit,
uint8_t mcastaddr);
/******************************************************************************
* Name: spirit_pktcommon_get_mcastaddr
*
* Description:
* Returns the multicast address.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Multicast address.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_mcastaddr(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_ctrlmask
*
* Description:
* Sets the control mask. The 1 bits of the CONTROL_MASK indicate the bits
* to be used in filtering. (All 0s no filtering)
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* mask Control mask.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_ctrlmask(FAR struct spirit_library_s *spirit,
uint32_t mask);
/******************************************************************************
* Name: spirit_pktcommon_get_ctrlmask
*
* Description:
* Returns the control mask. The 1 bits of the CONTROL_MASK indicate the
* bits to be used in filtering. (All 0s no filtering)
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Control mask.
*
******************************************************************************/
uint32_t spirit_pktcommon_get_ctrlmask(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_ctrlref
*
* Description:
* Sets the control field reference. If the bits enabled by the CONTROL_MASK
* match the ones of the control fields extracted from the received packet
* then the packet is accepted.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* reference - Control reference.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_ctrlref(FAR struct spirit_library_s *spirit,
uint32_t reference);
/******************************************************************************
* Name: spirit_pktcommon_get_ctrlref
*
* Description:
* Returns the control field reference.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Control reference.
*
******************************************************************************/
uint32_t spirit_pktcommon_get_ctrlref(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_set_txctrl
*
* Description:
* Sets the TX control field.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* txctrl - Tx control field.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_txctrl(FAR struct spirit_library_s *spirit,
uint32_t txctrl);
/******************************************************************************
* Name: spirit_pktcommon_get_txctrl
*
* Description:
* Returns the Tx control field.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Control field of the transmitted packet.
*
******************************************************************************/
uint32_t spirit_pktcommon_get_txctrl(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_enable_destaddr_filter
*
* Description:
* If enabled RX packet is accepted if its destination address matches with
* My address.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* newstate - New state for DEST_VS_SOURCE_ADDRESS.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_enable_destaddr_filter(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate);
/******************************************************************************
* Name: spirit_pktcommon_enable_mcastaddr_filter
*
* Description:
* If enabled RX packet is accepted if its destination address matches with
* multicast address.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* newstate - New state for DEST_VS_MULTICAST_ADDRESS.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_enable_mcastaddr_filter(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate);
/******************************************************************************
* Name: spirit_pktcommon_enable_bcastaddr_filter
*
* Description:
* If enabled RX packet is accepted if its destination address matches with
* broadcast address.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* newstate - New state for DEST_VS_BROADCAST_ADDRESS.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_enable_bcastaddr_filter(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate);
/******************************************************************************
* Name: spirit_pktcommon_isenabled_destaddr_filter
*
* Description:
* Returns the enable bit of the my address filtering.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* S_ENABLE or S_DISABLE.
*
******************************************************************************/
enum spirit_functional_state_e
spirit_pktcommon_isenabled_destaddr_filter(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_isenabled_mcastaddr_filter
*
* Description:
* Returns the enable bit of the multicast address filtering.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* S_ENABLE or S_DISABLE.
*
******************************************************************************/
enum spirit_functional_state_e
spirit_pktcommon_isenabled_mcastaddr_filter(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_isenabled_bcastaddr_filter
*
* Description:
* Returns the enable bit of the broadcast address filtering.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* S_ENABLE or S_DISABLE.
*
******************************************************************************/
enum spirit_functional_state_e
spirit_pktcommon_isenabled_bcastaddr_filter(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_get_rxdestaddr
*
* Description:
* Returns the destination address of the received packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Destination address of the received address.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_rxdestaddr(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_get_rxctrl
*
* Description:
* Returns the control field of the received packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Received control field.
*
******************************************************************************/
uint32_t spirit_pktcommon_get_rxctrl(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_get_rxcrc
*
* Description:
* Returns the CRC field of the received packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* crc - Array in which the CRC field has to be stored.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_get_rxcrc(FAR struct spirit_library_s *spirit,
FAR uint8_t *crc);
/******************************************************************************
* Name: spirit_pktcommon_enable_rxautoack
*
* Description:
* Sets the AUTO ACKNOLEDGEMENT mechanism on the receiver. When the feature
* is enabled and a data packet has been correctly received, then an
* acknowledgement packet is sent back to the originator of the received
* packet. If the PIGGYBACKING bit is also set, payload data will be read
* from the FIFO; otherwise an empty packet is sent only containing the
* source and destination addresses and the sequence number of the packet
* being acknowledged.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* autoack - New state for autoack.
* piggyback - New state for autoack.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_enable_rxautoack(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e autoack,
enum spirit_functional_state_e piggyback);
/******************************************************************************
* Name: spirit_pktcommon_enable_txautoack
*
* Description:
* Sets the AUTO ACKNOLEDGEMENT mechanism on the transmitter. On the
* transmitter side, the NACK_TX field can be used to require or not an
* acknowledgment for each individual packet: if NACK_TX is set to "1" then
* acknowledgment will not be required; if NACK_TX is set to "0" then
* acknowledgment will be required.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* newstate - New state for TX_AUTOACK.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_enable_txautoack(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate);
/******************************************************************************
* Name: spirit_pktcommon_set_txseqno
*
* Description:
* Sets the TX sequence number to be used to start counting.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* seqno - New value for Tx seq number reload.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_txseqno(FAR struct spirit_library_s *spirit,
uint8_t seqno);
/******************************************************************************
* Name: spirit_pktcommon_set_maxretx
*
* Description:
* Set the maximum number of TX retries (from 0 to 15).
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* seqno - New value for Tx seq number reload.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_set_maxretx(FAR struct spirit_library_s *spirit,
enum spirit_maxretx_e maxretx);
/******************************************************************************
* Name: spirit_pktcommon_get_maxretx
*
* Description:
* Returns the max number of automatic retransmission.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Max number of retransmissions.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_maxretx(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_get_txackreq
*
* Description:
* Returns the TX ACK request
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Max number of retransmissions.
*
******************************************************************************/
enum spirit_functional_state_e
spirit_pktcommon_get_txackreq(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_get_rxsrcaddr
*
* Description:
* Returns the source address of the received packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Source address of the received packet.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_rxsrcaddr(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_get_rxseqno
*
* Description:
* Returns the sequence number of the received packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Received Sequence number.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_rxseqno(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_get_rxnak
*
* Description:
* Returns the Nack bit of the received packet
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Value of the Nack bit.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_rxnak(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_get_txseqno
*
* Description:
* Returns the sequence number of the transmitted packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Sequence number of the transmitted packet.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_txseqno(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_get_nretx
*
* Description:
* Returns the number of retransmission done on the transmitted packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Number of retransmissions done until now.
*
******************************************************************************/
uint8_t spirit_pktcommon_get_nretx(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktcommon_enable_ctrl_filter
*
* Description:
* If enabled RX packet is accepted only if the masked control field matches
* the masked control field reference (CONTROL_MASK & CONTROL_FIELD_REF ==
* CONTROL_MASK & RX_CONTROL_FIELD).
*
* NOTE: This filtering control is enabled by default but the control mask is
* by default set to 0. As a matter of fact the user has to enable the
* control filtering bit after the packet initialization because the packet
* initialization routine disables it.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* newstate - New state for Control filtering enable bit.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktcommon_enable_ctrl_filter(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate);
/******************************************************************************
* Name: spirit_pktcommon_isenabled_ctrl_filter
*
* Description:
* Returns the enable bit of the control field filtering.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* S_ENABLE or S_DISABLE.
*
******************************************************************************/
enum spirit_functional_state_e
spirit_pktcommon_isenabled_ctrl_filter(FAR struct spirit_library_s *spirit);
#ifdef __cplusplus
}
#endif

View File

@ -106,7 +106,8 @@
* Included Files
******************************************************************************/
#include <stding.h>
#include "spirit_types.h"
#include "spirit_pktcommon.h"
/******************************************************************************
* Public Types
@ -129,12 +130,12 @@ struct spirit_pktstack_init_s
* parameter can be any value from enum pkt_premblen_e */
uint8_t synclen; /* Specifies the sync word length of packet. This
* parameter can be any value of enum pkt_premblen_e */
uint8_t fixedvarlen; /* Specifies if a fixed length of packet has to be
uint8_t fixvarlen; /* Specifies if a fixed length of packet has to be
* used. This parameter can be any value of enum
* pkt_fixvar_len_e */
uint8_t pktlenwidth; /* Specifies the size of the length of packet in
* bits. This field is useful only if the field
* fixedvarlen is set to STACK_LENGTH_VAR. For STack
* fixvarlen is set to STACK_LENGTH_VAR. For STack
* packets the length width is log2( max payload
* length + control length (0 to 4) + address length
* (always 2)). This parameter is an FAR uint8_t */
@ -179,24 +180,303 @@ struct spirit_pktstack_address_s
struct spirit_pktstack_llp_s
{
uint8_t autoack; /* Specifies if the auto ACK feature
* is used or not. This parameter can
* be a value of
* enum spirit_functional_state_e */
uint8_t piggyback; /* Specifies if the
* piggybacking feature is used
* or not. This parameter can
* be a value of
* enum spirit_functional_state_e */
uint8_t maxretx; /* Specifies the number of
* MAX-Retransmissions. This parameter can be a
* value of enum spirit_maxretx_e */
uint8_t autoack; /* Specifies if the auto ACK feature is used or not.
* This parameter can be a value from enum
* spirit_functional_state_e */
uint8_t piggyback; /* Specifies if the piggybacking feature is used or
* not. This parameter can be a value from enum
* spirit_functional_state_e */
uint8_t maxretx; /* Specifies the number of MAX-Retransmissions. This
* parameter can be a value from enum spirit_maxretx_e */
};
/******************************************************************************
* Public Function Prototypes
******************************************************************************/
/******************************************************************************
* Name: spirit_pktstack_initialize
*
* Description:
* Initializes the SPIRIT STack packet according to the specified parameters
* in the struct spirit_pktstack_init_s.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* pktstack - STack packet init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_initialize(FAR struct spirit_library_s *spirit,
FAR const struct spirit_pktstack_init_s *pktstack);
/******************************************************************************
* Name: spirit_pktstack_get_setup
* Description:
* Returns the SPIRIT STack packet structure according to the specified
* parameters in the registers.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* pktstack - STack packet init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_get_setup(FAR struct spirit_library_s *spirit,
FAR struct spirit_pktstack_init_s *pktstack);
/******************************************************************************
* Name: spirit_pktstack_address_initialize
*
* Description:
* Initializes the SPIRIT STack packet addresses according to the specified
* parameters in the PktStackAddresses struct.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* addrinit - STack packet addresses init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_address_initialize(FAR struct spirit_library_s *spirit,
FAR const struct spirit_pktstack_address_s *addrinit);
/******************************************************************************
* Name: spirit_pktstack_get_addrsetup
*
* Description:
* Returns the SPIRIT STack packet addresses structure according to the
* specified parameters in the registers.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* addrinit - STack packet addresses init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_get_addrsetup(FAR struct spirit_library_s *spirit,
FAR struct spirit_pktstack_address_s *addrinit);
/******************************************************************************
* Name: spirit_pktstack_llp_initialize
*
* Description:
* Initializes the SPIRIT STack packet LLP options according to the specified
* parameters in the struct spirit_pktstack_llp_s struct.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* llpinit - STack packet LLP init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_llp_initialize(FAR struct spirit_library_s *spirit,
FAR const struct spirit_pktstack_llp_s *llpinit);
/******************************************************************************
* Name: spirit_pktstack_get_llpsetup
*
* Description:
* Returns the SPIRIT STack packet LLP options according to the specified
* values in the registers.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* llpinit - STack packet LLP structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_get_llpsetup(FAR struct spirit_library_s *spirit,
FAR struct spirit_pktstack_llp_s *llpinit);
/******************************************************************************
* Name: spirit_pktstack_set_format
*
* Description:
* Configures the Stack packet format for SPIRIT.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_set_format(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktstack_enable_addrlen
*
* Description:
* Sets the address length for SPIRIT STack packets (always 2).
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_enable_addrlen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktstack_set_payloadlen
*
* Description:
* Sets the payload length for SPIRIT STack packets. Since the packet length
* depends from the address (always 2 for this packet format) and the
* control field size, this function reads the control length register
* content in order to determine the correct packet length to be written.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* payloadlen - Payload length in bytes.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_set_payloadlen(FAR struct spirit_library_s *spirit,
uint16_t payloadlen);
/******************************************************************************
* Name: spirit_pktstack_get_payloadlen
*
* Description:
* Returns the payload length for SPIRIT STack packets. Since the packet
* length depends from the address and the control field size, this function
* reads the correspondent registers in order to determine the correct
* payload length to be returned.
*
* Input Parameters:
* None.
*
* Returned Value:
* Payload length.
*
******************************************************************************/
uint16_t spirit_pktstack_get_payloadlen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pktstack_set_varlen
*
* Description:
* Computes and sets the variable payload length for SPIRIT STack packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* payloadlen - Payload length in bytes.
* ctrllen - Control length in bytes.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_set_varlen(FAR struct spirit_library_s *spirit,
uint16_t payloadlen,
enum pkt_ctrllen_e ctrllen);
/******************************************************************************
* Name: spirit_pkstack_set_rxsource_addrmask
*
* Description:
* Rx packet source mask. Used to mask the address of the accepted packets.
* If 0 -> no filtering.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* mask - Rx source mask.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pkstack_set_rxsource_addrmask(FAR struct spirit_library_s *spirit,
uint8_t mask);
/******************************************************************************
* Name: spirit_pktstack_get_rxsource_addrmask
*
* Description:
* Returns the Rx packet source mask. Used to mask the address of the
* accepted packets. If 0 -> no filtering.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Rx source mask.
*
******************************************************************************/
uint8_t spirit_pktstack_get_rxsource_addrmask(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pkstack_get_rxpktlen
*
* Description:
* Returns the packet length field of the received packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Packet length.
*
******************************************************************************/
uint16_t spirit_pkstack_get_rxpktlen(FAR struct spirit_library_s *spirit);
/******************************************************************************
* Name: spirit_pkstack_enable_rxsource_addrfilter
*
* Description:
* If enabled RX packet is accepted only if the masked source address field
* matches the masked source address field reference (SOURCE_MASK &
* SOURCE_FIELD_REF == SOURCE_MASK & RX_SOURCE_FIELD).
*
* NOTE: This filtering control is enabled by default but the source
* address mask is by default set to 0. As a matter of fact the user has
* to enable the source filtering bit after the packet initialization
* because the packet initialiazation routine disables it.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* newstate - New state for Source address filtering enable bit.
* This parameter can be S_ENABLE or S_DISABLE.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pkstack_enable_rxsource_addrfilter(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate);
#ifdef __cplusplus
}
#endif

View File

@ -36,10 +36,10 @@
# Include Spirit driver source files in the build
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_general.c
CSRCS += spirit_spi.c
CSRCS += spirit_pktmbus.c spirit_pktstack.c spirit_directrf.c spirit_qi.c
CSRCS += spirit_calibration.c spirit_management.c spirit_aes.c spirit_csma.c
CSRCS += spirit_linearfifo.c spirit_irq.c spirit_timer.c spirit_gpio.c
CSRCS += spirit_general.c spirit_spi.c
# Include Spirit driver build support

View File

@ -81,7 +81,7 @@ int spirit_pktbasic_initialize(FAR struct spirit_library_s *spirit,
DEBUGASSERT(IS_PKT_SYNC_LENGTH(pktpasic->synclen));
DEBUGASSERT(IS_PKT_CRC_MODE(pktpasic->crcmode));
DEBUGASSERT(IS_PKT_LENGTH_WIDTH_BITS(pktpasic->pktlenwidth));
DEBUGASSERT(IS_PKT_FIX_VAR_LENGTH(pktpasic->fixedvarlen));
DEBUGASSERT(IS_PKT_FIX_VAR_LENGTH(pktpasic->fixvarlen));
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(pktpasic->txdestaddr));
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(pktpasic->fec));
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(pktpasic->datawhite));
@ -155,7 +155,7 @@ int spirit_pktbasic_initialize(FAR struct spirit_library_s *spirit,
/* Preamble, sync and fixed or variable length setting */
regval[2] = (uint8_t)pktpasic->preamblen | (uint8_t)pktpasic->synclen |
(uint8_t)pktpasic->fixedvarlen;
(uint8_t)pktpasic->fixvarlen;
/* CRC length, whitening and FEC setting */
@ -271,7 +271,7 @@ int spirit_pktbasic_get_setup(FAR struct spirit_library_s *spirit,
/* FIX or VAR bit */
pktbasic->fixedvarlen = (enum pkt_fixvar_len_e)(regval[2] & 0x01);
pktbasic->fixvarlen = (enum pkt_fixvar_len_e)(regval[2] & 0x01);
/* Preamble length */
@ -501,22 +501,22 @@ int spirit_pktbasic_set_format(FAR struct spirit_library_s *spirit)
}
/******************************************************************************
* Name: spirit_pktbase_set_addrfield
* Name: spirit_pkbasic_enable_addrlen
*
* Description:
* Sets the address length for SPIRIT Basic packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* txdestaddr - Length of ADDRESS in bytes.
* txdestaddr - Enable/disable address field
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktbase_set_addrfield(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e txdestaddr)
int spirit_pkbasic_enable_addrlen(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e txdestaddr)
{
uint8_t regval;
int ret;
@ -550,7 +550,7 @@ int spirit_pktbase_set_addrfield(FAR struct spirit_library_s *spirit,
}
/******************************************************************************
* Name: spirit_pktbase_get_addrfield
* Name: spirit_pkbasic_isenabled_addrlen
*
* Description:
* Specifies if the Address field for SPIRIT Basic packets is enabled or
@ -565,7 +565,7 @@ int spirit_pktbase_set_addrfield(FAR struct spirit_library_s *spirit,
******************************************************************************/
enum spirit_functional_state_e
spirit_pktbase_get_addrfield(FAR struct spirit_library_s *spirit)
spirit_pkbasic_isenabled_addrlen(FAR struct spirit_library_s *spirit)
{
uint8_t regval;
@ -611,7 +611,7 @@ int spirit_pktbasic_set_payloadlen(FAR struct spirit_library_s *spirit,
/* Computes the oversize (address + control) size */
if (spirit_pktbase_get_addrfield(spirit))
if (spirit_pkbasic_isenabled_addrlen(spirit))
{
oversize = 1;
}
@ -655,7 +655,7 @@ uint16_t spirit_pktbase_get_payloadlen(FAR struct spirit_library_s *spirit)
/* Computes the oversize (address + control) size */
if (spirit_pktbase_get_addrfield(spirit))
if (spirit_pkbasic_isenabled_addrlen(spirit))
{
oversize = 1;
}
@ -672,7 +672,7 @@ uint16_t spirit_pktbase_get_payloadlen(FAR struct spirit_library_s *spirit)
}
/******************************************************************************
* Name: spirit_pktbasic_rxpktlen
* Name: spirit_pktbasic_get_rxpktlen
*
* Description:
* Returns the packet length field of the received packet.
@ -685,14 +685,14 @@ uint16_t spirit_pktbase_get_payloadlen(FAR struct spirit_library_s *spirit)
*
******************************************************************************/
uint16_t spirit_pktbasic_rxpktlen(FAR struct spirit_library_s *spirit)
uint16_t spirit_pktbasic_get_rxpktlen(FAR struct spirit_library_s *spirit)
{
uint8_t regval[2];
uint16_t oversize = 0;
/* Computes the oversize (address + control) size */
if (spirit_pktbase_get_addrfield(spirit))
if (spirit_pkbasic_isenabled_addrlen(spirit))
{
oversize = 1;
}
@ -717,7 +717,7 @@ uint16_t spirit_pktbasic_rxpktlen(FAR struct spirit_library_s *spirit)
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* payloadlen - Payload length in bytes.
* txdestaddr - Enable or Disable Address Field.
* txdestaddr - Enable or disable address field.
* ctrllen - Control length in bytes.
*
* Returned Value:

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,921 @@
/******************************************************************************
* drivers/wireless/spirit/spirit_pktstack.c
* Configuration and management of SPIRIT STack packets.
*
* Copyright(c) 2015 STMicroelectronics
* Author: VMA division - AMS
* Version 3.2.2 08-July-2015
*
* Adapted for NuttX by:
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************/
/******************************************************************************
* Included Files
******************************************************************************/
#include <sys/types.h>
#include <assert.h>
#include "spirit_spi.h"
#include "spirit_pktcommon.h"
#include "spirit_pktstack.h"
/******************************************************************************
* Public Functions
******************************************************************************/
/******************************************************************************
* Name: spirit_pktstack_initialize
*
* Description:
* Initializes the SPIRIT STack packet according to the specified parameters
* in the struct spirit_pktstack_init_s.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* pktstack - STack packet init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_initialize(FAR struct spirit_library_s *spirit,
FAR const struct spirit_pktstack_init_s *pktstack)
{
uint8_t regval[4];
uint8_t pktlenwidth;
int ret;
int i;
/* Check the parameters */
DEBUGASSERT(IS_PKT_PREAMBLE_LENGTH(pktstack->premblen));
DEBUGASSERT(IS_PKT_SYNC_LENGTH(pktstack->synclen));
DEBUGASSERT(IS_PKT_CRC_MODE(pktstack->crcmode));
DEBUGASSERT(IS_PKT_LENGTH_WIDTH_BITS(pktstack->pktlenwidth));
DEBUGASSERT(IS_PKT_CRC_MODE(pktstack->fixvarlen));
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(pktstack->fec));
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(pktstack->datawhite));
DEBUGASSERT(IS_PKT_CONTROL_LENGTH(pktstack->ctrllen));
/* Read the PROTOCOL1 register */
ret = spirit_reg_read(spirit, PROTOCOL1_BASE, &regval[0], 1);
if (ret < 0)
{
return ret;
}
/* Mask a reserved bit */
regval[0] &= ~0x20;
/* Always (!) set the automatic packet filtering */
regval[0] |= PROTOCOL1_AUTO_PCKT_FLT_MASK;
/* Write the value to register */
ret = spirit_reg_write(spirit, PROTOCOL1_BASE, &regval[0], 1);
if (ret < 0)
{
return ret;
}
/* Read the PCKT_FLT_OPTIONS register */
ret = spirit_reg_read(spirit, PCKT_FLT_OPTIONS_BASE, &regval[0], 1);
if (ret < 0)
{
return ret;
}
/* Always reset the control and source filtering */
regval[0] &= ~(PCKT_FLT_OPTIONS_SOURCE_FILTERING_MASK |
PCKT_FLT_OPTIONS_CONTROL_FILTERING_MASK);
/* Write the value to register */
ret = spirit_reg_write(spirit, PCKT_FLT_OPTIONS_BASE, &regval[0], 1);
if (ret < 0)
{
return ret;
}
/* Address and control length setting: source and destination address are
* always present so ADDRESS_LENGTH=2 */
regval[0] = 0x10 | (uint8_t)pktstack->ctrllen;
/* Packet format and width length setting */
pktlenwidth = pktstack->pktlenwidth;
if (pktlenwidth == 0)
{
pktlenwidth = 1;
}
regval[1] = (uint8_t)PCKTCTRL3_PCKT_FRMT_STACK | (uint8_t)(pktlenwidth - 1);
/* Preamble, sync and fixed or variable length setting */
regval[2] = ((uint8_t)pktstack->premblen) | ((uint8_t)pktstack->synclen) |
((uint8_t)pktstack->fixvarlen);
/* CRC length, whitening and FEC setting */
regval[3] = (uint8_t) pktstack->crcmode;
if (pktstack->datawhite == S_ENABLE)
{
regval[3] |= PCKTCTRL1_WHIT_MASK;
}
if (pktstack->fec == S_ENABLE)
{
regval[3] |= PCKTCTRL1_FEC_MASK;
}
/* Write registers */
ret = spirit_reg_write(spirit, PCKTCTRL4_BASE, regval, 4);
if (ret < 0)
{
return ret;
}
/* Sync words setting */
for (i = 0; i < 4; i++)
{
if (i < 3 - (pktstack->synclen >> 1))
{
regval[i] = 0;
}
else
{
regval[i] = (uint8_t) (pktstack->syncwords >> (8 * i));
}
}
/* Enables or disables the CRC check */
if (pktstack->crcmode == PKT_NO_CRC)
{
ret = spirit_pktcommon_enable_crcfilter(spirit, S_DISABLE);
}
else
{
ret = spirit_pktcommon_enable_crcfilter(spirit, S_ENABLE);
}
if (ret < 0)
{
return ret;
}
/* Write registers */
return spirit_reg_write(spirit, SYNC4_BASE, regval, 4);
}
/******************************************************************************
* Name: spirit_pktstack_get_setup
* Description:
* Returns the SPIRIT STack packet structure according to the specified
* parameters in the registers.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* pktstack - STack packet init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_get_setup(FAR struct spirit_library_s *spirit,
FAR struct spirit_pktstack_init_s *pktstack)
{
uint8_t regval[10];
int ret;
int i;
/* Read registers */
ret = spirit_reg_read(spirit, PCKTCTRL4_BASE, regval, 10);
if (ret >= 0)
{
/* Length width */
pktstack->pktlenwidth = (regval[1] & 0x0f) + 1;
/* Control length */
pktstack->ctrllen = regval[0] & 0x07;
/* CRC mode */
pktstack->crcmode = regval[3] & 0xe0;
/* Whitening */
pktstack->datawhite = (regval[3] >> 4) & 0x01;
/* FEC */
pktstack->fec = regval[3] & 0x01;
/* FIX or VAR bit */
pktstack->fixvarlen = regval[2] & 0x01;
/* Preamble length */
pktstack->premblen = regval[2] & 0xf8;
/* Sync length */
pktstack->synclen = regval[2] & 0x06;
/* sync Words */
pktstack->syncwords = 0;
for (i = 0; i < 4; i++)
{
if (i > 2 - (pktstack->synclen >> 1))
{
pktstack->syncwords |= regval[i + 6] << (8 * i);
}
}
}
return OK;
}
/******************************************************************************
* Name: spirit_pktstack_address_initialize
*
* Description:
* Initializes the SPIRIT STack packet addresses according to the specified
* parameters in the PktStackAddresses struct.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* addrinit - STack packet addresses init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_address_initialize(FAR struct spirit_library_s *spirit,
FAR const struct spirit_pktstack_address_s *addrinit)
{
uint8_t regval[3];
int ret;
/* Check the parameters */
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(addrinit->destfilter));
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(addrinit->mcastfilter));
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(addrinit->bcastfilter));
/* Read the filtering options ragister */
ret = spirit_reg_read(spirit, PCKT_FLT_OPTIONS_BASE, &regval[0], 1);
if (ret >= 0)
{
/* Enables or disables filtering on my address */
if (addrinit->destfilter == S_ENABLE)
{
regval[0] |= PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
}
else
{
regval[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_TX_ADDR_MASK;
}
/* Enables or disables filtering on multicast address */
if (addrinit->mcastfilter == S_ENABLE)
{
regval[0] |= PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
}
else
{
regval[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_MULTICAST_ADDR_MASK;
}
/* Enables or disables filtering on broadcast address */
if (addrinit->bcastfilter == S_ENABLE)
{
regval[0] |= PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
}
else
{
regval[0] &= ~PCKT_FLT_OPTIONS_DEST_VS_BROADCAST_ADDR_MASK;
}
/* Write values to the register */
ret = spirit_reg_write(spirit, PCKT_FLT_OPTIONS_BASE, &regval[0], 1);
if (ret >= 0)
{
/* Fill array with the addresses passed in the structure */
regval[0] = addrinit->bcastaddr;
regval[1] = addrinit->mcastaddr;
regval[2] = addrinit->srcaddr;
/* Write them to the addresses registers */
ret = spirit_reg_write(spirit, PCKT_FLT_GOALS_BROADCAST_BASE, regval, 3);
}
}
return ret;
}
/******************************************************************************
* Name: spirit_pktstack_get_addrsetup
*
* Description:
* Returns the SPIRIT STack packet addresses structure according to the
* specified parameters in the registers.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* addrinit - STack packet addresses init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_get_addrsetup(FAR struct spirit_library_s *spirit,
FAR struct spirit_pktstack_address_s *addrinit)
{
uint8_t regval[3];
int ret;
/* Read values from the PCKT_FLT_GOALS registers */
ret = spirit_reg_read(spirit, PCKT_FLT_GOALS_BROADCAST_BASE, regval, 3);
if (ret >= 0)
{
/* Fit the structure with the read addresses */
addrinit->bcastaddr = regval[0];
addrinit->mcastaddr = regval[1];
addrinit->srcaddr = regval[2];
ret = spirit_reg_read(spirit, PCKT_FLT_OPTIONS_BASE, &regval[0], 1);
if (ret >= 0)
{
/* Fit the structure with the read filtering bits */
addrinit->bcastfilter =
(enum spirit_functional_state_e)((regval[0] >> 1) & 0x01);
addrinit->mcastfilter =
(enum spirit_functional_state_e)((regval[0] >> 2) & 0x01);
addrinit->destfilter =
(enum spirit_functional_state_e)((regval[0] >> 3) & 0x01);
}
}
return ret;
}
/******************************************************************************
* Name: spirit_pktstack_llp_initialize
*
* Description:
* Initializes the SPIRIT STack packet LLP options according to the specified
* parameters in the struct spirit_pktstack_llp_s struct.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* llpinit - STack packet LLP init structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_llp_initialize(FAR struct spirit_library_s *spirit,
FAR const struct spirit_pktstack_llp_s *llpinit)
{
uint8_t regval[2];
int ret;
/* Check the parameters */
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(llpinit->piggyback));
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(llpinit->autoack));
DEBUGASSERT(IS_PKT_MAXRETX(llpinit->maxretx));
/* Check if piggybacking is enabled and autoack is disabled */
DEBUGASSERT(!(llpinit->piggyback == S_ENABLE &&
llpinit->autoack == S_DISABLE));
/* Piggybacking mechanism setting from the PROTOCOL1 register */
ret = spirit_reg_read(spirit, PROTOCOL1_BASE, regval, 2);
if (ret >= 0)
{
if (llpinit->piggyback == S_ENABLE)
{
regval[0] |= PROTOCOL1_PIGGYBACKING_MASK;
}
else
{
regval[0] &= ~PROTOCOL1_PIGGYBACKING_MASK;
}
/* RX and TX autoack mechanisms setting from the PROTOCOL0 register */
if (llpinit->autoack == S_ENABLE)
{
regval[1] |= PROTOCOL0_AUTO_ACK_MASK;
}
else
{
regval[1] &= ~PROTOCOL0_AUTO_ACK_MASK;
}
/* Max number of retransmission setting */
regval[1] &= ~PROTOCOL0_NMAX_RETX_MASK;
regval[1] |= llpinit->maxretx;
/* Write registers */
ret = spirit_reg_write(spirit, PROTOCOL1_BASE, regval, 2);
}
return ret;
}
/******************************************************************************
* Name: spirit_pktstack_get_llpsetup
*
* Description:
* Returns the SPIRIT STack packet LLP options according to the specified
* values in the registers.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* llpinit - STack packet LLP structure.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_get_llpsetup(FAR struct spirit_library_s *spirit,
FAR struct spirit_pktstack_llp_s *llpinit)
{
uint8_t regval[2];
int ret;
/* Piggybacking mechanism setting from the PROTOCOL1 register */
ret = spirit_reg_read(spirit, PROTOCOL1_BASE, regval, 2);
if (ret >= 0)
{
/* Fit the structure with the read values */
llpinit->piggyback = (regval[0] >> 6) & 0x01;
llpinit->autoack = (regval[1] >> 2) & 0x01;
llpinit->maxretx = regval[1] & PROTOCOL0_NMAX_RETX_MASK;
}
return ret;
}
/******************************************************************************
* Name: spirit_pktstack_set_format
*
* Description:
* Configures the Stack packet format for SPIRIT.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_set_format(FAR struct spirit_library_s *spirit)
{
uint8_t regval;
int ret;
/* Read the PCKTCTRL3 register value */
ret = spirit_reg_read(spirit, PCKTCTRL3_BASE, &regval, 1);
if (ret < 0)
{
return ret;
}
/* Build value to be written. Also set to 0 the direct RX mode bits */
regval &= 0x0f;
regval |= ((uint8_t) PCKTCTRL3_PCKT_FRMT_STACK);
/* Write the value to the PCKTCTRL3 register. */
ret = spirit_reg_write(spirit, PCKTCTRL3_BASE, &regval, 1);
if (ret < 0)
{
return ret;
}
/* Read the PCKTCTRL1 register value */
ret = spirit_reg_read(spirit, PCKTCTRL1_BASE, &regval, 1);
if (ret < 0)
{
return ret;
}
/* Build the new value. Set to 0 the direct TX mode bits */
regval &= 0xf3;
/* Write the PCKTCTRL1 value to register */
ret = spirit_reg_write(spirit, PCKTCTRL1_BASE, &regval, 1);
if (ret < 0)
{
return ret;
}
/* Read the PROTOCOL1 register */
ret = spirit_reg_read(spirit, PROTOCOL1_BASE, &regval, 1);
if (ret < 0)
{
return ret;
}
/* Mask a reserved bit */
regval &= ~0x20;
/* Write the value to the PROTOCOL1 register */
return spirit_reg_write(spirit, PROTOCOL1_BASE, &regval, 1);
}
/******************************************************************************
* Name: spirit_pktstack_enable_addrlen
*
* Description:
* Sets the address length for SPIRIT STack packets (always 2).
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_enable_addrlen(FAR struct spirit_library_s *spirit)
{
uint8_t regval;
int ret;
/* Read the PCKTCTRL4 register value */
ret = spirit_reg_read(spirit, PCKTCTRL4_BASE, &regval, 1);
if (ret >= 0)
{
/* Build the new value */
regval &= ~PCKTCTRL4_ADDRESS_LEN_MASK;
regval |= ((uint8_t) 0x10);
/* Write the value to the PCKTCTRL4 register */
ret = spirit_reg_write(spirit, PCKTCTRL4_BASE, &regval, 1);
}
return ret;
}
/******************************************************************************
* Name: spirit_pktstack_set_payloadlen
*
* Description:
* Sets the payload length for SPIRIT STack packets. Since the packet length
* depends from the address (always 2 for this packet format) and the
* control field size, this function reads the control length register
* content in order to determine the correct packet length to be written.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* payloadlen - Payload length in bytes.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_set_payloadlen(FAR struct spirit_library_s *spirit,
uint16_t payloadlen)
{
uint8_t regval[2];
/* Computes the oversize (address + control) size */
uint16_t oversize = 2 + (uint16_t)spirit_pktcommon_get_controllen(spirit);
/* Computes PCKTLEN0 value from lPayloadLength */
regval[1] = BUILD_PCKTLEN0(payloadlen + oversize);
/* Computes PCKTLEN1 value from lPayloadLength */
regval[0] = BUILD_PCKTLEN1(payloadlen + oversize);
/* Write the value to the PCKTLENx registers */
return spirit_reg_write(spirit, PCKTLEN1_BASE, regval, 2);
}
/******************************************************************************
* Name: spirit_pktstack_get_payloadlen
*
* Description:
* Returns the payload length for SPIRIT STack packets. Since the packet
* length depends from the address and the control field size, this function
* reads the correspondent registers in order to determine the correct
* payload length to be returned.
*
* Input Parameters:
* None.
*
* Returned Value:
* Payload length.
*
******************************************************************************/
uint16_t spirit_pktstack_get_payloadlen(FAR struct spirit_library_s *spirit)
{
uint8_t regval[2];
uint16_t oversize;
/* Computes the oversize (address + control) size */
oversize = 2 + (uint16_t)spirit_pktcommon_get_controllen(spirit);
/* Read the PCKTLEN1 registers value */
(void)spirit_reg_read(spirit, PCKTLEN1_BASE, regval, 2);
/* Rebuild and return the payload length value */
return ((((uint16_t) regval[1]) << 8) + (uint16_t) regval[0] - oversize);
}
/******************************************************************************
* Name: spirit_pktstack_set_varlen
*
* Description:
* Computes and sets the variable payload length for SPIRIT STack packets.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* payloadlen - Payload length in bytes.
* ctrllen - Control length in bytes.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pktstack_set_varlen(FAR struct spirit_library_s *spirit,
uint16_t payloadlen,
enum pkt_ctrllen_e ctrllen)
{
uint32_t pktlen;
uint8_t regval;
int ret;
int i;
/* packet length = payload length + address length (2) + control length */
pktlen = payloadlen + 2 + ctrllen;
/* Computes the number of bits */
for (i = 0; i < 16; i++)
{
if (pktlen == 0)
{
break;
}
pktlen >>= 1;
}
if (i == 0)
{
i = 1;
}
/* Read the PCKTCTRL3 register value */
ret = spirit_reg_read(spirit, PCKTCTRL3_BASE, &regval, 1);
if (ret >= 0)
{
/* Build the register value */
regval &= ~PCKTCTRL3_LEN_WID_MASK;
regval |= (uint8_t)(i - 1);
/* Write the PCKTCTRL3 register value */
ret = spirit_reg_write(spirit, PCKTCTRL3_BASE, &regval, 1);
}
return ret;
}
/******************************************************************************
* Name: spirit_pkstack_set_rxsource_addrmask
*
* Description:
* Rx packet source mask. Used to mask the address of the accepted packets.
* If 0 -> no filtering.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* mask - Rx source mask.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pkstack_set_rxsource_addrmask(FAR struct spirit_library_s *spirit,
uint8_t mask)
{
/* Write value to the register PCKT_FLT_GOALS_SOURCE_MASK */
return spirit_reg_write(spirit, PCKT_FLT_GOALS_SOURCE_MASK_BASE, &mask, 1);
}
/******************************************************************************
* Name: spirit_pktstack_get_rxsource_addrmask
*
* Description:
* Returns the Rx packet source mask. Used to mask the address of the
* accepted packets. If 0 -> no filtering.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Rx source mask.
*
******************************************************************************/
uint8_t spirit_pktstack_get_rxsource_addrmask(FAR struct spirit_library_s *spirit)
{
uint8_t regval;
/* Write value to the PCKT_FLT_GOALS_SOURCE_MASK register */
(void)spirit_reg_read(spirit, PCKT_FLT_GOALS_SOURCE_MASK_BASE, &regval, 1);
/* Return the read value */
return regval;
}
/******************************************************************************
* Name: spirit_pkstack_get_rxpktlen
*
* Description:
* Returns the packet length field of the received packet.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
*
* Returned Value:
* Packet length.
*
******************************************************************************/
uint16_t spirit_pkstack_get_rxpktlen(FAR struct spirit_library_s *spirit)
{
uint8_t regval[2];
uint16_t pktlen;
/* Read the RX_PCKT_LENx registers value */
(void)spirit_reg_read(spirit, RX_PCKT_LEN1_BASE, regval, 2);
/* Rebuild and return the the length field */
pktlen = ((((uint16_t) regval[0]) << 8) + (uint16_t) regval[1]);
/* Computes the oversize (address + control) size */
pktlen -= 2 + (uint16_t)spirit_pktcommon_get_controllen(spirit);
return pktlen;
}
/******************************************************************************
* Name: spirit_pkstack_enable_rxsource_addrfilter
*
* Description:
* If enabled RX packet is accepted only if the masked source address field
* matches the masked source address field reference (SOURCE_MASK &
* SOURCE_FIELD_REF == SOURCE_MASK & RX_SOURCE_FIELD).
*
* NOTE: This filtering control is enabled by default but the source
* address mask is by default set to 0. As a matter of fact the user has
* to enable the source filtering bit after the packet initialization
* because the packet initialiazation routine disables it.
*
* Input Parameters:
* spirit - Reference to a Spirit library state structure instance
* newstate - New state for Source address filtering enable bit.
* This parameter can be S_ENABLE or S_DISABLE.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
******************************************************************************/
int spirit_pkstack_enable_rxsource_addrfilter(FAR struct spirit_library_s *spirit,
enum spirit_functional_state_e newstate)
{
uint8_t regval;
int ret;
/* Check the parameters */
DEBUGASSERT(IS_SPIRIT_FUNCTIONAL_STATE(newstate));
/* Modify the register value: set or reset the source bit filtering */
ret = spirit_reg_read(spirit, PCKT_FLT_OPTIONS_BASE, &regval, 1);
if (ret >= 0)
{
/* Set or reset the SOURCE ADDRESS filtering enabling bit */
if (newstate == S_ENABLE)
{
regval |= PCKT_FLT_OPTIONS_SOURCE_FILTERING_MASK;
}
else
{
regval &= ~PCKT_FLT_OPTIONS_SOURCE_FILTERING_MASK;
}
/* Write the new value to the PCKT_FLT_OPTIONS register */
ret = spirit_reg_write(spirit, PCKT_FLT_OPTIONS_BASE, &regval, 1);
}
return ret;
}

View File

@ -1915,7 +1915,7 @@ int spirit_radio_enable_digdivider(FAR struct spirit_library_s *spirit,
/* Reads the XO_RCO_TEST_BASE and mask the PD_CLKDIV bit field */
ret = spirit_reg_read(spirit, XO_RCO_TEST_BASE, &regval, 1);
if (ret > 0)
if (ret >= 0)
{
if (newstate == S_ENABLE)
{

View File

@ -86,33 +86,34 @@
#define TIOCINQ _TIOC(0x0012) /* Bytes in input buffer: int */
#define TIOCOUTQ _TIOC(0x0013) /* Bytes in output buffer: int */
#define TCFLSH _TIOC(0x0014) /* Flush: int */
#define TCDRN _TIOC(0x0015) /* Drain: void */
/* Faking input */
#define TIOCSTI _TIOC(0x0015) /* Insert into input: const char */
#define TIOCSTI _TIOC(0x0016) /* Insert into input: const char */
/* Re-directing console output */
#define TIOCCONS _TIOC(0x0016) /* Re-direct console output to device: void */
#define TIOCCONS _TIOC(0x0017) /* Re-direct console output to device: void */
/* Controlling TTY */
#define TIOCSCTTY _TIOC(0x0017) /* Make controlling TTY: int */
#define TIOCNOTTY _TIOC(0x0018) /* Give up controllinog TTY: void */
#define TIOCSCTTY _TIOC(0x0018) /* Make controlling TTY: int */
#define TIOCNOTTY _TIOC(0x0019) /* Give up controllinog TTY: void */
/* Exclusive mode */
#define TIOCEXCL _TIOC(0x0019) /* Put TTY in exclusive mode: void */
#define TIOCNXCL _TIOC(0x001a) /* Disable exclusive mode: void */
#define TIOCEXCL _TIOC(0x001a) /* Put TTY in exclusive mode: void */
#define TIOCNXCL _TIOC(0x001b) /* Disable exclusive mode: void */
/* Line discipline */
#define TIOCGETD _TIOC(0x001b) /* Get line discipline: FAR int */
#define TIOCSETD _TIOC(0x001c) /* Set line discipline: FAR const int */
#define TIOCGETD _TIOC(0x001c) /* Get line discipline: FAR int */
#define TIOCSETD _TIOC(0x001d) /* Set line discipline: FAR const int */
/* Packet mode */
#define TIOCPKT _TIOC(0x001d) /* Control packet mode: FAR const int */
#define TIOCPKT _TIOC(0x001e) /* Control packet mode: FAR const int */
# define TIOCPKT_FLUSHREAD (1 << 0) /* The read queue for the terminal is flushed */
# define TIOCPKT_FLUSHWRITE (1 << 1) /* The write queue for the terminal is flushed */
@ -123,10 +124,10 @@
/* Modem control */
#define TIOCMGET _TIOC(0x001e) /* Get modem status bits: FAR int */
#define TIOCMSET _TIOC(0x001f) /* Set modem status bits: FAR const int */
#define TIOCMBIC _TIOC(0x0020) /* Clear modem bits: FAR const int */
#define TIOCMBIS _TIOC(0x0021) /* Set modem bits: FAR const int */
#define TIOCMGET _TIOC(0x001f) /* Get modem status bits: FAR int */
#define TIOCMSET _TIOC(0x0020) /* Set modem status bits: FAR const int */
#define TIOCMBIC _TIOC(0x0021) /* Clear modem bits: FAR const int */
#define TIOCMBIS _TIOC(0x0022) /* Set modem bits: FAR const int */
# define TIOCM_LE (1 << 0) /* DSR (data set ready/line enable) */
# define TIOCM_DTR (1 << 1) /* DTR (data terminal ready) */
@ -142,34 +143,34 @@
/* TTY shutdown */
#define TIOCVHANGUP _TIOC(0x0022) /* Shutdown TTY: void */
#define TIOCVHANGUP _TIOC(0x0023) /* Shutdown TTY: void */
/* Marking a line as local */
#define TIOCGSOFTCAR _TIOC(0x0023) /* Get software carrier flag: FAR int* */
#define TIOCSSOFTCAR _TIOC(0x0024) /* Set software carrier flag: FAR const int */
#define TIOCGSOFTCAR _TIOC(0x0024) /* Get software carrier flag: FAR int* */
#define TIOCSSOFTCAR _TIOC(0x0025) /* Set software carrier flag: FAR const int */
/* Get/set serial line info */
#define TIOCGSERIAL _TIOC(0x0025) /* Get serial line info: FAR struct serial_struct */
#define TIOCSSERIAL _TIOC(0x0026) /* Set serial line info: FAR const struct serial_struct */
#define TIOCSERGETLSR _TIOC(0x0027) /* Get line status register: FAR int */
#define TIOCGSERIAL _TIOC(0x0026) /* Get serial line info: FAR struct serial_struct */
#define TIOCSSERIAL _TIOC(0x0027) /* Set serial line info: FAR const struct serial_struct */
#define TIOCSERGETLSR _TIOC(0x0028) /* Get line status register: FAR int */
/* Serial events */
#define TIOCMIWAIT _TIOC(0x0028) /* Wait for a change on serial input line(s): void */
#define TIOCGICOUNT _TIOC(0x0029) /* Read serial port interrupt count: FAR struct serial_icounter_struct */
#define TIOCMIWAIT _TIOC(0x0029) /* Wait for a change on serial input line(s): void */
#define TIOCGICOUNT _TIOC(0x002a) /* Read serial port interrupt count: FAR struct serial_icounter_struct */
/* Pseudo-terminals */
#define TIOCGPTN _TIOC(0x002a) /* Get Pty Number (of pty-mux device): FAR int* */
#define TIOCSPTLCK _TIOC(0x002b) /* Lock/unlock Pty: int */
#define TIOCGPTLCK _TIOC(0x002c) /* Get Pty lock state: FAR int* */
#define TIOCGPTN _TIOC(0x002b) /* Get Pty Number (of pty-mux device): FAR int* */
#define TIOCSPTLCK _TIOC(0x002c) /* Lock/unlock Pty: int */
#define TIOCGPTLCK _TIOC(0x002d) /* Get Pty lock state: FAR int* */
/* RS-485 Support */
#define TIOCSRS485 _TIOC(0x002d) /* Set RS485 mode, arg: pointer to struct serial_rs485 */
#define TIOCGRS485 _TIOC(0x002e) /* Get RS485 mode, arg: pointer to struct serial_rs485 */
#define TIOCSRS485 _TIOC(0x002e) /* Set RS485 mode, arg: pointer to struct serial_rs485 */
#define TIOCGRS485 _TIOC(0x002f) /* Get RS485 mode, arg: pointer to struct serial_rs485 */
/* Definitions for flags used in struct serial_rs485 (Linux compatible) */
@ -180,14 +181,14 @@
/* Single-wire UART support */
#define TIOCSSINGLEWIRE _TIOC(0x002f) /* Set single-wire mode */
#define TIOCGSINGLEWIRE _TIOC(0x0030) /* Get single-wire mode */
#define TIOCSSINGLEWIRE _TIOC(0x0030) /* Set single-wire mode */
#define TIOCGSINGLEWIRE _TIOC(0x0031) /* Get single-wire mode */
# define SER_SINGLEWIRE_ENABLED (1 << 0) /* Enable/disable single-wire support */
/* Debugging */
#define TIOCSERGSTRUCT _TIOC(0x0031) /* Get device TTY structure */
#define TIOCSERGSTRUCT _TIOC(0x0032) /* Get device TTY structure */
/********************************************************************************************
* Public Type Definitions

View File

@ -42,7 +42,7 @@ ifeq ($(CONFIG_SERIAL_TERMIOS),y)
# Add the termios C files to the build
CSRCS += lib_cfgetspeed.c lib_cfsetspeed.c lib_isatty.c lib_tcflush.c
CSRCS += lib_tcgetattr.c lib_tcsetattr.c
CSRCS += lib_tcgetattr.c lib_tcsetattr.c lib_tcdrain.c
# Add the termios directory to the build

View File

@ -40,22 +40,6 @@
#include <termios.h>
#include <assert.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/

View File

@ -41,26 +41,6 @@
#include <termios.h>
#include <assert.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: cfsetspeed
*

View File

@ -0,0 +1,72 @@
/****************************************************************************
* libc/termios/lib_tcdrain.c
*
* Copyright (C) 2017 Gregory Nutt. All rights reserved.
* Copyright (C) 2017 Sebastien Lorquet. All rights reserved.
* Author: Sebastien Lorquet <sebastien@lorquet.fr>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <sys/ioctl.h>
#include <termios.h>
#include <errno.h>
#include <nuttx/serial/tioctl.h>
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: tcdrain
*
* Descripton:
* Function for draining the output buffer of a terminal/serial device
*
* Input Parameters:
* fd - The 'fd' argument is an open file descriptor associated with a terminal.
*
* Returned Value:
* Upon successful completion, 0 is returned. Otherwise, -1 is returned and
* errno is set to indicate the error.
*
****************************************************************************/
int tcdrain(int fd)
{
return ioctl(fd, TCDRN, (unsigned long)0);
}

View File

@ -46,22 +46,6 @@
#include <nuttx/serial/tioctl.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/

View File

@ -46,22 +46,6 @@
#include <nuttx/serial/tioctl.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/

View File

@ -46,22 +46,6 @@
#include <nuttx/serial/tioctl.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/