Patent Description:
This disclosure generally relates to medical devices, and more specifically, electrical stimulation.

Medical devices (e.g., an implantable medical device or an external medical device) may include electrical stimulation devices, drug pumps, insulin pumps, or cardiac stimulation devices. Electrical stimulation devices, for example, neurostimulators or neurostimulation devices, may be external to or implanted within a patient, and configured to deliver electrical stimulation therapy to various tissue sites to treat a variety of symptoms or conditions such as chronic pain, tremor, Parkinson's disease, epilepsy, or other neurological disorders, urinary or fecal incontinence, sexual dysfunction, obesity, or gastroparesis. An electrical stimulation device may deliver electrical stimulation therapy via electrodes, e.g., carried by one or more leads, positioned proximate to target locations associated with the brain, the spinal cord, pelvic nerves, tibial nerves, peripheral nerves, the gastrointestinal tract, or elsewhere within a patient. Stimulation proximate the spinal cord, proximate the sacral nerve, within the brain, and proximate peripheral nerves is often referred to as spinal cord stimulation (SCS), sacral neuromodulation (SNM), deep brain stimulation (DBS), and peripheral nerve stimulation (PNS), respectively. Document <CIT> relates to parameter adjustments of an implantable pacemaker.

The invention is defined by the appended claims and relates to a system and a computer-readable storage medium. The method described herein is useful to understand the invention. In general, the disclosure describes techniques for programming medical devices, such as implantable medical devices, to apply selected program stimulation parameters (e.g., neurostimulation parameters). For example, the techniques may include techniques for programming medical devices to apply selected stimulation parameters or stimulation parameter adjustments. In some examples, the techniques may be used to manually, automatically or semi-automatically select one or more stimulation parameters such as, for example, electrode selections, combinations and polarities, stimulation amplitude, pulse width, pulse rate, or cycling, adjustments to such parameters, and/or programs specifying such parameters, for delivery of stimulation by a medical device, such as, for example, an implantable medical device (IMD).

The techniques of this disclosure, in some examples, include a system configured to receive an updated program or group of programs indicating selections of a plurality of stimulation parameters. For example, the system may generate difference information based on a comparison of the updated program and an existing program configured at a medical device. For example, if the updated program only changes a polarity for a set of electrodes, the system may generate the difference information to indicate the polarity for the set of electrodes and omit other stimulation parameters. The system configures the medical device with the updated program using the difference information, which may configure the medical device with the updated program in less time than systems that configure the medical device with the entire updated program.

In this way, system may respond to a change in patient activity (e.g., sitting down, standing up, or initiating a bodily function) faster than systems that rely on sending a complete group or program (e.g., a complete set of stimulation parameters), which may improve a therapy provided to the patient. Moreover, transmitting the difference information instead of the updated program may reduce an amount of data transmitted to the medical device, which may reduce power consumption of the medical device. Reducing the power consumption of the medical device may increase the longevity of a primary battery of the medical device, or reduce a number of times a rechargeable battery of the medical device is discharged and charged in a period of time, which may increase an amount of time that the medical device may be used for a patient. Increasing an amount of time that the medical device may be used may improve a therapy for a patient, particularly when the medical device is an implanted device. Further, reducing the power consumption of the medical device may reduce an amount of time that a patient may spend charging the medical device, which may improve patient satisfaction. Moreover, reducing the amount of data transmitted to the medical device may help to provide a failsafe operation that is more reliable and less likely to be impacted by packet drops, data corruption, and a reduction or loss of connectivity compared to systems that rely on sending a complete group or program (e.g., a complete set of neurostimulation parameters).

The techniques of this disclosure, in some examples, include a system configured to store a data structure (e.g., a table) group of programs in an external programmer to allow a selection of a group or program from one or more pre-stored groups of programs for programming of a medical device (e.g., an implantable neurostimulation device). For example, a remote server or remote client may "pre-prepare" an external programmer with a data structure of groups of programs (e.g., tens, hundreds, or thousands of groups of programs). For instance, the pre-stored groups of programs may be configured to provide broad therapy for one or more diseases, disorders or injuries. After pre-preparing the external programmer with the pre-stored groups of programs, the remote server or remote client (e.g., with an algorithm, responsive to input form a health provider, etc.) may select a group from the stored group stored at an external programmer.

In this example, rather than transmitting the entire set of stimulation parameters for one or more programs in the selected group, the remote server or remote client may transmit an indication of a selected group of programs (e.g., an identifier for the selected group) that is present among the pre-stored groups in a local, external programmer. In this example, the external programmer may configure the medical device using the indication of the selected group of programs of the pre-stored groups. In this way, system may respond to a change in a patient activity (e.g., sitting down, standing up, or initiating a bodily function) faster than systems that rely on sending a complete group or program (e.g., a complete set of neurostimulation parameters), which may improve a therapy provided to the patient. Moreover, transmitting the indication of the selected group of programs may reduce an amount of data transmitted to the medical device, which may reduce power consumption of the medical device. Reducing the power consumption of the medical device may reduce a number of times a battery of the medical device is discharged and charged in a period of time, which may increase an amount of time that the medical device may be used for a patient. Increasing an amount of time that the medical device may be used, may improve a therapy for a patient, particularly when the medical device is an implanted device. Further, reducing the power consumption of the medical device may reduce an amount of time that a patient may spend charging the medical device, which may improve patient satisfaction. Moreover, reducing the amount of data transmitted to the medical device may help to provide a failsafe operation that is more reliable and less likely to be impacted by packet drops, data corruption, and a reduction or loss of connectivity compared to systems that rely on sending a complete group or program (e.g., a complete set of neurostimulation parameters).

In one example a method for providing stimulation to a patient includes receiving, by processing circuitry, an updated program indicating a plurality of stimulation parameters to configure a medical device to apply the stimulation to the patient and generating, by the processing circuitry, difference information based on one or more differences between an existing program and the updated program. The method further comprises outputting, by the processing circuitry, the difference information to configure the medical device to apply stimulation to the patient with the plurality of stimulation parameters.

In another example, a method for providing stimulation to a patient includes receiving, by processing circuitry of an external programmer, difference information indicating a subset of a plurality of stimulation parameters to apply the stimulation to the patient and determining, by the processing circuitry, an updated program indicating the plurality of stimulation parameters based on an existing program and the difference information. The method further includes causing, by the processing circuitry, the medical device to apply the updated program to configure the medical device to apply stimulation to the patient with the plurality of stimulation parameters.

In one example, a method for providing stimulation to a patient includes receiving, by processing circuitry, a selected group of programs, each program of the selected group of programs indicating a plurality of stimulation parameters for configuring a medical device to apply the stimulation to the patient and generating, by the processing circuitry, a group identifier identifying the selected group of programs in pre-stored groups of programs. The method further includes outputting, by the processing circuitry, the group identifier to configure the medical device to apply the stimulation to the patient with the selected group of programs.

In another example, a method for providing stimulation to a patient includes receiving, by processing circuitry, a group identifier identifying an selected group of programs in pre-stored groups of programs, each program of the selected group of programs indicating a plurality of stimulation parameters for configuring a medical device to apply the stimulation to the patient and determining, by the processing circuitry, the selected group of programs based on the pre-stored groups of programs and the group identifier. The method further includes outputting, by the processing circuitry, an indication of the selected group of programs to the medical device to configure the medical device to apply the stimulation to the patient with the selected group of programs.

In one example, a computer-readable storage medium includes instructions that when executed cause one or more processors to receive an updated program indicating a plurality of stimulation parameters to configure a medical device to apply the stimulation to the patient and generate difference information based on one or more differences between an existing program and the updated program. The instructions further cause the one or more processors to output the difference information to configure the medical device to apply stimulation to the patient with the plurality of stimulation parameters.

In another example, a method for providing stimulation to a patient includes receiving, by processing circuitry, an updated program indicating a plurality of stimulation parameters to configure a medical device to apply the stimulation to the patient and generating, by the processing circuitry, difference information based on one or more differences between an existing program and the updated program. The method further comprises outputting, by the processing circuitry, the difference information to configure the medical device to apply stimulation to the patient with the plurality of stimulation parameters.

Efficacy of stimulation (e.g., neurostimulation) in eliminating or alleviating symptoms, preventing or delaying onset or progression of aspects of, or restoring functions impaired or diminished by a disease, disorder, syndrome or injury, may vary according to the parameters used to deliver the stimulation to a patient. Selection of electrode positions relative to a neural target, as one example, can elicit a desired response to the stimulation. Delivering stimulation with different stimulation parameters, such as different electrodes, electrode combinations and/or polarities, or different stimulation amplitudes, pulse widths, pulse rates, or cycling can result in differences in efficacy for a variety of therapies such as, for example, spinal cord stimulation (SCS) to relieve pain or restore physical function or control in the case of spinal cord injury or degeneration.

A medical device may deliver stimulation to a patient using one or more "programs," where each program may indicate one or more stimulation parameters such as, for example, electrode selections, combinations and polarities, stimulation amplitude, pulse width, pulse rate, or cycling, adjustments to such parameters, and/or programs specifying such parameters, for delivery of stimulation by a medical device, such as, for example, an implantable medical device (IMD). For example, the medical device may store N groups of programs, each providing M programs defining different sets of stimulation parameters, wherein N and M may be the same or different. In one example, the medical device may have N = <NUM> groups and each group may include up to M = <NUM> programs. For example, within a group of programs, a first program may provide a therapy for leg pain, a second program may provide a first therapy for back pain, and a third program may provide a second therapy for the back pain. In this example, the medical device may provide stimulation using both the first program and one of the second program or the third program. In this way, a single medical device may provide therapy for multiple symptoms (e.g., leg pain and back pain). In some examples, a medical device may deliver therapy according to a plurality of programs in a group of programs, e.g., on a time-interleaved basis with one another.

An external programmer may configure a medical device with different groups of programs, and different programs within a group of programs. For example, a patient, caretake, or health professional may generate, with the external programmer, a new program or program group to improve a therapy. In this example, the external programmer may configure the medical device with new program(s) and set the stimulation to apply the new program(s) to provide stimulation to provide the improved therapy to the patient. In some examples, the external programmer may be configured to automatically or semi-automatically generate the new program to improve therapy, e.g., in response to an event, such as a sensed condition. For example, in response to a change from a first activity (e.g., a patient sitting) to a second activity (e.g., walking), the external programmer may generate a new program that may provide more effective therapy (e.g., pain management) for the second activity than the existing program. In this way, the medical device may be modified or customized, for example, after being implanted into the patient.

