OpenWSN Firmware
|
#include "openwsn.h"
#include "IEEE802154E.h"
#include "radio.h"
#include "radiotimer.h"
#include "IEEE802154.h"
#include "openqueue.h"
#include "idmanager.h"
#include "openserial.h"
#include "schedule.h"
#include "packetfunctions.h"
#include "scheduler.h"
#include "leds.h"
#include "neighbors.h"
#include "debugpins.h"
#include "sixtop.h"
#include "adaptive_sync.h"
#include "processIE.h"
Functions | |
void | activity_synchronize_newSlot (void) |
void | activity_synchronize_startOfFrame (PORT_RADIOTIMER_WIDTH capturedTime) |
void | activity_synchronize_endOfFrame (PORT_RADIOTIMER_WIDTH capturedTime) |
void | activity_ti1ORri1 (void) |
void | activity_ti2 (void) |
void | activity_tie1 (void) |
void | activity_ti3 (void) |
void | activity_tie2 (void) |
void | activity_ti4 (PORT_RADIOTIMER_WIDTH capturedTime) |
void | activity_tie3 (void) |
void | activity_ti5 (PORT_RADIOTIMER_WIDTH capturedTime) |
void | activity_ti6 (void) |
void | activity_tie4 (void) |
void | activity_ti7 (void) |
void | activity_tie5 (void) |
void | activity_ti8 (PORT_RADIOTIMER_WIDTH capturedTime) |
void | activity_tie6 (void) |
void | activity_ti9 (PORT_RADIOTIMER_WIDTH capturedTime) |
void | activity_ri2 (void) |
void | activity_rie1 (void) |
void | activity_ri3 (void) |
void | activity_rie2 (void) |
void | activity_ri4 (PORT_RADIOTIMER_WIDTH capturedTime) |
void | activity_rie3 (void) |
void | activity_ri5 (PORT_RADIOTIMER_WIDTH capturedTime) |
void | activity_ri6 (void) |
void | activity_rie4 (void) |
void | activity_ri7 (void) |
void | activity_rie5 (void) |
void | activity_ri8 (PORT_RADIOTIMER_WIDTH capturedTime) |
void | activity_rie6 (void) |
void | activity_ri9 (PORT_RADIOTIMER_WIDTH capturedTime) |
bool | isValidRxFrame (ieee802154_header_iht *ieee802514_header) |
Decides whether the packet I just received is valid received frame. More... | |
bool | isValidAck (ieee802154_header_iht *ieee802514_header, OpenQueueEntry_t *packetSent) |
Decides whether the packet I just received is a valid ACK. More... | |
bool | ieee154e_processIEs (OpenQueueEntry_t *pkt, uint16_t *lenIE) |
void | ieee154e_processSlotframeLinkIE (OpenQueueEntry_t *pkt, uint8_t *ptr) |
void | incrementAsnOffset (void) |
void | asnStoreFromAdv (uint8_t *asn) |
void | joinPriorityStoreFromAdv (uint8_t jp) |
void | synchronizePacket (PORT_RADIOTIMER_WIDTH timeReceived) |
void | synchronizeAck (PORT_SIGNED_INT_WIDTH timeCorrection) |
void | changeIsSync (bool newIsSync) |
void | notif_sendDone (OpenQueueEntry_t *packetSent, owerror_t error) |
void | notif_receive (OpenQueueEntry_t *packetReceived) |
void | resetStats (void) |
void | updateStats (PORT_SIGNED_INT_WIDTH timeCorrection) |
uint8_t | calculateFrequency (uint8_t channelOffset) |
Calculates the frequency channel to transmit on, based on the absolute slot number and the channel offset of the requested slot. More... | |
void | changeState (ieee154e_state_t newstate) |
Changes the state of the IEEE802.15.4e FSM. More... | |
void | endSlot () |
Housekeeping tasks to do at the end of each slot. More... | |
bool | debugPrint_asn () |
Trigger this module to print status information, over serial. More... | |
bool | debugPrint_isSync () |
Trigger this module to print status information, over serial. More... | |
void | ieee154e_init () |
This function initializes this module. More... | |
PORT_RADIOTIMER_WIDTH | ieee154e_asnDiff (asn_t *someASN) |
void | isr_ieee154e_newSlot () |
Indicates a new slot has just started. More... | |
void | isr_ieee154e_timer () |
Indicates the FSM timer has fired. More... | |
void | ieee154e_startOfFrame (PORT_RADIOTIMER_WIDTH capturedTime) |
Indicates the radio just received the first byte of a packet. More... | |
void | ieee154e_endOfFrame (PORT_RADIOTIMER_WIDTH capturedTime) |
Indicates the radio just received the last byte of a packet. More... | |
bool | debugPrint_macStats () |
Trigger this module to print status information, over serial. More... | |
port_INLINE void | ieee154e_getAsn (uint8_t *array) |
bool | ieee154e_isSynch () |
Variables | |
ieee154e_vars_t | ieee154e_vars |
ieee154e_stats_t | ieee154e_stats |
ieee154e_dbg_t | ieee154e_dbg |
port_INLINE void activity_ri2 | ( | void | ) |
port_INLINE void activity_ri3 | ( | void | ) |
port_INLINE void activity_ri4 | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_ri5 | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_ri6 | ( | void | ) |
port_INLINE void activity_ri7 | ( | void | ) |
port_INLINE void activity_ri8 | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_ri9 | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_rie1 | ( | void | ) |
port_INLINE void activity_rie2 | ( | void | ) |
port_INLINE void activity_rie3 | ( | void | ) |
port_INLINE void activity_rie4 | ( | void | ) |
port_INLINE void activity_rie5 | ( | void | ) |
port_INLINE void activity_rie6 | ( | void | ) |
port_INLINE void activity_synchronize_endOfFrame | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_synchronize_newSlot | ( | void | ) |
port_INLINE void activity_synchronize_startOfFrame | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_ti1ORri1 | ( | void | ) |
port_INLINE void activity_ti2 | ( | void | ) |
port_INLINE void activity_ti3 | ( | void | ) |
port_INLINE void activity_ti4 | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_ti5 | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_ti6 | ( | void | ) |
port_INLINE void activity_ti7 | ( | void | ) |
port_INLINE void activity_ti8 | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_ti9 | ( | PORT_RADIOTIMER_WIDTH | capturedTime | ) |
port_INLINE void activity_tie1 | ( | void | ) |
port_INLINE void activity_tie2 | ( | void | ) |
port_INLINE void activity_tie3 | ( | void | ) |
port_INLINE void activity_tie4 | ( | void | ) |
port_INLINE void activity_tie5 | ( | void | ) |
port_INLINE void activity_tie6 | ( | void | ) |
port_INLINE void asnStoreFromAdv | ( | uint8_t * | asn | ) |
port_INLINE uint8_t calculateFrequency | ( | uint8_t | channelOffset | ) |
Calculates the frequency channel to transmit on, based on the absolute slot number and the channel offset of the requested slot.
During normal operation, the frequency used is a function of the channelOffset indicating in the schedule, and of the ASN of the slot. This ensures channel hopping, consecutive packets sent in the same slot in the schedule are done on a difference frequency channel.
During development, you can force single channel operation by having this function return a constant channel number (between 11 and 26). This allows you to use a single-channel sniffer; but you can not schedule two links on two different channel offsets in the same slot.
[in] | channelOffset | channel offset for the current slot |
void changeIsSync | ( | bool | newIsSync | ) |
void changeState | ( | ieee154e_state_t | newstate | ) |
Changes the state of the IEEE802.15.4e FSM.
Besides simply updating the state global variable, this function toggles the FSM debug pin.
[in] | newstate | The state the IEEE802.15.4e FSM is now in. |
void endSlot | ( | ) |
Housekeeping tasks to do at the end of each slot.
This functions is called once in each slot, when there is nothing more to do. This might be when an error occured, or when everything went well. This function resets the state of the FSM so it is ready for the next slot.
Note that by the time this function is called, any received packet should already have been sent to the upper layer. Similarly, in a Tx slot, the sendDone function should already have been done. If this is not the case, this function will do that for you, but assume that something went wrong.
port_INLINE bool ieee154e_processIEs | ( | OpenQueueEntry_t * | pkt, |
uint16_t * | lenIE | ||
) |
void ieee154e_processSlotframeLinkIE | ( | OpenQueueEntry_t * | pkt, |
uint8_t * | ptr | ||
) |
port_INLINE void incrementAsnOffset | ( | void | ) |
port_INLINE bool isValidAck | ( | ieee802154_header_iht * | ieee802514_header, |
OpenQueueEntry_t * | packetSent | ||
) |
Decides whether the packet I just received is a valid ACK.
A packet is a valid ACK if it satisfies the following conditions:
[in] | ieee802514_header | IEEE802.15.4 header of the packet I just received |
[in] | packetSent | points to the packet I just sent |
port_INLINE bool isValidRxFrame | ( | ieee802154_header_iht * | ieee802514_header | ) |
Decides whether the packet I just received is valid received frame.
A valid Rx frame satisfies the following constraints:
[in] | ieee802514_header | IEEE802.15.4 header of the packet I just received |
port_INLINE void joinPriorityStoreFromAdv | ( | uint8_t | jp | ) |
void notif_receive | ( | OpenQueueEntry_t * | packetReceived | ) |
void notif_sendDone | ( | OpenQueueEntry_t * | packetSent, |
owerror_t | error | ||
) |
port_INLINE void resetStats | ( | void | ) |
void synchronizeAck | ( | PORT_SIGNED_INT_WIDTH | timeCorrection | ) |
void synchronizePacket | ( | PORT_RADIOTIMER_WIDTH | timeReceived | ) |
void updateStats | ( | PORT_SIGNED_INT_WIDTH | timeCorrection | ) |
ieee154e_dbg_t ieee154e_dbg |
ieee154e_stats_t ieee154e_stats |
ieee154e_vars_t ieee154e_vars |