From 906f77a62dd60110d589742080bba94987eb66fd Mon Sep 17 00:00:00 2001
From: Anthony Merlino <anthony@vergeaero.com>
Date: Sat, 10 Aug 2019 18:17:54 +0000
Subject: [PATCH] Merged in antmerlino/apps/libmac_fcslen (pull request #192)

wireless/ieee802154/libmac: Adds support for getting/setting the FCS length

Approved-by: Gregory Nutt <gnutt@nuttx.org>
---
 include/wireless/ieee802154.h                  |  6 ++++++
 wireless/ieee802154/libmac/ieee802154_getreq.c | 13 +++++++++++++
 wireless/ieee802154/libmac/ieee802154_setreq.c | 12 +++++++++++-
 wireless/ieee802154/libmac/sixlowpan_getreq.c  | 11 +++++++++++
 wireless/ieee802154/libmac/sixlowpan_setreq.c  | 10 ++++++++++
 5 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/include/wireless/ieee802154.h b/include/wireless/ieee802154.h
index 3e6b5a131..ccb222a66 100644
--- a/include/wireless/ieee802154.h
+++ b/include/wireless/ieee802154.h
@@ -115,6 +115,9 @@ int ieee802154_getcca(int fd, FAR struct ieee802154_cca_s *cca);
 int ieee802154_setmaxretries(int fd, uint8_t retries);
 int ieee802154_getmaxretries(int fd, FAR uint8_t *retries);
 
+int ieee802154_setfcslen(int fd, uint8_t fcslen);
+int ieee802154_getfcslen(int fd, FAR uint8_t *fcslen);
+
 int ieee802154_getdevmode(int fd, FAR enum ieee802154_devmode_e *devmode);
 
 int ieee802154_setassocpermit(int fd, bool assocpermit);
@@ -200,6 +203,9 @@ int sixlowpan_setmaxretries(int sock, FAR const char *ifname, uint8_t retries);
 int sixlowpan_getmaxretries(int sock, FAR const char *ifname,
       FAR uint8_t *retries);
 
+int sixlowpan_setfcslen(int sock, FAR const char *ifname, uint8_t fcslen);
+int sixlowpan_getfcslen(int sock, FAR const char *ifname, FAR uint8_t *fcslen);
+
 int sixlowpan_getdevmode(int fd, FAR const char *ifname,
                          FAR enum ieee802154_devmode_e *devmode);
 
diff --git a/wireless/ieee802154/libmac/ieee802154_getreq.c b/wireless/ieee802154/libmac/ieee802154_getreq.c
index 11beeb17a..187b44465 100644
--- a/wireless/ieee802154/libmac/ieee802154_getreq.c
+++ b/wireless/ieee802154/libmac/ieee802154_getreq.c
@@ -209,3 +209,16 @@ int ieee802154_getmaxretries(int fd, FAR uint8_t *retries)
   return ret;
 }
 
+int ieee802154_getfcslen(int fd, FAR uint8_t *fcslen)
+{
+  struct ieee802154_get_req_s req;
+  int ret;
+
+  req.attr = IEEE802154_ATTR_PHY_FCS_LEN;
+  ret = ieee802154_get_req(fd, &req);
+
+  *fcslen = req.attrval.phy.fcslen;
+
+  return ret;
+}
+
diff --git a/wireless/ieee802154/libmac/ieee802154_setreq.c b/wireless/ieee802154/libmac/ieee802154_setreq.c
index 1b0b57e08..06d79637e 100644
--- a/wireless/ieee802154/libmac/ieee802154_setreq.c
+++ b/wireless/ieee802154/libmac/ieee802154_setreq.c
@@ -157,4 +157,14 @@ int ieee802154_setmaxretries(int fd, uint8_t retries)
   req.attrval.mac.max_retries = retries;
 
   return ieee802154_set_req(fd, &req);
-}
\ No newline at end of file
+}
+
+int ieee802154_setfcslen(int fd, uint8_t fcslen)
+{
+  struct ieee802154_set_req_s req;
+
+  req.attr = IEEE802154_ATTR_PHY_FCS_LEN;
+  req.attrval.phy.fcslen = fcslen;
+
+  return ieee802154_set_req(fd, &req);
+}
diff --git a/wireless/ieee802154/libmac/sixlowpan_getreq.c b/wireless/ieee802154/libmac/sixlowpan_getreq.c
index 31cce6600..333975391 100644
--- a/wireless/ieee802154/libmac/sixlowpan_getreq.c
+++ b/wireless/ieee802154/libmac/sixlowpan_getreq.c
@@ -227,4 +227,15 @@ int sixlowpan_getmaxretries(int sock, FAR const char *ifname, FAR uint8_t *retri
   return ret;
 }
 
+int sixlowpan_getfcslen(int sock, FAR const char *ifname, FAR uint8_t *fcslen)
+{
+  struct ieee802154_get_req_s req;
+  int ret;
 
+  req.attr = IEEE802154_ATTR_PHY_FCS_LEN;
+  ret = sixlowpan_get_req(sock, ifname, &req);
+
+  *fcslen = req.attrval.phy.fcslen;
+
+  return ret;
+}
diff --git a/wireless/ieee802154/libmac/sixlowpan_setreq.c b/wireless/ieee802154/libmac/sixlowpan_setreq.c
index 5942c0267..dde9e8873 100644
--- a/wireless/ieee802154/libmac/sixlowpan_setreq.c
+++ b/wireless/ieee802154/libmac/sixlowpan_setreq.c
@@ -165,3 +165,13 @@ int sixlowpan_setmaxretries(int sock, FAR const char *ifname, uint8_t retries)
 
   return sixlowpan_set_req(sock, ifname, &req);
 }
+
+int sixlowpan_setfcslen(int sock, FAR const char *ifname, uint8_t fcslen)
+{
+  struct ieee802154_set_req_s req;
+
+  req.attr = IEEE802154_ATTR_PHY_FCS_LEN;
+  req.attrval.phy.fcslen = fcslen;
+
+  return sixlowpan_set_req(sock, ifname, &req);
+}