📄 mac01.c
字号:
/*
Academic Free License (揂FL? v. 3.0
This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following licensing notice adjacent to the copyright notice for the Original Work:
Licensed under the Academic Free License version 3.0
1) Grant of Copyright License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, for the duration of the copyright, to do the following:
a) to reproduce the Original Work in copies, either alone or as part of a collective work;
b) to translate, adapt, alter, transform, modify, or arrange the Original Work, thereby creating derivative works ("Derivative Works") based upon the Original Work;
c) to distribute or communicate copies of the Original Work and Derivative Works to the public, under any license of your choice that does not contradict the terms and conditions, including Licensor抯 reserved rights and remedies, in this Academic Free License;
d) to perform the Original Work publicly; and
e) to display the Original Work publicly.
2) Grant of Patent License. Licensor grants You a worldwide, royalty-free, non-exclusive, sublicensable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, for the duration of the patents, to make, use, sell, offer for sale, have made, and import the Original Work and Derivative Works.
3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work.
4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior permission of the Licensor. Except as expressly stated herein, nothing in this License grants any license to Licensor抯 trademarks, copyrights, patents, trade secrets or any other intellectual property. No patent license is granted to make, use, sell, offer for sale, have made, or import embodiments of any patent claims other than the licensed claims defined in Section 2. No license is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under terms different from this License any Original Work that Licensor otherwise would have a right to license.
5) External Deployment. The term "External Deployment" means the use, distribution, or communication of the Original Work or Derivative Works in any way such that the Original Work or Derivative Works may be used by anyone other than You, whether those works are distributed or communicated to those persons or made available as an application intended for use over a network. As an express condition for the grants of license hereunder, You must treat any External Deployment by You of the Original Work or a Derivative Work as a distribution under section 1(c).
6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent, or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work.
7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately preceding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of non-infringement, merchantability or fitness for a particular purpose. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to the Original Work is granted by this License except under this disclaimer.
8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to anyone for any indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to the extent applicable law prohibits such limitation.
9) Acceptance and Termination. If, at any time, You expressly assented to this License, that assent indicates your clear and irrevocable acceptance of this License and all of its terms and conditions. If You distribute or communicate copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. This License conditions your rights to undertake the activities listed in Section 1, including your right to create Derivative Works based upon the Original Work, and doing so without honoring these terms and conditions is prohibited by copyright law and international treaty. Nothing in this License is intended to affect copyright exceptions and limitations (including 揻air use?or 揻air dealing?. This License shall terminate immediately and You may no longer exercise any of the rights granted to You by this License upon your failure to honor the conditions in Section 1(c).
10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware.
11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of copyright or patent law in the appropriate jurisdiction. This section shall survive the termination of this License.
12) Attorneys?Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License.
13) Miscellaneous. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You.
16) Modification of This License. This License is Copyright ?2005 Lawrence Rosen. Permission is granted to copy, distribute, or communicate this License without modification. Nothing in this License permits You to modify this License as applied to the Original Work or to Derivative Works. However, You may modify the text of this License and copy, distribute or communicate your modified version (the "Modified License") and apply it to other original works of authorship subject to the following conditions: (i) You may not indicate in any way that your Modified License is the "Academic Free License" or "AFL" and you may not use those names in the name of your Modified License; (ii) You must replace the notice specified in the first paragraph above with the notice "Licensed under <insert your license name here>" or with a notice of your own that is not confusingly similar to the notice in this License; and (iii) You may not claim that your original works are open source software unless your Modified License has been approved by Open Source Initiative (OSI) and You comply with its license review and certification process.
*/
#ifdef PLATFORM_TELOSB
#define pow powf
#endif
module MacM
{
provides {
interface StdControl;
//MLME
interface MLME_START;
interface MLME_ASSOCIATE;
interface MLME_DISASSOCIATE;
interface MLME_SYNC;
interface MLME_SYNC_LOSS;
interface MLME_SCAN;
interface MLME_RESET;
interface MLME_BEACON_NOTIFY;
interface MLME_COMM_STATUS;
interface MLME_SET;
interface MLME_GET;
interface MLME_GTS;
interface MLME_POLL;
//MCPS
interface MCPS_DATA;
interface MCPS_PURGE;
}
uses {
interface StdControl as Phy_control;
interface StdControl as Mac_control;
interface PD_DATA;
//PLME-SAP
interface PLME_CCA;
interface PLME_SET;
interface PLME_SET_TRX_STATE;
interface PLME_GET;
interface PLME_ED;
interface Random;
/*LEDS*/
interface Leds;
/*****************************************************/
/* TIMERS */
/*****************************************************/
//Timer ScanDuration
interface Timer as T_scan_duration;
//Response wait time timer
interface Timer as T_ResponseWaitTime;
//wait for an ack
interface Timer as T_ackwait;
interface TimerAsync;
}
}
implementation
{
/*****************************************************/
/* GENERAL */
/*****************************************************/
/***************Variables*************************/
//local extended address
uint32_t aExtendedAddress0;
uint32_t aExtendedAddress1;
macPIB mac_PIB;
//If the the MLME receives a start request the node becomes a pan coordinator
//and start transmiting beacons
bool PANCoordinator = 0;
//(0 NO beacon transmission; 1 beacon transmission);
bool Beacon_enabled_PAN = 0;
//(RESET) when the reset command arrives it checks whether or not to reset the PIB
bool SetDefaultPIB=0;
//use security
bool SecurityEnable=0;
//others
bool pending_reset=0;
//transceiver status -every time the transceiver changes state this variable is updated
uint8_t trx_status;
//defines the transmission
bool beacon_enabled=0;
/***************Functions Definition***************/
void init_MacCon();
void init_MacPIB();
uint8_t min(uint8_t val1, uint8_t val2);
task void signal_loss();
void create_data_request_cmd();
void create_beacon_request_cmd();
void create_gts_request_cmd(uint8_t gts_characteristics);
void create_data_frame(uint8_t SrcAddrMode, uint16_t SrcPANId, uint32_t SrcAddr[], uint8_t DstAddrMode, uint16_t DestPANId, uint32_t DstAddr[], uint8_t msduLength, uint8_t msdu[],uint8_t msduHandle, uint8_t TxOptions,uint8_t on_gts_slot,uint8_t pan);
void build_ack(uint8_t sequence,uint8_t frame_pending);
/*****************************************************/
/* Association */
/*****************************************************/
/***************Variables*************************/
uint8_t associating = 0;
uint8_t association_cmd_seq_num =0;
/*association parameters*/
/*
uint8_t a_LogicalChannel;
uint8_t a_CoordAddrMode;
uint16_t a_CoordPANId;
uint32_t a_CoordAddress[2];
uint8_t a_CapabilityInformation;
bool a_securityenable;
*/
/***************Functions Definition***************/
void create_association_request_cmd(uint8_t CoordAddrMode,uint16_t CoordPANId,uint32_t CoordAddress[],uint8_t CapabilityInformation);
result_t create_association_response_cmd(uint32_t DeviceAddress[],uint16_t shortaddress, uint8_t status);
void create_disassociation_notification_cmd(uint32_t DeviceAddress[],uint8_t disassociation_reason);
void process_dissassociation_notification(MPDU *pdu);
/*****************************************************/
/* Synchronization */
/*****************************************************/
/***************Variables*************************/
//(SYNC)the device will try to track the beacon ie enable its receiver just before the espected time of each beacon
bool TrackBeacon=0;
bool beacon_processed=0;
//beacon loss indication
uint8_t beacon_loss_reason;
//(SYNC)the device will try to locate one beacon
bool findabeacon=0;
//(SYNC)number of beacons lost before sending a Beacon-Lost indication comparing to aMaxLostBeacons
uint8_t missed_beacons=0;
//boolean variable stating if the device is synchonized with the beacon or not
uint8_t on_sync=0;
uint32_t parent_offset=0x00000000;
/*****************************************************/
/* GTS Variables */
/*****************************************************/
/***************Variables*************************/
uint8_t gts_request=0;
uint8_t gts_request_seq_num=0;
bool gts_confirm;
uint8_t GTS_specification;
bool GTSCapability=1;
uint8_t final_CAP_slot=15;
//GTS descriptor variables, coordinator usage only
GTSinfoEntryType GTS_db[7];
uint8_t GTS_descriptor_count=0;
uint8_t GTS_startslot=16;
uint8_t GTS_id=0x01;
//null gts descriptors
GTSinfoEntryType_null GTS_null_db[7];
uint8_t GTS_null_descriptor_count=0;
//uint8_t GTS_null_id=0x01;
//node GTS variables
// 1 GTS for transmit
uint8_t s_GTSss=0; //send gts start slot
uint8_t s_GTS_length=0; //send gts length
//1 GTS for receive
uint8_t r_GTSss=0; //receive gts start slot
uint8_t r_GTS_length=0; //receive gts lenght
//used to state that the device is on its transmit slot
uint8_t on_s_GTS=0;
//used to state that the device is on its receive slot
uint8_t on_r_GTS=0;
//used to determine if the next time slot is used for transmission
uint8_t next_on_s_GTS=0;
//used to determine if the next time slot is used for reception
uint8_t next_on_r_GTS=0;
//variable stating if the coordinator allow GTS allocations
uint8_t allow_gts=1;
//COORDINATOR GTS BUFFER
gts_slot_element gts_slot_list[7];
uint8_t available_gts_index[GTS_SEND_BUFFER_SIZE];
uint8_t available_gts_index_count;
uint8_t coordinator_gts_send_pending_data=0;
uint8_t coordinator_gts_send_time_slot=0;
//gts buffer used to store the gts messages both in COORDINATOR and NON COORDINATOR
norace MPDU gts_send_buffer[GTS_SEND_BUFFER_SIZE];
//NON PAN COORDINATOR BUFFER
//buffering for sending
uint8_t gts_send_buffer_count=0;
uint8_t gts_send_buffer_msg_in=0;
uint8_t gts_send_buffer_msg_out=0;
uint8_t gts_send_pending_data=0;
/***************Functions Definition***************/
void process_gts_request(MPDU *pdu);
void init_available_gts_index();
task void start_coordinator_gts_send();
//GTS FUNCTIONS
result_t remove_gts_entry(uint16_t DevAddressType);
result_t add_gts_entry(uint8_t gts_length,bool direction,uint16_t DevAddressType);
result_t add_gts_null_entry(uint8_t gts_length,bool direction,uint16_t DevAddressType);
//increment the idle GTS for GTS deallocation purposes, not fully implemented yet
task void increment_gts_null();
task void start_gts_send();
uint32_t calculate_gts_expiration();
task void check_gts_expiration();
//initialization functions
void init_gts_slot_list();
void init_GTS_null_db();
void init_GTS_db();
/*****************************************************/
/* CHANNEL SCAN Variables */
/*****************************************************/
//current_channel
uint8_t current_channel=0;
/***************Variables*************************/
//ED-SCAN variables
bool scanning_channels;
uint32_t channels_to_scan;
uint8_t current_scanning=0;
//uint8_t scan_count=0;
uint8_t scanned_values[16];
uint8_t scan_type;
SCAN_PANDescriptor scan_pans[16];
uint16_t scan_duration;
task void data_channel_scan_indication();
/***************Functions Definition***************/
/*****************************************************/
/* TIMER VARIABLES */
/*****************************************************/
/***************Variables*************************/
uint32_t response_wait_time;
//Beacon Interval
uint32_t BI;
//Superframe duration
uint32_t SD;
//timer variables
uint32_t time_slot; //backoff boundary timer
uint32_t backoff; //backoff timer
//current number of backoffs in the active period
uint8_t number_backoff=1;
uint8_t number_time_slot=0;
bool csma_slotted=0;
/***************Functions Definition***************/
/*****************************************************/
/* CSMA VARIABLES */
/*****************************************************/
/***************Variables*************************/
//STEP 2
uint8_t delay_backoff_period;
bool csma_delay=0;
bool csma_locate_backoff_boundary=0;
bool csma_cca_backoff_boundary=0;
//Although the receiver of the device is enabled during the channel assessment portion of this algorithm, the
//device shall discard any frames received during this time.
bool performing_csma_ca=0;
//CSMA-CA variables
uint8_t BE; //backoff exponent
uint8_t CW; //contention window (number of backoffs to clear the channel)
uint8_t NB; //number of backoffs
/***************Functions Definition***************/
void init_csma_ca(bool slotted);
void perform_csma_ca();
task void perform_csma_ca_unslotted();
task void perform_csma_ca_slotted();
//task void start_csma_ca_slotted();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -