Patent Description:
Further, it should not be assumed that any of the approaches described in this section are well-understood, routine, or conventional merely by virtue of their inclusion in this section.

<CIT> discloses a setting value management apparatus and management method thereof. Virtual setting values for a specific image forming apparatus are generated using a model-dependent setting value schema which defines a schema of model-dependent setting values in each of a plurality of image forming apparatuses and tenant setting values required to commonly set setting values for the plurality of image forming apparatuses. The virtual setting values are held and managed.

<CIT> discloses a method, system and computer program product for managing system management agent configurations which include agent system management programs and program parameters in a distributed environment. A configuration management server sends upon request from the agents installed on the distributed system a description of their configuration. To this effect, the configuration management server maintains a database storing the agent configuration information, this database being usually updated by a system management administrator. The agents get from the server the list of peer distributed systems having the same agent configuration and their configuration from one distributed system of the list or obtain an agent configuration directly from the configuration management server if the peer distributed systems have modified their configuration. The agents advise the system management server when a new configuration has been installed.

<CIT> discloses a method and system for synchronizing configurations of a video display system. Configuration information at a facility server and that stored at a central server are synchronized using a procedure that depends on a relationship of the central server and the facility server, or an operating state of the facility.

Printing devices are often sold unconfigured or with a basic configuration that does not have security settings enabled. In addition, printing devices that are sold with security settings enabled may be reconfigured by end users, leaving them in an insecure state. Device management systems are available to enable system administrators to secure, control and maintain the configurations of printing devices. These systems, however, require trained Information Technology (IT) staff. This leaves organizations that do not have dedicated IT staff with printing devices that are vulnerable to third party attacks.

The aforementioned approaches may also be implemented by one or more computer-implemented processes and non-transitory computer-readable media that store instructions which, when processed by one or more processed, implement the approach.

Embodiments are depicted by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements.

In the following description, for the purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the embodiments. It will be apparent, however, to one skilled in the art that the embodiments may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the embodiments.

An approach is provided for configuring printing devices. A configuration manager maintains configuration data for a printing device and provides the configuration data to a configuration agent executing on the printing device. The configuration agent applies the settings specified by the configuration data to the printing device and generates configuration identification data that uniquely identifies the settings. The configuration agent uses the configuration identification data to determine whether the current configuration of the printing device has changed. If so, then the configuration agent acquires and applies configuration data from the configuration manager.

As used herein, the term "configuration data" refers to data that specifies settings for printing devices. Example settings include, without limitation, paper/quality settings, effects settings, finishing settings, advanced settings, and security settings. Example security settings include, without limitation, HTTPS settings, IPP settings, TLS settings, encryption settings, FTP settings, WSD settings, RHPP settings, SNMP settings, etc. For example, security settings may pertain to user authentication for accessing a printing device, data overwrite and encryption on printing device storage, disabling certain communications protocols considered to be less secure, etc. As used herein, the term "configuration" refers to settings for a printing device and the term "current configuration" refers to settings currently applied to a printing device.

The approach described herein for configuring printing devices provides a technical solution to the technical problem of how to manage the configuration of printing devices to ensure that printing devices are operating with correct settings. The technical solution allows printing devices to apply and maintain a consistent and secure configuration without the need for dedicated IT staff.

<FIG> is a block diagram that depicts a printing device configuration arrangement <NUM>. Arrangement <NUM> includes a warehouse <NUM>, a customer site <NUM>, a printing device <NUM>, an Enterprise Resource Planning (ERP) system <NUM>, and a configuration manager <NUM>. The warehouse <NUM> is any physical location where the printing device <NUM> is initially configured prior to being relocated to the customer site <NUM>, as depicted in <FIG>. The term "warehouse" is used herein for explanation purposes only and the warehouse <NUM> is not limited to a warehouse per se, and may include other physical locations such as a manufacturer, a distributor, etc. The customer site <NUM> is any physical location where the printing device <NUM> is in use. The term "customer site" is used herein for explanation purposes only and the customer site <NUM> is not limited to a customer site per se and may include other physical locations where the printing device <NUM> is in use.

The elements of arrangement <NUM> may be communicatively coupled via one or more wireless and/or wired computer networks of any type, and/or direct communications links that are not depicted in <FIG> for purposes of explanation. Arrangement <NUM> may include additional or fewer elements, depending upon a particular implementation. The approach for configuring printing devices is described in the context of configuring a single printing device <NUM> for purposes of explanation, but embodiments are applicable to configuring any number of printing devices.

The printing device <NUM> is a device that prints print jobs, such as electronic documents. Embodiments are applicable to any type of printing device and example printing devices include, without limitation, printers, copiers, facsimile machines, and Multi-Function Peripherals (MFPs). <FIG> is a block diagram that depicts an example implementation of a printing device <NUM> that includes a user interface <NUM>, a communications interface <NUM>, a configuration agent <NUM>, a printing architecture <NUM>, and a computing architecture <NUM>.

The user interface <NUM> allows a user to input information to the printing device <NUM> and/or displays information to the user. For example, the user interface <NUM> may be implemented by a display screen, a control panel, a keyboard, a pointing device such as a mouse, or any combination thereof. The user interface <NUM> may include graphical user interface controls displayed on a touch screen that convey information a user about the functionality and status of the printing device and also allow a user to select functions and input information to the printing device <NUM>.

