Patent Publication Number: US-9848452-B2

Title: Techniques for allocating short addresses to network devices

Description:
BACKGROUND 
     In some Time Synchronous Channel Hopping (TSCH) networks, such as that defined by IEEE 802.15.4e, network communication among nodes of the mesh network can be carried out using the “extended addresses” of the nodes and/or using “short addresses” of the nodes. In order to conserve available bandwidth and reduce power consumption, it is preferable for nodes to communicate using their short addresses. Typically, a node is assigned its short address when it joins the network. However, a significant amount of time may elapse from the time a node requests to join the network until the node receives a response that indicates whether it has successfully joined the network. In order to avoid missing the response, nodes must be maintained in an active state until the response is received. For a battery-powered node, the potentially extensive time spent waiting for a response while in an active state can consume a substantial amount of energy from the battery. 
     SUMMARY 
     Various aspects of the present invention relate to a first node assigning a short address to a second node in a time synchronous network. In one aspect, the first node receives an association request that is a request from a second node to join the network. The network may be a TSCH network, such as defined by IEEE 802.15.4e. The first node transmits an association response to the second node, where the association response permits the second node to conditionally join the network and enter a low-power state, and the association response instructs the second node to be in an active state during a specified period. By entering a low-power state, energy consumption can be conserved in the second node, which may be battery-powered. 
     Additionally, the first node transmits data from the association request to a coordinator node for the network on behalf of the second node. Thereafter, the first node receives a proxy response from the coordinator node in response to the data from the association request. The proxy response includes a response to the request from the second node to join the network. Subsequent to the first node receiving the proxy response and during the period in which the second node is instructed to be in the active state, the first node transmits a notification to the second node based on the response from the coordinator node. When the response indicates that the second node has successfully joined the network, the notification includes an assignment of a short address for the second node. The notification includes a disconnect notification for the node when the response indicates that the node has failed to join the network. The disconnect notification ends the conditional join to the network. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       Many aspects of the present disclosure can be better understood with reference to the following drawings. The components in the drawings are not necessarily to scale, with emphasis instead being placed upon clearly illustrating the principles of the disclosure. Moreover, in the drawings, like reference numerals designate corresponding parts throughout the several views. 
         FIG. 1  is a drawing of a mesh network according to various embodiments of the present disclosure. 
         FIGS. 2 and 3  are timing diagrams for nodes in a mesh network according to various embodiments of the present disclosure. 
         FIG. 4  is a flowchart illustrating one example of functionality implemented by a node in the mesh network of  FIG. 1  according to various embodiments of the present disclosure. 
         FIG. 5  is a schematic block diagram that provides one example illustration of a node employed in the mesh network of  FIG. 1  according to various embodiments of the present disclosure. 
     
    
    
     DETAILED DESCRIPTION 
     The techniques disclosed herein are directed to reducing the amount of time that battery-powered nodes and possibly other types of nodes must spend in an active state in order to join a mesh network and be assigned a short address. For example, in TSCH networks, such as defined by IEEE 802.15.4e, each node can acquire or identify other nodes with which it can communicate (commonly referred to as neighboring nodes), and obtain certain information and performance metrics about these nodes to facilitate communication. Nodes can use the metrics to score each of the nodes they identified to determine which identified node provides the best option for sending information to a destination and for receiving messages, i.e., a parent node. A node that has identified a parent node may be synonymously be referred to as a child node of the parent node. 
     Network communication among nodes of the network can be carried out using the extended addresses of the nodes and/or using short addresses of the nodes. In order to conserve available bandwidth and reduce power consumption, it is preferable for nodes to communicate using their short addresses. Typically, a node is assigned its short address once it has joined the network. However, a significant amount of time may elapse from the time a node requests to join the network (also referred to as an “association request”) until the node receives a response that indicates whether it has successfully joined the network (also referred to as an “association response”). If the association response indicates the node has successfully joined the network, it may further include the short address assigned to the node by the coordinator node for the network (also referred to as a “collector” node). In order to avoid missing the association response, a requesting node must be maintained in an active state until the response is received. For a battery-powered node, the potentially extensive time spent waiting for the association response while in an active state can consume a substantial amount of energy from the battery. 
     In order to reduce the time spent waiting for the response, implementations herein emphasize a parent node for the node promptly sending an association response to a node&#39;s association request. This association response from the parent node functions to permit a node to conditionally join the mesh network, thereby allowing the node to enter a low-power state (also referred to as a “sleep” state) shortly afterward. Once in the sleep state, the node will periodically wake to an active state for a “scheduled sync” during which the node may send/receive data before again entering a sleep state. Meanwhile, once the parent node receives the association request from the node, it acts as a proxy by forwarding data from the association request to the coordinator node for the mesh network on behalf of the child node. Due to inherent delays and/or retransmissions that may occur, particularly within mesh networks, considerable time may pass until the parent node receives a response from the coordinator that either accepts or rejects the node&#39;s association request. The parent node will notify the node of the response during the next schedule sync event or, if sooner, using the next packet sent to the node while the node is in its active state. In the event the node&#39;s request to join the network is approved, a short address is included in the response which the parent node sends to the node for use on the network. In the event the node&#39;s request to join the network is denied, the parent node sends a disconnect notification to the node. 
     As defined herein, a “node” includes an intelligent device capable of performing functions related to distributing messages in a mesh network. In one system, a node can be a meter located at a premises, such as a house or apartment, that measures the consumption of a utility such as gas, water, or electric power. Such a meter can be part of an advanced metering infrastructure (AMI), radio frequency (RF) network. Other examples of nodes include a router, coordinator or collector, host computer, hub, or other electronic device that is attached to a network and is capable of sending, receiving, or forwarding information over a communications channel. A coordinator node may facilitate establishing a mesh network that may also be referred to as a personal area network (PAN) or a wireless PAN (WPAN). 
     A node can contain several components that enable it to function within implementations of the present invention. For example, a node can include a radio that can enable it to communicate with like nodes and/or other devices in the mesh network. The radio of each node may have a programmable logic controller (PLC)-like device (e.g., a microcontroller) that can enable the radio to function like a computer, carrying out computer and command functions to provide implementations of the present invention described herein. A node may also include a storage medium for storing information related to communication with other nodes. Such storage mediums can include a memory, a disk, CD-ROM, DVD, or other storage devices located internal to the node or accessible by the node via a network, for example. A node may also include a crystal oscillator (i.e. a clock) to provide time-keeping and a battery to provide back-up power. Some nodes may be powered only by a battery and may also be referred to as battery-powered nodes. 
     A node can communicate with other nodes in the mesh network over various frequency channels. Nodes that share the same frequency hopping sequence, i.e., hop between frequencies at the same time, can communicate with each other over the same frequency. Thus, in a TSCH network, nodes can hop at different times to establish communication with other nodes over the available frequency spectrum, e.g., 240 channels according to exemplary implementations. A node can hop according to a certain time increment or dwell time, e.g., 400 milliseconds, at which time the node can transmit or receive a message over a given channel or frequency. The channels described herein can exist within the 240 channel frequency range, for example, and can be separated by guard bands which can represent the “space” between frequency channels. Thus, according to an exemplary implementation, 240 separate communications can occur simultaneously in the mesh network, each communication occurring on a separate channel. Such communications can utilize the entire bandwidth of the 240 channel network. 
     As used herein, an “extended address” refers to a media access control (MAC) network address for a node with which the node may use to send and/or receive data to/from other nodes. In some embodiments of a network defined by IEEE 802.15.4e, the extended address may be an 8-byte hardware MAC address. 
     As used herein, a “short address” refers to a dynamically-assigned network address for a node that is shorter than an extended address and with which the node may also use to send and/or receive data to/from other nodes. In some embodiments of a network defined by IEEE 802.15.4e, the short address may be a 2-byte address dynamically-assigned to a node by the network which the node has joined. Depending upon the implementation, the short address for a node may or may not be derived from the extended address for the node. 
     As used herein, a “conditional join” to a network refers to permitting a node to join the network pending a definitive determination of the node&#39;s request to join the network by an authoritative source, such as a collector node for the network. If the request to join the network is ultimately approved, the node can remain in the network or can simply be said to have joined the network. If the request to join the network is ultimately denied, the node disconnects from the network. It should be noted that the conditional status may only be recognized from the perspective of the parent node whose child node has requested to join the network; the child node may not receive an indication that a conditional join to the network has any conditions attached. However, in some implementations, a node that has conditionally joined the network can only communicate with a parent node and may not perform other network functions (e.g., sending beacon messages) until the conditional join is confirmed by the coordinator node. 
     Referring now to the drawings,  FIG. 1  depicts an exemplary mesh network  10  configured to implement systems described herein. The mesh network  10  can include a coordinator node  20  and radio nodes  21 - 30 . The coordinator node  20  can serve as a collection point to which the nodes  21 - 30  may send information, such as measurements of the consumption of gas, water, or electric power at a facility associated with the node. Nodes  21 - 30 , as previously discussed, can have sufficient networking and computing capability to communicate with other nodes in the mesh network and to make intelligent determinations to facilitate such communication. The coordinator node can be configured to have at least the same functionality and capabilities present in nodes  21 - 30 . Additionally, the coordinator node  20  may include sufficient storage capability for storing information from nodes  21 - 30  and, in some examples, greater computing capability to process the information received from the nodes. In other examples, a command center or other computing device (not shown) can be used to process the information received from the nodes. 
     Three layers of nodes in the mesh network  10  are shown in  FIG. 1  (layer  1 , layer  2 , and layer  3 ). Fewer or more layers may exist in other configurations. Nodes can be associated with a particular layer based on certain factors, such as a node&#39;s logical distance to the coordinator node  20  and the reliability of its data transmissions. The factors and/or the weights given to the factors may vary with different networks. Nodes located on layer  1  indicate that they have a “better” connection to the coordinator node  20 , and do not require the use of an intervening node to communicate with the coordinator node  20 . Nodes located on higher numbered layers communicate with the coordinator node  20  through at least one intervening node. For example, nodes located on layer  2  are child nodes to a layer  1  parent node, and nodes located on layer  3  are child nodes to a layer  2  parent node (i.e. here, layer  2  nodes can serve both parent and child roles in different node pairings). Thus, a layer  3  node communicates with the coordinator node through its parent layer  2  node, which in turn communicates with its parent layer  1  node, which communicates with the collector. While  FIG. 1  shows layer  1  nodes being closer to the coordinator node  20  than layer  2  nodes, and layer  2  nodes closer than layer  3  nodes, the layers may not be determined solely by physical distance. A layer  1  node may be located further away from the coordinator node  20  than a layer  2  node, depending upon the manner in which the nodes are evaluated. It should be noted that the connections among nodes are dynamic and subject to change. 
     As shown in  FIG. 1 , nodes  21 - 30  are currently joined to the mesh network  10 , as indicated by the solid lines joining the nodes  21 - 30 . A battery-powered node, node  31 , is attempting to join the mesh network via node  27 , as indicated by the dashed line between node  31  and node  27 . In this configuration, the node  27  can be referred to as the parent node to node  31 , while node  31  can be referred to as a child node of node  27 . The node  31  may discover the mesh network  10  and one or more nodes  21 - 30  of the network  10  through various discovery mechanisms, such as by recognizing a beacon message for the network  10  from the node  27 , where the beacon message can include a channel hopping sequence used by the network  10 . The node  31  requests to join the mesh network  10  by transmitting an association request to its presently selected parent node, node  27 . 
     The timing diagram of  FIG. 2  illustrates a possible implementation of procedures by which the node  31  can join the network  10  and receive a short address assignment. As shown in  FIG. 2 , the association request  201  is first sent by the node  31  to the parent node  27 . In some implementations, the association request  201  and/or other messages from the node  31  may indicate to the parent node  27  that the node  31  is a battery-powered node. In response, implementations herein allow the parent node  27  to promptly send an association response  203  to the node  31 , and also send data from the association request  201  in a proxy request message  205  to the coordinator node  20  for the mesh network  10 . In some implementations, the proxy request message  205  can include data identifying the node  31  and its request to join the network  10  (i.e., from the association request  201 ), while the source address of the proxy request message  205  indicates the parent node  27  is the sender. The association response  203  may include various information, such as an association status that indicates to the node  31  that it has joined the network  10 , albeit a “conditional” join while awaiting a response from the coordinator node  20 . The association response  203  may further specify periods during which the node  31  should be in an active state in order to send/receive data via the network  10 . In various implementations, the node  27  may offer to allow the node  31  to conditionally join the network  10  (i.e., via the association response  203 ) on the basis of the node  31  being a battery-powered node, though other implementations may not be so limited. 
     In these implementations, the coordinator node  20  ultimately determines whether the node  31  is allowed to join the network  10 . Due to inherent delays and/or retransmissions that may occur, particularly within mesh networks, considerable time may pass until the parent node  27  receives a response from the coordinator node  20  that either accepts or rejects the node&#39;s association request made via the proxy request message  205 . However, prior to receiving the definitive response from the coordinator node  20 , the node  27  can send the association response  203  to the node  31  that allows the node  31  to conditionally join the network  10  while awaiting a response from the coordinator node  20 . 
     By permitting the node  31  to conditionally join the mesh network  10 , the node  31  need no longer constantly maintain an active state awaiting a response to its request to join the network  10 , thereby allowing the node to enter a low-power “sleep” state shortly afterward. Once in the sleep state, the node  31  will periodically wake to an active state for a “scheduled sync” during which the node  31  may send/receive data before again entering a sleep state, though the node may also enter an active state to send/receive data at times other than during a scheduled sync. At a later time, the parent node  27  receives a proxy response message  207  from the coordinator node  20  in response to the proxy request message  205 . The proxy response message  207  indicates definitively whether the node  31  is permitted to join (i.e., unconditionally remain) in the network  10  and possibly other information. In addition, if the node  31  is permitted to join the network  10 , the proxy response message  207  may contain a short address to be assigned to the node  31 . 
     After receiving the proxy response message  207 , the parent node  27  will notify the node  31  of the response from the coordinator node  20  during the next data transmission  209  sent to the node  31  while it is in an active state, such as during a scheduled sync with the node. In the event the node  31  is permitted to join the network  10 , any short address received for the node  31  from the coordinator node  20  is included in the data transmission  209  to the node  31 , where the short address may be used by the node  31  on the network  10 . Alternatively, in the event the node&#39;s request to join the network  10  is denied, the parent node sends a disconnect notification to the node via the data transmission  209 . In some implementations, the data transmission  209 , which may include a short address, joining status, and/or any other information from the proxy response message  207 , is transmitted to the node  31  in an information element (IE) field of a scheduled sync message or other type of message (e.g., an ACK) sent to the node  31 . In various implementations, the disconnect notification is sent to the node  31  by specifying a reserved short address (e.g., the hexadecimal address FF:FF) for the node  31 , where the reserved address is recognized by nodes as a disconnect notification. In the event that the node  31  receives a disconnect notification, the node  31  may attempt to again join the network  10  via a same or different parent node or may attempt to join another PAN, if such a network is within the radio range of the node  31 . 
     In  FIG. 3  a timing diagram is shown for alternate implementations of the procedures by which the node  31  can join the network  10  and receive a short address assignment. Over the course of the time in which the node  27  is a member of the network  10  and capable of serving as a parent node to other nodes, the coordinator node  20  provides the node  27  with a short address pool assignment  301 . The short address pool assignment  301  provide the node  27  with a pool of short addresses by which the coordinator node  20  delegates authority to the node  27  to: (i) determine the nodes allowed to unconditionally join the network  10  as child nodes of the node  27 , and (ii) assign a short address to those child nodes from its short address pool. 
     At some later time, the node  31  sends the association request  303  to the node  27 , thereby requesting to join the network  10  as a child node of the node  27 . In some implementations, the association request  303  and/or other messages from the node  31  may indicate to the parent node  27  that the node  31  is a battery-powered node. In response to receiving the association request  303 , the node  27  sends the association response  305  to the node  31 . If the node  27  is capable of accommodating the node  31  as a child node, the association response  305  can include various information including a short address assignment for the node  31 , an association status that indicates the node  31  has joined the network  10 , and/or other possible information. In some implementations, the node  27  informs the coordinator node  20  that the node  31  has joined the network  10 , but permission is not sought from the coordinator node  20  for the join. Alternatively, if the node  27  is not capable of accommodating the node  31  as a child node, the association response  305  can include various information including an association status that indicates that the request to join the network  10  is denied. In the event that the node  31  is not permitted to join the network  10 , the node  31  may attempt to again join the network  10  via a different parent node or may attempt to join another PAN, if such a network is within the radio range of the node  31 . 
     Referring next to  FIG. 4 , shown is a flowchart that provides one example of the network association operations for a method  400  implemented in a node, such as the node  27  ( FIG. 1 ), in the mesh network  10  ( FIG. 1 ) according to various embodiments. It is understood that the flowchart of  FIG. 4  provides merely an example of the many different types of functional arrangements that may be employed to implement the network association operations of the method  400  as described herein. The operations depicted in the flowchart of  FIG. 4  may be initiated following a transmission of an association request by a node, such as the node  31  ( FIG. 1 ), seeking to join the mesh network  10 . For simplicity, the method  400  of  FIG. 4  is described below as it may be implemented by node  27  in response to an association request received from node  31 . As can be appreciated, the method  400  may be implemented by other nodes in a network. 
     Beginning with block  403 , the node  27  receives an association request from node  31 , where the association request is a request for the node  31  to join the mesh network  10 . In some implementations, the association request and/or other messages from the node may indicate that the node  31  is a battery-powered node. 
     Next, in block  406 , the node  27  determines whether it can accommodate taking on the node  31  as a child node. The decision may be based upon available computing resources in the node  27 , network resources, and/or upon other criteria as can be appreciated. If the node  31  cannot be accommodated as a child node, in block  409 , the node  27  sends an association response to the node  31 , where the association response includes an association status that indicates that the node  31  cannot join the network  10 . Thereafter, this portion of the method  400  ends as shown. 
     Alternatively, if the node  27  can accommodate the node  31  as a child node, in block  412 , the node  27  sends an association response to the node  31  that includes an association status indicating that it has joined the network  10 , albeit a conditional join. Although the association response sent to the node  31  may simply indicate that it has joined the network (i.e., without an indication of conditions), the join is conditional since, in these implementations, a coordinator node for the network  10  ultimately makes the definitive determination whether a node can join the network. The association response may further specify periods during which the node  31  should be in an active state in order to send/receive data via the network  10  and/or other possible information. By permitting the node  31  to conditionally join the mesh network  10 , the node  31  need no longer constantly maintain an active state awaiting a response to its request to join the network  10 , thereby allowing the node to enter a low-power state shortly afterward to conserve energy consumed. Once in the low-power state, the node  31  will periodically wake to an active state for a scheduled sync during which the node  31  may send/receive data before again entering a low-power state, though the node may also enter an active state to send/receive data at times other than during a scheduled sync. 
     In block  415 , the node  27  sends data from the association request, such as a proxy request message  205  ( FIG. 2 ), to the coordinator node for the mesh network  10  seeking to allow the node  31  to unconditionally join the network  10 . As discussed above, the coordinator node ultimately determines whether the node  31  is allowed to join the network  10 . Due to inherent delays and/or retransmissions that may occur, particularly within mesh networks, considerable time may pass until the node  27  receives a response from the coordinator node that either accepts or rejects the node as part of the network  10 . However, as discussed above in block  412 , prior to receiving the definitive response from the coordinator node, the node  27  can send the association response to the node  31  that allows the node  31  to conditionally join the network  10  while awaiting a response from the coordinator node  20 . 
     Subsequently, in block  418 , the node  27  receives a response, such as a proxy response message  207  ( FIG. 2 ), from the coordinator node in response to the data from the association request sent by the node  27  on behalf of the node  31 . In block  421 , the node  27  determines whether the coordinator node will allow the node  31  to join (or remain in) the network  10 . 
     If, in block  421 , the response from the coordinator node indicates that the node  31  cannot join the network  10  (i.e., the conditional join must end), in block  424 , the node  27  sends a disconnect notification to the node  31  via a data transmission sent to the node  31  while it is known to be in an active state. As a corollary, the node  27  may need to wait to send this data transmission until such time as the node  31  is (or has been instructed to be) in an active state. The disconnect notification may be transmitted to the node  31  in an information element (IE) field of a scheduled sync message that occurs at a time in which the node  31  is known to be active. If the node  27  discovers that the node  31  is active prior to the time of the scheduled sync (e.g., the node  27  receives a data packet from the node  31 ), the node  27  may instead transmit the disconnect notification to the node  31  during this time, such as in an ACK packet or other data packet. In various implementations, the disconnect notification is sent to the node  31  by specifying a reserved short address (e.g., the hexadecimal address FF:FF) for the node  31 , where the reserved address is recognized by nodes as a disconnect notification. Thereafter, this portion of the execution of the method  400  ends as shown. 
     Alternatively, if, in block  421 , the node  27  determines that the coordinator node permits the node  31  to join the network  10  (i.e., an unconditional join), in block  427 , the node  27  sends a “join” notification to the node  31  via a data transmission sent to the node  31  while it is known to be in an active state. As a corollary, the node  27  may need to wait to send this data transmission until such time as the node  31  is (or has been instructed to be) in an active state. In the event that the response from the coordinator node includes a short address assignment for the node  31 , the node  27  includes this short address and possibly other information in the join notification to the node  31 . The join notification may be transmitted to the node  31  in an IE field of a scheduled sync message that occurs at a time in which the node  31  is known to be active. If the node  27  discovers that the node  31  is active prior to the time of the scheduled sync (e.g., the node  27  receives a data packet from the node  31 ), the node  27  may instead transmit the join notification to the node  31  during this time, such as in an ACK packet or other data packet. Thereafter, this portion of the execution of the method  400  ends as shown 
     Next, in  FIG. 5 , shown is a block diagram depicting an example of a node  21 - 31  used for implementing the techniques disclosed herein within a wireless mesh network or other data network. 
     The node  21 - 31  can include a processing device  502 . Non-limiting examples of the processing device  502  include a microprocessor, an application-specific integrated circuit (“ASIC”), a state machine, or other suitable processing device. The processing device  502  can include any number of processing devices, including one. The processing device  502  can be communicatively coupled to computer-readable media, such as memory device  504 . The processing device  502  can execute computer-executable program instructions and/or access information respectively stored in the memory device  504 . 
     The memory device  504  can store instructions that, when executed by the processing device  502 , cause the processing device  502  to perform operations described herein. The memory device  504  may be a computer-readable medium such as (but not limited to) an electronic, optical, magnetic, or other storage device capable of providing a processor with computer-readable instructions. Non-limiting examples of such optical, magnetic, or other storage devices include read-only (“ROM”) device(s), random-access memory (“RAM”) device(s), magnetic disk(s), magnetic tape(s) or other magnetic storage, memory chip(s), flash memory, an ASIC, configured processor(s), optical storage device(s), or any other medium from which a computer processor can read instructions. The instructions may comprise processor-specific instructions generated by a compiler and/or an interpreter from code written in any suitable computer-programming language. Non-limiting examples of suitable computer-programming languages include C, C++, C#, Visual Basic, Java, Python, Perl, JavaScript, and the like. 
     The nodes  21 - 31  can include a bus  506  that can communicatively couple one or more components of the node  21 - 31 . Although the processor  502 , the memory  504 , and the bus  506  are depicted in  FIG. 5  as separate components in communication with one another, other implementations are possible. For example, the processor  502 , the memory  504 , and the bus  506  can be components of printed circuit boards or other suitable devices that can be disposed in a node  21 - 31  to store and execute programming code. 
     The nodes  21 - 31  can also include network interface device  508 . The network interface device  508  can be a transceiving device configured to establish a one or more of the wireless communication links via an antenna  510 . A non-limiting example of the network interface device  508  is an RF transceiver and can include one or more components for establishing communication links to other nodes  21 - 31  in the mesh network  10 . 
     Numerous specific details are set forth herein to provide a thorough understanding of the claimed subject matter. However, those skilled in the art will understand that the claimed subject matter may be practiced without these specific details. In other instances, methods, apparatuses, or systems that would be known by one of ordinary skill have not been described in detail so as not to obscure claimed subject matter. 
     Some portions are presented in terms of algorithms or symbolic representations of operations on data bits or binary digital signals stored within a computing system memory, such as a computer memory. These algorithmic descriptions or representations are examples of techniques used by those of ordinary skill in the data processing arts to convey the substance of their work to others skilled in the art. An algorithm is a self-consistent sequence of operations or similar processing leading to a desired result. In this context, operations or processing involves physical manipulation of physical quantities. Typically, although not necessarily, such quantities may take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared or otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to such signals as bits, data, values, elements, symbols, characters, terms, numbers, numerals, or the like. It should be understood, however, that all of these and similar terms are to be associated with appropriate physical quantities and are merely convenient labels. Unless specifically stated otherwise, it is appreciated that throughout this specification discussions utilizing terms such as “processing,” “computing,” “calculating,” “determining,” and “identifying” or the like refer to actions or processes of a computing device, such as one or more computers or a similar electronic computing device or devices, that manipulate or transform data represented as physical electronic or magnetic quantities within memories, registers, or other storage devices, transmission devices, or display devices of the computing platform. 
     The system or systems discussed herein are not limited to any particular hardware architecture or configuration. A computing device can include any suitable arrangement of components that provide a result conditioned on one or more function calls. Suitable computing devices include multipurpose microprocessor-based computer systems accessing stored software that programs or configures the computing system from a general-purpose computing apparatus to a specialized computing apparatus implementing one or more aspects of the present subject matter. Any suitable programming, scripting, or other type of language or combinations of languages may be used to implement the teachings contained herein in software to be used in programming or configuring a computing device. 
     Aspects of the methods disclosed herein may be performed in the operation of such computing devices. The order of the blocks presented in the examples above can be varied—for example, blocks can be re-ordered, combined, and/or broken into sub-blocks. Certain blocks or processes can be performed in parallel. 
     The use of “adapted to” or “configured to” herein is meant as open and inclusive language that does not foreclose devices adapted to or configured to perform additional tasks or steps. Additionally, the use of “based on” is meant to be open and inclusive, in that a process, step, calculation, or other action “based on” one or more recited conditions or values may, in practice, be based on additional conditions or values beyond those recited. Headings, lists, and numbering included herein are for ease of explanation only and are not meant to be limiting. 
     While the present subject matter has been described in detail with respect to specific aspects thereof, it will be appreciated that those skilled in the art, upon attaining an understanding of the foregoing, may readily produce alterations to, variations of, and equivalents to such aspects. Accordingly, it should be understood that the present disclosure has been presented for purposes of example rather than limitation, and does not preclude inclusion of such modifications, variations, and/or additions to the present subject matter as would be readily apparent to one of ordinary skill in the art.