A remote device (e.g., a remote server and/or a remote client) may configure the programming of the medical device. For example, a health professional may remotely or locally generate a new program or programs to improve therapy and transmit (e.g., using the Internet and/or a wireless connection) the new program(s) to the external programmer, e.g., individually or part of a group of programs. In some examples, the remote device may be configured to automatically or semi-automatically generate the new program to improve therapy, e.g., in response to an event, such as a sensed condition. For example, in response to a change from a first activity (e.g., a patient sitting) to a second activity (e.g., walking), the remote device may generate a new program that may provide more effective therapy (e.g., pain management) for the second activity than the existing program. In this example, the external programmer may configure the medical device with the new program(s) and set the medical device to apply the new program(s) to provide stimulation to provide the improved therapy to the patient. In this way, the medical device may be configured to automatically or semi-automatically (e.g., with a user input) program the medical device, which may reduce a delay in providing an updated or improved therapy compared to systems that may rely only changes provided by a health professional.

To allow communication for a remote device (e.g., a remote server and/or a remote client), some systems may output the updated program to an external programmer. For example, the remote device may output a value for each one of the stimulation parameters of the updated program. Once all of the values for the stimulation parameters are received, the external programmer may configure the medical device with the new program and set the stimulation to apply the new program to provide stimulation to provide the improved therapy to the patient. For example, in response for a change from a first activity (e.g., a patient sitting) to a second activity (e.g., walking), the remote device may generate a new program that may provide more effective therapy (e.g., pain management). In this example, transmitting all of the stimulation parameters may occur significantly after the patient has performed the second activity, which may result in ineffective treatment (e.g., pain).

The techniques of this disclosure include a system configured to receive an updated program indicating selections of a plurality of stimulation parameters or an updated group of programs. For example, the system (e.g., using an application programming interface (API)) may generate difference information based on a comparison of the updated program and an existing program configured at a medical device or the update group of programs and an existing group of programs configured at the medical device. For example, if the updated program or updated group of programs changes only a polarity for a set of electrodes for the existing program or one program in a group of programs, the system may generate the difference information to indicate the polarity for the set of electrodes and omit other stimulation parameters of the existing program and/or of other programs of the group of programs. The system may configure the medical device with the updated program using the difference information. Configuring the medical device with the updated program using the difference information may configure the medical device with the updated program or an updated group of programs in less time than systems that configure the medical device with the entire updated program or entire updated group of programs because the medical device may partially overwrite a portion of the program or group of programs based on the difference information identified by the comparison rather than overwriting the entire program or group of programs. In this way, system may respond to a patient activity (e.g., sitting down, standing up, or initiating a bodily function) faster than systems that rely on sending a complete set of stimulation parameters, which may improve a therapy provided to the patient. For instance, rather than a system to take a relatively long time (e.g., <NUM> seconds) to accommodate a change in patient activity (e.g., sitting to walking), techniques described herein for using difference information may permit the system to accommodate the change in patient activity in a relatively short amount of time (e.g., sub-second).

Moreover, transmitting the difference information instead of the updated program may reduce an amount of data transmitted to the medical device, which may reduce a power consumption of the medical device. Reducing the power consumption of the medical device may increase the longevity of a primary battery of the medical device, or reduce a number of times a rechargeable battery of the medical device is discharged and charged in a period of time, which may increase an amount of time that the medical device may be used for a patient. Increasing an amount of time that the medical device may be used may improve a therapy for a patient, particularly when the medical device is an implanted device. Further, reducing the power consumption of the medical device may reduce an amount of time that a patient may spend charging the medical device, which may improve patient satisfaction. Moreover, reducing the amount of data transmitted to the medical device may help to provide a failsafe operation that is more reliable and less likely to be impacted by packet drops, data corruption, and a reduction or loss of connectivity compared to systems that rely on sending a complete group or program (e.g., a complete set of neurostimulation parameters).

Additionally, or alternatively, the techniques of this disclosure include a system configured to use a pre-stored groups of programs stored by an external programmer to allow a selection of a program. As used herein a program may refer to a set of stimulation parameters for treatment. For example, a first program may include a first set of stimulation parameters for treatment of back pain while a patient is standing and a second program may include a second set of stimulation parameters for back pain while the patient is lying down. A program may include a set of stimulation parameters that includes, for example, one or more electrode selections, one or more selections of one or more electrode polarities, one or more stimulation amplitude values, one or more pulse width value, one or more pulse rate values, one or more cycling values, or another stimulation parameter. In contrast, a group of programs may include a plurality of programs configured to be used together (e.g., used one at a time on an interleaved basis and/or used simultaneously). For example, a first group of programs may include a first program for treatment of back pain when a patient is standing and a second program for neck pain when the patient is standing. In this example, a second group may include a third program for treatment of back pain when the patient is standing and a fourth program for neck pain when the patient is standing. In some examples described herein, each group may include two, three, or four programs. However, in some examples a group may include two, three, four, five, or more than five programs.

For example, a remote device (e.g., a remote server or remote client) may "pre-prepare" an external programmer with a data structure (e.g., a table) of pre-stored groups of programs (e.g., tens, hundreds, or thousands of groups of programs). For instance, the pre-stored groups of programs may be configured to provide broad therapy for one or more diseases. After pre-preparing the external programmer with the pre-stored groups of programs, the remote device (e.g., with an algorithm, responsive to input form a health provider, etc.) may select a group from the pre-stored groups of programs stored at an external programmer. In this example, rather than transmitting the entire set of stimulation parameters for the selected group, the remote server or remote client may transmit an indication of the selected group (e.g., an identifier for the selected group). In this example, the external programmer may then configure the medical device using the indication of the selected group and the pre-stored groups of programs. For example, the external programmer may determine, with an API, stimulation parameters for the selected group, and transmit an indication of the stimulation parameters for the selected group to the medical device. For instance, the external programmer may transmit the entire set of stimulation parameters for each program of the selected group of programs, the entire set of stimulation parameters for each program of the selected group that is changed from an existing group configured at the medical device, one or more stimulation parameters that are changed from the existing group configured at the medical device. In this way, system may respond to a patient activity (e.g., standing up) faster than systems that rely on sending a complete set of stimulation parameters, e.g., across a network, which may improve a therapy provided to the patient.

Moreover, transmitting the indication of the selected group of programs instead of the complete set of stimulation parameters for the selected group of programs may reduce an amount of data transmitted to the medical device, which may reduce a power consumption of the medical device. Reducing the power consumption of the medical device may increase the longevity of a primary battery of the medical device, or reduce a number of times a rechargeable battery of the medical device is discharged and charged in a period of time, which may increase an amount of time that the medical device may be used for a patient. Increasing an amount of time that the medical device may be used may improve a therapy for a patient, particularly when the medical device is an implanted device. Further, reducing the power consumption of the medical device may reduce an amount of time that a patient may spend charging the medical device, which may improve patient satisfaction. Moreover, reducing the amount of data transmitted to the medical device may help to provide a failsafe operation that is more reliable and less likely to be impacted by packet drops, data corruption, and a reduction or loss of connectivity compared to systems that rely on sending a complete group or program (e.g., a complete set of neurostimulation parameters).

Techniques described herein may be directed to implantable medical devices and external medical devices. Examples described herein may describe techniques with reference to medical devices, however, aspects of such techniques may apply to any medical device. Again, examples of medical devices, which may be external or implantable), may include drug pumps, insulin pumps, or cardiac stimulation devices, to the extent such medical devices benefit from receiving: (a) a delta write rather than an entire group overwrite; or (b) a group or delta write based on remote selection of one of a plurality of groups stored locally on an external programmer.

<FIG> is a conceptual diagram illustrating an example system <NUM> that includes an implantable medical device (IMD) <NUM> configured to deliver spinal cord stimulation (SCS) therapy, processing circuitry <NUM>, and an external programmer <NUM>, in accordance with one or more examples of this disclosure. Although the examples described in this disclosure are generally applicable to a variety of medical devices including external devices and IMDs, application of such techniques to IMDs and, more particularly, implantable electrical stimulators (e.g., neurostimulators) will be described for purposes of illustration. More particularly, the disclosure will refer to an implantable SCS system for purposes of illustration, but without limitation as to other types of medical devices or other therapeutic applications of stimulation.

IMD <NUM> may be configured to provide therapy (e.g., neurostimulation) using a group of programs. As used herein, a group of programs may refer to one or more programs. In some examples, a plurality of programs of a group may be applied simultaneously. In other examples, programs of the group may be applied at different times (e.g., on a time-interleaved basis). As described further herein, external programmer <NUM> may program IMD <NUM> using difference information. Additionally, or alternatively, external programmer <NUM> may store a pre-stored group of a groups of programs to allow a selection of a program.

As shown in <FIG>, system <NUM> includes an IMD <NUM>, leads 130A and 130B, and external programmer <NUM> shown in conjunction with a patient <NUM>, who is ordinarily a human patient. In the example of <FIG>, IMD <NUM> is an implantable electrical stimulator that is configured to generate and deliver electrical stimulation therapy to patient <NUM>, e.g., for relief of chronic pain or other symptoms, or restoration or support of physical function or control in the case of spinal cord injury or degeneration, via one or more electrodes 132A, 132B of leads 130A and/or 130B, respectively. In the example of <FIG>, each lead 130A, 130B includes eight electrodes 132A, 132B respectively, although the leads may each have a different number of electrodes. Leads 130A, 130B may be referred to collectively as "leads <NUM>" and electrodes 132A, 132B may be referred to collectively as electrodes <NUM>. In other examples, IMD <NUM> may be coupled to a single lead carrying multiple electrodes or more than two leads each carrying multiple electrodes.

IMD <NUM> may be a chronic electrical stimulator that remains implanted within patient <NUM> for weeks, months, or years. In other examples, IMD <NUM> may be a temporary, or trial, stimulator used to screen or evaluate the efficacy of electrical stimulation for chronic therapy. In one example, IMD <NUM> is implanted within patient <NUM>, while in another example, IMD <NUM> is an external device coupled to one or more leads percutaneously implanted within the patient. In some examples, IMD <NUM> uses electrodes on one or more leads, while in other examples, IMD <NUM> use one or more electrodes on a lead or leads and one of more electrodes on a housing of the IMD. In further examples, IMD <NUM> may be leadless and instead use only electrodes carried on a housing of IMD.