The communications interface <NUM> provides for the exchange of data between the printing device <NUM> and other computing elements via wired, wireless, or direct connections. The configuration agent <NUM> configures (and reconfigures) the printing device <NUM> with configuration data, as described in more detail hereinafter. The configuration agent <NUM> may implement one or more Application Program Interfaces (APIs) supported by the configuration manager <NUM> and/or communicate with the configuration manager <NUM> via an HTTP or HTTPS connection. The configuration agent <NUM> may be implemented by one or more computer-implemented processes of any type. Furthermore, although the configuration agent <NUM> is depicted as a separate element for discussion purposes, the functionality provided by the configuration agent <NUM> may be integrated into other processes and/or elements on printing device <NUM>.

The printing architecture <NUM> includes hardware elements, software elements, or any combination of hardware elements and software elements for printing electronic data, such as print jobs. This may include, for example, a paper transport, logic circuits, a toner cartridge, a photosensitive drum, a laser, one or more coronas, a fuser, an erase lamp, power supply, etc..

The computing architecture <NUM> includes a processor <NUM>, a memory <NUM>, and an OS <NUM>. The processor <NUM> may be implemented by one or more microprocessors and associated computer hardware and/or computer software. The memory <NUM> may be implemented by volatile memory, non-volatile memory, or any combination of volatile and non-volatile memory. The OS <NUM> may be implemented by any type of operating system that may vary depending upon a particular implementation.

The ERP system <NUM> includes data that maps printing devices to customers. The ERP system <NUM> may include other information, such as sales information, shipping dates, etc. The ERP system <NUM> may include a database for maintaining this information and a user interface to allow users to access and update the mapping data. The ERP system <NUM> may also include an interface so that the mapping data can be pushed to the configuration manager <NUM> or be obtained by the configuration manager <NUM>.

The configuration manager <NUM> configures printing devices as described herein. The configuration manager <NUM> may be implemented by one or more processes, such as a cloud application, a server process, etc. For example, the configuration manager <NUM> may be a process hosted on a server of a business organization, hosted as a cloud service accessible via the Internet, etc. The configuration manager <NUM> may provide an Application Program Interface (API) for exposing the functionality and data of the configuration manager <NUM>.

According to an embodiment, the configuration manager <NUM> uses different types of data to manage the configuration of printing devices. The data may be stored locally on a computing device on which the configuration manager <NUM> is executing, or remote from the configuration manager <NUM>, for example, in a database management system, data repository, etc. <FIG> is a block diagram that depicts configuration selection data <NUM>, configuration data <NUM>, and printing device data <NUM> used by the configuration manager <NUM> to manage the configuration of printing devices. The configuration selection data <NUM>, configuration data <NUM>, and printing device data <NUM> may be maintained in any form or structure, depending upon a particular implementation, and although depicted in the figures and described herein as separate, may be combined in any manner.

The configuration selection data <NUM> specifies a configuration to be used for each type of printing device, for each customer. <FIG> is a block diagram that depicts example configuration selection data <NUM> managed by the configuration manager <NUM>. In this example, there are three customers (Customer A, Customer B, Customer C) and three types of printing devices (Type <NUM>, Type <NUM>, Type <NUM>). There are three standard configurations (C1, C2, C3) that correspond, respectively, to the three types of printing devices (Type <NUM>, Type <NUM>, Type <NUM>). The standard configurations (C1, C2, C3) include settings that are appropriate for the corresponding type (Type <NUM>, Type <NUM>, Type <NUM>) of printing device. For example, the standard configurations may include settings that are known to be stable with the corresponding type of printing device. Custom configurations are specified for certain customers and types of printing devices. These include a custom configuration (Custom B-C1) for Type <NUM> printing devices for Customer B, and a custom configuration (Custom C-C2) for Type <NUM> printing device for Customer C. The settings in the custom configurations may be established by customers based upon their operating environment, user preference, policies, etc. For example, a particular customer may implement a configuration that uses security settings to provide greater security than standard configurations. The configuration selection data <NUM> may include other data that may vary depending upon a particular implementation and embodiments are not limited to the example data depicted in the figures and described herein.

As described in more detail hereinafter, the configuration manager <NUM> uses the configuration selection data <NUM> to determine a configuration for a printing device. For example, the standard configuration C1 is used for Type <NUM> printing devices of Customer A and Customer C. As another example, the standard configuration C2 is used for Type <NUM> printing devices of Customer A and Customer B. As a further example, the custom configuration Custom B-C1 is used for Type <NUM> printing devices of Customer B and the custom configuration Custom C-C2 is used for Type <NUM> printing devices of Customer C. Although examples are described herein in the context of three customers and three types of printing devices, embodiments are not limited to these examples and are applicable to any number of customers and types of printing devices. The configuration selection data <NUM> may be created and maintained by an administrative user for example, using an application or a Web browser and the API of the configuration manager <NUM>.

