Patent Publication Number: US-9854547-B2

Title: Method and apparatus for synchronizing timing among devices in a wireless local area network (WLAN)

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
     This application claims the benefit of U.S. Provisional Application No. 61/902,963, filed on Nov. 12, 2013, U.S. Provisional Application No. 61/928,728, filed on Jan. 17, 2014, and U.S. Provisional Application No. 61/974,940, filed on Apr. 3, 2014. The entire disclosures of the applications referenced above are incorporated herein by reference. 
    
    
     FIELD 
     The present disclosure relates to timing synchronization in wireless local area networks. 
     BACKGROUND 
     Wireless local area networks (WLANs) may include an access point (AP) and one or more client stations. Various operating standards for WLANs include, but are not limited to, Institute for Electrical and Electronics Engineers (IEEE) 802.11a, 802.11ac, 802.11af, 802.11ah, 802.11b, 802.11g, and 802.11n. 
     An access point periodically transmits a beacon frame at a target beacon transmission time (TBTT) and/or, in some 802.11 operating standards, a short beacon frame at a target short beacon transmission time (TSBTT). Each of the beacon frame and the short beacon frame may include a timestamp used for a timing synchronization function (TSF). For example, each client station in a basic service set (BSS) of the WLAN may use the timestamp in a beacon frame to synchronize timing between the AP and the client station.  FIG. 1A  shows an example beacon frame  100 .  FIG. 1B  shows an example short beacon frame  104 .  FIG. 1C  shows an example timing diagram  108  of transmission of the beacon frames  100  at TBTTs  110  and the short beacon frames  104  at TSBTTs  112 . 
     The beacon frame  100  includes a media access control (MAC) header portion  116 , which includes, for example only, a frame control field  120 , a duration field  124 , address fields  128  (e.g., including a source address, a destination address, etc.), a sequence control field  132 , and, in some standards (e.g., 802.11n), a high throughput (HT) control field  136 . The beacon frame  100  also includes a frame body field  140  and a frame check sequence (FCS) field  144 . The frame body field  140  includes, for example only, an 8 byte timestamp field  148 , a beacon interval field  152 , a capability field  156 , a service set identifier (SSID) field  160 , a supported rates field  164 , and a frequency hopping (FH) parameter set field  168  and other information elements associated with BSS operation. 
     The short beacon frame  104  includes a frame control field  172 , a duration field  176 , a source address field  180 , a 4 byte timestamp field  184 , a change sequence field  188 , a next TBTT field  192 , a compressed SSID field  196 , an access network options field  200 , optional information elements (lEs)  204 , and an FCS field  208 . The optional IEs  204  include a short beacon compatibility element  212 , which includes, for example only, an element ID field  216 , a length field  220 , a capability field  224 , a beacon interval field  228 , and a TSF completion field  232 . 
     SUMMARY 
     A wireless communication device includes a first media access control device and a first transceiver. The first media access control device is configured to selectively generate a first timestamp having a first length and a second timestamp having a second length. The first timestamp indicates a first synchronization time of the wireless communication device, the second timestamp indicates only a first portion of the first synchronization time, and the first synchronization time is used by a client station to synchronize timing between the wireless communication device and the client station. The first media access control device is further configured to generate a beacon including either the first timestamp or the second timestamp, and an indication of whether the beacon includes the first timestamp or the second timestamp. The first transceiver is configured to transmit the beacon from the wireless communication device to the client station. 
     A method of operating wireless communication device includes selectively generating a first timestamp having a first length and a second timestamp having a second length. The first timestamp indicates a first synchronization time of the wireless communication device, the second timestamp indicates only a first portion of the first synchronization time, and the first synchronization time is used by a client station to synchronize timing between the wireless communication device and the client station. The method further includes generating a beacon including either the first timestamp or the second timestamp and an indication of whether the beacon includes the first timestamp or the second timestamp, and transmitting the beacon from the wireless communication device to the client station. 
     Further areas of applicability of the present disclosure will become apparent from the detailed description, the claims and the drawings. The detailed description and specific examples are intended for purposes of illustration only and are not intended to limit the scope of the disclosure. 
    
    
     
       BRIEF DESCRIPTION OF DRAWINGS 
         FIG. 1A  is an example beacon frame. 
         FIG. 1B  is an example short beacon frame. 
         FIG. 1C  is an example timing diagram of transmission of beacon frames and short beacon frames. 
         FIG. 2  is an example wireless local area network. 
         FIG. 3  is an example media access device of a client station. 
         FIG. 4  is an example short beacon frame  400 . 
         FIG. 5  is an example timing synchronization function method. 
     
    
    
     In the drawings, reference numbers may be reused to identify similar and/or identical elements. 
     DESCRIPTION 
     An 8 byte timestamp field in a frame body of a beacon frame indicates a transmission time, as transmitted from an access point (AP), of a first bit of the 8 byte timestamp field. The transmission time corresponds to a timing synchronization function (TSF) time. The 8 byte timestamp field corresponds to a non-information embedding (IE) field. For example, a media access control (MAC) layer of the AP transmitting the beacon frame may set the 8-byte timestamp field. Conversely, a client station receiving the beacon frame is configured (e.g., in a MAC layer of the client station) to perform the TSF based on the 8 byte timestamp field. For example, the client station is configured to set a timer based on the 8 byte timestamp field. 
     In some IEEE 802.11 standards (e.g., 802.11ah), an AP may selectively transmit a beacon frame (i.e., a full beacon frame) and/or a short beacon frame. The short beacon frame may only include a 4 byte timestamp. For example only, an AP may transmit the short beacon frame only at a target short beacon transmission time (TSBTT), or at both the TSBTT and a target beacon transmission time (TBTT). 
     For example, when transmitted at the TBTT, the 4 byte timestamp in the short beacon frame corresponds to the least significant 4 bytes of the actual 8 byte TSF time. The 4 byte timestamp may be contained in a non-IE portion of the short beacon frame. Conversely, the most significant 4 bytes of the 8 byte TSF time are contained in a TSF completion field in a short beacon compatibility element (as set by the transmitting AP) of the short beacon frame. The short beacon compatibility element is contained in an IE portion of the short beacon frame. Accordingly, the MAC layer of the client station is not able to perform the TSF until both the 4 byte timestamp field and the TSF completion field of the short beacon frame are received. Conversely, when transmitted at the TSBTT, the short beacon frame only includes the 4 byte timestamp field corresponding to the least significant 4 bytes of the actual 8 byte TSF time in the non-IE portion of the short beacon frame. 
     When the least significant 4 bytes of the TSF time are initially received and processed by the MAC layer of the client station, a corresponding timer value is set with the value of the least significant 4 bytes. However, the timer value continues to increment until the most significant 4 bytes of the TSF time in the TSF completion field are received. In some circumstances, the timer value may increment from FFFFFFFF to Ser. No. 00/000,000 prior to the most significant 4 bytes being received (i.e., the timer value may roll over, or wrap). Accordingly, calculating the actual 8 byte TSF time using the separately received least significant 4 bytes and most significant 4 bytes of the 8 byte TSF time may be complicated. 
     Systems and methods according to the principles of the present disclosure provide a timestamp indication bit (e.g., in a frame control or other non-IE field of the short beacon frame). The timestamp indication bit identifies a format of the timestamp field. For example, the timestamp indication bit identifies whether the timestamp field includes the entire 8 byte TSF time or only the least significant 4 bytes of the TSF time. At the TBTT, the short beacon frame includes the 8 byte TSF time in the timestamp field. Conversely, at the TSBTT, the short beacon frame includes the least significant 4 bytes of the TSF time and the client station is configured to determine the actual TSF time using only the least significant 4 bytes. Accordingly, the TSF completion field can be eliminated (i.e., removed from the short beacon compatibility element). 
       FIG. 2  shows an example wireless local area network (WLAN)  236  including one or more wireless communication devices configured to implement TSF time systems and methods according to an embodiment of the present disclosure. The WLAN  236  includes an access point (AP)  240  having a host processor  244  in communication with a network interface  248 . The network interface  248  includes a medium access control (MAC) device  252  and a physical layer (PHY) device  256 . The PHY device  256  includes one or more transceivers  260 - 1 ,  260 - 2 , . . . , and  260 - n , referred to collectively as transceivers  260 . The transceivers  260  communicate with respective antennas  264 - 1 ,  264 - 2 , . . . , and  264 - n , referred to collectively as antennas  264 . 
     The AP  240  communicates with a plurality of client stations  268 - 1 ,  268 - 2 ,  268 - 3 , . . . , and  268 - n , referred to collectively as client stations  268 . The client station  268 - 1  includes a host processor  272  in communication with a network interface  276 . The network interface  276  includes a MAC device  280  and a PHY device  284 . The PHY device  284  includes one or more transceivers  288 - 1 ,  288 - 2 , . . . , and  288 - n , referred to collectively as transceivers  288 . The transceivers  288  communicate with respective antennas  292 - 1 ,  292 - 2 , . . . , and  292 - n , referred to collectively as antennas  292 . One or more of the client stations  268  may have a same or similar structure as the client station  268 - 1 . For example only, each of the client stations  268  may have a same or different number of the transceivers  288  and the antennas  292 . 
     The host processor  244 , the MAC device  252 , and/or the PHY device  256  of the AP  240  may be configured to generate beacon frames and short beacon frames for transmission to the respective client stations  268  (e.g., via the transceivers  260  and the respective antennas  264 ). For example, the MAC device  252  of the AP  240  generates and inserts either a 4 byte timestamp (e.g., in a short beacon frame for transmission at a TBTT) or an 8 byte timestamp (e.g., in a short beacon frame for transmission at a TSBTT) in a timestamp field of the short beacon frame and selectively sets a timestamp indication bit to indicate whether the timestamp field includes the 4 byte or the 8 byte timestamp. In an embodiment, the MAC device  252  generates and inserts the timestamp in the timestamp field using only hardware (i.e., not software) components. In embodiments, a device, controller, etc. other than the MAC device  252  may generate and insert the timestamp. 
     The client stations  268  each set their respective TSF times based on the 4 byte or the 8 byte timestamp field in the short beacon frame received from the AP  240 . For example, the MAC device  280  sets the TSF time according to the timestamp indication bit and the timestamp field. In embodiments, a device, controller, etc. other than the MAC device  280  may set the TSF time according to the timestamp indication bit and the timestamp field. 
       FIG. 3  shows an example MAC device  300  of a client station according to an embodiment. For example, the MAC device  300  corresponds to the MAC device  280  of the client station  268 - 1 . The MAC device  300  includes a packet receiving module  304 , a MAC control module  308 , and a TSF module  312 . The packet receiving module  304  receives, via a PHY device (e.g., the PHY device  284 ), packets transmitted to the client station from an AP. For example, the packet may include a beacon, such as a short beacon frame according to embodiments of the present disclosure. The packet receiving module  304  processes the short beacon frame and provides information about and/or included in the short beacon frame to the MAC control module  308 . For example, the MAC control module  308  receives, inter alia, the timestamp indication bit and the timestamp field. 
     The MAC control module  308  sets the TSF time of the client station according to the timestamp indication bit and the timestamp field. For example, if the timestamp indication bit indicates that the timestamp field includes an 8 byte timestamp, the MAC control module  308  may simply set the TSF time of the client station to the 8 byte timestamp. For example only, the TSF module  312  may include a timer that stores and increments an 8 byte value that corresponds to the TSF time of the client station. Accordingly, the MAC control module  308  may set the 8 byte value of the timer to the 8 byte timestamp in the timestamp field. 
     Conversely, if the timestamp indication bit indicates that the timestamp field includes a 4 byte timestamp, the MAC control module  308  may set only the least significant 4 bytes of the 8 byte value of the timer to the 4 byte timestamp. The MAC control module  308  also selectively increments or decrements the most significant 4 bytes of the 8 byte value based on a comparison between the 4 byte timestamp received in the short beacon frame and the least significant 4 bytes of the 8 byte value of the timer as described below in more detail. 
       FIG. 4  shows an example short beacon frame  400  according to an embodiment. The short beacon frame  400  includes a frame control field  404 , a duration field  408 , a source address field  412 , a 4 or 8 byte timestamp field  416 , a change sequence field  420 , a next TBTT field  424 , a compressed SSID field  428 , an access network options field  432 , an optional information embedding (IE) field  436 , and an FCS field  440 . The optional IE field  436  includes, but is not limited to, one or more short beacon compatibility elements  444 , which includes, for example only, an element ID field  448 , a length field  452 , a capability field  456 , and a beacon interval field  460 . The short beacon compatibility element does not include a TSF completion field. 
     The frame control field  404  includes a protocol version field  464 , a type field  468 , a subtype field  472 , a next TBTT present field  476 , an SSID present field  480 , an interworking present field  484 , a BSS BW (bandwidth) field  488 , a security field  492 , and a timestamp indication field (i.e., a timestamp indication bit)  496 . In an embodiment, the timestamp indication field  496  includes a single bit that indicates whether the timestamp field  416  includes a 4 byte timestamp or an 8 byte timestamp. Accordingly, when the MAC device  280  of the receiving client station  268 - 1  receives the timestamp indication field  496 , the MAC device  280  can determine whether the timestamp field  416  includes the 4 byte timestamp or the 8 byte timestamp. For example only, a “0” in the timestamp indication field  496  may indicate that the timestamp field  416  includes the 4 byte timestamp while a “1” in the timestamp indication field  496  may indicate that the timestamp field  416  includes the 8 byte timestamp. 
     For example only, the timestamp indication field  496  corresponds to bit  15  of the frame control field  404 , though other bits in the short beacon frame  400  may be used. In some protocols, bit  15  of the frame control field  404  indicates a 1 MHz primary channel position. However, another field may already include an indication of the 1 MHz primary channel position, allowing bit  15  of the frame control field  404  to be used for the timestamp indication field  496 . 
     When the short beacon frame  400  includes the 8 byte timestamp (i.e., as received at TBTT), the MAC device  280  of the receiving client station  268 - 1  does not need to perform any additional calculation since the 8 byte timestamp directly corresponds to the TSF time of the AP  240 . Accordingly, the MAC device  280  sets a TSF time (e.g., a TSF timer that stores and increments an 8 byte timer value) of the receiving client station  268 - 1  to the 8 byte timestamp in the short beacon frame  400 . 
     Conversely, if the AP  240  prepares the short beacon frame  400  including the 4 byte timestamp (i.e., as received at TSBTT), the TSF time of the AP  240  corresponds to a most significant 4 bytes and the 4 byte timestamp included in the short beacon frame  400 . Accordingly, the 4 byte timestamp in the short beacon frame  400  only corresponds to the least significant 4 bytes of the entire 8 byte TSF time of the AP  240 . When the MAC device  280  receives the short beacon frame  400  including the 4 byte timestamp, the MAC device  280  sets the least significant 4 bytes of the TSF time of the receiving client station  268 - 1  to the 4 byte timestamp. The updated TSF time of the receiving client station  268 - 1  corresponds to the most significant 4 bytes of the TSF time maintained by the TSF timer (e.g., according to a clock of the receiving client station  268 - 1 ) combined with the least significant 4 bytes of the TSF time received via the 4 byte timestamp. 
     Accordingly, if the short beacon frame  400  includes only the 4 byte timestamp, the TSF time of the receiving client station  268 - 1  matches (i.e., is the same as) the TSF time of the AP  240  if the most significant 4 bytes of the respective TSF times are the same. However, in some situations, the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  may increment to a different value than the most significant 4 bytes of the TSF time of the AP  240 . Systems and methods according to an embodiment of the present disclosure correct any discrepancies between the respective TSF times of the receiving client station  268 - 1  and the AP  240 . 
     For example, respective clocks of the receiving client station  268 - 1  and the AP  240  may be slightly different. Accordingly, when the MAC device  280  sets the TSF time of the receiving client station  268 - 1  using the 8 byte timestamp (i.e., upon receiving the short beacon frame  400  at a TBTT), the timestamp of the receiving client station  268 - 1  matches the timestamp of the AP  240 . However, the difference between the clocks of the receiving client station  268 - 1  and the AP  240  may cause the respective most significant 4 bytes of the TSF times to differ at a subsequent TSBTT (i.e., when a short beacon frame including a 4 byte timestamp is transmitted from the AP  240  to the receiving client station  268 - 1 ). However, the absolute value of a difference between the TSF times of the receiving client station  268 - 1  and the AP  240  may be less than FFFFFFFF/2. 
     Accordingly, if the 4 byte timestamp included in the short beacon frame  400  is, for example only, 000000FF (i.e., the least significant 4 bytes of the TSF time of the AP  240 ) and a current least significant 4 bytes of the TSF time of the receiving client station  268 - 1  is FFFFFF00, then the clock (and TSF time) of the AP  240  is faster than the clock (and TSF time) of the receiving client station  268 - 1 , and therefore the most significant 4 bytes of the TSF time of the AP  240  is 1 greater than the most significant 4 bytes of the TSF time of the receiving client station  268 - 1 . 
     In other words, the 4 byte timestamp of 000000FF indicates that the least significant 4 bytes of the 4 byte timestamp “rolled over” (i.e., incremented from FFFFFFFF to Ser. No. 00/000,001 . . . 000000FF, etc.), causing the most significant 4 bytes of the TSF time of the AP  240  to increment by 1. Accordingly, if the 4 byte timestamp received in the short beacon frame  400  indicates that the least significant 4 bytes of the TSF time of the AP  240  recently rolled over, then the MAC  280  sets the least significant 4 bytes of the TSF time of the receiving client station  268 - 1  to the 4 byte timestamp and increments the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  by 1. 
     More specifically, when the 4 byte timestamp is received, the MAC  280  determines: (i) whether the most significant bit in the 4 byte timestamp is different than the most significant bit of the least significant 4 bytes of the TSF time of the receiving client station  268 - 1 ; (ii) whether the 4 byte timestamp is less than the least significant 4 bytes of the TSF time of the receiving client station  268 - 1 ; and (iii) whether a difference between the 4 byte timestamp and the least significant 4 bytes of the TSF time of the receiving client station  268 - 1  is greater than a predetermined threshold. For example only, the predetermined threshold corresponds to an expected maximum difference between the TSF times of the receiving client station  268 - 1  and the AP  240  (e.g., FFFFFFFF/2, or 2^31). If (i), (ii), and (iii) are true, then the MAC  280  increments the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  by 1. 
     For example, as described above, a 4 byte timestamp of 000000FF in a short beacon and a least significant 4 bytes of the TSF time of the receiving client station  268 - 1  of FFFFFFF0 meets each of (i), (ii), and (iii), and therefore the MAC  280  increments the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  by 1. Conversely, a 4 byte timestamp of FFFFFFFF in a short beacon and a least significant 4 bytes of the TSF time of the receiving client station  268 - 1  of FFFFFF00 does not meet each of (i), (ii), and (iii), and therefore the MAC  280  would not increment the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  by 1. Instead, the MAC  280  would only set the least significant 4 bytes of the TSF time of the receiving client station  268 - 1  to FFFFFFFF. 
     Conversely, if the 4 byte timestamp included in the short beacon frame  400  is, for example only, FFFFFF00 (i.e., the least significant 4 bytes of the TSF time of the AP  240 ) and a current least significant 4 bytes of the TSF time of the receiving client station  268 - 1  is 0000000F, then the clock (and TSF time) of the AP  240  is slower than the clock (and TSF time) of the receiving client station  268 - 1 , and therefore the most significant 4 bytes of the TSF time of the AP  240  is 1 less than the most significant 4 bytes of the TSF time of the receiving client station  268 - 1 . 
     In other words, the least significant 4 bytes of the TSF time of the receiving client station  268 - 1  of 0000000F indicates that the least significant 4 bytes rolled over, causing the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  to increment by 1. Accordingly, if the 4 byte timestamp received in the short beacon frame  400  indicates that the least significant 4 bytes of the TSF time of the AP  240  did not roll over but the least significant 4 bytes of the TSF time of the receiving client station  268 - 1  did roll over, then the MAC  280  sets the least significant 4 bytes of the TSF time of the receiving client station  268 - 1  to the 4 byte timestamp and decrements the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  by 1. 
     More specifically, when the 4 byte timestamp is received, the MAC  280  determines, in addition to (i), (ii), and (iii) as described above: (iv) whether the 4 byte timestamp in a short beacon is greater than the least significant 4 bytes of the TSF time of the receiving client station  268 - 1 ; and (v) whether the difference between the 4 byte timestamp and the least significant 4 bytes of the TSF time of the receiving client station  268 - 1  is greater than the predetermined threshold. If (i), (iv), and (v) are true, then the MAC  280  decrements the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  by 1. 
     For example, as described above, a 4 byte timestamp of FFFFFF00 and a least significant 4 bytes of the TSF time of the receiving client station  268 - 1  of 0000000F meets each of (i), (iv), and (v), and therefore the MAC  280  decrements the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  by 1. Conversely, a 4 byte timestamp of FFFFFF00 and a least significant 4 bytes of the TSF time of the receiving client station  268 - 1  of FFFFFFFF does not meet each of (i), (iv), and (v), and therefore the MAC  280  would not decrement the most significant 4 bytes of the TSF time of the receiving client station  268 - 1  by 1. Instead, the MAC  280  would only set the least significant 4 bytes of the TSF time of the receiving client station  268 - 1  to FFFFFF00. 
       FIG. 5  shows and example TSF method  500  according to an embodiment of the present disclosure. The method  500  begins at  504 . At  508 , a client station receives, at a TBTT or a TSBTT, a short beacon frame including an 8 byte timestamp or a 4 byte timestamp. For example, the receiving client station  268 - 1  receives the short beacon frame  400  from the AP  240 . At  512 , the client station determines whether the short beacon frame includes an 8 byte timestamp. For example, a MAC (e.g., the MAC  280 ) determines whether a timestamp indication bit in the short beacon frame is set (e.g., where the bit being set indicates the 8 byte timestamp and the bit not being set indicates the 4 byte timestamp). If true, the method  500  continues to  516 . If false, the method  500  continues to  520 . At  516 , the MAC of the client station sets its TSF time to the 8 byte timestamp and the method  500  continues to  508 . 
     At  520 , the MAC of the client station determines whether a most significant bit of the 4 byte timestamp and the most significant bit of the least significant 4 bytes of the TSF time of the client station are different. If true, the method  500  continues to  524 . If false, the method  500  continues to  528 . At  528 , the MAC of the client station sets the least significant 4 bytes of its TSF time to the 4 byte timestamp and the method  500  continues to  508 . 
     At  524 , the MAC of the client station determines whether the 4 byte timestamp is less than the least significant 4 bytes of the TSF time of the client station. If true, the method  500  continues to  532 . If false, the method  500  continues to  536 . At  532 , the MAC of the client station determines whether a difference between the least significant 4 bytes of the TSF time of the client station and the 4 byte timestamp is greater than a predetermined threshold (e.g., 2^31). If true, the method  500  continues to  540 . If false, the method  500  continues to  544 . At  540 , the MAC of the client station increments the most significant 4 bytes of the TSF time of the client station by 1 and the method  500  continues to  544 . At  544 , the MAC of the client station sets the least significant 4 bytes of the TSF time of the client station to the 4 byte timestamp and the method  500  continues to  508 . 
     At  536 , the MAC of the client station determines whether a difference between the 4 byte timestamp and the least significant 4 bytes of the TSF time of the client station is greater than the predetermined threshold. If true, the method  500  continues to  548 . If false, the method  500  continues to  528 . At  548 , the MAC of the client station decrements the most significant 4 bytes of the TSF time of the client station by 1 and the method  500  continues to  528 . At  528 , the MAC of the client station sets the least significant 4 bytes of the TSF time of the client station to the 4 byte timestamp and the method  500  continues to  508 . 
     The wireless communications described in the present disclosure can be conducted in full or partial compliance with IEEE standard 802.11-2012, IEEE standard 802.16-2009, IEEE standard 802.20-2008, and/or Bluetooth Core Specification v4.0. In various implementations, Bluetooth Core Specification v4.0 may be modified by one or more of Bluetooth Core Specification Addendums 2, 3, or 4. In various implementations, IEEE 802.11-2012 may be supplemented by draft IEEE standard 802.11ac, draft IEEE standard 802.11ad, and/or draft IEEE standard 802.11ah. 
     The foregoing description is merely illustrative in nature and is in no way intended to limit the disclosure, its application, or uses. The broad teachings of the disclosure can be implemented in a variety of forms. Therefore, while this disclosure includes particular examples, the true scope of the disclosure should not be so limited since other modifications will become apparent upon a study of the drawings, the specification, and the following claims. As used herein, the phrase at least one of A, B, and C should be construed to mean a logical (A OR B OR C), using a non-exclusive logical OR, and should not be construed to mean “at least one of A, at least one of B, and at least one of C.” It should be understood that one or more steps within a method may be executed in different order (or concurrently) without altering the principles of the present disclosure. 
     The apparatuses and methods described in this application may be partially or fully implemented by a special purpose computer created by configuring a general purpose computer to execute one or more particular functions embodied in computer programs. The computer programs include processor-executable instructions that are stored on at least one non-transitory, tangible computer-readable medium. The computer programs may also include or rely on stored data. The computer programs may include a basic input/output system (BIOS) that interacts with hardware of the special purpose computer, device drivers that interact with particular devices of the special purpose computer, one or more operating systems, user applications, background services and applications, etc. 
     The computer programs may include: (i) assembly code; (ii) object code generated from source code by a compiler; (iii) source code for execution by an interpreter; (iv) source code for compilation and execution by a just-in-time compiler, (v) descriptive text for parsing, such as HTML (hypertext markup language) or XML (extensible markup language), etc. As examples only, source code may be written in C, C++, C#, Objective-C, Haskell, Go, SQL, Lisp, Java®, ASP, Perl, Javascript®, HTML5, Ada, ASP (active server pages), Perl, Scala, Erlang, Ruby, Flash®, Visual Basic®, Lua, or Python®. 
     None of the elements recited in the claims is intended to be a means-plus-function element within the meaning of 35 U.S.C. §112(f) unless an element is expressly recited using the phrase “means for”, or in the case of a method claim using the phrases “operation for” or “step for”.