Implements incoming frame handling in the MAC.
Copyright (c) 2013-2018 Microchip Technology Inc. and its subsidiaries.
#include <compiler.h>
#include <string.h>
#include <stdint.h>
#include <stdbool.h>
#include "return_val.h"
#include "pal.h"
#include "bmm.h"
#include "qmm.h"
#include "tal.h"
#include "ieee_const.h"
#include "mac_msg_const.h"
#include "mac_api.h"
#include "mac_msg_types.h"
#include "mac_data_structures.h"
#include "stack_config.h"
#include "mac_internal.h"
#include "mac.h"
#include "mac_config.h"
#include "mac_build_config.h"
Macros | |
#define | GET_PAN_COORDINATOR(spec) (((spec) & 0x4000) >> 14) |
#define | GTS_DESCRIPTOR_COUNTER_MASK (0x07) |
Functions | |
void | mac_process_tal_data_ind (uint8_t *msg) |
Depending on received frame the appropriate function is called. More... | |
static bool | parse_mpdu (frame_info_t *frameptr) |
static bool | process_data_ind_not_transient (buffer_t *b_ptr, frame_info_t *f_ptr) |
Continues processing a data indication from the TAL for non-polling and non-scanning states of the MAC (mac_poll_state == MAC_POLL_IDLE, mac_scan_state == MAC_SCAN_IDLE). More... | |
void | tal_rx_frame_cb (frame_info_t *frame) |
Callback function called by TAL on reception of any frame. More... | |
#define GET_PAN_COORDINATOR | ( | spec | ) | (((spec) & 0x4000) >> 14) |
#define GTS_DESCRIPTOR_COUNTER_MASK (0x07) |
Referenced by parse_mpdu().
|
static |
References aMaxMACPayloadSize, Assert, frame_payload_t::assoc_req_data, frame_payload_t::assoc_response_data, ASSOCIATIONREQUEST, ASSOCIATIONRESPONSE, frame_payload_t::beacon_data, beacon_payload, BEACONREQUEST, CLE16_TO_CPU_ENDIAN, mlme_comm_status_ind_tag::cmdcode, convert_byte_array_to_16_bit(), frame_payload_t::coord_realign_data, mac_coord_realign_tag::coord_short_addr, COORDINATORREALIGNMENT, frame_payload_t::data, DATAREQUEST, parse_tag::dest_addr, parse_tag::dest_addr_mode, frame_payload_t::disassoc_req_data, DISASSOCIATIONNOTIFICATION, mlme_comm_status_ind_tag::DstAddr, mlme_comm_status_ind_tag::DstAddrMode, parse_tag::fcf, FCF_FRAME_VERSION_2006, FCF_FRAMETYPE_BEACON, FCF_FRAMETYPE_DATA, FCF_FRAMETYPE_MAC_CMD, FCF_GET_FRAMETYPE, FCF_SECURITY_ENABLED, parse_tag::frame_type, GTS_DESCRIPTOR_COUNTER_MASK, mac_beacon_payload_tag::gts_list, frame_payload_t::gts_req_data, mac_beacon_payload_tag::gts_spec, GTSREQUEST, address_field_t::long_address, parse_tag::mac_command, mac_extract_mhr_addr_info(), mac_nhle_q, mac_parse_data, parse_tag::mac_payload_data, parse_tag::mac_payload_length, MAC_SUCCESS, MLME_COMM_STATUS_INDICATION, frame_info_tag::mpdu, NULL, NUM_LONG_PEND_ADDR, NUM_SHORT_PEND_ADDR, ORPHANNOTIFICATION, mac_coord_realign_tag::pan_id, mlme_comm_status_ind_tag::PANId, PANIDCONFLICTNOTIFICAION, mac_data_payload_tag::payload, mac_beacon_payload_tag::pending_addr_spec, parse_tag::sequence_number, mac_assoc_response_tag::short_addr, mac_coord_realign_tag::short_addr, parse_tag::src_addr, parse_tag::src_addr_mode, mlme_comm_status_ind_tag::SrcAddr, mlme_comm_status_ind_tag::SrcAddrMode, status, mlme_comm_status_ind_tag::status, mac_beacon_payload_tag::superframe_spec, tal_pib, parse_tag::time_stamp, and frame_info_tag::time_stamp.
Referenced by mac_process_tal_data_ind().
|
static |
Continues processing a data indication from the TAL for non-polling and non-scanning states of the MAC (mac_poll_state == MAC_POLL_IDLE, mac_scan_state == MAC_SCAN_IDLE).
b_ptr | Pointer to the buffer header. |
f_ptr | Pointer to the frame_info_t structure. |
References Assert, ASSOCIATIONREQUEST, BEACONREQUEST, BO_USED_FOR_MAC_PERS_TIME, COORDINATORREALIGNMENT, DATAREQUEST, DISASSOCIATIONNOTIFICATION, FAILURE, FCF_FRAMETYPE_BEACON, FCF_FRAMETYPE_DATA, FCF_FRAMETYPE_MAC_CMD, FCF_LONG_ADDR, FCF_SHORT_ADDR, FINAL_CAP_SLOT_DEFAULT, parse_tag::frame_type, FUNC_PTR, GTSREQUEST, MAC_ACTIVE_CAP, MAC_ASSOCIATED, mac_bc_data_indicated, parse_tag::mac_command, mac_pib_tag::mac_CoordExtendedAddress, MAC_COORDINATOR, mac_pib_tag::mac_CoordShortAddress, mac_final_cap_slot, MAC_IDLE, mac_idle_trans(), MAC_PAN_COORD_STARTED, MAC_PAN_ID_CONFLICT, mac_parse_data, mac_pib, MAC_POLL_IDLE, mac_poll_state, mac_process_data_frame(), mac_process_gts_request(), MAC_SCAN_IDLE, mac_scan_state, mac_sleep_trans(), mac_state, MAC_SUCCESS, mac_superframe_state, MAC_SYNC_BEFORE_ASSOC, MAC_SYNC_NEVER, MAC_SYNC_ONCE, mac_sync_state, MAC_SYNC_TRACKING_BEACON, mac_t_gts_cb(), mac_trx_wakeup(), macBeaconTxTime, NON_BEACON_NWK, NULL, ORPHANNOTIFICATION, pal_is_timer_running(), pal_timer_start(), pal_timer_stop(), PANIDCONFLICTNOTIFICAION, PHY_RX_ON, set_tal_pib_internal(), parse_tag::src_addr, parse_tag::src_addr_mode, parse_tag::src_panid, T_Beacon_Tracking_Period, T_CAP, T_Superframe, tal_add_time_symbols(), TAL_CONVERT_SYMBOLS_TO_US, TAL_GET_BEACON_INTERVAL_TIME, TAL_GET_SUPERFRAME_DURATION_TIME, tal_pib, TAL_RADIO_WAKEUP_TIME_SYM, tal_rx_enable(), tal_sub_time_symbols(), frame_info_tag::time_stamp, TIMEOUT_ABSOLUTE, and TIMEOUT_RELATIVE.
Referenced by mac_process_tal_data_ind().
void tal_rx_frame_cb | ( | frame_info_t * | frame | ) |
Callback function called by TAL on reception of any frame.
This function pushes an event into the TAL-MAC queue, indicating a frame reception.
frame | Pointer to recived frame |
References Assert, frame_info_tag::buffer_header, frame_info_tag::msg_type, NULL, TAL_DATA_INDICATION, and tal_mac_q.