The configuration data <NUM> includes configuration data for any number and types of configurations, where each instance of configuration data includes a plurality of settings for a printing device. In the example configuration selection data <NUM> of <FIG>, the configuration selection data <NUM> includes configuration data for configurations C1, C2, C3, Custom B-C1, and Custom C-C2. The configuration data <NUM> may be stored in any form or format that may vary depending upon a particular implementation and may be defined by a user via a user interface of the configuration manager <NUM>.

The printing device data <NUM> specifies data for printing devices including whether each printing device is configured and if so, with which configuration. <FIG> is a block diagram that depicts example printing device data <NUM> managed by the configuration manager <NUM>. In this example, the printing device data <NUM> is depicted as a table, where each row of the table corresponds to a particular printing device and specifies a Serial Number, a Type, a customer ID, and a Configuration. The Serial Number is a number that uniquely identifies the printing device and although serial numbers are used herein for purposes of explanation, embodiments are not limited to using serial numbers per se and any data the uniquely identifies a printing device may be used. One example is a Media Access Control (MAC) address.

The Type is the type of printing device and in this example may have the value of Type <NUM>, Type <NUM>, or Type <NUM>. The Customer ID is data that identifies an entity that controls or owns the printing device and although used herein for purposes of explanation, embodiments are not limited to Customer IDs per se and any data the uniquely identifies an entity that owns or controls a printing device may be used.

The Configuration is data that identifies the configuration for a printing device and in the present example may have the value of C1, C2, C3, Customer C-C2 or Customer B-C1. A blank or null value in cell means that a configuration has not yet been assigned to the printing device. This may occur, for example, when printing devices are sold to particular customers and corresponding entries created in the printing device data <NUM>, but those printing devices have not yet been configured using the approach described herein.

The configuration manager <NUM> may provide a Web-based user interface for creating and managing the configuration selection data <NUM>, the configuration data <NUM>, and the printing device data <NUM>. The Web-based user interface allows an administrative user to view the current configuration status of printing devices and to add, edit, and delete printing devices represented by the printing device data <NUM>. For example, the user interface may allow a user of a client device to add a new printing device and specify the serial number, type, customer ID and configuration, if the printing device is already configured. This may be done at any time, for example, when a printing device is sold to a customer, configured at the warehouse <NUM>, or deployed to the customer site <NUM>. If the new printing device is not yet configured, then the administrator does not have to specify a configuration and the printing device will be automatically configured as described herein. The administrative user may also change any of the parameters, including Serial Number, Type, and Customer ID.

Alternatively, configuration selection data <NUM>, the configuration data <NUM>, and the printing device data <NUM> may be populated based upon data received from third-party systems, such as an Enterprise Resource Planning (ERP) system, or device management systems, such as Streamline NX, by Ricoh. The user interface may also include controls that allow a user to search for printing devices by serial number (or other identifying information), customer ID, printing device type, configuration ID, etc. According to an embodiment, the configuration manager <NUM> tracks all actions performed with respect to the configuration selection data <NUM>, the configuration data <NUM>, and the printing device data <NUM>.

The approach described herein for configuring printing devices provides for both initial configuration of printing devices and subsequent configuration checks and reconfiguration of printing devices. Embodiments are depicted in the figures and described herein in the context of an initial configuration being performed at the warehouse <NUM> and the configuration check and reconfiguration being performed at the customer site <NUM>, but embodiments are not limited to this example and the initial configuration and subsequent configuration check and reconfiguration may be performed at any location.

Initial configuration of a printing device is performed when the configuration agent <NUM> is started on the printing device <NUM>, which may occur, for example, after the printing device <NUM> is powered on or any other time when the configuration agent <NUM> is started. For example, at the warehouse <NUM> the printing device <NUM> may be powered on, the configuration agent <NUM> installed by an administrative user, and then the printing device <NUM> powered down and on again. Alternatively, after installation, the configuration agent <NUM> may immediately being executing. Embodiments are not limited to the example of the initial configuration being performed at the warehouse <NUM> and initial configuration may be performed anywhere, including at the customer site <NUM>.

<FIG> is a message ladder diagram <NUM> that depicts messages exchanged between the elements in arrangement <NUM> during an initial configuration of the printing device <NUM>. Starting in step <NUM>, the configuration agent <NUM> starts up, which may be after the printing device <NUM> is powered on, or after the configuration agent <NUM> is started on the printing device <NUM>.

In step <NUM>, a configuration request is transmitted to the configuration manager <NUM>. For example, the configuration agent <NUM> may generate and transmit an HTTPS (or similar protocol) request to the configuration manager <NUM>. According to an embodiment, the request specifies the serial number of the printing device <NUM>. In the present example it is assumed that the serial number of the printing device <NUM> is SN15. According to an embodiment, in step <NUM> before transmitting the configuration request to the configuration manager <NUM>, the configuration agent <NUM> determines whether the configuration ID data <NUM> in the memory <NUM> has a stored configuration ID. If so, then the printing device <NUM> was previously configured and the configuration check process described hereinafter with reference to <FIG> is performed instead of the initial configuration process of <FIG>. In the present example, it is presumed that the configuration ID data <NUM> in the memory <NUM> does not have a stored configuration ID and therefore was not previously configured.