IMD <NUM> may be constructed of any polymer, metal, or composite material sufficient to house the components of IMD <NUM> (e.g., components illustrated in <FIG>) within patient <NUM>. In this example, IMD <NUM> may be constructed with a biocompatible housing, such as titanium or stainless steel, or a polymeric material such as silicone, polyurethane, or a liquid crystal polymer, and surgically implanted at a site in patient <NUM> near the pelvis, abdomen, or buttocks. In other examples, IMD <NUM> may be implanted at other suitable sites within patient <NUM>, which may depend, for example, on the target site within patient <NUM> for the delivery of electrical stimulation therapy. The outer housing of IMD <NUM> may be configured to provide a hermetic seal for components, such as a rechargeable or non-rechargeable power source. In addition, in some examples, the outer housing of IMD <NUM> is selected from a material that facilitates receiving energy to charge the rechargeable power source.

In the example of <FIG>, electrical stimulation energy, which may be delivered as regulated current or regulated voltage-based pulses, is delivered from IMD <NUM> to one or more target tissue sites of patient <NUM> via leads <NUM> and electrodes <NUM>. Leads <NUM> position electrodes <NUM> adjacent to target tissue of spinal cord <NUM>. One or more of the electrodes <NUM> may be disposed at a distal tip of a lead <NUM> and/or at other positions at intermediate points along the lead. Leads <NUM> may be implanted and coupled to IMD <NUM>. The electrodes <NUM> may transfer electrical stimulation generated by an electrical stimulation generator in IMD <NUM> to tissue of patient <NUM>. Although leads <NUM> may each be a single lead, a lead <NUM> may include a lead extension or other segments that may aid in implantation or positioning of lead <NUM>.

The electrodes of leads <NUM> may be electrode pads on a paddle lead, circular (e.g., ring) electrodes surrounding the body of the lead, conformable electrodes, cuff electrodes, segmented electrodes (e.g., electrodes disposed at different circumferential positions around the lead instead of a continuous ring electrode), any combination thereof (e.g., ring electrodes and segmented electrodes) or any other type of electrodes capable of forming unipolar, bipolar or multipolar electrode combinations for therapy. Ring electrodes arranged at different axial positions at the distal ends of lead <NUM> will be described for purposes of illustration. Deployment of electrodes via leads <NUM> is described for purposes of illustration, but electrodes may be arranged on a housing of IMD <NUM>, e.g., in rows and/or columns (or other arrays or patterns), as surface electrodes, ring electrodes, or protrusions.

Stimulation parameters defining the electrical stimulation pulses delivered by IMD <NUM> through electrodes <NUM> of leads <NUM> may include information identifying which electrodes have been selected for delivery of the stimulation pulses according to a stimulation program and the polarities of the selected electrodes (the electrode combination), and voltage or current amplitude, pulse rate (e.g., frequency), and pulse width of the stimulation pulses. The stimulation parameters may further include a cycle parameter that specifies when, or how long, stimulation is turned on and off. Stimulation parameters may be programmed prior to delivery of the stimulation pulses, manually adjusted based on user input, or automatically controlled during delivery of the stimulation pulses, e.g., based on sensed conditions.

Although the example of <FIG> is directed to SCS therapy, e.g., to treat pain or restore or support physical function or control in the case of spinal cord injury or degeneration, in other examples, system <NUM> may be configured to treat other conditions that may benefit from stimulation therapy. For example, system <NUM> may be used to treat tremor, Parkinson's disease, epilepsy, or other neurological disorders, urinary or fecal incontinence, sexual dysfunction, obesity, or gastroparesis, or psychiatric disorders such as depression, mania, obsessive compulsive disorder, or anxiety disorders. Hence, in some examples, system <NUM> may be configured to deliver sacral neuromodulation (SNM), deep brain stimulation (DBS), peripheral nerve stimulation (PNS), or other stimulation, such as peripheral nerve field stimulation (PNFS), cortical stimulation (CS), gastrointestinal stimulation, or any other stimulation therapy capable of treating a condition of patient <NUM>.

Leads <NUM> may include, in some examples, one or more sensors configured to sense one or more physiological parameters of patient <NUM>, such as patient activity, pressure, temperature, or other characteristics. At least some of electrodes <NUM> may be used to sense electrical signals within patient <NUM>, additionally or alternatively to delivering stimulation. IMD <NUM> is configured to deliver electrical stimulation therapy to patient <NUM> via selected combinations of electrodes carried by one or both of leads <NUM>, alone or in combination with an electrode carried by or defined by an outer housing of IMD <NUM>. The target tissue for the electrical stimulation therapy may be any tissue affected by electrical stimulation. In some examples, the target tissue includes nerves, smooth muscle or skeletal muscle. In the example illustrated by <FIG>, the target tissue is tissue proximate spinal cord <NUM>, such as within an intrathecal space or epidural space of spinal cord <NUM>, or, in some examples, adjacent nerves that branch off spinal cord <NUM>. Leads <NUM> may be introduced into spinal cord <NUM> in via any suitable region, such as the thoracic, cervical or lumbar regions.

Stimulation of spinal cord <NUM> may, for example, prevent pain signals from traveling through spinal cord <NUM> and to the brain of patient <NUM>. Patient <NUM> may perceive the interruption of pain signals as a reduction in pain and, therefore, efficacious therapy results. In other examples, stimulation of spinal cord <NUM> may produce paresthesia which may reduce the perception of pain by patient <NUM>, and thus, provide efficacious therapy results. In some examples, some electrical stimulation pulses may be directed to glial cells while other electrical stimulation (e.g., delivered by a different electrode combination) is directed to neurons. In other examples, electrical stimulation pulses may be directed to restore a function lost due to a spinal cord injury.

IMD <NUM> may generate and may deliver electrical stimulation therapy to a target stimulation site within patient <NUM> via the electrodes of leads <NUM> to patient <NUM> according to one or more therapy stimulation programs. A therapy stimulation program specifies values for one or more parameters that define an aspect of the therapy delivered by IMD <NUM> according to that program. For example, a therapy stimulation program that controls delivery of stimulation by IMD <NUM> in the form of stimulation pulses may define values for voltage or current pulse amplitude, pulse width, and pulse rate (e.g., pulse frequency) for stimulation pulses delivered by IMD <NUM> according to that program, as well as the particular electrodes and polarities forming an electrode combination used to deliver the stimulation pulses.

A user, such as a clinician, caretaker, or patient <NUM>, may interact with a user interface of an external programmer <NUM> to program IMD <NUM>. External programmer <NUM> may represent a physician programmer or patient programmer. In some examples, techniques described herein for using difference information and/or using a selection of a group of programs from pre-stored groups of programs may include communication between one or more physician programmers (or remote programming interfaces) and one or more patient programmers. Programming of IMD <NUM> may refer generally to the generation and transfer of commands, programs, or other information to control the operation of IMD <NUM>. In this manner, IMD <NUM> may receive the transferred commands and programs from external programmer <NUM> to control electrical stimulation therapy.

External programmer <NUM> may transmit therapy stimulation programs, program groups, stimulation parameter adjustments, therapy stimulation program selections, user input, or other information to control the operation of IMD <NUM>, e.g., by wireless telemetry or wired connection. For example, external programmer <NUM> may configure a complete group or program overwrite. For instance, external programmer <NUM> may configure IMD <NUM> with a group of programs (e.g., Group A') that is completely different from a set of programs configured at IMD <NUM> (e.g., Group A). In some instances, external programmer <NUM> may configure IMD <NUM> with a program (e.g., Program I' of Group B) that is completely different from a set of programs configured at IMD <NUM> (e.g., Program I of Group B).

External programmer <NUM> may perform a stimulation parameter adjustment that changes a set of stimulation parameters of an existing program. For example, external programmer <NUM> may automatically, semi-automatically, or based on a user selection, may determine or more stimulation parameter adjustments for an existing program. In this example, external programmer <NUM> may pass through the one or more parameter adjustments for the existing program. For instance, external programmer <NUM> may determine a parameter adjustment (e.g., receive the adjustment from a user input from a health professional) that sets an intensity value of a particular stimulation parameter of program I of Group A and may relay the parameter adjustment to IMD <NUM>.

Rather than relying on a determination of one or more stimulation parameter adjustments for the existing program (e.g., from a healthcare processional) and passing through the set of parameter adjustments, techniques described herein may configure external programmer <NUM> to compare an existing program and an updated program to determine difference information. In some examples, external programmer <NUM> may output the updated program to an API executed by external programmer <NUM>, which may cause external programmer <NUM> to compare the existing program and an updated program to determine difference information and to output the difference information to IMD <NUM>. For instance, external programmer <NUM> may receive a program (e.g., new program IV of Group A) to be applied to patient <NUM>. In this example, external programmer <NUM>, with an API executed by external programmer <NUM>, may compare the received program with an existing program (e.g., existing program IV of Group A, existing program V of Group A, etc.) to determine difference information and output the difference information instead of the complete set of parameters for the received program. In this way, an amount of data to be sent to IMD <NUM> to implement a received program may be reduced without relying on a user (e.g., a physician or clinician) or a device (e.g., external programmer <NUM>) to identify an existing program to be modified.

External programmer <NUM> may be characterized as a physician or clinician programmer if external programmer <NUM> is primarily intended for use by a physician or clinician. In other cases, external programmer <NUM> may be characterized as a patient programmer if external programmer <NUM> is primarily intended for use by a patient. A patient programmer may be generally accessible to patient <NUM> and, in many cases, may be a portable device that may accompany patient <NUM> throughout the patient's daily routine. For example, a patient programmer may receive input from patient <NUM> when the patient wishes to terminate or change stimulation therapy. In general, a physician or clinician programmer may support selection and generation of programs by a clinician for use by IMD <NUM>, whereas a patient programmer may support adjustment and selection of such programs by a patient during ordinary use. In other examples, external programmer <NUM> may include, or be part of, an external charging device that recharges a power source of IMD <NUM>. In this manner, a user may program and charge IMD <NUM> using one device, or multiple devices.

