nuttx-apps/include/wireless/ieee802154.h
Anthony Merlino c9bd210960 Squashed commit of the following:
Merged in merlin17/apps/i8sak-sock (pull request #108)

    i8sak: Fixes mistake where socket was accidentally bound to endpoint address
    i8sak: Fixes bad logic that bound outbound port to the destination address
    i8sak: Adds sniffer port option and a few other get/set parameters

    Merged in merlin17/apps/i8sak-sock (pull request #106)

    i8sak: Endpoint address is updated whenever 802.15.4 addressing information is updated
    wireless/ieee802154/i8sak: Converts PF_INETX to PF_INET6 and SOCK_IWPAN to SOCK_DGRAM
    wireless/ieee802154/i8sak: Catches case where arguments are included,  but the interface was never set
    wireless/ieee802154/i8sak: Endpoint IP address is now updated whenever 802.15.4 addressing info changes
    wireless/ieee802154/i8sak: Routes all error output to stderr rather than stdout

    Merged in merlin17/apps/i8sak-sock (pull request #104)

    i8sak: Fixes socket version of sniffer logic. socket logic for sniffer now works
    i8sak: Fixes socket version of sniffer logic. socket logic for sniffer now works

    Merged in merlin17/apps/i8sak-sock (pull request #103)

    wireless/ieee802154/i8sak: Adds socket interface support. You can now use both socket or char driver to control the MAC layer

    * wireless/ieee802154: Removes useless wpanlistener folder with build files
    * wireless/ieee802154/libmac: Merges some files together and adds some missing sixlowpan functionality
    * wireless/ieee802154/i8sak: Starts adding support for both character driver and socket
    * Removes unneccessary Kconfig statement
    * ieee802154: Adds function prototypes missed on previous commit
    * wireless/ieee802154/libmac: Fixes sixlowpan_resetreq
    * wireless/ieee802154/libmac: Small fixes and removes enableevents helper
    * apps/ieee802154/i8sak: Moves wpanlistener functionality into i8sak directly
    * apps/ieee802154/i8sak: Major restructuring to allow both char driver and socket control

        Also changes Kconfig options and certain args held previously by i8sak. This is to bring it closer to a real CLI tool rather than a development tool. For instance, no longer does the app change the addressing of the device automatically. This is because you probably don't want i8sak overwriting the extended address after board bring-up.  Additionally, the endpoint logic has been simplified.  There is only ever one active endpoint now.

    * wireless/ieee802154/i8sak: Non-functional clean-up.
    * i8sak: Removes chan and coordinfo commands and introduces generic get/set commands
    * i8sak: startpan now requires PAN ID argument
    * i8sak: Adds ability to set endpoint address using set command
    * i8sak: Minor fixes and cleanup
    * i8sak: Adds addrmode setting to i8sak. exposed via get/set calls
    * i8sak: Clean up poll logic and allow polling address mode to be based off endpoint address setting.
    * i8sak: Trivial
    * i8sak: Adds get/set hook for endpoint address mode (destination address mode)
    * i8sak:  Changes default address modes to short.
    * i8sak: Fixes build erros associated with enabling 6LoWPAN support
    * i8sak: Adds socket version of get/set implementation.  Simplifies some logic as well.
    * wireless/ieee802154/i8sak: Removes unused files
    * wireless/ieee802154/libmac: Fixes sixlowpan_assocresp.  resp was not being copied into the ioctl argument.

    Approved-by: Gregory Nutt <gnutt@nuttx.org>
2017-09-15 08:16:47 -06:00

209 lines
8.6 KiB
C

/****************************************************************************
* apps/include/wireless/ieee802154.h
*
* Copyright(C) 2015 Sebastien Lorquet. All rights reserved.
* Copyright(C) 2017 Verge Inc. All rights reserved.
*
* Author: Sebastien Lorquet <sebastien@lorquet.fr>
* Author: Anthony Merlino <anthony@vergeaero.com>
*
* 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.
*
****************************************************************************/
#ifndef __APPS_INCLUDE_WIRELESS_IEEE802154_H
#define __APPS_INCLUDE_WIRELESS_IEEE802154_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdint.h>
#include <stdbool.h>
#include <nuttx/config.h>
#include <nuttx/wireless/ieee802154/ieee802154_mac.h>
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/* libmac *******************************************************************/
/* Character driver IOCTL helpers */
int ieee802154_assoc_req(int fd, FAR struct ieee802154_assoc_req_s *req);
int ieee802154_assoc_resp(int fd, FAR struct ieee802154_assoc_resp_s *resp);
int ieee802154_disassoc_req(int fd,
FAR struct ieee802154_disassoc_req_s *req);
int ieee802154_get_req(int fd, FAR struct ieee802154_get_req_s *req);
int ieee802154_gts_req(int fd, FAR struct ieee802154_gts_req_s *req);
int ieee802154_orphan_resp(int fd,
FAR struct ieee802154_orphan_resp_s *resp);
int ieee802154_reset_req(int fd, bool resetattr);
int ieee802154_rxenable_req(int fd,
FAR struct ieee802154_rxenable_req_s *req);
int ieee802154_scan_req(int fd, FAR struct ieee802154_scan_req_s *req);
int ieee802154_set_req(int fd, FAR struct ieee802154_set_req_s *req);
int ieee802154_start_req(int fd, FAR struct ieee802154_start_req_s *req);
int ieee802154_sync_req(int fd, FAR struct ieee802154_sync_req_s *req);
int ieee802154_poll_req(int fd, FAR struct ieee802154_poll_req_s *req);
#if 0
int ieee802154_dps_req(int fd, FAR struct ieee802154_dps_req_s *req);
int ieee802154_sounding_req(int fd,
FAR struct ieee802154_sounding_req_s *req);
int ieee802154_calibrate_req(int fd,
FAR struct ieee802154_calibrate_req_s *req);
#endif
/* Get/Set Attribute helpers */
int ieee802154_setchan(int fd, uint8_t chan);
int ieee802154_getchan(int fd, FAR uint8_t *chan);
int ieee802154_setpanid(int fd, FAR const uint8_t *panid);
int ieee802154_getpanid(int fd, FAR uint8_t *panid);
int ieee802154_setsaddr(int fd, FAR const uint8_t *saddr);
int ieee802154_getsaddr(int fd, FAR uint8_t *saddr);
int ieee802154_seteaddr(int fd, FAR const uint8_t *eaddr);
int ieee802154_geteaddr(int fd, FAR uint8_t *eaddr);
int ieee802154_getcoordsaddr(int fd, FAR uint8_t *saddr);
int ieee802154_getcoordeaddr(int fd, FAR uint8_t *eaddr);
int ieee802154_setpromisc(int fd, bool promisc);
int ieee802154_getpromisc(int fd, FAR bool *promisc);
int ieee802154_setrxonidle(int fd, bool rxonidle);
int ieee802154_getrxonidle(int fd, FAR bool *rxonidle);
int ieee802154_settxpwr(int fd, int32_t txpwr);
int ieee802154_gettxpwr(int fd, FAR int32_t *txpwr);
int ieee802154_setcca(int fd, FAR struct ieee802154_cca_s *cca);
int ieee802154_getcca(int fd, FAR struct ieee802154_cca_s *cca);
int ieee802154_getdevmode(int fd, FAR enum ieee802154_devmode_e *devmode);
int ieee802154_setassocpermit(int fd, bool assocpermit);
#ifdef CONFIG_NET_6LOWPAN
/* Netork driver IOCTL helpers */
#if 0
int sixlowpan_mcps_register(int fd, FAR const char *ifname,
FAR const struct ieee802154_mcps_register_s *info);
int sixlowpan_mlme_register(int fd, FAR const char *ifname,
FAR const struct ieee802154_mlme_register_s *info);
#endif
int sixlowpan_assoc_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_assoc_req_s *req);
int sixlowpan_assoc_resp(int sock, FAR const char *ifname,
FAR struct ieee802154_assoc_resp_s *resp);
int sixlowpan_disassoc_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_disassoc_req_s *req);
int sixlowpan_get_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_get_req_s *req);
int sixlowpan_gts_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_gts_req_s *req);
int sixlowpan_orphan_resp(int sock, FAR const char *ifname,
FAR struct ieee802154_orphan_resp_s *resp);
int sixlowpan_reset_req(int sock, FAR const char *ifname, bool resetattr);
int sixlowpan_rxenable_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_rxenable_req_s *req);
int sixlowpan_scan_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_scan_req_s *req);
int sixlowpan_set_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_set_req_s *req);
int sixlowpan_start_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_start_req_s *req);
int sixlowpan_sync_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_sync_req_s *req);
int sixlowpan_poll_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_poll_req_s *req);
#if 0
int sixlowpan_dps_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_dps_req_s *req);
int sixlowpan_sounding_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_sounding_req_s *req);
int sixlowpan_calibrate_req(int sock, FAR const char *ifname,
FAR const struct ieee802154_calibrate_req_s *req);
#endif
int sixlowpan_setchan(int sock, FAR const char *ifname, uint8_t chan);
int sixlowpan_getchan(int sock, FAR const char *ifname, FAR uint8_t *chan);
int sixlowpan_setpanid(int sock, FAR const char *ifname,
FAR const uint8_t *panid);
int sixlowpan_getpanid(int sock, FAR const char *ifname,
FAR uint8_t *panid);
int sixlowpan_setsaddr(int sock, FAR const char *ifname,
FAR const uint8_t *saddr);
int sixlowpan_getsaddr(int sock, FAR const char *ifname,
FAR uint8_t *saddr);
int sixlowpan_seteaddr(int sock, FAR const char *ifname,
FAR const uint8_t *eaddr);
int sixlowpan_geteaddr(int sock, FAR const char *ifname,
FAR uint8_t *eaddr);
int sixlowpan_getcoordsaddr(int fd, FAR const char *ifname, FAR uint8_t *saddr);
int sixlowpan_getcoordeaddr(int fd, FAR const char *ifname, FAR uint8_t *eaddr);
int sixlowpan_setpromisc(int sock, FAR const char *ifname, bool promisc);
int sixlowpan_getpromisc(int sock, FAR const char *ifname,
FAR bool *promisc);
int sixlowpan_setrxonidle(int sock, FAR const char *ifname, bool rxonidle);
int sixlowpan_getrxonidle(int sock, FAR const char *ifname,
FAR bool *rxonidle);
int sixlowpan_settxpwr(int sock, FAR const char *ifname, int32_t txpwr);
int sixlowpan_gettxpwr(int sock, FAR const char *ifname,
FAR int32_t *txpwr);
int sixlowpan_getdevmode(int fd, FAR const char *ifname,
FAR enum ieee802154_devmode_e *devmode);
int sixlowpan_setassocpermit(int sock, FAR const char *ifname, bool assocpermit);
#endif /* CONFIG_NET_6LOWPAN*/
/* libutils *****************************************************************/
int ieee802154_addrtostr(FAR char *buf, int len,
FAR struct ieee802154_addr_s *addr);
#endif /*__APPS_INCLUDE_WIRELESS_IEEE802154_H */