In step <NUM>, a determination is made whether the printing device <NUM> is currently configured. For example, the configuration manager <NUM> uses the serial number of the printing device <NUM> included in the request to identify a row in the printing device data <NUM> that corresponds to the serial number. The configuration manager <NUM> then examines the configuration field in the identified row to determine whether the printing device <NUM> is currently configured. The presence of a value in the configuration field indicates that the printing device <NUM> is currently configured with that configuration. A blank value indicates that the printing device <NUM> has not yet been configured, at least by the configuration manager <NUM>. The printing device <NUM> may be configured and operating with a basic or standard configuration, e.g., installed at the factory.

If the configuration field contains a blank value, indicating that the printing device <NUM> has not yet been configured, the configuration manager <NUM> uses other information from the printing device data <NUM> and the configuration selection data <NUM> to determine a configuration for the printing device <NUM>.

In the present example, the serial number of the printing device <NUM> is SN15. The row in the printing device data <NUM> that corresponds to the serial number SN15 does not have a value in the Configuration field, meaning that the printing device <NUM> has not yet been configured by the configuration manager <NUM>. According to an embodiment, the configuration manager <NUM> uses the value of "Type <NUM>" in the Type field and the value of "Customer C" in the Customer field to determine a configuration for the printing device <NUM> from the configuration selection data <NUM>. More specifically, the configuration selection data <NUM> specifies that configuration C3 should be used for Customer C and Type <NUM> printing devices. In situations where a particular printing device does not have a value in the Customer field, the configuration manager <NUM> may use the configuration for the type of printing device specified in the "No Assigned Customer" portion of the configuration selection data <NUM>. In situations where there is no value in the Type field, or not value in both the Customer and Type fields, the configuration manager <NUM> may assign a default configuration that may include, for example, a set of basis settings. According to an embodiment, the configuration manager <NUM> maintains model number to device type mapping data to allow the configuration manager <NUM> to use the model number of a printing device to determine a device type, and then use the configuration selection data <NUM> to select a configuration based upon the device type.

In step <NUM>, a configuration response is generated and transmitted to the printing device <NUM>. For example, the configuration manager <NUM> generates and transmits, to the configuration agent <NUM>, a configuration response that includes the C3 configuration data, or a reference to the C3 configuration data. The configuration data may be in any form or format that varies depending upon a particular implementation. The configuration agent <NUM> stores the configuration data as configuration data <NUM> in the memory <NUM>.

In step <NUM>, the printing device <NUM> applies the settings for the configuration. For example, the configuration agent <NUM> applies the settings in the C3 configuration data. This may include the configuration agent <NUM> extracting the settings from the C3 configuration data and making one or more OS <NUM> calls to a controller of the printing device <NUM> to apply the settings. Upon completion of the calls, the printing device <NUM> begins operating with the settings specified by the C3 configuration data.

In step <NUM>, the printing device <NUM> generates a configuration ID for the configuration. The configuration ID is data that uniquely corresponds to the settings in the C3 configuration data. Examples of the configuration ID data include, without limitation, a signature and a hash value. The configuration agent <NUM> may generate the configuration ID by processing the settings to create a signature, hash, checksum, etc. For example, the configuration agent <NUM> may provide the settings (or a subset thereof) as inputs to one or more one-way hash functions that generate hash results that uniquely correspond to the settings. The one-way hash functions may be implemented in the configuration agent <NUM> or may be external to the configuration agent <NUM> and invoked by the configuration agent <NUM>. In this manner, the resulting configuration ID uniquely corresponds to the current configuration of the printing device <NUM>. The configuration agent <NUM> stores the configuration ID in the configuration ID data <NUM> in the memory <NUM>. The configuration agent <NUM> stores the configuration ID in the configuration ID data <NUM> in a secure portion of the memory <NUM>, wherein the secure portion of the memory <NUM> is separate from where the configuration data <NUM> is stored.

In step <NUM> a configuration confirmation is transmitted to the configuration manager <NUM>. For example, the configuration agent <NUM> generates and transmits, to the configuration manager <NUM>, a confirmation message confirming that the printing device <NUM> is now configured with the C3 configuration data. Alternatively, in the event of an error that prevents the configuration agent <NUM> from configuring the printing device <NUM>, the configuration confirmation indicates that there was an error, and also additional details about the error, if available. If an error occurs, the configuration agent <NUM> may cause an error message to be displayed on the user interface <NUM> of the printing device <NUM>. The configuration agent <NUM> may also cause one or more error messages, e.g., via email, a messaging service, etc., to be generated and transmitted to an administrative user to notify them that an error has occurred preventing the printing device <NUM> from being configured.

In step <NUM>, the configuration manager <NUM> records that the printing device <NUM> has been configured. For example, the configuration manager <NUM> updates the Configuration field of the row in the printing device data <NUM> that corresponds to printing device <NUM> (SN <NUM>) with the value "C3" to indicate that the printing device <NUM> is now configured with the C3 configuration data. <FIG> is a block diagram that depicts the example printing device data <NUM> after being updated by the configuration manager <NUM>. The Configuration field <NUM> for the printing device <NUM> with serial number SN15 has been updated with the value of C3. The configuration manager <NUM> may also generate and transmit one or more message to, for example, the customer, a distributor, administrator, etc., indicate that the printing device <NUM> has been successfully configured. If the configuration confirmation indicates that an error occurred, then the configuration manager <NUM> does not update the printing device data <NUM> and instead may generate and transmit a notification to an administrative user, the customer, a distributor, etc. For example, the configuration manager <NUM> may cause a notification to be displayed on a user interface of a computing device on which the configuration manager <NUM> is executing. As another example, the configuration manager <NUM> may generate and transmit one or more error messages, e.g., via email, a messaging service, etc., to an administrative user to notify them that an error has occurred preventing the printing device <NUM> from being configured.