IMD <NUM> and external programmer <NUM> may exchange information and may communicate via wireless communication using any techniques known in the art. Examples of communication techniques may include, for example, radiofrequency (RF) telemetry and inductive coupling, but other techniques are also contemplated. In some examples, external programmer <NUM> includes a communication head that may be placed proximate to the patient's body near the IMD <NUM> implant site to improve the quality or security of communication between IMD <NUM> and external programmer <NUM>. Communication between external programmer <NUM> and IMD <NUM> may occur during power transmission or separate from power transmission.

IMD <NUM>, in response to commands from external programmer <NUM>, may deliver electrical stimulation therapy according to one or more therapy stimulation programs, or a group of programs to a target tissue site of the spinal cord <NUM> of patient <NUM> via electrodes <NUM> on leads <NUM>. In some examples, IMD <NUM> automatically modifies therapy stimulation programs as therapy needs of patient <NUM> evolve over time. For example, the modification of the therapy stimulation groups or programs may cause the adjustment of at least one parameter of the plurality of stimulation pulses.

In accordance with the techniques of the disclosure, external programmer <NUM> may be configured to use difference information. For example, external programmer <NUM>, with an API, may receive difference information indicating a subset of a plurality of stimulation parameters to control delivery of the stimulation to the patient. In this example, external programmer <NUM> (e.g., a local programmer or a remote programmer) may determine an updated program or an updated group of programs indicating the plurality of stimulation parameters, and generate difference information based on a difference or differences between stimulation parameters of the updated program and stimulation parameters of an existing program or between stimulation parameters of an updated group of programs and an existing group of programs. External programmer <NUM> may communicate the difference information to IMD <NUM> to cause IMD <NUM> to apply the stimulation parameters for the updated program or the updated group of programs without communicating the entire update program. Again, the updated program or group of programs could be specified by user input at the local programmer or remote programmer, or selected automatically by the local programmer or remote programmer in response to patient input (e.g., a need to void, or an intention to stand up) or sensor input (e.g., an accelerometer indicates patient <NUM> is standing up).

IMD <NUM> may use the difference information to update one or more stimulation parameters of an existing program or existing group stored in the IMD and configure delivery of stimulation to patient <NUM> with the plurality of stimulation parameters defined by the updated program or updated group of programs. Hence, in some examples, external programmer <NUM> may transmit only the difference information to IMD <NUM>, and not the entire updated group or program, so that IMD <NUM> may partially modify the existing group using the difference information to conform to the updated group. In the above example, instead of external programmer <NUM> outputting the plurality of stimulation parameters (e.g., a complete set of stimulation parameters for the updated program) to IMD <NUM> may stimulation parameters output the difference information to IMD <NUM>.

For example, external programmer <NUM>, with an API, may generate the difference information based on a comparison of an updated program (e.g., received from a remote device) and an existing program configured at IMD <NUM>. For example, if the updated program only changes a polarity for a set of electrodes, external programmer <NUM> (or another device of system <NUM>) may generate and communicated to IMD <NUM> the difference information to indicate the polarity for the set of electrodes and omit other stimulation parameters in the information that is communicated to IMD <NUM>. External programmer <NUM> may configure IMD <NUM> with the updated program using the difference information, which may configure IMD <NUM> with the updated program in less time than systems that configure the medical device with communication of the entire updated program. For example, IMD <NUM> may generate stimulation parameters for an updated program using difference information and an existing program stored by IMD <NUM>. For example, IMD <NUM> may generate the stimulation parameters for the updated program that matches the existing program with changes specified by the difference information.

Additionally, or alternatively, techniques of the disclosure may use a data structure (e.g., a table) group of programs in external programmer <NUM> to allow a selection of a group or program from one or more pre-stored groups of programs for programming of IMD <NUM>. For example, a remote server or remote client may "pre-prepare" external programmer <NUM> with a data structure of pre-configured groups of programs (e.g., tens, hundreds, or thousands of groups of programs). For instance, the pre-stored groups of programs may be configured to provide broad therapy for one or more diseases, disorders, or injuries. After pre-preparing external programmer <NUM> with the pre-stored groups of programs, the remote server or remote client (e.g., with an algorithm, responsive to input form a health provider, etc.) may select a group from the stored group stored at external programmer <NUM>. In this example, rather than transmitting the entire set of stimulation parameters for the selected group, the remote server or remote client may transmit an indication of the selected group (e.g., an identifier for the selected group) that is pre-stored in external programmer <NUM>. In this example, external programmer <NUM> may configure IMD <NUM> using the indication of the selected group and the pre-stored groups of programs. For example, external programmer <NUM> may transmit a complete set of stimulation parameters for one or more programs of the selected group of programs. In response, IMD <NUM> may store the complete set of stimulation parameters for one or more programs of the selected group of programs and apply stimulation to a patient with the complete set of stimulation parameters stored at IMD <NUM> that correspond with the selected group. In some examples, IMD <NUM> may be configured to transmit difference information to the IMD <NUM> for the selected group of programs. In this example, IMD <NUM> may determine, using the difference information, the complete set of stimulation parameters that correspond with the selected group and apply stimulation to a patient with the complete set of stimulation parameters.

Configuring external programmer <NUM> to use difference information determined based on one or more difference between an updated program and an existing program and/or pre-stored groups of programs may improve a performance of IMD <NUM>. For example, IMD <NUM> may be configured with programs in response to a patient activity (e.g., sitting down, standing up, or initiating a bodily function) faster than systems that rely on sending a complete set of stimulation parameters, which may improve a therapy provided to the patient. Again, the updated program or pre-stored groups of programs could be specified by user input at the local programmer or remote programmer, or selected automatically by the local programmer or remote programmer in response to patient input (e.g., a need to void, or an intention to stand up) or sensor input (e.g., an accelerometer indicates patient <NUM> is standing up). For instance, rather than a system taking a relatively long time (e.g., <NUM> seconds) to communicate to an IMD <NUM> a full program or program group to accommodate a change in patient activity (e.g., sitting to walking), techniques described herein for using difference information and/or pre-stored groups of programs may permit the system to accommodate the change in patient activity based on a sensed condition, a user input, or the sensed condition and the user input in a relatively short amount of time (e.g., sub-second).

Furthermore, transmitting the difference information and/or a selection of a group of programs instead of a complete set of stimulation parameters may provide a failsafe and/or fault tolerance to a loss of connectivity in the system. Examples of loss of connectivity may occur between external programmer <NUM> and IMD <NUM>, between external programmer <NUM> and a remote device (e.g., a remote client device or a remote server used for remote programming), or between other devices. For example, transmitting the difference information and/or sending a group identifier may comprise sending less data than sending a complete set of stimulation parameters, which may result in IMD <NUM> being configured with a program in less time. Configuring IMD <NUM> in less time may result in the IMD <NUM> being more fault tolerant to infrequent loss of connectivity in a network or telemetry link.

In some examples, the configuring the pre-stored groups of programs may be atomic. For example, external programmer <NUM> may receive and store an entire data structure (e.g., a table) for the pre-stored groups of programs before configuring IMD <NUM> with a group of the pre-stored groups of programs. For example, external programmer <NUM> and/or IMD <NUM> may continue to provide a patient with a treatment using an initial group of programs while receiving the pre-stored groups of programs. In this example, external programmer <NUM> and/or IMD <NUM> may continue to provide the patient with the treatment using the initial group during a loss of connectivity in the system. When connectivity is restored, external programmer <NUM> may restart the download of the entire pre-stored groups of programs or continue the download of the pre-stored groups of programs to receive the entire pre-stored groups of programs. Once the entire pre-stored groups of programs is received and stored at external programmer <NUM>, external programmer <NUM> may send data or instructions to configured IMD <NUM> to deliver stimulation to provide a patient with a treatment using a group of the pre-stored groups of programs. In this way, IMD <NUM> and/or external programmer <NUM> may be fault tolerant.

More specifically, because the group identifier may be a single command (e.g., an index) rather than a set of stimulation parameters, external programmer <NUM> may fully execute the single command if successfully transmitted or selected by a user. Additionally, external programmer <NUM> may not execute a command to change all stimulation parameters of the pre-stored group of programs if the transmission was unsuccessful. If unsuccessful, a remote device and external programmer <NUM> may attempt to retry to transmit the command to change all stimulation parameters of the pre-stored group of programs. Techniques to use a group identifier may help to avoid partial parameter changes to the patient that could be detrimental to their therapy.

Moreover, transmitting the difference information and/or a selection of a group of programs instead of a complete set of stimulation parameters may reduce an amount of data transmitted to external programmer <NUM> and/or IMD <NUM>, which may reduce a power consumption of external programmer <NUM> and/or IMD <NUM>. Reducing the power consumption of external programmer <NUM> and/or IMD <NUM> may reduce a number of times a battery of external programmer <NUM> and/or IMD <NUM> is discharged and charged in a period of time, which may increase an amount of time that external programmer <NUM> and/or IMD <NUM> may be used for a patient. Increasing an amount of time that IMD <NUM> may be used, may improve a therapy for a patient, particularly because IMD <NUM> is implanted. Further, reducing the power consumption of external programmer <NUM> and/or IMD <NUM> may reduce an amount of time that a patient may spend charging the medical device, which may improve a patient satisfaction.

<FIG> is a block diagram illustrating an example configuration of components of an IMD <NUM>, in accordance with one or more techniques of this disclosure. IMD <NUM> may be an example of IMD <NUM> of <FIG>. In the example shown in <FIG>, IMD <NUM> includes stimulation generation circuitry <NUM>, switch circuitry <NUM>, sensing circuitry <NUM>, telemetry circuitry <NUM>, processing circuitry <NUM>, storage device <NUM>, sensor(s) <NUM>, power source <NUM>, lead 230A carrying electrodes 232A, which may correspond to lead 130B and electrodes 130B of <FIG>, and lead 230B carrying electrodes 232B, which may correspond to lead 130B and electrodes 130B of <FIG>.

In the example shown in <FIG>, storage device <NUM> stores N number of groups 242A-242N (collectively, groups <NUM>), where each group of groups <NUM> may include M number of programs 244A-<NUM> (collectively, programs <NUM>). In some examples, groups <NUM> may include a different number of programs. In some examples, programs <NUM> of groups <NUM> may include stimulation parameter values (sometimes referred to as "sets of therapy parameters") for respective different stimulation programs selectable by the clinician or patient for therapy. In this manner, each stored therapy stimulation program, or set of stimulation parameter values, of programs <NUM> of groups <NUM> defines values for a set of electrical stimulation parameters (e.g., a stimulation parameter set), such as a electrode combination, current or voltage amplitude, pulse width, and pulse rate. In some examples, programs <NUM> of groups <NUM> may further include cycling information indicating when or how long stimulation is turned on and off.

