Patent Publication Number: US-9900406-B1

Title: Method and apparatus for demand-based cable upstream channel assignment

Description:
RELATED APPLICATIONS 
     This application is a non-provisional application claiming the benefit of U.S. Provisional Application Ser. No. 61/300,694, entitled “Method and Apparatus For Demand-Based Cable Upstream Channel Assignment,” filed Feb. 2, 2010, which is hereby incorporated by reference in its entirety. 
    
    
     TECHNICAL FIELD 
     This disclosure relates to improving bandwidth and processing resources in a cable system capable of using multiple bonded upstream RF channels. 
     BACKGROUND 
     The Data-Over-Cable Service Interface Specification (DOCSIS) was established by cable television network operators to facilitate transporting data traffic, primarily Internet traffic, over existing community antenna television (CATV) networks. In addition to transporting data traffic, as well as television content signals over a CATV network, multiple services operators (MSO) also use their CATV network infrastructure for carrying voice, video on demand (VoD) and video conferencing traffic signals, among other types. 
     In transporting downstream multimedia content, as well as data, upstream messages are typically sent to request the content and to set up a service flow to deliver the content. In addition to downstream multimedia content, such as video, voice traffic also uses message signaling to set up service flows for the upstream and downstream directions. 
     These signals are typically sent over a fiber network to a location, sometimes referred to as a node, near an end user, and from the node to a broadband user device via a coaxial cable. Such an arrangement is known in the art as a hybrid fiber coax network (HFC). 
     Typically, when a device is initially connected to the network, the device goes through an initialization process. The initialization process can include scanning the channels to identify downstream channels driven by a headend. Once a downstream channel is identified, the device performs ranging for each upstream channel that it has been configured for and registration processes to join the HFC network. During the course of normal operation each CPE device performs station maintenance upon periodic request from the headend. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a block diagram illustrating an exemplary network environment operable to provide bonded upstream channel operation on one or more channels. 
         FIG. 2  is a block diagram of a CPE device capable of transmitting data on one or more bonded upstream channels. 
         FIG. 3  is a block diagram of a cable modem termination system (CMTS) device capable of receiving data from a CPE device capable of transmitting data on one or more bonded upstream channels. 
         FIG. 4  is a flowchart illustrating an example process for a customer premise equipment (CPE) device receiving downstream packets. 
         FIG. 5  is a flowchart illustrating an example process for a CMTS performing periodic maintenance on upstream channels with a CPE device. 
         FIG. 6  is a flowchart illustrating an example processes for a CMTS after initialization of CPE devices capable of and provisioned for transmitting on more than one bonded upstream channels. 
         FIG. 7  is a flowchart illustrating an example process for a CMTS performing demand based upstream channel allocation of CPE devices capable of and provisioned for transmitting on more than one bonded upstream channel. 
         FIG. 8  is a flowchart illustrating an example process for a CMTS performing demand based upstream channel de-allocation of CPE devices capable of and provisioned for transmitting on more than one bonded upstream channel. 
         FIG. 9  is a block diagram of an example controller that can be used in a CPE device and/or CMTS. 
     
    
    
     Like reference numbers and designations in the various drawings indicate like elements. 
     DETAILED DESCRIPTION 
     In some implementations of this disclosure, systems and methods can operate to use more than one upstream channel that are bonded to increase upstream bandwidth of a CPE device. Channel bonding can be used to increase the upstream bandwidth that is available to a CPE device since one or more upstream channels can be used to provide communication services. Periodic maintenance is performed on each upstream channel and can include measuring and/or adjusting power level, transmit timing, pre-equalization coefficients and transmit frequency, among others. Periodic maintenance is performed by the CMTS on a CPE device capable and provisioned for communication services on one or more upstream channels even though the CPE device at a given point in time does not have the requirement for, nor is using the additional bonded upstream channels. Thereby, downstream and upstream bandwidth as well as the associated processing resources of the CPE device and CMTS can be optimized through demand-based bonded upstream channel assignment. For example, a CPE device initially configured for transmission on one or more bonded upstream channels can be instructed by the CMTS to use a subset of the provisioned upstream channels. The CMTS can then monitor the CPE device upstream bandwidth requests and allocate additional bonded upstream channels as needed. As upstream bandwidth from the CPE device decreases the CMTS can de-allocate bonded upstream channels. 
       FIG. 1  is a block diagram illustrating an exemplary network environment operable to provide bonded upstream channel communication on more than one upstream channel. In some implementations, a headend  105  can provide video, data and/or voice service(s) to CPE devices  110   a - d  in one or more subscriber groups (e.g., service group(s)) through a hybrid fiber-coax (HFC) network  115 . The headend  105  can include devices such as a cable modem termination system (CMTS)  120  and/or an edge quadrature amplitude modulation (EQAM) device, or a combined device including multiple edge and/or video or data processing functionalities. Such devices can operate to facilitate communications between application servers  130   a - c  on wide area network  125  and the CPE devices  110   a - d . In various implementations, the network  125  can include one or more networks internal to the headend and/or one or more networks external to the headend (e.g., one or more extranets, the Internet, etc.). 
     Data services can be handled by the headend  105  through a CMTS  120 . The CMTS  120  can receive data signals from application servers  130   a - c  or nodes through wide area network(s)  125 . The wide area network(s)  125 , for example, can operate using Internet protocol (IP), sending data packets to and receiving data packets from the headend  105 . In some examples, the CMTS  120  can be paired with a SIP proxy server (not shown) operable to provide voice over internet protocol (VoIP) services with voice connectivity to other subscribers or voice connectivity to a public switched telephone network (PSTN) (not shown). In still further examples, one or more video sources (not shown) may provide streaming data through the wide area network(s)  125  to the CMTS  120   
     In some implementations, the CMTS  120  can forward packets destined for subscribers to an EQAM device used to modulate the signal onto a carrier waveform. The carrier waveform can include both data and video streams, in both multicast and unicast (e.g., point-to-point) formats for transmission to a combiner, which can combine multiple signals onto a single fiber for transmission to one or more CPE devices  110   a - d  via the hybrid fiber-coax (HFC) network  115 . In other implementations, the CMTS  120  can modulate a baseband signal to a carrier wave and transmit the signal to a combiner for upconversion to a transmission frequency. 
       FIG. 2  is a block diagram illustrating a CPE device  110  with one or more bonded upstream channels. The device  110  can include an HFC network interface  200 . The HFC network interface can facilitate receipt and transmission of communications via the HFC network. Downstream signals can be received from a headend CMTS via the HFC network, and upstream signals can be sent to the headend CMTS via the HFC network. 
     The CPE device  110  can also include a downstream receiver  210  and upstream transmitter  220 . The downstream receiver  210  can include a tuner(s), demodulator(s), analog to digital convertor(s) and analog signal conditioning circuitry. The downstream receiver  210  provides the media access controller (MAC) module  230  and controller  240  with packets from a downstream channel. Elements of the downstream receiver  210  can be integrated into MAC module  230 . The downstream receiver  210  can be capable of providing packets from multiple bonded downstream channels. The MAC module  230  can provide bandwidth allocation as controlled by the CMTS for downstream/upstream channel(s), initiation of upstream channel(s) requests, transmissions of packets on one or more bonded upstream channels, quality of service (QoS), and maintenance capabilities. The controller  240  can provide packet processing and control of the HFC interface  200 , downstream receiver  210 , MAC module  230 , upstream transmitter  220  and the device interface(s)  250 . The associated processing and control of CPE device  110  can be distributed between the MAC module  230  and the controller  240 . The device interface(s)  250  can provide interconnect to external devices such as a personal computer (PC) and can include industry standard ethernet, wireless and universal serial bus (USB) interfaces, among many others. The device interface(s)  250  can be integrated in controller  240 . The upstream transmitter  220  is capable of sending upstream packets from MAC module  230  on one or more bonded upstream channels. The upstream transmitter  220  can include modulator(s), digital to analog convertor(s) and analog circuitry. Some elements of the upstream receiver  220  can be integrated into MAC module  230 . 
       FIG. 3  is a block diagram illustrating a CMTS device  120  capable of providing a communication system and method from/to wide area network (e.g., WAN  125  of  FIG. 1 ) to/from CPE devices (e.g., CPE devices  110   a - d  of  FIG. 1 ) through an HFC network (e.g., HFC network  115  of  FIG. 1 ). The CMTS device can include network interfaces  340  to communicate with the wide area network. The controller  330  can provide packet processing and control of the network interface(s)  340 , MAC module  320 , downstream transmitter  300  and upstream receivers  310 . The MAC module  320  can provide bandwidth allocation for downstream/upstream channel(s), process packets from one or more bonded upstream channel(s), QoS and maintenance capabilities. The associated processing and control of CMTS device  120  can be distributed between the MAC module  320  and the controller  330 . The downstream transmitter  300  receives packets from MAC module  320  for transmission on the HCF network. The downstream transmitter  300  can include modulator(s), digital to analog convertor(s), frequency translator(s), and analog signal conditioning circuitry. The downstream transmitter  300  can transmit on one or more downstream channels. The CMTS device  120  can include multiple downstream transmitters  300  (not shown). Packets are received from the HFC network by the upstream receivers  310  and forwarded to MAC module  320  for processing. The upstream receivers  310  can receive packets from a CPE device on one or more bonded upstream channels and can include demodulator(s), analog to digital convertor(s) and analog signal conditioning circuitry. 
       FIG. 4  is a flowchart illustrating an example process  400  of the initialization and packet processing of a CPE device capable of transmitting packets on one or more bonded upstream channels. 
     At stage  410 , a CPE device initially attempts to connect to the CMTS, the CPE device goes through initialization including frequency scanning, ranging, establishing IP connectivity and registration processes with the CMTS. The CPE device performs ranging for one or more bonded upstream channels that it has been configured for. 
     At stage  415 , the CPE device has successfully registered with the CMTS and can provide communication services over the HFC Network. At this stage, the CPE device waits for a downstream packet from the network. 
     At stage  420 , the CPE device has received a unicast or multicast packet intended for the CPE device from the HFC network and can determine if the packet is to be processed and forwarded to a device attached to the CPE or processed internally (e.g., a management packet). 
     If the packet is data, the process  400  proceeds to stage  425 , where the CPE device processes and forwards a packet to an external device through the device interface(s) (e.g., device interface(s)  250  of  FIG. 2 ). 
     If the packet is determined to be management, the process  400  proceeds to stage  430 , where the CPE device determines if the packet to be processed internally by the CPE is a request for station maintenance from the CMTS. If the packet is a station maintenance packet, the process  400  proceeds to stage  435 . 
     At stage  435 , the CPE device can process a request for station maintenance specified for a particular upstream channel by the CMTS. Physical or environmental changes can occur in the HFC network effecting communication performance on one or more upstream channels. The CMTS performs periodic station maintenance with the CPE devices (e.g., CPE devices  110   a - b  in  FIG. 1 ) by allocating an upstream channel opportunity (e.g., time slot) for transmission of upstream channel power level, transmit timing, pre-equalization coefficients and transmit frequency measurements. The CMTS can analyze the station management information from the CPE device and respond with a request to adjust parameters to maintain optimal upstream channel communication performance. Periodic station maintenance is performed on each upstream channel the CPE device is enabled to transmit on. 
     If the packet is not a station maintenance packet, the process  400  proceeds to stage  440 , where the CPE device determines if the packet to be processed internally by the CPE is an upstream channel change request. Upstream channel change requests can be initiated by the CMTS to add or remove upstream channels. 
     If the packet is an upstream channel change, the process  400  can proceed to stage,  445 , where the CPE device processes the upstream channel add or remove CMTS request. While removing an upstream channel reduces the CPE&#39;s potential upstream performance on the HFC network, the CMTS will not perform periodic station maintenance on the removed upstream channel. Thereby, the CMTS/CPE device resources and HFC network bandwidth will not be required for the measurement and reporting of parameters. Addition of an upstream channel can result in additional HFC network upstream bandwidth for a CPE device at the expense of the overhead associated with the periodic station maintenance performed by the CMTS on the newly added channel. 
     If the packet is of another type, implicating different processing, the process  400  can proceed to stage  450 , where packets identified to be processed internally by the CPE device by some alternative mechanism are processed. 
       FIG. 5  is a flowchart illustrating example process  500  for station maintenance processing by a CMTS device capable of receiving packets on one or more bonded upstream channels from a CPE device. At stage  510 , the CMTS can add CPE device identification information to a poll list on a periodic basis. The periodic basis represents the polling interval on which station maintenance is performed. 
     At stage  515 , the CMTS determines if a poll list contains CPE devices to perform station maintenance on. If the poll list is empty the CMTS can wait until a CPE device is added to the poll list. Alternatively, if the CMTS determines the poll list is not empty, the process proceeds to stage  520 , where the CMTS can obtain the identification information of a CPE device to perform station maintenance operation on. 
     At stage  525 , the CMTS performs station maintenance on a single upstream channel on the CPE device identified in the poll list. The CMTS can perform station maintenance by sending a downstream packet providing the CPE device an upstream channel opportunity (e.g., time slot) for transmission of station management information. The CPE device can respond with upstream channel device power level, transmit timing, pre-equalization coefficients and transmit frequency information. The CMTS can analyze the station management information and send the CPE device upstream channel adjustments. 
     At stage  530 , the CMTS determines if the CPE device has additional upstream channels enabled for communication. For a CPE device that has more than one bonded upstream channel enabled, stage  525  is re-entered to perform station maintenance on the next bonded upstream channel. When station maintenance has been completed on the enabled upstream channel(s) of a CPE device, the process  500  proceeds to stage  535 . Thus, a CPE device only capable of transmitting on one upstream channel enters stage  525  once. 
     At stage  535 , CPE device station maintenance has been completed on a CPE device on one or more upstream channels and thereby the CPE device is removed from the list. State  515  is re-entered to determine if station maintenance is required on any additional CPE devices. 
       FIG. 6  is a flowchart illustrating an example CMTS process  600  for transmitting on one or more bonded upstream channels. At stage  610 , the CMTS can determine if a newly registered CPE device is operable to communicate on more than one bonded upstream channel. 
     If the device is operable to communicate on multiple upstream channels, the process  600  proceeds to stage  615 , where the CMTS enters the CPE device identification in a list that contains all CPE devices that are capable for communication over more than one bonded upstream channels. 
     At stage  620 , a determination of whether the HFC network is in steady state condition and providing normal communication services is made by the CMTS. For example, if the CMTS were coming out of a power cycle or a reset process the HFC network would typically not be in a steady state since all of the CPE devices can be going through initialization processes (e.g., frequency scanning, ranging, establishing IP connectivity and registration). 
     If the network is in a steady state, the process proceeds to stage  625 , where the CMTS determines if there are remaining CPE devices on the list. If there are remaining devices, then further processing can occur at stage  630 . If not, the CMTS enters stage  610  and waits until a CPE device with one or more bonded upstream channels successfully registers with the CMTS on the HFC network. 
     At stage  630 , the CMTS obtains the identification of a CPE device with more than one bonded upstream channel enabled for communication services. At stage  635 , that CMTS can identify one or more upstream channels to be inactivated on the CPE device. The CMTS can, but is not limited to, an algorithm of inactivating bonded upstream channels such that active upstream channels are evenly allocated on the HFC network across the CPE devices. Other approaches can include an algorithm based on historical bandwidth or time of day usage, for example. 
     At stage  640 , the CMTS sends a management packet to a CPE device to inactivate one or more bonded upstream channels based on the algorithm at stage  635 . At stage  645 , the CMTS can remove the CPE device from the list. At this point one or more bonded upstream channels on a CPE device have been inactivated. Thus, station maintenance is not performed on the inactive channels. 
       FIG. 7  is a flowchart illustrating example processes  700  of CMTS performing demand based upstream channel allocation of CPE devices capable and provisioned for bonded communication on more than one upstream channel. At stage  710 , the CMTS can detect a request for upstream channel bandwidth from a CPE device. If no request is received, the CMTS waits for a request. Alternatively, if a request for upstream channel bandwidth is received from the CPE device, the process  700  proceeds to stage  715 . 
     At stage  715 , the CMTS determines if the CPE device is capable of supporting bonded upstream channel communications. Additional upstream channels are not added to a CPE device for which the device is either not capable or not provisioned. If the CPE device is not capable of supporting bonded upstream channel communications, the process returns to stage  710  to wait for another bandwidth request. Alternatively, if the CPE device is cable of supporting bonded upstream channel communications, the process  700  proceeds to stage  720 . 
     At stage  720 , the CMTS determines if the CPE device upstream bandwidth requests meet a threshold criterion for increasing bonded upstream channel bandwidth. If the bandwidth request does not meet the threshold criterion for increasing bonded upstream channel bandwidth, the process  700  returns to stage  710  to wait for another CPE bandwidth request. Alternatively, if the bandwidth request does meet the threshold criterion for increasing bonded upstream channel bandwidth, the process  700  proceeds to stage  725 . 
     At stage  725 , the CMTS identifies one or more bonded upstream channels for allocation to the CPE device. The CMTS can, but is not limited to, an algorithm of activating upstream channels such that the active upstream channels are evenly allocated on the HFC network across the CPE devices. Other approaches can include an algorithm based on historical bandwidth usage or time of day for example. 
     At stage  730 , the CMTS sends a management packet to a CPE device to activate one or more bonded upstream channels. The identification of the one or more bonded channels to be activated can be based on the algorithm at stage  725 . 
       FIG. 8  is a flowchart illustrating example processes  800  of CMTS performing demand based upstream channel de-allocation on CPE devices capable and provisioned for bonded communication on more than one upstream channel. At stage  810 , the CMTS can periodically put a CPE device capable of and provisioned for bonded upstream communication on a list for bandwidth management. In some implementations, the periodic basis can represents the polling interval that CPE device bandwidth measurement is performed on. 
     At stage  815 , the CMTS determines if the polling list (e.g., list of CPE devices) is empty. If the polling list is empty the CMTS can wait until a CPE device is added to the list. If the list is not empty the CMTS proceeds to stage  820  for additional processing. 
     At stage  820 , the CMTS can obtain the identification of a CPE device capable of and provisioned for bonded upstream communication from the polling list. At stage  825 , the CMTS measures the bandwidth on one or more upstream channels of the CPE device. 
     At stage  830 , the CMTS can determine if a bandwidth threshold has been met for de-allocating one or more bonded upstream channels. If the bandwidth threshold has not been met for de-allocating one or more bonded upstream channels, the process  800  returns to stage  815 . Alternatively, if the threshold for de-allocating one or more bonded upstream channels has been met, the process  800  proceeds to stage  835 . 
     At stage  835 , the CMTS can determine one or more bonded upstream channels for de-allocation from the CPE device. The CMTS can, but is not limited to, an algorithm of de-activating upstream channels such that the active upstream channels are evenly allocated on the HFC network across the CPE devices. Other approaches can include an algorithm based on historical bandwidth or time of day usage for example. 
     At stage  840 , the CMTS can send a management packet to a CPE device to de-activate one or more bonded upstream channels based on the algorithm at stage  835 . At stage  845 , the CMTS removes the CPE device from the poll list. 
     It should be understood that the initial ranging/registration, station maintenance and channel bonding processes are described in the DOCSIS standards (e.g., DOCSIS 3.0 Physical Layer (PHY) specification and MAC and Upper Layer Protocols Interface (MULPI) specification, each of which are hereby incorporated by reference in their entirety), and are well known in the industry. Thus, this disclosure only describes these processes generally. For a more complete description, reference may be made to the DOCSIS standards 
       FIG. 9  is a block diagram of a controller for a CPE device (e.g., controller  240  of  FIG. 2 ) and for an CMTS device (e.g., controller  330  of  FIG. 3 ). The controller device  900  can include a processor  910 , a memory  920 , a storage device  930 , and an input/output device  940 . The scaling (e.g., processor performance, memory size, storage type and input/output devices) of processor  910 , memory  920 , storage device  930  and input/output device  940  can be different for the CMTS and CPE controllers. Each of the components  910 ,  920 ,  930 , and  940  can, for example, be interconnected using a system bus  990 . The processor  910  is capable of processing instructions for execution within the system  900 . In one implementation, the processor  910  is a single-threaded processor. In another implementation, the processor  910  is a multi-threaded processor. The processor  910  is capable of processing instructions stored in the memory  920  or on the storage device  930 . 
     The memory  920  stores information within the device  900 . In one implementation, the memory  920  is a computer-readable medium. In one implementation, the memory  920  is a volatile memory unit. In another implementation, the memory  920  is a non-volatile memory unit. 
     In some implementations, the storage device  930  is capable of providing mass storage for the device  900 . In one implementation, the storage device  930  is a computer-readable medium. In various different implementations, the storage device  930  can, for example, include a hard disk device, an optical disk device, flash memory or some other large capacity storage device. 
     The input/output device  940  provides input/output operations for the device  900 . In one implementation, the input/output device  940  can include one or more of a wireless interface, HFC network interface, such as, for example, an IP network interface device, e.g., an Ethernet card, a cellular network interface, a serial communication device, e.g., and RS-232 port, and/or a wireless interface device, e.g., and 802.11 card. In another implementation, the input/output device can include driver devices configured to receive input data and send output data to other input/output devices, as well as sending communications to, and receiving communications from various networks. 
     Implementations of the subject matter and the functional operations described in this specification can be provided in digital electronic circuitry, or in computer software, firmware, or hardware, including the structures disclosed in this specification and their structural equivalents, or in combinations of one or more of them. Embodiments of the subject matter described in this specification can be implemented as one or more computer program products, i.e., one or more modules of computer program instructions encoded on a tangible program carrier for execution by, or to control the operation of, data processing apparatus. The tangible program carrier can be a propagated signal or a computer readable medium. The propagated signal is an artificially generated signal, e.g., a machine generated electrical, optical, or electromagnetic signal that is generated to encode information for transmission to suitable receiver apparatus for execution by a computer. The computer readable medium can be a machine readable storage device, a machine readable storage substrate, a memory device, a composition of matter effecting a machine readable propagated signal, or a combination of one or more of them. 
     The term “system processor” encompasses all apparatus, devices, and machines for processing data, including by way of example a programmable processor, a computer, or multiple processors or computers. The system processor can include, in addition to hardware, code that creates an execution environment for the computer program in question, e.g., code that constitutes processor firmware, a protocol stack, a database management system, an operating system, or a combination of one or more of them. 
     A computer program (also known as a program, software, software application, script, or code) can be written in any form of programming language, including compiled or interpreted languages, or declarative or procedural languages, and it can be deployed in any form, including as a stand-alone program or as a module, component, subroutine, or other unit suitable for use in a computing environment. A computer program does not necessarily correspond to a file in a file system. A program can be stored in a portion of a file that holds other programs or data (e.g., one or more scripts stored in a markup language document), in a single file dedicated to the program in question, or in multiple coordinated files (e.g., files that store one or more modules, sub programs, or portions of code). A computer program can be deployed to be executed on one computer or on multiple computers that are located at one site or distributed across multiple sites and interconnected by a communication network. 
     The processes and logic flows described in this specification are performed by one or more programmable processors executing one or more computer programs to perform functions by operating on input data and generating output thereby tying the process to a particular machine (e.g., a machine programmed to perform the processes described herein). The processes and logic flows can also be performed by, and apparatus can also be implemented as, special purpose logic circuitry, e.g., an FPGA (field programmable gate array) or an ASIC (application specific integrated circuit). 
     Processors suitable for the execution of a computer program include, by way of example, both general and special purpose microprocessors (general microprocessors being transformed into special purpose microprocessor through the application of algorithms described herein), and any one or more processors of any kind of digital computer. Generally, a processor will receive instructions and data from a read only memory, flash memory or a random access memory or all. The elements of a computer typically include a processor for performing instructions and one or more memory devices for storing instructions and data. Generally, a computer will also include, or be operatively coupled to receive data from or transfer data to, or both, one or more mass storage devices for storing data, e.g., magnetic, magneto optical disks, or optical disks. However, a computer need not have such devices. Moreover, a computer can be embedded in another device, e.g., a mobile communications device, a telephone, a cable modem, a set-top box, a mobile audio or video player, or a game console, to name just a few. 
     Computer readable media suitable for storing computer program instructions and data include all forms of non volatile memory, media and memory devices, including by way of example semiconductor memory devices, e.g., EPROM, EEPROM, and flash memory devices; magnetic disks, e.g., internal hard disks or removable disks; magneto optical disks; and CD ROM and DVD ROM disks. The processor and the memory can be supplemented by, or incorporated in, special purpose logic circuitry. 
     To provide for interaction with a user, embodiments of the subject matter described in this specification can be operable to interface with a computing device having a display, e.g., a CRT (cathode ray tube) or LCD (liquid crystal display) monitor, for displaying information to the user and a keyboard and a pointing device, e.g., a mouse or a trackball, by which the user can provide input to the computer. Other kinds of devices can be used to provide for interaction with a user as well; for example, feedback provided to the user can be any form of sensory feedback, e.g., visual feedback, auditory feedback, or tactile feedback; and input from the user can be received in any form, including acoustic, speech, or tactile input. 
     While this specification contains many specific implementation details, these should not be construed as limitations on the scope of any invention or of what may be claimed, but rather as descriptions of features that may be specific to particular embodiments of particular inventions. Certain features that are described in this specification in the context of separate embodiments can also be implemented in combination in a single embodiment. Conversely, various features that are described in the context of a single embodiment can also be implemented in multiple embodiments separately or in any suitable subcombination. Moreover, although features may be described above as acting in certain combinations and even initially claimed as such, one or more features from a claimed combination can in some cases be excised from the combination, and the claimed combination may be directed to a subcombination or variation of a subcombination. 
     Similarly, while operations are depicted in the drawings in a particular order, this should not be understood as requiring that such operations be performed in the particular order shown or in sequential order, or that all illustrated operations be performed, to achieve desirable results. In certain circumstances, multitasking and parallel processing may be advantageous. Moreover, the separation of various system components in the embodiments described above should not be understood as requiring such separation in all embodiments, and it should be understood that the described program components and systems can generally be integrated together in a single software product or packaged into multiple software products. 
     Particular embodiments of the subject matter described in this specification have been described. Other embodiments are within the scope of the following claims. For example, the actions recited in the claims can be performed in a different order and still achieve desirable results, unless expressly noted otherwise. As one example, the processes depicted in the accompanying figures do not necessarily require the particular order shown, or sequential order, to achieve desirable results. In some implementations, multitasking and parallel processing may be advantageous.