According to an embodiment, the configuration agent <NUM> is configured to determine whether the configuration has changed and if so, reconfigure the printing device <NUM>. The configuration check and reconfiguration described herein may be performed upon satisfaction of various criteria. Example criteria include at specified times, periodically, or any time the configuration agent <NUM> is started, depending upon a particular implementation.

<FIG> is a message ladder diagram <NUM> that depicts messages exchanged between the printing device <NUM> and the configuration manager <NUM> during a reconfiguration check and reconfiguration. Starting in step <NUM>, the current settings are retrieved, and a current configuration ID is generated. For example, the configuration agent <NUM> may make one or more OS <NUM> calls to a controller of the printing device <NUM> to retrieve the current settings being used by the printing device <NUM>. The configuration agent <NUM> then generates a current configuration ID using the current settings, as previously described herein.

In step <NUM>, the current configuration ID is compared to the stored configuration ID to determine whether the configuration of the printing device <NUM> has changed. This may include the configuration agent <NUM> retrieving the stored configuration ID from the configuration ID data <NUM> in the memory <NUM> and then comparing it to the current configuration ID. The configuration may change, for example, if an end user, third party attacker, virus or malware, etc., has changed the settings being used by the printing device <NUM>.

Since both the current configuration ID and the stored configuration ID are generated based upon settings of the printing device <NUM>, if the current configuration ID is the same as the stored configuration ID, then the settings configuration of the printing device <NUM> has not changed and the process of <FIG> is complete. If the current configuration ID is not the same as the stored configuration ID, then the configuration of the printing device <NUM> has changed and in step <NUM>, a configuration request is generated and transmitted to the configuration manager <NUM>. As was previously done in step <NUM>, the configuration request specifies the serial number of the printing device <NUM>. Continuing with the example of <FIG>, the serial number of the printing device <NUM> is SN15. The configuration agent <NUM> may also cause a notification to be displayed on the user interface <NUM> of the printing device <NUM>, such as a warning that the configuration may have been compromised and to not use the printing device <NUM>. The configuration agent <NUM> may also generate and transmit one or more messages to other locations, such as the configuration manager <NUM> to warn an administrative user of the condition of the printing device <NUM>.

According to an embodiment, if the configuration agent <NUM> determines that there is no stored configuration ID in the configuration ID data <NUM> in the memory <NUM>, then the configuration agent <NUM> proceeds to step <NUM> and generates and transmits a configuration request to the configuration manager <NUM>. This may occur, for example, if the printing device <NUM> is not configured at the warehouse <NUM> before being deployed to the customer site <NUM>.

In step <NUM> a determination is made whether the printing device <NUM> is currently configured. As in step <NUM>, the configuration manager <NUM> uses the serial number of the printing device <NUM> included in the request to identify a row in the printing device data <NUM> that corresponds to the printing device <NUM>.

Once the row has been identified, the configuration manager <NUM> examines the configuration field to determine whether the printing device <NUM> is currently configured. The presence of a value in the configuration field indicates that the printing device <NUM> is currently configured with that configuration. A blank value indicates that the printing device <NUM> has not yet been configured, at least from the perspective of the configuration manager <NUM>. If the configuration field contains a blank value, then the configuration manager <NUM> uses the customer ID and printing device type values from the printing device data <NUM> to identify a specified configuration for the printing device <NUM>, as previously described herein. In the present example, the Configuration field <NUM> (<FIG>) was updated to C3 when the printing device <NUM> was initially configured.

In step <NUM>, a configuration response is generated and transmitted to the printing device <NUM>. For example, the configuration manager <NUM> generates and transmits, to the configuration agent <NUM>, a configuration response that includes the C3 configuration data, or a reference to the C3 configuration data. According to an embodiment, the configuration agent <NUM> stores the configuration data as configuration data <NUM> in the memory <NUM>.

As an alternative to steps <NUM>-<NUM>, the configuration agent <NUM> may re-apply the configuration stored in the configuration data <NUM> from the memory <NUM>. This may be used in all cases, or in in situations where the configuration agent <NUM> cannot establish a connection with the configuration manager <NUM>.

In step <NUM>, the printing device <NUM> applies the settings for the configuration by extracting the settings from the C3 configuration data and making one or more OS <NUM> calls to a controller of the printing device <NUM> to apply the settings. Upon completion of the calls, the printing device <NUM> begins operating with the settings specified by the C3 configuration data.

In step <NUM>, the printing device <NUM> generates and stores a configuration ID in the configuration ID data <NUM> in the memory <NUM> as previously described. This configuration ID may overwrite the previously stored configuration ID, or the original configuration ID may be maintained for forensic purposes.