Stimulation generation circuitry <NUM> may generate electrical stimulation pulses selected to alleviate symptoms or dysfunction of one or more diseases, disorders, injuries, or syndromes. While stimulation pulses are described, stimulation signals may take other forms, such as continuous-time signals (e.g., sine waves) or the like. Each of leads 230A, 230B may include any number of electrodes 232A, 232B. In the example of <FIG>, each set of electrodes 232A, 232B includes eight electrodes A-H. In some examples, the electrodes are arranged in bipolar combinations. A bipolar electrode combination may use electrodes carried by the same lead 230A, 230B or different leads. For example, an electrode A of electrodes 232A may be a cathode and an electrode B of electrodes 232A may be an anode, forming a bipolar combination.

Switch circuitry <NUM> may include one or more switch arrays, one or more multiplexers, one or more switches (e.g., a switch matrix or other collection of switches), or other electrical circuitry configured to direct stimulation signals from stimulation generation circuitry <NUM> to one or more of electrodes 232A, 232B, or directed sensed signals from one or more of electrodes 232A, 232B to sensing circuitry <NUM>. In some examples, each of the electrodes 232A, 232B may be associated with respective regulated current source and sink circuitry to selectively and independently configure the electrode to be a regulated cathode or anode, in which case switch circuitry <NUM> may not be necessary to direct stimulation signals to electrodes. Instead, current sourced or sunk by selected electrodes may be individually controlled. Stimulation generation circuitry <NUM> and/or sensing circuitry <NUM> also may include sensing circuitry to direct electrical signals sensed at one or more of electrodes 232A, 232B.

Sensing circuitry <NUM> may be configured to monitor signals from any combination of electrodes 232A, 232B. In some examples, sensing circuitry <NUM> includes one or more amplifiers, filters, and analog-to-digital converters. Sensing circuitry <NUM> may be used to sense electrophysiological signals. In some examples, sensing circuitry <NUM> detects electrophysiological signals from a particular combination of electrodes 232A, 232B. In some cases, the particular combination of electrodes for sensing electrophysiological signals includes different electrodes than a set of electrodes 232A, 232B used to deliver stimulation pulses. Alternatively, in other cases, the particular combination of electrodes used for electrophysiological sensing includes at least one of the same electrodes as a set of electrodes used to deliver stimulation pulses to patient <NUM>. Sensing circuitry <NUM> may provide signals to an analog-to-digital converter, for conversion into a digital signal for processing, analysis, storage, or output by processing circuitry <NUM>.

Telemetry circuitry <NUM> may support wireless communication between IMD <NUM> and an external programmer (not shown in <FIG>) or another computing device under the control of processing circuitry <NUM>. Processing circuitry <NUM> of IMD <NUM> may receive, as updates to programs, values for various stimulation parameters such as amplitude and electrode combination, from the external programmer via telemetry circuitry <NUM>. Processing circuitry <NUM> may store updates to programs <NUM> of groups <NUM> or any other data in storage device <NUM>. Telemetry circuitry <NUM> in IMD <NUM>, as well as telemetry circuits in other devices and systems described herein, such as the external programmer, may accomplish communication by radiofrequency (RF) communication techniques. In addition, telemetry circuitry <NUM> may communicate with an external medical device programmer (not shown in <FIG>) via proximal inductive interaction of IMD <NUM> with the external programmer. The external programmer may be one example of external programmer <NUM> of <FIG>. Accordingly, telemetry circuitry <NUM> may send information to the external programmer on a continuous basis, at periodic intervals, or upon request from IMD <NUM> or the external programmer.

Processing circuitry <NUM> may include any one or more of a microprocessor, a controller, a digital signal processor (DSP), an application specific integrated circuit (ASIC), a field-programmable gate array (FPGA), discrete logic circuitry, or any other processing circuitry configured to provide the functions attributed to processing circuitry <NUM> herein may be embodied as firmware, hardware, software or any combination thereof. Processing circuitry <NUM> controls stimulation generation circuitry <NUM> to generate stimulation signals according to programs <NUM> of groups <NUM> and any other instructions stored in storage device <NUM> to apply stimulation parameter values specified by one or more of programs, such as amplitude, pulse width, pulse rate, and pulse shape of each of the stimulation signals.

Processing circuitry <NUM> may use a group of programs stored in groups <NUM> to control stimulation generation circuitry <NUM> such that stimulation generation circuitry <NUM> applies the stimulation signals to selected combinations of electrodes 232A, 232B. For example, processing circuitry <NUM> may automatically or semi-automatically set or adjust programs <NUM> of groups <NUM>. For instance, in response to a change in activity of a patient (e.g., standing, walking, voiding, etc.), processing circuitry <NUM> may automatically or semi-automatically set or adjust programs <NUM> of groups <NUM>.

Difference information unit <NUM> of processing circuitry <NUM> may receive, e.g., from an external programmer, an indication of difference information indicating a "deltas" or changes between a program stored by groups <NUM> and an updated or new program. In this example, difference information unit <NUM> may modify or replace an existing program or an existing group of programs using the difference information. For example, if the difference information indicates the polarity for the set of electrodes and omits other stimulation parameters for a particular program stored by groups <NUM>, difference information unit <NUM> may change the polarity for the set of electrodes in the particular program and maintain stimulation parameters of the program. In this example, difference information unit <NUM> may determine a program using only the difference information, without receiving the entire program. However, in some examples, external programmer <NUM> (or another device) may determine a program using difference information.

Storage device <NUM> may be configured to store information within IMD <NUM> during operation. Storage device <NUM> may include a computer-readable storage medium or computer-readable storage device. In some examples, storage device <NUM> includes one or more of a short-term memory or a long-term memory. Storage device <NUM> may include, for example, random access memories (RAM), dynamic random access memories (DRAM), static random access memories (SRAM), magnetic discs, optical discs, flash memories, or forms of electrically programmable memories (EPROM) or electrically erasable and programmable memories (EEPROM). In some examples, storage device <NUM> is used to store data indicative of instructions for execution by processing circuitry <NUM>. As discussed above, storage device <NUM> is configured to store programs <NUM> of groups <NUM>.

Power source <NUM> is configured to deliver operating power to the components of IMD <NUM>. Power source <NUM> may include a battery and a power generation circuit to produce the operating power. In some examples, the battery is rechargeable to allow extended operation. In some examples, recharging is accomplished through proximal inductive interaction between an external charger and an inductive charging coil within IMD <NUM>. Power source <NUM> may include any one or more of a plurality of different battery types, such as nickel cadmium batteries and lithium ion batteries.

In accordance with the techniques of the disclosure, processing circuitry <NUM> may receive an indication of a program (e.g., a complete set of stimulation parameters, difference information, a group identifier, etc.) from external programmer <NUM>, a remote device (e.g., client device, remote server, etc.) and/or possibly any intermediate device. For example, processing circuitry <NUM> may receive a complete set of parameters for the program. In this example, processing circuitry <NUM> may apply (e.g., update or replace) the complete set of parameters to a parameter stored in programs <NUM> of groups <NUM>. For instance, processing circuitry <NUM> may set program 244A of group 242A to match the complete set of parameters for received by processing circuitry <NUM>.

Difference information unit <NUM> may receive difference information for a program from external programmer <NUM>, a remote device (e.g., client device, remote server, etc.) and/or possibly any intermediate device. In this example, difference information unit <NUM> may modify or replace a program stored by programs <NUM> of groups <NUM> using the difference information. For example, if the difference information indicates the polarity for the set of electrodes and omits other stimulation parameters for a program 244A of group 242A, processing circuitry <NUM> may change the polarity for the set of electrodes in program 244A of group 242A and maintain other stimulation parameters of program 244A of group 242A. Again, in some examples, external programmer <NUM> (or another device) may determine a program using difference information. For instance, external programmer <NUM> or another device may translate the difference information into a complete set of parameters for the program and processing circuitry <NUM> may receive the complete set of parameters for the program. That is, in this example, difference information unit <NUM> may be omitted and/or bypassed by the external programmer (or another device) translating the difference information into a complete set of parameters for the program into the complete set of parameters for the program for use by processing circuitry <NUM>.

<FIG> is a block diagram illustrating an example configuration of components of an example external programmer <NUM>. External programmer <NUM> may be an example of external programmer <NUM> of <FIG>. Although external programmer <NUM> may generally be described as a hand-held device, external programmer <NUM> may be a larger portable device or a more stationary device. In addition, in other examples, external programmer <NUM> may be included as part of an external charging device or include the functionality of an external charging device. As illustrated in <FIG>, external programmer <NUM> may include processing circuitry <NUM>, storage device <NUM>, user interface <NUM>, telemetry circuitry <NUM>, and power source <NUM>. Storage device <NUM> may store instructions that, when executed by processing circuitry <NUM>, cause processing circuitry <NUM> and external programmer <NUM> to provide the functionality ascribed to external programmer <NUM> throughout this disclosure. Each of these components, circuitry, or modules, may include electrical circuitry that is configured to perform some, or all of the functionality described herein. For example, processing circuitry <NUM> may include processing circuitry configured to perform the processes discussed with respect to processing circuitry <NUM>. External programmer <NUM> may represent a patient programmer, clinician programmer, or another device.

In general, external programmer <NUM> includes any suitable arrangement of hardware, alone or in combination with software and/or firmware, to perform the techniques attributed to external programmer <NUM>, and processing circuitry <NUM>, user interface <NUM>, and telemetry circuitry <NUM> of external programmer <NUM>. In various examples, external programmer <NUM> may include one or more processors, such as one or more microprocessors, DSPs, ASICs, FPGAs, or any other equivalent integrated or discrete logic circuitry, as well as any combinations of such components. External programmer <NUM> also, in various examples, may include a storage device <NUM>, such as RAM, ROM, PROM, EPROM, EEPROM, flash memory, a hard disk, a CD-ROM, including executable instructions for causing the one or more processors to perform the actions attributed to them. Moreover, although processing circuitry <NUM> and telemetry circuitry <NUM> are described as separate modules, in some examples, processing circuitry <NUM> and telemetry circuitry <NUM> are functionally integrated. In some examples, processing circuitry <NUM> and telemetry circuitry <NUM> correspond to individual hardware units, such as ASICs, DSPs, FPGAs, or other hardware units.

