A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
lr-wpan-phy.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2011 The Boeing Company
3 *
4 * SPDX-License-Identifier: GPL-2.0-only
5 *
6 * Author:
7 * Gary Pei <guangyu.pei@boeing.com>
8 * Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
9 */
10#ifndef LR_WPAN_PHY_H
11#define LR_WPAN_PHY_H
12
14
15#include <ns3/event-id.h>
16#include <ns3/spectrum-phy.h>
17#include <ns3/traced-callback.h>
18#include <ns3/traced-value.h>
19
20#include <iostream>
21
22namespace ns3
23{
24
25class Packet;
26class SpectrumValue;
27class MobilityModel;
28class SpectrumChannel;
29class SpectrumModel;
30class AntennaModel;
31class NetDevice;
32class UniformRandomVariable;
33class ErrorModel;
34
35namespace lrwpan
36{
37
38class LrWpanErrorModel;
39struct LrWpanSpectrumSignalParameters;
40
41/**
42 * \ingroup lr-wpan
43 *
44 * Helper structure to manage the power measurement during ED.
45 */
46struct EdPower
47{
48 double averagePower; //!< Average measured power
49 Time lastUpdate; //!< Last update time
50 Time measurementLength; //!< Total measurement period
51};
52
53/**
54 * \ingroup lr-wpan
55 *
56 * This data structure provides the Bit rate and Symbol rate for a given channel
57 * See IEEE802.15.4-2006 Table 1 and 2 in section 6.1.1 and 6.1.2
58 */
60{
61 double bitRate; //!< bit rate
62 double symbolRate; //!< symbol rate
63};
64
65/**
66 * \ingroup lr-wpan
67 *
68 * This data structure provides number of symbols for the PPDU headers: SHR and PHR
69 * See IEEE802.15.4-2006 Figure 16, Table 19 and 20 in section 6.3
70 */
72{
73 double shrPreamble; //!< Number of symbols for the SHR preamble
74 double shrSfd; //!< Number of symbols for the SHR SFD
75 double phr; //!< Number of symbols for the PHR
76};
77
78/**
79 * \ingroup lr-wpan
80 *
81 * This Phy option will be used to index various Tables in IEEE802.15.4-2011
82 */
96
97/**
98 * \ingroup lr-wpan
99 *
100 * IEEE802.15.4-2006 PHY Emumerations Table 18
101 * in section 6.2.3
102 */
119
120/**
121 * Overloaded operator to print the value of a PhyEnumeration.
122 *
123 * \param os The output stream
124 * \param state The text value of the PHY state
125 * \return The output stream with text value of the PHY state
126 */
127std::ostream& operator<<(std::ostream& os, const PhyEnumeration& state);
128
129/**
130 * Overloaded operator to print the value of a TracedValue<PhyEnumeration>.
131 *
132 * \param os The output stream
133 * \param state The text value of the PHY state
134 * \return The output stream with text value of the PHY state
135 */
136std::ostream& operator<<(std::ostream& os, const TracedValue<PhyEnumeration>& state);
137
138namespace TracedValueCallback
139{
140/**
141 * \ingroup lr-wpan
142 * TracedValue callback signature for PhyEnumeration.
143 *
144 * \param [in] oldValue original value of the traced variable
145 * \param [in] newValue new value of the traced variable
146 */
147typedef void (*PhyEnumeration)(PhyEnumeration oldValue, PhyEnumeration newValue);
148} // namespace TracedValueCallback
149
150/**
151 * \ingroup lr-wpan
152 *
153 * IEEE802.15.4-2006 PHY PIB Attribute Identifiers Table 23 in section 6.4.2
154 */
166
167/**
168 * \ingroup lr-wpan
169 *
170 * IEEE802.15.4-2006 PHY PIB Attributes Table 23 in section 6.4.2
171 */
172struct PhyPibAttributes : public SimpleRefCount<PhyPibAttributes>
173{
174 uint8_t phyCurrentChannel; //!< The RF channel to use
175 uint32_t phyChannelsSupported[32]; //!< BitField representing the available channels supported
176 //!< by a channel page.
177 uint8_t phyTransmitPower; //!< 2 MSB: tolerance on the transmit power, 6 LSB: Tx power in dBm
178 //!< relative to 1mW (signed int in 2-complement format)
179 uint8_t phyCCAMode; //!< CCA mode
180 uint8_t phyCurrentPage; //!< Current channel page
181 uint32_t phyMaxFrameDuration; //!< The maximum number of symbols in a frame
182 uint32_t phySHRDuration; //!< The duration of the synchronization header (SHR) in symbols
183 double phySymbolsPerOctet; //!< The number of symbols per octet
184};
185
186/**
187 * \ingroup lr-wpan
188 *
189 * This method implements the PD SAP: PdDataIndication
190 *
191 * \param psduLength number of bytes in the PSDU
192 * \param p the packet to be transmitted
193 * \param lqi Link quality (LQI) value measured during reception of the PPDU
194 */
196
197/**
198 * \ingroup lr-wpan
199 *
200 * This method implements the PD SAP: PdDataConfirm
201 *
202 * @param status the status to be transmitted
203 */
205
206/**
207 * \ingroup lr-wpan
208 *
209 * This method implements the PD SAP: PlmeCcaConfirm
210 *
211 * @param status the status of CCA
212 */
214
215/**
216 * \ingroup lr-wpan
217 *
218 * This method implements the PD SAP: PlmeEdConfirm
219 *
220 * @param status the status of ED
221 * @param energyLevel the energy level of ED
222 */
224
225/**
226 * \ingroup lr-wpan
227 *
228 * This method implements the PD SAP: PlmeGetAttributeConfirm
229 *
230 * @param status the status of PlmeGetAttributeRequest
231 * @param id the identifier of attribute
232 * @param attribute the pointer to attribute struct
233 */
236
237/**
238 * \ingroup lr-wpan
239 *
240 * This method implements the PD SAP: PlmeSetTRXStateConfirm
241 *
242 * @param status the status of PlmeSetTRXStateRequest
243 */
245
246/**
247 * \ingroup lr-wpan
248 *
249 * This method implements the PD SAP: PlmeSetAttributeConfirm
250 *
251 * @param status the status of PlmeSetAttributeRequest
252 * @param id the identifier of attribute
253 */
255
256/**
257 * \ingroup lr-wpan
258 *
259 * Make LrWpanPhy a SpectrumPhy so we can enable the eventual modeling of
260 * device interference
261 */
262class LrWpanPhy : public SpectrumPhy
263{
264 public:
265 /**
266 * Get the type ID.
267 *
268 * \return the object TypeId
269 */
270 static TypeId GetTypeId();
271
272 /**
273 * Default constructor.
274 */
275 LrWpanPhy();
276 ~LrWpanPhy() override;
277
278 // inherited from SpectrumPhy
279 void SetMobility(Ptr<MobilityModel> m) override;
280 Ptr<MobilityModel> GetMobility() const override;
281 void SetChannel(Ptr<SpectrumChannel> c) override;
282
283 /**
284 * Get the currently attached channel.
285 *
286 * \return the channel
287 */
289 void SetDevice(Ptr<NetDevice> d) override;
290 Ptr<NetDevice> GetDevice() const override;
291
292 /**
293 * Set the attached antenna.
294 *
295 * \param a the antenna
296 */
298 Ptr<Object> GetAntenna() const override;
300
301 /**
302 * Set the Power Spectral Density of outgoing signals in W/Hz.
303 *
304 * @param txPsd the Power Spectral Density value
305 */
307
308 /**
309 * Set the noise power spectral density.
310 *
311 * @param noisePsd the Noise Power Spectral Density in power units
312 * (Watt, Pascal...) per Hz.
313 */
315
316 /**
317 * Get the noise power spectral density.
318 *
319 * @return the Noise Power Spectral Density
320 */
322
323 /**
324 * Set the modulation option used by this PHY.
325 * See IEEE 802.15.4-2011, section 8, Table 66.
326 *
327 * @param phyOption The phy modulation option used by the model.
328 */
329 void SetPhyOption(PhyOption phyOption);
330
331 /**
332 * Set the receiver power sensitivity used by this device in dBm.
333 *
334 * In ns-3 , rx sensitivity is only checked to be at least what is specified by
335 * the standard (-85dBm or -92dBm for BPSK bands). Most vendors provide better sensitivity
336 * options and exceed the minimum values proposed by the standard. Default sensitivity
337 * is -106.58 dBm (This does not include any noise figure).
338 * A sensitivity of -95dBm or less is considered by many vendors a high sensitivity.
339 *
340 * \param dbmSensitivity The receiver power sensitivity to set in dBm.
341 */
342 void SetRxSensitivity(double dbmSensitivity);
343
344 /**
345 * Get the receiver power sensitivity used by this device in dBm.
346 *
347 * \return The receiver power sensitivity used by this device in dBm.
348 */
349 double GetRxSensitivity();
350
351 /**
352 * Notify the SpectrumPhy instance of an incoming waveform.
353 *
354 * @param params the SpectrumSignalParameters associated with the incoming waveform
355 */
356 void StartRx(Ptr<SpectrumSignalParameters> params) override;
357
358 /**
359 * IEEE 802.15.4-2006 section 6.2.1.1
360 * PD-DATA.request
361 * Request to transfer MPDU from MAC (transmitting)
362 * \param psduLength number of bytes in the PSDU
363 * \param p the packet to be transmitted
364 */
365 void PdDataRequest(const uint32_t psduLength, Ptr<Packet> p);
366
367 /**
368 * IEEE 802.15.4-2006 section 6.2.2.1
369 * PLME-CCA.request
370 * Perform a CCA per section 6.9.9
371 */
372 void PlmeCcaRequest();
373
374 /**
375 * Cancel an ongoing CCA request.
376 */
377 void CcaCancel();
378
379 /**
380 * IEEE 802.15.4-2006 section 6.2.2.3
381 * PLME-ED.request
382 * Perform an ED per section 6.9.7
383 */
384 void PlmeEdRequest();
385
386 /**
387 * IEEE 802.15.4-2006 section 6.2.2.5
388 * PLME-GET.request
389 * Get attributes per definition from Table 23 in section 6.4.2
390 * \param id the attributed identifier
391 */
393
394 /**
395 * IEEE 802.15.4-2006 section 6.2.2.7
396 * PLME-SET-TRX-STATE.request
397 * Set PHY state
398 * \param state in RX_ON,TRX_OFF,FORCE_TRX_OFF,TX_ON
399 */
401
402 /**
403 * IEEE 802.15.4-2006 section 6.2.2.9
404 * PLME-SET.request
405 * Set attributes per definition from Table 23 in section 6.4.2
406 * \param id the attributed identifier
407 * \param attribute the attribute value
408 */
410
411 /**
412 * set the callback for the end of a RX, as part of the
413 * interconnections between the PHY and the MAC. The callback
414 * implements PD Indication SAP.
415 * \param c the callback
416 */
418
419 /**
420 * set the callback for the end of a TX, as part of the
421 * interconnections between the PHY and the MAC. The callback
422 * implements PD SAP.
423 * \param c the callback
424 */
426
427 /**
428 * set the callback for the end of a CCA, as part of the
429 * interconnections between the PHY and the MAC. The callback
430 * implement PLME CCA confirm SAP
431 * \param c the callback
432 */
434
435 /**
436 * set the callback for the end of an ED, as part of the
437 * interconnections between the PHY and the MAC. The callback
438 * implement PLME ED confirm SAP
439 * \param c the callback
440 */
442
443 /**
444 * set the callback for the end of an GetAttribute, as part of the
445 * interconnections between the PHY and the MAC. The callback
446 * implement PLME GetAttribute confirm SAP
447 * \param c the callback
448 */
450
451 /**
452 * set the callback for the end of an SetTRXState, as part of the
453 * interconnections between the PHY and the MAC. The callback
454 * implement PLME SetTRXState confirm SAP
455 * \param c the callback
456 */
458
459 /**
460 * set the callback for the end of an SetAttribute, as part of the
461 * interconnections between the PHY and the MAC. The callback
462 * implement PLME SetAttribute confirm SAP
463 * \param c the callback
464 */
466
467 /**
468 * Get The current channel page number in use in this PHY from the PIB attributes.
469 *
470 * \return The current page number
471 */
472 uint8_t GetCurrentPage() const;
473
474 /**
475 * Get The current channel number in use in this PHY from the PIB attributes.
476 *
477 * \return The current channel number
478 */
479 uint8_t GetCurrentChannelNum() const;
480
481 /**
482 * implement PLME SetAttribute confirm SAP
483 * bit rate is in bit/s. Symbol rate is in symbol/s.
484 * \param isData is true for data rate or false for symbol rate
485 * \return the rate value of this PHY
486 */
487 double GetDataOrSymbolRate(bool isData);
488
489 /**
490 * set the error model to use
491 *
492 * \param e pointer to LrWpanErrorModel to use
493 */
495
496 /**
497 * get the error model in use
498 *
499 * \return pointer to LrWpanErrorModel in use
500 */
502
503 /**
504 * Attach a receive ErrorModel to the LrWpanPhy.
505 *
506 * The LrWpanPhy may optionally include an ErrorModel in
507 * the packet receive chain. The error model is additive
508 * to any modulation-based error model based on SNR, and
509 * is typically used to force specific packet losses or
510 * for testing purposes.
511 *
512 * \param em Pointer to the ErrorModel.
513 */
515
516 /**
517 * Get the duration of the SHR (preamble and SFD) in symbols, depending on
518 * the currently selected channel.
519 *
520 * \return the SHR duration in symbols
521 */
522 uint64_t GetPhySHRDuration() const;
523
524 /**
525 * Get the number of symbols per octet, depending on the currently selected
526 * channel.
527 *
528 * \return the number of symbols per octet
529 */
530 double GetPhySymbolsPerOctet() const;
531
532 /**
533 * Get the current accumulated sum of signals in the transceiver including
534 * signals considered as interference.
535 *
536 * \return the accumulated signal power spectral density value in Dbm.
537 */
538 double GetCurrentSignalPsd();
539
540 /**
541 * Assign a fixed random variable stream number to the random variables
542 * used by this model. Return the number of streams that have been assigned.
543 *
544 * \param stream first stream index to use
545 * \return the number of stream indices assigned by this model
546 */
547 int64_t AssignStreams(int64_t stream);
548
549 /**
550 * TracedCallback signature for Trx state change events.
551 *
552 * \param [in] time The time of the state change.
553 * \param [in] oldState The old state.
554 * \param [in] newState The new state.
555 * \deprecated The LrWpanPhyEnumeration state is now accessible as the
556 * TracedValue \c TrxStateValue. The \c TrxState TracedCallback will
557 * be removed in a future release.
558 */
559 // NS_DEPRECATED() - tag for future removal
560 typedef void (*StateTracedCallback)(Time time,
561 PhyEnumeration oldState,
562 PhyEnumeration newState);
563
564 private:
565 /**
566 * The second is true if the first is flagged as error/invalid.
567 */
568 typedef std::pair<Ptr<Packet>, bool> PacketAndStatus;
569
570 // Inherited from Object.
571 void DoInitialize() override;
572 void DoDispose() override;
573
574 /**
575 * Change the PHY state to the given new state, firing the state change trace.
576 *
577 * \param newState the new state
578 */
579 void ChangeTrxState(PhyEnumeration newState);
580
581 /**
582 * Get the currently configured PHY option.
583 * See IEEE 802.15.4-2006, section 6.1.2, Table 2.
584 *
585 * \return the PHY option
586 */
588
589 /**
590 * Finish the transmission of a frame. This is called at the end of a frame
591 * transmission, applying possibly pending PHY state changes and firing the
592 * appropriate trace sources and confirm callbacks to the MAC.
593 */
594 void EndTx();
595
596 /**
597 * Check if the interference destroys a frame currently received. Called
598 * whenever a change in interference is detected.
599 */
600 void CheckInterference();
601
602 /**
603 * Finish the reception of a frame. This is called at the end of a frame
604 * reception, applying possibly pending PHY state changes and firing the
605 * appropriate trace sources and indication callbacks to the MAC. A frame
606 * destroyed by noise/interference is dropped here, but not during reception.
607 * This method is also called for every packet which only contributes to
608 * interference.
609 *
610 * \param params signal parameters of the packet
611 */
613
614 /**
615 * Cancel an ongoing ED procedure. This is called when the transceiver is
616 * switched off or set to TX mode. This calls the appropriate confirm callback
617 * of the MAC.
618 *
619 * \param state the new state which is the cause for canceling ED
620 */
621 void CancelEd(PhyEnumeration state);
622
623 /**
624 * Called at the end of the ED procedure. The average energy detected is
625 * reported to the MAC.
626 */
627 void EndEd();
628
629 /**
630 * Called at the end of the CCA. The channel condition (busy or idle) is
631 * reported to the MAC or CSMA/CA.
632 */
633 void EndCca();
634
635 /**
636 * Called after applying a deferred transceiver state switch. The result of
637 * the state switch is reported to the MAC.
638 */
639 void EndSetTRXState();
640
641 /**
642 * Calculate the time required for sending the given packet, including
643 * preamble, SFD and PHR.
644 *
645 * \param packet the packet for which the transmission time should be calculated
646 * \return the time required for transmitting the packet
647 */
649
650 /**
651 * Calculate the time required for sending the PPDU header, that is the
652 * preamble, SFD and PHR.
653 * \returns The time required for sending the PPDU header.
654 */
656
657 /**
658 * Check if the given channel is supported by the PHY.
659 *
660 * \param channel the channel to check
661 * \return true, if the channel is supported, false otherwise
662 */
663 bool ChannelSupported(uint8_t channel);
664
665 /**
666 * Check if the given page is supported by the PHY.
667 *
668 * \param page the page to check
669 * \return true, if the page is supported, false otherwise
670 */
671 bool PageSupported(uint8_t page);
672
673 /**
674 * Check if the PHY is busy, which is the case if the PHY is currently sending
675 * or receiving a frame.
676 *
677 * \return true, if the PHY is busy, false otherwise
678 */
679 bool PhyIsBusy() const;
680
681 // Trace sources
682 /**
683 * The trace source fired when a packet begins the transmission process on
684 * the medium.
685 *
686 * \see class CallBackTraceSource
687 */
689
690 /**
691 * The trace source fired when a packet ends the transmission process on
692 * the medium.
693 *
694 * \see class CallBackTraceSource
695 */
697
698 /**
699 * The trace source fired when the phy layer drops a packet as it tries
700 * to transmit it.
701 *
702 * \see class CallBackTraceSource
703 */
705
706 /**
707 * The trace source fired when a packet begins the reception process from
708 * the medium.
709 *
710 * \see class CallBackTraceSource
711 */
713
714 /**
715 * The trace source fired when a packet ends the reception process from
716 * the medium. In essence, the notional event of receiving all the energy
717 * of a signal is traced. The received completed signal might represent
718 * a complete packet or a packet that is later on dropped because of interference,
719 * cancellation or post-rx corruption. Second quantity is the received SINR (LQI).
720 *
721 * \see class CallBackTraceSource
722 */
724
725 /**
726 * The trace source fired when the phy layer drops a packet it has received.
727 * (Destruction of a packet due to interference, post-rx corruption or
728 * cancellation of packet rx)
729 *
730 * \see class CallBackTraceSource
731 */
733
734 /**
735 * The trace source fired when the phy layer changes the transceiver state.
736 *
737 * \see class CallBackTraceSource
738 * \deprecated The PhyEnumeration state is now accessible as the
739 * TracedValue \c TrxStateValue. This TracedCallback will
740 * be removed in a future release.
741 */
742 // NS_DEPRECATED() - tag for future removal
744
745 /**
746 * Calculates the nominal transmit power of the device in decibels relative to 1 mW
747 * according to the representation of the PIB attribute phyTransmitPower.
748 *
749 * The phyTransmitPower (table 23 of IEEE 802.15.4-2006) is a 8-bit bitmap, stored
750 * as a `uint8_t`. The bitmap has the following meaning:
751 * The 2 MSBs represent the tolerance on the transmit power.
752 * The 6 LSBs represent a signed integer in twos-complement format, corresponding
753 * to the nominal transmit power of the device in decibels relative to 1 mW.
754 *
755 * This function extracts the 6 LSBs corresponding to the nominal transmit power and
756 * converts it to a `int8_t`.
757 *
758 * \param phyTransmitPower the PIB attribute
759 * \return The nominal transmit power in dBm.
760 */
762
763 /**
764 * Transform watts (W) to decibels milliwatts (dBm).
765 *
766 * \param watt The Watts that will be converted to dBm.
767 * \return The value of Watts in dBm.
768 */
769 double WToDbm(double watt);
770
771 /**
772 * Transforms decibels milliwatts (dBm) to watts (W).
773 *
774 * \param dbm The DBm that will be converted to Watts.
775 * \return The value of DBm in Watts.
776 */
777 double DbmToW(double dbm);
778
779 /**
780 * The mobility model used by the PHY.
781 */
783
784 /**
785 * The configured net device.
786 */
788
789 /**
790 * The channel attached to this transceiver.
791 */
793
794 /**
795 * The antenna used by the transceiver.
796 */
798
799 /**
800 * The transmit power spectral density.
801 */
803
804 /**
805 * The spectral density for for the noise.
806 */
808
809 /**
810 * The error model describing the bit and packet error rates.
811 */
813
814 /**
815 * The current PHY PIB attributes.
816 */
818
819 // State variables
820 /**
821 * The current transceiver state.
822 */
824
825 /**
826 * The next pending state to applied after the current action of the PHY is
827 * completed.
828 */
830
831 // Callbacks
832 /**
833 * This callback is used to notify incoming packets to the MAC layer.
834 * See IEEE 802.15.4-2006, section 6.2.1.3.
835 */
837
838 /**
839 * This callback is used to report packet transmission status to the MAC layer.
840 * See IEEE 802.15.4-2006, section 6.2.1.2.
841 */
843
844 /**
845 * This callback is used to report CCA status to the MAC or CSMA/CA.
846 * See IEEE 802.15.4-2006, section 6.2.2.2.
847 */
849
850 /**
851 * This callback is used to report ED status to the MAC.
852 * See IEEE 802.15.4-2006, section 6.2.2.4.
853 */
855
856 /**
857 * This callback is used to report requested attribute values back to the MAC.
858 * See IEEE 802.15.4-2006, section 6.2.2.6.
859 */
861
862 /**
863 * This callback is used to report transceiver state change status to the MAC.
864 * See IEEE 802.15.4-2006, section 6.2.2.8.
865 */
867
868 /**
869 * This callback is used to report attribute set results back to the MAC.
870 * See IEEE 802.15.4-2006, section 6.2.2.10.
871 */
873
874 /**
875 * The currently configured PHY type.
876 */
878
879 /**
880 * Helper value for tracking the average power during ED.
881 */
883
884 /**
885 * Helper value for the peak power value during CCA.
886 */
888
889 /**
890 * The receiver sensitivity.
891 */
893
894 /**
895 * Indicates if the reception of frame has been canceled.
896 */
898
899 /**
900 * The accumulated signals currently received by the transceiver, including
901 * the signal of a possibly received packet, as well as all signals
902 * considered noise.
903 */
905
906 /**
907 * Timestamp of the last calculation of the PER of a packet currently received.
908 */
910
911 /**
912 * Status information of the currently received packet. The first parameter
913 * contains the frame, as well the signal power of the frame. If the second
914 * parameter is set to true, the frame is either invalid, destroyed
915 * due to interference or cancelled.
916 */
917 std::pair<Ptr<LrWpanSpectrumSignalParameters>, bool> m_currentRxPacket;
918
919 /**
920 * Status information of the currently transmitted packet. The first parameter
921 * contains the frame. If the second parameter is set to true, the frame has not
922 * been completely transmitted (in the event of a force transceiver switch, for
923 * example).
924 */
926
927 /**
928 * Scheduler event of a currently running CCA request.
929 */
931
932 /**
933 * Scheduler event of a currently running ED request.
934 */
936
937 /**
938 * Scheduler event of a currently running deferred transceiver state switch.
939 */
941
942 /**
943 * Scheduler event of a currently running data transmission request.
944 */
946
947 /**
948 * Uniform random variable stream.
949 */
951
952 Ptr<ErrorModel> m_postReceptionErrorModel; //!< Error model for receive packet events
953};
954
955} // namespace lrwpan
956} // namespace ns3
957
958#endif /* LR_WPAN_PHY_H */
Callback template class.
Definition callback.h:422
An identifier for simulation events.
Definition event-id.h:45
Smart pointer class similar to boost::intrusive_ptr.
A template-based reference counting class.
Abstract base class for Spectrum-aware PHY layers.
Simulation virtual time values and global simulation resolution.
Definition nstime.h:94
Forward calls to a chain of Callback.
Trace classes with value semantics.
a unique identifier for an interface.
Definition type-id.h:48
Make LrWpanPhy a SpectrumPhy so we can enable the eventual modeling of device interference.
void PlmeEdRequest()
IEEE 802.15.4-2006 section 6.2.2.3 PLME-ED.request Perform an ED per section 6.9.7.
void PlmeSetAttributeRequest(PhyPibAttributeIdentifier id, Ptr< PhyPibAttributes > attribute)
IEEE 802.15.4-2006 section 6.2.2.9 PLME-SET.request Set attributes per definition from Table 23 in se...
int64_t AssignStreams(int64_t stream)
Assign a fixed random variable stream number to the random variables used by this model.
void SetRxSensitivity(double dbmSensitivity)
Set the receiver power sensitivity used by this device in dBm.
EventId m_pdDataRequest
Scheduler event of a currently running data transmission request.
void EndRx(Ptr< SpectrumSignalParameters > params)
Finish the reception of a frame.
void SetTxPowerSpectralDensity(Ptr< SpectrumValue > txPsd)
Set the Power Spectral Density of outgoing signals in W/Hz.
Ptr< AntennaModel > m_antenna
The antenna used by the transceiver.
std::pair< Ptr< LrWpanSpectrumSignalParameters >, bool > m_currentRxPacket
Status information of the currently received packet.
Ptr< NetDevice > m_device
The configured net device.
bool ChannelSupported(uint8_t channel)
Check if the given channel is supported by the PHY.
void SetPlmeGetAttributeConfirmCallback(PlmeGetAttributeConfirmCallback c)
set the callback for the end of an GetAttribute, as part of the interconnections between the PHY and ...
int8_t GetNominalTxPowerFromPib(uint8_t phyTransmitPower)
Calculates the nominal transmit power of the device in decibels relative to 1 mW according to the rep...
void DoInitialize() override
Initialize() implementation.
void SetAntenna(Ptr< AntennaModel > a)
Set the attached antenna.
Ptr< const SpectrumModel > GetRxSpectrumModel() const override
void DoDispose() override
Destructor implementation.
TracedCallback< Ptr< const Packet > > m_phyTxBeginTrace
The trace source fired when a packet begins the transmission process on the medium.
void EndCca()
Called at the end of the CCA.
Ptr< SpectrumChannel > m_channel
The channel attached to this transceiver.
void SetPostReceptionErrorModel(const Ptr< ErrorModel > em)
Attach a receive ErrorModel to the LrWpanPhy.
double GetRxSensitivity()
Get the receiver power sensitivity used by this device in dBm.
PhyOption GetMyPhyOption()
Get the currently configured PHY option.
PacketAndStatus m_currentTxPacket
Status information of the currently transmitted packet.
void EndSetTRXState()
Called after applying a deferred transceiver state switch.
PdDataConfirmCallback m_pdDataConfirmCallback
This callback is used to report packet transmission status to the MAC layer.
void SetChannel(Ptr< SpectrumChannel > c) override
Set the channel attached to this device.
void PlmeGetAttributeRequest(PhyPibAttributeIdentifier id)
IEEE 802.15.4-2006 section 6.2.2.5 PLME-GET.request Get attributes per definition from Table 23 in se...
void SetPdDataConfirmCallback(PdDataConfirmCallback c)
set the callback for the end of a TX, as part of the interconnections between the PHY and the MAC.
Ptr< LrWpanInterferenceHelper > m_signal
The accumulated signals currently received by the transceiver, including the signal of a possibly rec...
void SetPdDataIndicationCallback(PdDataIndicationCallback c)
set the callback for the end of a RX, as part of the interconnections between the PHY and the MAC.
TracedCallback< Ptr< const Packet > > m_phyTxEndTrace
The trace source fired when a packet ends the transmission process on the medium.
double WToDbm(double watt)
Transform watts (W) to decibels milliwatts (dBm).
uint8_t GetCurrentPage() const
Get The current channel page number in use in this PHY from the PIB attributes.
PhyPibAttributes m_phyPIBAttributes
The current PHY PIB attributes.
Ptr< MobilityModel > m_mobility
The mobility model used by the PHY.
void SetErrorModel(Ptr< LrWpanErrorModel > e)
set the error model to use
void SetMobility(Ptr< MobilityModel > m) override
Set the mobility model associated with this device.
PlmeSetTRXStateConfirmCallback m_plmeSetTRXStateConfirmCallback
This callback is used to report transceiver state change status to the MAC.
void SetNoisePowerSpectralDensity(Ptr< const SpectrumValue > noisePsd)
Set the noise power spectral density.
TracedCallback< Time, PhyEnumeration, PhyEnumeration > m_trxStateLogger
The trace source fired when the phy layer changes the transceiver state.
EdPower m_edPower
Helper value for tracking the average power during ED.
Time m_rxLastUpdate
Timestamp of the last calculation of the PER of a packet currently received.
EventId m_setTRXState
Scheduler event of a currently running deferred transceiver state switch.
Ptr< MobilityModel > GetMobility() const override
Get the associated MobilityModel instance.
void SetPlmeSetAttributeConfirmCallback(PlmeSetAttributeConfirmCallback c)
set the callback for the end of an SetAttribute, as part of the interconnections between the PHY and ...
void SetPhyOption(PhyOption phyOption)
Set the modulation option used by this PHY.
void PlmeCcaRequest()
IEEE 802.15.4-2006 section 6.2.2.1 PLME-CCA.request Perform a CCA per section 6.9....
TracedValue< PhyEnumeration > m_trxState
The current transceiver state.
void SetPlmeSetTRXStateConfirmCallback(PlmeSetTRXStateConfirmCallback c)
set the callback for the end of an SetTRXState, as part of the interconnections between the PHY and t...
double GetCurrentSignalPsd()
Get the current accumulated sum of signals in the transceiver including signals considered as interfe...
void SetPlmeCcaConfirmCallback(PlmeCcaConfirmCallback c)
set the callback for the end of a CCA, as part of the interconnections between the PHY and the MAC.
Ptr< LrWpanErrorModel > m_errorModel
The error model describing the bit and packet error rates.
void EndTx()
Finish the transmission of a frame.
void SetPlmeEdConfirmCallback(PlmeEdConfirmCallback c)
set the callback for the end of an ED, as part of the interconnections between the PHY and the MAC.
uint8_t GetCurrentChannelNum() const
Get The current channel number in use in this PHY from the PIB attributes.
void PlmeSetTRXStateRequest(PhyEnumeration state)
IEEE 802.15.4-2006 section 6.2.2.7 PLME-SET-TRX-STATE.request Set PHY state.
LrWpanPhy()
Default constructor.
TracedCallback< Ptr< const Packet > > m_phyRxBeginTrace
The trace source fired when a packet begins the reception process from the medium.
PlmeSetAttributeConfirmCallback m_plmeSetAttributeConfirmCallback
This callback is used to report attribute set results back to the MAC.
PhyEnumeration m_trxStatePending
The next pending state to applied after the current action of the PHY is completed.
TracedCallback< Ptr< const Packet > > m_phyRxDropTrace
The trace source fired when the phy layer drops a packet it has received.
double GetPhySymbolsPerOctet() const
Get the number of symbols per octet, depending on the currently selected channel.
PdDataIndicationCallback m_pdDataIndicationCallback
This callback is used to notify incoming packets to the MAC layer.
Ptr< LrWpanErrorModel > GetErrorModel() const
get the error model in use
void StartRx(Ptr< SpectrumSignalParameters > params) override
Notify the SpectrumPhy instance of an incoming waveform.
double m_rxSensitivity
The receiver sensitivity.
void CcaCancel()
Cancel an ongoing CCA request.
void CheckInterference()
Check if the interference destroys a frame currently received.
std::pair< Ptr< Packet >, bool > PacketAndStatus
The second is true if the first is flagged as error/invalid.
EventId m_ccaRequest
Scheduler event of a currently running CCA request.
Ptr< SpectrumChannel > GetChannel()
Get the currently attached channel.
Ptr< ErrorModel > m_postReceptionErrorModel
Error model for receive packet events.
PlmeCcaConfirmCallback m_plmeCcaConfirmCallback
This callback is used to report CCA status to the MAC or CSMA/CA.
uint64_t GetPhySHRDuration() const
Get the duration of the SHR (preamble and SFD) in symbols, depending on the currently selected channe...
bool m_isRxCanceled
Indicates if the reception of frame has been canceled.
void CancelEd(PhyEnumeration state)
Cancel an ongoing ED procedure.
Ptr< NetDevice > GetDevice() const override
Get the associated NetDevice instance.
void PdDataRequest(const uint32_t psduLength, Ptr< Packet > p)
IEEE 802.15.4-2006 section 6.2.1.1 PD-DATA.request Request to transfer MPDU from MAC (transmitting)
double DbmToW(double dbm)
Transforms decibels milliwatts (dBm) to watts (W).
Ptr< UniformRandomVariable > m_random
Uniform random variable stream.
EventId m_edRequest
Scheduler event of a currently running ED request.
PhyOption m_phyOption
The currently configured PHY type.
Ptr< SpectrumValue > m_txPsd
The transmit power spectral density.
bool PageSupported(uint8_t page)
Check if the given page is supported by the PHY.
Time GetPpduHeaderTxTime()
Calculate the time required for sending the PPDU header, that is the preamble, SFD and PHR.
void EndEd()
Called at the end of the ED procedure.
void SetDevice(Ptr< NetDevice > d) override
Set the associated NetDevice instance.
double GetDataOrSymbolRate(bool isData)
implement PLME SetAttribute confirm SAP bit rate is in bit/s.
PlmeGetAttributeConfirmCallback m_plmeGetAttributeConfirmCallback
This callback is used to report requested attribute values back to the MAC.
Ptr< Object > GetAntenna() const override
Get the AntennaModel used by this SpectrumPhy instance for transmission and/or reception.
TracedCallback< Ptr< const Packet > > m_phyTxDropTrace
The trace source fired when the phy layer drops a packet as it tries to transmit it.
TracedCallback< Ptr< const Packet >, double > m_phyRxEndTrace
The trace source fired when a packet ends the reception process from the medium.
double m_ccaPeakPower
Helper value for the peak power value during CCA.
Time CalculateTxTime(Ptr< const Packet > packet)
Calculate the time required for sending the given packet, including preamble, SFD and PHR.
Ptr< const SpectrumValue > GetNoisePowerSpectralDensity()
Get the noise power spectral density.
void(* StateTracedCallback)(Time time, PhyEnumeration oldState, PhyEnumeration newState)
TracedCallback signature for Trx state change events.
bool PhyIsBusy() const
Check if the PHY is busy, which is the case if the PHY is currently sending or receiving a frame.
PlmeEdConfirmCallback m_plmeEdConfirmCallback
This callback is used to report ED status to the MAC.
Ptr< const SpectrumValue > m_noise
The spectral density for for the noise.
void ChangeTrxState(PhyEnumeration newState)
Change the PHY state to the given new state, firing the state change trace.
static TypeId GetTypeId()
Get the type ID.
Callback< void, uint32_t, Ptr< Packet >, uint8_t > PdDataIndicationCallback
This method implements the PD SAP: PdDataIndication.
PhyOption
This Phy option will be used to index various Tables in IEEE802.15.4-2011.
Definition lr-wpan-phy.h:84
Callback< void, PhyEnumeration > PlmeCcaConfirmCallback
This method implements the PD SAP: PlmeCcaConfirm.
Callback< void, PhyEnumeration > PlmeSetTRXStateConfirmCallback
This method implements the PD SAP: PlmeSetTRXStateConfirm.
Callback< void, PhyEnumeration, uint8_t > PlmeEdConfirmCallback
This method implements the PD SAP: PlmeEdConfirm.
Callback< void, PhyEnumeration, PhyPibAttributeIdentifier, Ptr< PhyPibAttributes > > PlmeGetAttributeConfirmCallback
This method implements the PD SAP: PlmeGetAttributeConfirm.
PhyEnumeration
IEEE802.15.4-2006 PHY Emumerations Table 18 in section 6.2.3.
Callback< void, PhyEnumeration > PdDataConfirmCallback
This method implements the PD SAP: PdDataConfirm.
Callback< void, PhyEnumeration, PhyPibAttributeIdentifier > PlmeSetAttributeConfirmCallback
This method implements the PD SAP: PlmeSetAttributeConfirm.
PhyPibAttributeIdentifier
IEEE802.15.4-2006 PHY PIB Attribute Identifiers Table 23 in section 6.4.2.
@ IEEE_802_15_4_915MHZ_OQPSK
Definition lr-wpan-phy.h:92
@ IEEE_802_15_4_2_4GHZ_OQPSK
Definition lr-wpan-phy.h:93
@ IEEE_802_15_4_915MHZ_ASK
Definition lr-wpan-phy.h:89
@ IEEE_802_15_4_780MHZ_OQPSK
Definition lr-wpan-phy.h:90
@ IEEE_802_15_4_868MHZ_OQPSK
Definition lr-wpan-phy.h:91
@ IEEE_802_15_4_915MHZ_BPSK
Definition lr-wpan-phy.h:86
@ IEEE_802_15_4_868MHZ_BPSK
Definition lr-wpan-phy.h:85
@ IEEE_802_15_4_950MHZ_BPSK
Definition lr-wpan-phy.h:87
@ IEEE_802_15_4_INVALID_PHY_OPTION
Definition lr-wpan-phy.h:94
@ IEEE_802_15_4_868MHZ_ASK
Definition lr-wpan-phy.h:88
@ IEEE_802_15_4_PHY_BUSY
@ IEEE_802_15_4_PHY_READ_ONLY
@ IEEE_802_15_4_PHY_BUSY_TX
@ IEEE_802_15_4_PHY_RX_ON
@ IEEE_802_15_4_PHY_TRX_OFF
@ IEEE_802_15_4_PHY_TX_ON
@ IEEE_802_15_4_PHY_INVALID_PARAMETER
@ IEEE_802_15_4_PHY_UNSUPPORTED_ATTRIBUTE
@ IEEE_802_15_4_PHY_SUCCESS
@ IEEE_802_15_4_PHY_FORCE_TRX_OFF
@ IEEE_802_15_4_PHY_BUSY_RX
@ IEEE_802_15_4_PHY_IDLE
@ IEEE_802_15_4_PHY_UNSPECIFIED
std::ostream & operator<<(std::ostream &os, const SuperframeField &superframeField)
Stream insertion operator.
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Helper structure to manage the power measurement during ED.
Definition lr-wpan-phy.h:47
double averagePower
Average measured power.
Definition lr-wpan-phy.h:48
Time lastUpdate
Last update time.
Definition lr-wpan-phy.h:49
Time measurementLength
Total measurement period.
Definition lr-wpan-phy.h:50
This data structure provides the Bit rate and Symbol rate for a given channel See IEEE802....
Definition lr-wpan-phy.h:60
IEEE802.15.4-2006 PHY PIB Attributes Table 23 in section 6.4.2.
uint32_t phySHRDuration
The duration of the synchronization header (SHR) in symbols.
double phySymbolsPerOctet
The number of symbols per octet.
uint8_t phyCurrentChannel
The RF channel to use.
uint8_t phyCurrentPage
Current channel page.
uint8_t phyTransmitPower
2 MSB: tolerance on the transmit power, 6 LSB: Tx power in dBm relative to 1mW (signed int in 2-compl...
uint32_t phyChannelsSupported[32]
BitField representing the available channels supported by a channel page.
uint32_t phyMaxFrameDuration
The maximum number of symbols in a frame.
This data structure provides number of symbols for the PPDU headers: SHR and PHR See IEEE802....
Definition lr-wpan-phy.h:72
double phr
Number of symbols for the PHR.
Definition lr-wpan-phy.h:75
double shrPreamble
Number of symbols for the SHR preamble.
Definition lr-wpan-phy.h:73
double shrSfd
Number of symbols for the SHR SFD.
Definition lr-wpan-phy.h:74