In step <NUM> a configuration confirmation is transmitted to the configuration manager <NUM> that specifies whether the configuration was successful. In the event of an error that prevents the configuration agent <NUM> from configuring the printing device <NUM>, the configuration confirmation may indicate that there was an error, and also additional details about the error, if available.

In step <NUM>, the configuration manager <NUM> records that the printing device <NUM> has been configured. For example, the configuration manager <NUM> updates the Configuration field of the row in the printing device data <NUM> that corresponds to printing device <NUM> (SN <NUM>) with the value "C3" to indicate that the printing device <NUM> is now configured with the C3 configuration data.

The approach for performing a configuration check and reconfiguration described herein provides several benefits. For example, it allows a printing device to automatically maintain a consistent, secure configuration with minimal involvement of IT personnel. It also allows the configuration of printing devices to be easily changed, even for a large number of printing devices. For example, a customer may decide to change the configuration for certain types of printing devices, e.g., to provide better security. This can be easily accomplished by the customer accessing the configuration manager <NUM> and updating the printing device data <NUM> for the customer's printing devices. The configuration agents then automatically update all of the printing devices without requiring IT staff to perform the updates.

According to one embodiment, the techniques described herein are implemented by at least one computing device. The techniques may be implemented in whole or in part using a combination of at least one server computer and/or other computing devices that are coupled using a network, such as a packet data network. The computing devices may be hard-wired to perform the techniques, or may include digital electronic devices such as at least one application-specific integrated circuit (ASIC) or field programmable gate array (FPGA) that are persistently programmed to perform the techniques, or may include at least one general purpose hardware processor programmed to perform the techniques pursuant to program instructions in firmware, memory, other storage, or a combination. Such computing devices may also combine custom hard-wired logic, ASICs, or FPGAs with custom programming to accomplish the described techniques. The computing devices may be server computers, workstations, personal computers, portable computer systems, handheld devices, mobile computing devices, wearable devices, body mounted or implantable devices, smartphones, smart appliances, internetworking devices, autonomous or semi-autonomous devices such as robots or unmanned ground or aerial vehicles, any other electronic device that incorporates hard-wired and/or program logic to implement the described techniques, one or more virtual computing machines or instances in a data center, and/or a network of server computers and/or personal computers.

<FIG> is a block diagram that illustrates an example computer system with which an embodiment may be implemented. In the example of <FIG>, a computer system <NUM> and instructions for implementing the disclosed technologies in hardware, software, or a combination of hardware and software, are represented schematically, for example as boxes and circles, at the same level of detail that is commonly used by persons of ordinary skill in the art to which this disclosure pertains for communicating about computer architecture and computer systems implementations.

Computer system <NUM> includes an input/output (I/O) subsystem <NUM> which may include a bus and/or other communication mechanism(s) for communicating information and/or instructions between the components of the computer system <NUM> over electronic signal paths. The I/O subsystem <NUM> may include an I/O controller, a memory controller and at least one I/O port. The electronic signal paths are represented schematically in the drawings, for example as lines, unidirectional arrows, or bidirectional arrows.

At least one hardware processor <NUM> is coupled to I/O subsystem <NUM> for processing information and instructions. Hardware processor <NUM> may include, for example, a general-purpose microprocessor or microcontroller and/or a special-purpose microprocessor such as an embedded system or a graphics processing unit (GPU) or a digital signal processor or ARM processor. Processor <NUM> may comprise an integrated arithmetic logic unit (ALU) or may be coupled to a separate ALU.

Computer system <NUM> includes one or more units of memory <NUM>, such as a main memory, which is coupled to I/O subsystem <NUM> for electronically digitally storing data and instructions to be executed by processor <NUM>. Memory <NUM> may include volatile memory such as various forms of random-access memory (RAM) or other dynamic storage device. Memory <NUM> also may be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor <NUM>. Such instructions, when stored in non-transitory computer-readable storage media accessible to processor <NUM>, can render computer system <NUM> into a special-purpose machine that is customized to perform the operations specified in the instructions.

Computer system <NUM> further includes non-volatile memory such as read only memory (ROM) <NUM> or other static storage device coupled to I/O subsystem <NUM> for storing information and instructions for processor <NUM>. The ROM <NUM> may include various forms of programmable ROM (PROM) such as erasable PROM (EPROM) or electrically erasable PROM (EEPROM). A unit of persistent storage <NUM> may include various forms of non-volatile RAM (NVRAM), such as FLASH memory, or solid-state storage, magnetic disk or optical disk such as CD-ROM or DVD-ROM, and may be coupled to I/O subsystem <NUM> for storing information and instructions. Storage <NUM> is an example of a non-transitory computer-readable medium that may be used to store instructions and data which when executed by the processor <NUM> cause performing computer-implemented methods to execute the techniques herein.

The instructions in memory <NUM>, ROM <NUM> or storage <NUM> may comprise one or more sets of instructions that are organized as modules, methods, objects, functions, routines, or calls. The instructions may be organized as one or more computer programs, operating system services, or application programs including mobile apps. The instructions may comprise an operating system and/or system software; one or more libraries to support multimedia, programming or other functions; data protocol instructions or stacks to implement TCP/IP, HTTP or other communication protocols; file format processing instructions to parse or render files coded using HTML, XML, JPEG, MPEG or PNG; user interface instructions to render or interpret commands for a graphical user interface (GUI), command-line interface or text user interface; application software such as an office suite, internet access applications, design and manufacturing applications, graphics applications, audio applications, software engineering applications, educational applications, games or miscellaneous applications. The instructions may implement a web server, web application server or web client. The instructions may be organized as a presentation layer, application layer and data storage layer such as a relational database system using structured query language (SQL) or no SQL, an object store, a graph database, a flat file system or other data storage.