Storage device <NUM> (e.g., a storage device) may store instructions that, when executed by processing circuitry <NUM>, cause processing circuitry <NUM> and external programmer <NUM> to provide the functionality ascribed to external programmer <NUM> throughout this disclosure. For example, storage device <NUM> may include instructions that cause processing circuitry <NUM> to obtain a parameter set from memory or receive user input and send a corresponding command to IMD <NUM>, or instructions for any other functionality. In addition, storage device <NUM> may include a plurality of programs, where each program includes a parameter set that defines therapy stimulation or control stimulation. Storage device <NUM> may also store data received from a medical device (e.g., IMD <NUM>). For example, storage device <NUM> may store data recorded at a sensing module of the medical device, and storage device <NUM> may also store data from one or more sensors of the medical device.

Processing circuitry <NUM> may be configured to control IMD <NUM> with a program or a group of programs to provide stimulation. For example, processing circuitry <NUM> may automatically or semi-automatically set or adjust programs at IMD <NUM> by transmitting, with telemetry circuitry <NUM>, instructions to IMD <NUM>. For instance, in response to a change (e.g., a change indicated by user input, a change sensed by IMD <NUM>, etc.) in activity of a patient (e.g., standing, walking, voiding, etc.), processing circuitry <NUM> may automatically or semi-automatically set or adjust programs at IMD <NUM>. For instance, processing circuitry <NUM> may, in response to determining that the patient would not like to void, output instructions to IMD <NUM> to use a first group stored at IMD <NUM> for controlled voiding. In this instance, processing circuitry <NUM> may, in response to determining that the patient would like to void, output instructions to IMD <NUM> to use a new group or program stored at IMD <NUM> for controlled voiding.

Processing circuitry <NUM> may implement API <NUM> to facilitate the control of IMD <NUM>. For example, processing circuitry <NUM> may receive (e.g., from a remote device) difference information indicating a subset of a plurality of stimulation parameters to apply the stimulation to the patient. In this example, processing circuitry <NUM> may determine an updated program indicating the plurality of stimulation parameters based on an existing program and the difference information. Processing circuitry <NUM> may cause (e.g., by outputting one or more programming instructions) IMD <NUM> to apply the updated program to configure the medical device to apply stimulation to the patient with the plurality of stimulation parameters. For example, processing circuitry <NUM> may output the plurality of stimulation parameters to IMD <NUM>.

In the above example, processing circuitry <NUM> generates the plurality of stimulation parameters from difference information. However, in some examples, processing circuitry <NUM> may generate difference information from the plurality of stimulation parameters. For example, processing circuitry <NUM> may receive a plurality of stimulation parameters for a program. For instance, processing circuitry <NUM> may receive a complete set of stimulation parameters or a partial set of stimulation parameters from an interaction with user interface <NUM> by a patient, caretaker, or health professional. In some examples, processing circuitry <NUM> may receive a complete set of stimulation parameters or a partial set of stimulation parameters from a remote device (e.g., a remote server or client device).

Processing circuitry <NUM> may output the stimulation parameters to API <NUM>. In this example, processing circuitry <NUM>, with execution of difference information unit <NUM> of API <NUM>, may generate difference information based on a comparison of the program and an existing program configured at IMD <NUM>. For example, if the stimulation parameters of the received program may only change a polarity for a set of electrodes from the existing program, difference information unit <NUM> of API <NUM> may generate the difference information to indicate the polarity for the set of electrodes and omit other stimulation parameters. Processing circuitry <NUM>, with telemetry circuitry <NUM>, may output the difference information to IMD <NUM>, which may configure IMD <NUM> with the updated program in less time than systems that configure IMD <NUM> using the stimulation parameters (e.g., the complete set of stimulation parameters). Again, in some examples, external programmer <NUM> may instead output a complete set of stimulation parameters for the program and processing circuitry may receive the complete set of stimulation parameters for the program. That is, difference information unit <NUM> may be omitted. In another example, external programmer <NUM> may instead receive difference information from, for example, a remote device and output an indication of the difference information to IMD <NUM>. That is, difference information unit <NUM> may pass through the received difference information and omit a process of generating the difference information.

Additionally, or alternatively, processing circuitry <NUM> may determine a program using group of programs unit <NUM> of API <NUM>. For example, processing circuitry <NUM> may receive, with telemetry circuitry <NUM>, an indication (e.g., an index, an identifier, etc.) of a selected group of programs of a pre-stored of programs instead of the complete set of stimulation parameters. In this example, processing circuitry <NUM> may determine, with group of programs unit <NUM> of API <NUM>, the complete set of stimulation parameters from the indication of the selected group of programs. Processing circuitry <NUM> may output, with telemetry circuitry <NUM>, the complete set of stimulation parameters. In some examples, processing circuitry <NUM> may instead receive, with telemetry circuitry <NUM>, a complete set of stimulation parameters for the program and processing circuitry <NUM>, with telemetry circuitry <NUM>, may output the complete set of stimulation parameters for the program. That is, group of programs unit <NUM> may be omitted.

User interface <NUM> may include a button or keypad, lights, a speaker for voice commands, a display, such as a liquid crystal (LCD), light-emitting diode (LED), or organic light-emitting diode (OLED). In some examples the display includes a touch screen. User interface <NUM> may be configured to display any information related to the delivery of electrical stimulation. User interface <NUM> may also receive user input (e.g., indication of when the patient perceives a stimulation pulse) via user interface <NUM>. The input may be, for example, in the form of pressing a button on a keypad or selecting an icon from a touch screen. The input may request starting or stopping electrical stimulation, the input may request a new spatial electrode pattern or a change to an existing spatial electrode pattern, of the input may request some other change to the delivery of electrical stimulation.

Telemetry circuitry <NUM> may support wireless communication between the medical device and external programmer <NUM> under the control of processing circuitry <NUM>. Telemetry circuitry <NUM> may also be configured to communicate with another computing device via wireless communication techniques, or direct communication through a wired connection. In some examples, telemetry circuitry <NUM> provides wireless communication via an RF or proximal inductive medium. In some examples, telemetry circuitry <NUM> includes an antenna, which may take on a variety of forms, such as an internal or external antenna.

Examples of local wireless communication techniques that may be employed to facilitate communication between external programmer <NUM> and IMD <NUM> include RF communication according to the <NUM> or Bluetooth ® specification sets or other standard or proprietary telemetry protocols. In this manner, other external devices may be capable of communicating with external programmer <NUM> without needing to establish a secure wireless connection. As described herein, telemetry circuitry <NUM> may be configured to transmit a spatial electrode movement pattern or other stimulation parameter values to IMD <NUM> for delivery of electrical stimulation therapy.

Power source <NUM> is configured to deliver operating power to the components of external programmer <NUM>. Power source <NUM> may include a battery and a power generation circuit to produce the operating power. In some examples, the battery is rechargeable to allow extended operation. Recharging may be accomplished by electrically coupling power source <NUM> to a cradle or plug that is connected to an alternating current (AC) outlet. In addition, recharging may be accomplished through proximal inductive interaction between an external charger and an inductive charging coil within external programmer <NUM>. In other examples, traditional batteries (e.g., nickel cadmium or lithium ion batteries) may be used. In addition, external programmer <NUM> may be directly coupled to an alternating current outlet to operate.

The architecture of external programmer <NUM> illustrated in <FIG> is shown as an example. The techniques as set forth in this disclosure may be implemented in the example external programmer <NUM> of <FIG>, as well as other types of systems not described specifically herein. Nothing in this disclosure should be construed so as to limit the techniques of this disclosure to the example architecture illustrated by <FIG>.

<FIG> is a block diagram illustrating an example of one or more remote servers <NUM> (referred to herein as "remote server <NUM>") and one or more remote clients <NUM> (referred to herein as "remote clients <NUM>") suitable for use with the IMD of <FIG>, in accordance with one or more techniques of this disclosure. Remote server <NUM> may represent a Cloud computing infrastructure. Remote client <NUM> may represent a clinician device geographically remote from external programmer <NUM> and/or IMD <NUM>. For instance, remote client <NUM> may be used by a health professional at a doctor's office and the patient and IMD <NUM> may be at a home of the patient. Remote server <NUM> and/or remote client <NUM> may be referred to herein as a remote device. Network <NUM> may comprise one or more wired (e.g., Ethernet) and/or wireless networks (e.g., Wi-Fi™, Bluetooth™, Zigbee™, IEEE <NUM>, etc.). In some examples, network <NUM> may comprise the Internet.

A remote device (e.g., remote server <NUM> and/or remote client <NUM>) may be configured to control IMD <NUM> with a program or a group of programs to provide stimulation. For example, the remote device may automatically or semi-automatically set or adjust programs at IMD <NUM>. For instance, in response to a change in activity of a patient (e.g., standing, walking, voiding, etc.), the remote device may automatically or semi-automatically set or adjust programs at IMD <NUM>. For instance, the remote device may receive sensor information or user input information from IMD <NUM> or external programmer <NUM> via the network <NUM> that indicates a change in activity of the patient.

A remote device (e.g., remote server <NUM> and/or remote client <NUM>) may output stimulation parameters to configure IMD <NUM>. For example, the remote device may output a complete set of stimulation parameters for each program of a group of programs to provide a treatment to a patient.

In accordance with the techniques of the disclosure, a remote device (e.g., remote server <NUM> and/or remote client <NUM>) may automatically or semi-automatically determine an updated program based on sensor input or user input. In this example, the remote device (e.g., with an API at the remote device) may generate difference information based on a comparison of the updated program and an existing program configured at IMD <NUM>. For example, if the updated program only changes a polarity for a set of electrodes, the remote device may generate the difference information to indicate the polarity for the set of electrodes and omit other stimulation parameters. External programmer <NUM> may configure IMD <NUM> with the updated program using the difference information, which may configure IMD <NUM> with the updated program in less time than systems that configure the medical device with the entire updated program. In this way, system may respond to a patient activity (e.g., standing up) faster than systems that rely on sending a complete set of stimulation parameters, which may improve a therapy provided to the patient. For instance, rather than a system to take a relatively long time (e.g., <NUM> seconds) to accommodate a change in patient activity (e.g., sitting to walking), techniques described herein for using difference information may permit the system to accommodate the change in patient activity in a relatively short amount of time (e.g., seconds).