Computer system <NUM> may be coupled via I/O subsystem <NUM> to at least one output device <NUM>. In one embodiment, output device <NUM> is a digital computer display. Examples of a display that may be used in various embodiments include a touch screen display or a light-emitting diode (LED) display or a liquid crystal display (LCD) or an e-paper display. Computer system <NUM> may include other type(s) of output devices <NUM>, alternatively or in addition to a display device. Examples of other output devices <NUM> include printers, ticket printers, plotters, projectors, sound cards or video cards, speakers, buzzers or piezoelectric devices or other audible devices, lamps or LED or LCD indicators, haptic devices, actuators or servos.

At least one input device <NUM> is coupled to I/O subsystem <NUM> for communicating signals, data, command selections or gestures to processor <NUM>. Examples of input devices <NUM> include touch screens, microphones, still and video digital cameras, alphanumeric and other keys, keypads, keyboards, graphics tablets, image scanners, joysticks, clocks, switches, buttons, dials, slides, and/or various types of sensors such as force sensors, motion sensors, heat sensors, accelerometers, gyroscopes, and inertial measurement unit (IMU) sensors and/or various types of transceivers such as wireless, such as cellular or Wi-Fi, radio frequency (RF) or infrared (IR) transceivers and Global Positioning System (GPS) transceivers.

Another type of input device is a control device <NUM>, which may perform cursor control or other automated control functions such as navigation in a graphical interface on a display screen, alternatively or in addition to input functions. Control device <NUM> may be a touchpad, a mouse, a trackball, or cursor direction keys for communicating direction information and command selections to processor <NUM> and for controlling cursor movement on display <NUM>. The input device may have at least two degrees of freedom in two axes, a first axis (e.g., x) and a second axis (e.g., y), that allows the device to specify positions in a plane. Another type of input device is a wired, wireless, or optical control device such as a joystick, wand, console, steering wheel, pedal, gearshift mechanism or other type of control device. An input device <NUM> may include a combination of multiple different input devices, such as a video camera and a depth sensor.

In another embodiment, computer system <NUM> may comprise an internet of things (IoT) device in which one or more of the output device <NUM>, input device <NUM>, and control device <NUM> are omitted. Or, in such an embodiment, the input device <NUM> may comprise one or more cameras, motion detectors, thermometers, microphones, seismic detectors, other sensors or detectors, measurement devices or encoders and the output device <NUM> may comprise a special-purpose display such as a single-line LED or LCD display, one or more indicators, a display panel, a meter, a valve, a solenoid, an actuator or a servo.

When computer system <NUM> is a mobile computing device, input device <NUM> may comprise a global positioning system (GPS) receiver coupled to a GPS module that is capable of triangulating to a plurality of GPS satellites, determining and generating geo-location or position data such as latitude-longitude values for a geophysical location of the computer system <NUM>. Output device <NUM> may include hardware, software, firmware and interfaces for generating position reporting packets, notifications, pulse or heartbeat signals, or other recurring data transmissions that specify a position of the computer system <NUM>, alone or in combination with other application-specific data, directed toward host <NUM> or server <NUM>.

Computer system <NUM> may implement the techniques described herein using customized hard-wired logic, at least one ASIC or FPGA, firmware and/or program instructions or logic which when loaded and used or executed in combination with the computer system causes or programs the computer system to operate as a special-purpose machine. According to one embodiment, the techniques herein are performed by computer system <NUM> in response to processor <NUM> executing at least one sequence of at least one instruction contained in main memory <NUM>. Such instructions may be read into main memory <NUM> from another storage medium, such as storage <NUM>.

Non-volatile media includes, for example, optical or magnetic disks, such as storage <NUM>. Volatile media includes dynamic memory, such as memory <NUM>. Common forms of storage media include, for example, a hard disk, solid state drive, flash drive, magnetic data storage medium, any optical or physical data storage medium, memory chip, or the like.

For example, transmission media includes coaxial cables, copper wire and fiber optics, including the wires that comprise a bus of I/O subsystem <NUM>.

Various forms of media may be involved in carrying at least one sequence of at least one instruction to processor <NUM> for execution. The remote computer can load the instructions into its dynamic memory and send the instructions over a communication link such as a fiber optic or coaxial cable or telephone line using a modem. A modem or router local to computer system <NUM> can receive the data on the communication link and convert the data to a format that can be read by computer system <NUM>. For instance, a receiver such as a radio frequency antenna or an infrared detector can receive the data carried in a wireless or optical signal and appropriate circuitry can provide the data to I/O subsystem <NUM> such as place the data on a bus. I/O subsystem <NUM> carries the data to memory <NUM>, from which processor <NUM> retrieves and executes the instructions. The instructions received by memory <NUM> may optionally be stored on storage <NUM> either before or after execution by processor <NUM>.

Communication interface <NUM> provides a two-way data communication coupling to network link(s) <NUM> that are directly or indirectly connected to at least one communication networks, such as a network <NUM> or a public or private cloud on the Internet. For example, communication interface <NUM> may be an Ethernet networking interface, integrated-services digital network (ISDN) card, cable modem, satellite modem, or a modem to provide a data communication connection to a corresponding type of communications line, for example an Ethernet cable or a metal cable of any kind or a fiber-optic line or a telephone line. Network <NUM> broadly represents a local area network (LAN), wide-area network (WAN), campus network, internetwork or any combination thereof. Communication interface <NUM> may comprise a LAN card to provide a data communication connection to a compatible LAN, or a cellular radiotelephone interface that is wired to send or receive cellular data according to cellular radiotelephone wireless networking standards, or a satellite radio interface that is wired to send or receive digital data according to satellite wireless networking standards. In any such implementation, communication interface <NUM> sends and receives electrical, electromagnetic or optical signals over signal paths that carry digital data streams representing various types of information.

Network link <NUM> typically provides electrical, electromagnetic, or optical data communication directly or through at least one network to other data devices, using, for example, satellite, cellular, Wi-Fi, or BLUETOOTH technology. For example, network link <NUM> may provide a connection through a network <NUM> to a host computer <NUM>.

Furthermore, network link <NUM> may provide a connection through network <NUM> or to other computing devices via internetworking devices and/or computers that are operated by an Internet Service Provider (ISP) <NUM>. ISP <NUM> provides data communication services through a world-wide packet data communication network represented as internet <NUM>. A server computer <NUM> may be coupled to internet <NUM>. Server <NUM> broadly represents any computer, data center, virtual machine or virtual computing instance with or without a hypervisor, or computer executing a containerized program system such as DOCKER or KUBERNETES. Server <NUM> may represent an electronic digital service that is implemented using more than one computer or instance and that is accessed and used by transmitting web services requests, uniform resource locator (URL) strings with parameters in HTTP payloads, API calls, app services calls, or other service calls. Computer system <NUM> and server <NUM> may form elements of a distributed computing system that includes other computers, a processing cluster, server farm or other organization of computers that cooperate to perform tasks or execute applications or services. Server <NUM> may comprise one or more sets of instructions that are organized as modules, methods, objects, functions, routines, or calls. The instructions may be organized as one or more computer programs, operating system services, or application programs including mobile apps. The instructions may comprise an operating system and/or system software; one or more libraries to support multimedia, programming or other functions; data protocol instructions or stacks to implement TCP/IP, HTTP or other communication protocols; file format processing instructions to parse or render files coded using HTML, XML, JPEG, MPEG or PNG; user interface instructions to render or interpret commands for a graphical user interface (GUI), command-line interface or text user interface; application software such as an office suite, internet access applications, design and manufacturing applications, graphics applications, audio applications, software engineering applications, educational applications, games or miscellaneous applications. Server <NUM> may comprise a web application server that hosts a presentation layer, application layer and data storage layer such as a relational database system using structured query language (SQL) or no SQL, an object store, a graph database, a flat file system or other data storage.

Computer system <NUM> can send messages and receive data and instructions, including program code, through the network(s), network link <NUM> and communication interface <NUM>. The received code may be executed by processor <NUM> as it is received, and/or stored in storage <NUM>, or other non-volatile storage for later execution.

Claim 1:
A printing device (<NUM>, <NUM>) comprising:
one or more processors (<NUM>);
one or more memories (<NUM>);
a print process executing on the printing device for printing print jobs at the printing device; and
a configuration agent (<NUM>) executing on the printing device (<NUM>, <NUM>) and configured to:
receive, from a configuration manager via one or more computer networks, configuration data for the printing device (<NUM>, <NUM>), wherein the configuration data specifies a plurality of settings for the printing device (<NUM>, <NUM>),
apply the plurality of settings from the configuration data to the printing device (<NUM>, <NUM>) so that the printing device operates in accordance with the plurality of settings, and
store the configuration data in the one or more memories (<NUM>),
wherein the one or more memories (<NUM>) comprise a secure portion that is separate from where the configuration data is stored; and
the configuration agent (<NUM>) executing on the printing device (<NUM>, <NUM>) is further configured to:
generate configuration identification data that uniquely corresponds to the plurality of settings specified by the configuration data, and
store the configuration identification data that uniquely corresponds to the plurality of settings specified by the configuration data in the secure portion of the one or more memories (<NUM>) of the printing device (<NUM>, <NUM>),
wherein the configuration agent (<NUM>) executing on the printing device (<NUM>, <NUM>) is further configured to, upon satisfaction of one or more criteria:
retrieve a current plurality of settings being used by the printing device (<NUM>, <NUM>),
generate, based upon the current plurality of settings being used by the printing device (<NUM>, <NUM>), current configuration identification data that uniquely corresponds to the current plurality of settings being used by the printing device (<NUM>, <NUM>),
compare the current configuration identification data to the configuration identification data stored in the secure portion of the one or more memories (<NUM>), and
in response to the current configuration identification data being different than the stored configuration identification data, generate and transmit a request for configuration data to the configuration manager (<NUM>) .