Additionally, or alternatively, a remote device (e.g., remote server <NUM> and/or remote client <NUM>) may be configured to use pre-stored groups of programs to allow a selection of a program. For example, the remote device may "pre-prepare" external programmer <NUM> with pre-stored groups of programs (e.g., tens, hundreds, or thousands of groups of programs). For instance, the pre-stored group may be configured to provide broad therapy for one or more diseases. After pre-preparing external programmer <NUM> with the pre-stored groups of programs, the remote device (e.g., with an algorithm, responsive to input from a health provider, based on a sensed input, based on a user input, etc.) may select a group from the pre-stored groups of programs stored at external programmer <NUM>. In this example, rather than transmitting the entire set of stimulation parameters for the selected group, remote device may transmit an indication of the selected group (e.g., an identifier for the selected group), e.g., a selected group pre-stored in a storage device of external programmer <NUM>. In this example, external programmer <NUM> may configure IMD <NUM> using the indication of the selected group and the pre-stored groups of programs. For example, external programmer <NUM> may generate a complete set of stimulation parameters for the selected group. In this example, external programmer <NUM> may configure IMD <NUM> with the complete set of stimulation parameters for the group. For instance, external programmer <NUM> may transmit programming instructions to IMD <NUM> that causes IMD <NUM> to configure a program of a group with the complete set of stimulation parameters.

In this way, IMD <NUM> may respond to a patient activity (e.g., standing up) faster than systems that rely on sending a complete set of stimulation parameters, which may improve a therapy provided to the patient. In this example, external programmer <NUM> stores the pre-stored group and generates a complete set of stimulation parameters for the selected group. However, in some examples, IMD <NUM> may store the pre-stored group and generate the complete set of stimulation parameters for the selected group. For instance, external programmer <NUM> may be bypassed such that the remote device either communicates to IMD <NUM> via network <NUM> and without external programmer <NUM>. In some instances, external programmer <NUM> may pass-through the indication of the selected group to IMD <NUM> such that external programmer <NUM> relays the indication of the selected group without generating and/or outputting the complete set of stimulation parameters for the selected group to IMD <NUM>.

Furthermore, transmitting the difference information and/or a selection of a group of programs instead of a complete set of stimulation parameters may provide a failsafe and/or fault tolerance to a loss of connectivity in the system. Examples of loss of connectivity may occur between external programmer <NUM> and IMD <NUM>, between external programmer <NUM> and a remote device (e.g., a remote client device or a remote server used for remote programming), or between other devices. For example, transmitting the difference information may comprise sending less data than sending a complete set of stimulation parameters, which may result in IMD <NUM> being configured with a program in less time. Configuring IMD <NUM> in less time may result in the IMD <NUM> being more fault tolerant to infrequent loss of connectivity in network <NUM> or a telemetry link.

Although shown as separate entities, in some examples, functionality may be distributed differently than that shown in <FIG>. For example, remote server <NUM> and remote client <NUM> may be the same system.

<FIG> is a user interface diagram of a user interface for inputting stimulation parameters, in accordance with one or more techniques of this disclosure. User interface <NUM> may form part of external programmer <NUM>, a remote device (e.g., remote server <NUM> or remote client <NUM>, or another device.

User interface <NUM> may include a display, for example comprising an LCD or LED display, and an input such as a keyboard, keypad, or touch screen. A user (e.g., a patient, caretaker, or health professional) may interact with user interface <NUM>. The user may also interact using peripheral pointing devices, such as a stylus scroll wheel, mouse, or any combination of such devices. The input may include parameter adjustment inputs <NUM> and/or electrode selection inputs 530A, 530B. Electrode selection inputs 530A, 530B may allow the user to input which particular electrode to be used and/or to specify the polarity of the electrodes. The user may use a single click for one polarity and double click for the other polarity. User interface <NUM> may be configured to receive an input of a pain rating and/or a sensory rating.

Parameter adjustment inputs <NUM> may allow for a user (e.g., a patient, caretaker, or health professional) to modify stimulation parameters and visualize what stimulation parameters are currently implemented. Stimulation parameters may include a selection of one or more electrodes, a polarity of each selected electrode, a voltage or current amplitude, a pulse width, a pulse frequency, or other stimulation parameters. In some examples, stimulation parameters may include additional stimulation parameters than shown in <FIG> and/or may omit one or more stimulation parameters shown in <FIG>.

User interface <NUM> may direct IMD <NUM> to test a number of parameter combinations and may allow the user to identify particular parameter combinations that provide efficacious results. User interface <NUM> may direct IMD <NUM> to test a particular parameter at a particular value or range of values using the parameter adjustment inputs <NUM>. User interface <NUM> may receive an input from the user to manually select stimulation parameters. User interface <NUM> may receive a select from a user of a program or group of programs for automatically identifying parameter, combination of stimulation parameters, and stimulation parameter to test. User interface <NUM> may input an indication of whether effective stimulation parameters have been selected for the patient, e.g., if the selected stimulation parameters produce stimulation that support therapeutic efficacy, e.g., alleviating or reducing symptoms of a disease or disorder, or delaying the onset of symptoms or tissue damage or degeneration due to the disease or disorder. User interface <NUM> may control IMD <NUM> test stimulation with a set of stimulation parameters, for example multiple sets of stimulation parameters. User interface <NUM> may display a recommended set of stimulation parameters to test.

User interface <NUM> may receive an indication of a selection by a user (e.g., a patient, caretaker, or a health professional) of various stimulation parameters such as electrode combination, a polarity of each selected electrode, a voltage or current amplitude, a pulse width, and a pulse frequency. In some examples, user interface <NUM> may output a program for the stimulation parameters to an API (e.g., API <NUM>), which may use techniques described herein to determine difference information and/or a selected group from pre-stored groups of programs (e.g., a group identifier).

User interface <NUM> may receive an indication of a selection by a user (e.g., a patient, caretaker, or health professional) of a combination of stimulation parameters, such as a program or a group of programs. For example, user interface <NUM> may receive an indication of one or more user inputs selecting an intensity value and pulse width value at first test values. Again, external programmer <NUM> and/or remote device may or automatically determine a combination of stimulation parameters based on sensor input or user input, where changes or groups are designated for different sensor conditions or user indicated conditions.

External programmer <NUM> and/or a remote device (e.g., remote server <NUM> and/or remote client <NUM>) may receive the user input and direct stimulation to IMD <NUM> using the intensity level at the first test values. In some examples, user interface <NUM> may output the combination of stimulation parameters to an API (e.g., API <NUM>), which may use techniques described herein to determine difference information and/or a selected group from pre-stored groups of programs.

User interface <NUM> may allow for a user to receive information and to input information for external programmer <NUM> and/or a remote device (e.g., remote server <NUM> and/or remote client <NUM>) that directs IMD <NUM> to automatically or semi-automatically generate or select a program or group of programs. In this example, user interface <NUM> may output a combination of stimulation parameters for the program or group of programs to an API (e.g., API <NUM>), which may use techniques described herein to determine difference information and/or a selected group from pre-stored groups of programs.

<FIG> is a block diagram illustrating an example of program components configured for difference information, in accordance with one or more techniques of this disclosure, in accordance with one or more techniques of this disclosure. The example of <FIG> is refers to <FIG> for example purposes only. In this example, difference information unit <NUM> of API <NUM> is implemented in external programmer <NUM>. However, in some examples, aspects of difference information unit <NUM> of API <NUM> may be implemented at a remote device (e.g., remote server <NUM> or client device <NUM>), IMD <NUM>, or another device.

A first device (e.g., a remote device or external programmer <NUM>) may be configured with updated program unit <NUM>, existing program unit <NUM>, and difference information generator <NUM> and omit delta unit <NUM> and stimulation parameter generator <NUM>. Similarly, a second device (e.g., external programmer <NUM> or IMD <NUM>) may be configured with existing program unit <NUM>, delta unit <NUM>, and stimulation parameter generator <NUM> and omit updated program unit <NUM> and difference information generator <NUM>. In some examples, however, a single device (e.g., external programmer <NUM>) may be configured with existing program unit <NUM>, delta unit <NUM>, stimulation parameter generator <NUM>, updated program unit <NUM>, and difference information generator <NUM>.

In the example of <FIG>, difference information unit <NUM> of API <NUM> may be configured to convert stimulation parameters into difference information. For example, updated program unit <NUM> may receive a complete set of stimulation parameters. For example, updated program unit <NUM> may receive an indication of a selection by user (e.g., a patient, a caretaker, or a health professional) of a complete set of stimulation parameters. In some examples, updated program unit <NUM> may receive a complete set of stimulation parameters from a remote device (e.g., remote server <NUM> or client device <NUM>) or another device. The remote device, external programmer <NUM>, and/or IMD <NUM> may automatically or semi-automatically determine the complete set of stimulation parameters based on sensor input or user input, where changes or groups are designated for different sensor conditions or user indicated conditions.

Existing program unit <NUM> may store or maintain existing program information. In some examples, existing program unit <NUM> may maintain group of existing programs that are stored at IMD <NUM>. For instance, existing program unit <NUM> may maintain the group of existing programs to include programs used by IMD <NUM> to provide stimulation to the patient. In some instances, existing program unit <NUM> may maintain the group of existing programs to include programs stored by IMD <NUM> but not currently used by IMD <NUM> to provide stimulation to the patient.

Difference information generator <NUM> may compare an updated program output by updated difference information generator <NUM> with an existing program stored by existing program unit <NUM>. For example, difference information generator <NUM> may compare each stimulation parameter of an existing program with a corresponding stimulation parameter of the updated program. In response to determining that the stimulation parameter of an existing program does not match the corresponding stimulation parameter of the updated program, difference information generator <NUM> may generate difference information to include an indication of the corresponding stimulation parameter. For instance, if the updated program has a first intensity value for an electrode that is different than (e.g., less than or greater than) a second intensity value for the electrode of the existing program, difference information generator <NUM> may generate difference information to include the first intensity value.

Delta unit <NUM> and stimulation parameter generator <NUM> may perform a reciprocal process of updated program unit <NUM> and difference information generator <NUM>. For example, delta unit <NUM> may receive difference information. For example, delta unit <NUM> may receive difference information from a remote device (e.g., remote server <NUM> or client device <NUM>) or another device. Stimulation parameter generator <NUM> may generate stimulation parameters for an updated program using difference information and an existing program stored by existing program unit <NUM>. For example, stimulation parameter generator <NUM> may generate the stimulation parameters for the updated program that matches the existing program with changes specified by the difference information.

<FIG> is a block diagram illustrating an example of program components suitable configured for using a selection of a group from a pre-stored group of a group of programs, in accordance with one or more techniques of this disclosure, in accordance with one or more techniques of this disclosure. The example of <FIG> is refers to <FIG> for example purposes only. In this example, group of programs unit <NUM> of API <NUM> is implemented in external programmer <NUM>. However, in some examples, aspects of group of programs unit <NUM> of API <NUM> may be implemented at a remote device (e.g., remote server <NUM> or client device <NUM>), IMD <NUM>, or another device.

A first device (e.g., a remote device) may be configured with updated program unit <NUM>, pre-populated programs unit <NUM>, and group identifier generator <NUM> and omit group identifier unit <NUM> and stimulation parameter generator <NUM>. Similarly, a second device (e.g., external programmer <NUM>) may be configured with pre-populated programs unit <NUM>, group identifier unit <NUM>, and stimulation parameter generator <NUM> and omit updated program unit <NUM> and group identifier generator <NUM>. In some examples, however, a single device may be configured with updated program unit <NUM>, pre-populated programs unit <NUM>, group identifier generator <NUM>, group identifier unit <NUM>, and stimulation parameter generator <NUM>.

In the example of <FIG>, group of programs unit <NUM> of API <NUM> is configured to identify stimulation parameters using pre-stored groups of programs. For example, updated program unit <NUM> may receive a complete set of stimulation parameters. For example, updated program unit <NUM> may receive an indication of a selection by user (e.g., a patient, a caretaker, or a health professional) of a complete set of stimulation parameters. In some examples, updated program unit <NUM> may receive a complete set of stimulation parameters from a remote device (e.g., remote server <NUM> or client device <NUM>) or another device. The remote device, external programmer <NUM>, and/or IMD <NUM> may automatically or semi-automatically determine the complete set of stimulation parameters based on sensor input or user input, where changes or groups are designated for different sensor conditions or user indicated conditions.

Pre-populated programs unit <NUM> may manage pre-stored groups of programs (e.g., tens, hundreds, or thousands of groups of programs). For instance, the pre-stored group may be configured to provide broad therapy for one or more diseases. In some examples, pre-populated programs unit <NUM> may update the pre-stored groups of programs. In some examples, pre-populated programs unit <NUM> may atomically updating the pre-stored groups of programs. For instance, while receiving a set of changes to the updated table, pre-populated programs unit <NUM> may refrain from applying any changes of the set of changes to the pre-stored group until all of the changes of the set of changes has been received. Again, pre-populated programs unit <NUM> may receive the set of changes for the pre-stored group from an indication of a selection by user (e.g., a patient, a caretaker, or a health professional) of a complete set of stimulation parameters, a remote device (e.g., remote server <NUM> or client device <NUM>), or another device. The remote device, external programmer <NUM>, and/or IMD <NUM> may automatically or semi-automatically determine the complete set of changes for the pre-stored group based on sensor input or user input, where changes or groups are designated for different sensor conditions or user indicated conditions.

Group identifier generator <NUM> may generate an identifier for the updated program output by the updated program unit <NUM> using the pre-stored group managed by pre-populated programs unit <NUM>. For example, group identifier generator <NUM> may generate an identifier that maps the updated program to a set of programs of the table.

Group identifier unit <NUM> and stimulation parameter generator <NUM> may perform a reciprocal process of updated program unit <NUM> and group identifier generator <NUM>. For example, group identifier unit <NUM> may receive group identifier. For example, group identifier unit <NUM> may receive a group identifier unit <NUM> from a remote device (e.g., remote server <NUM> or client device <NUM>) or another device.

Stimulation parameter generator <NUM> may generate stimulation parameters for an updated program using a group identifier and a pre-stored group managed by pre-populated programs unit <NUM>. For example, stimulation parameter generator <NUM> may generate the stimulation parameters for the updated program that maps the group identifier to a set of programs of the table.

<FIG> is a flow diagram illustrating a process for using difference information, in accordance with one or more techniques of this disclosure. <FIG> is discussed with reference to <FIG> for example purposes only. In the following example, external programmer <NUM> performs <NUM>-<NUM> of <FIG> and IMD <NUM> performs <NUM>-<NUM>. However, in other examples, other devices may perform the process of <FIG> as explained in further detail below. In the following examples, IMD <NUM> is used as a medical device. However, in some examples, an external medical device may be used instead of IMD <NUM>.

External programmer <NUM> may receive an updated program indicating a plurality of stimulation parameters to configure IMD <NUM> to apply the stimulation to the patient (<NUM>). For example, to receive the updated program, external programmer <NUM> may automatically or semi-automatically determine the updated program based on sensor input (e.g., an accelerometer signal indicating a change in activity) or user input (e.g., using user interface <NUM>). In some examples, to receive the updated program, external programmer <NUM> may receive the updated from a remote device. The stimulation parameters may comprise one or more of an electrode combination, a stimulation amplitude, a stimulation pulse width, a stimulation frequency, or a duty cycle.

External programmer <NUM> may generate, based on one or more differences between an existing program and the updated program, difference information indicating values for a subset of a plurality of stimulation parameters (<NUM>). In some examples, the existing program may be stored at IMD <NUM>. Again, a medical device may be an implantable medical device (e.g., IMD <NUM>) or an external medical device. In some examples, IMD <NUM> may apply the stimulation to the patient with the existing program before being configured to apply stimulation to the patient with the plurality of stimulation parameters. External programmer <NUM> may output the difference information to configure IMD <NUM> to apply stimulation to the patient with the plurality of stimulation parameters (<NUM>). For example, external programmer <NUM> may output the difference information to IMD <NUM>.

In the above example, external programmer <NUM> may output the difference information. However, in some examples, a remote device (e.g., remote server <NUM> or remote client <NUM>) may output the difference information to IMD <NUM> (e.g., via external programmer <NUM>). For example, the remote device may perform one or more of <NUM>-<NUM>.

IMD <NUM> may receive difference information indicating a subset of a plurality of stimulation parameters to apply the stimulation to the patient (<NUM>). For example, IMD <NUM> may receive the difference information from external programmer <NUM>, from remote device (e.g., remote server <NUM> or client device <NUM>), or from another device. IMD <NUM> may determine an updated program indicating the plurality of stimulation parameters based on an existing program and the difference information (<NUM>). For example, IMD <NUM> may modify existing stimulation parameters of the existing program using the difference information to determine the plurality of stimulation parameters of the updated program. IMD <NUM> may apply the updated program to configure IMD <NUM> to apply stimulation to the patient with the plurality of stimulation parameters (<NUM>).

In the above example, IMD <NUM> may receive the difference information. However, in some examples, external programmer <NUM> may receive the difference information and output a plurality of simulation parameters to IMD <NUM>. For example, external programmer <NUM> may perform one or more of <NUM>-<NUM>. In this example, external programmer <NUM> may output the updated program to IMD <NUM> to configure IMD <NUM> to apply stimulation to the patient with the plurality of stimulation parameters.

<FIG> is a flow diagram illustrating a process for using a selection of a group from a pre-stored group of a group of programs, in accordance with one or more techniques of this disclosure. <FIG> is discussed with reference to <FIG> for example purposes only. In the following example, a remote device and an external programmer performs <NUM>-<NUM> of <FIG> and external programmer <NUM> performs <NUM>-<NUM>. However, in other examples, other devices may perform the process of <FIG> as explained in further detail below. In the following examples, IMD <NUM> is used as a medical device. However, in some examples, an external medical device may be used instead of IMD <NUM>.

A remote device (e.g., remote server <NUM> or client device <NUM>) may receive a selected group of programs, each program of the selected group of programs indicating a plurality of stimulation parameters for configuring IMD <NUM> to apply the stimulation to the patient (<NUM>). For example, to receive the selected group of programs, the remote device may determine the updated program automatically or semi-automatically based on sensor input or user input (e.g., using user interface <NUM>). In some examples, to receive the selected group of programs, the remote device may receive the selected group of programs from another device. In some examples, to receive the selected group of programs, the remote device may determine the selected group of programs, for example, using one or more automatic or semi-automatic processes. The stimulation parameters may comprise one or more of an electrode combination, a stimulation amplitude, a stimulation pulse width, a stimulation frequency, or a duty cycle.

The remote device may generate a group identifier identifying the selected group of programs in pre-stored groups of programs (e.g., pre-stored groups of programs) (<NUM>). The remote device may output the group identifier to configure IMD <NUM> to apply the stimulation to the patient with the selected group of programs (<NUM>). For example, the remote device may output the group identifier to external programmer <NUM>.

External programmer <NUM> may receive a group identifier identifying an selected group of programs in pre-stored groups of programs, each program of the pre-stored groups of programs indicating a plurality of stimulation parameters for configuring IMD <NUM> to apply the stimulation to the patient (<NUM>). For example, external programmer <NUM> may receive the group identifier from a remote device (e.g., remote server <NUM> or client device <NUM>). External programmer <NUM> may determine the selected group of programs based on the pre-stored groups of programs and the group identifier (<NUM>). For example, external programmer <NUM> may apply a look-up-table function to pre-stored groups of programs using the group identifier to determine the selected group of programs. External programmer <NUM> may cause IMD <NUM> to apply the updated program to configure IMD <NUM> to apply stimulation to the patient with the selected group of programs (<NUM>). For example, external programmer <NUM> may output, to IMD <NUM> and for each program of the selected group of programs, a plurality of stimulation parameters and IMD <NUM> applies stimulation to the patient with the plurality of stimulation parameters for each program of the selected group of programs.

Instructions may be executed by one or more processors, such as one or more digital signal processors (DSPs), general purpose microprocessors, application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), or other equivalent integrated or discrete logic circuitry. Accordingly, the terms "processor" and "processing circuitry," as used herein may refer to any of the foregoing structures or any other structure suitable for implementation of the techniques described herein.

Claim 1:
A neurostimulation system for providing neurostimulation to a patient, the system comprising one or more processors configured to:
receive an updated program indicating a plurality of stimulation parameters to configure a medical device to apply the neurostimulation to the patient;
generate difference information based on one or more differences between an existing program and the updated program; and
output the difference information to configure the medical device to apply stimulation to the patient with the plurality of stimulation parameters.