Method and apparatus for modifying behavior of code for a controller-based device
Abstract
Methods and devices for remotely modifying the behavior of code for controller-based devices are provided. The method is to receive the modified profile from the user device in the code virtualization server, where the modified profile corresponds to the profile associated with the code to run on the controller-based device and to the controller. The underlying device includes a step that is remote to the user device and the code virtualization server, and a step that updates the profile with the modified profile. The code contains a first code to run on a controller-based device, and the first code causes the second code to run on the code virtualization server with the updated profile. Includes remote calls from controller-based devices to code virtualization servers for.

Term
9.8 yearsto projected expiry
Projected expiry 8 July 2036, counted from filing; an application has no term until it is granted.
- Priority
- Filed
- Published
- Today
- Projected expiry
15 claims: 6 independent, 9 dependent
- 1コントローラに基づくデバイスのためのコードの挙動を遠隔で修正するためのコンピュータによって実施される方法であって、 コード仮想化サーバにおいてユーザデバイスから修正されたプロファイルを受信するステップであって、前記修正されたプロファイルが、前記コントローラに基づくデバイス上で実行するための前記コードに関連するプロファイルに対応し、前記コントローラに基づくデバイスが、前記ユーザデバイスおよび前記コード仮想化サーバの遠隔にある、ステップと、 前記プロファイルを前記修正されたプロファイルによって更新するステップとを含み、 前記コードが、前記コントローラに基づくデバイス上で実行するための第1のコードを含み、前記第1のコードが、更新されたプロファイルを使用して前記コード仮想化サーバ上で第2のコードを実行することを引き起こすための、前記コントローラに基づくデバイスから前記コード仮想化サーバへの遠隔の呼び出しを含む、方法。
- 2更新する前記ステップが、前記修正されたプロファイルの対応するパラメータに従って前記プロファイルの少なくとも1つのパラメータを修正することを含む請求項1に記載の方法。
- 3ユーザデバイス上に表示するために複数のコントローラに基づくデバイスのリストを前記コード仮想化サーバから前記ユーザデバイスに送信するステップと、 前記コントローラに基づくデバイスのための前記コードの挙動を修正するための、前記複数のコントローラに基づくデバイスからの前記コントローラに基づくデバイスの選択を前記ユーザデバイスから受け取るステップとをさらに含む請求項1に記載の方法。
- 4前記修正されたプロファイルを使用して更新されるための前記プロファイルを取り出すステップと、 表示するために前記プロファイルを前記ユーザデバイスに送信するステップとをさらに含む請求項3に記載の方法。
- 5前記リストが、前記ユーザデバイスのグラフィカルユーザインターフェース(GUI)において表示するために送信され、前記選択が、前記GUIを介して受け取られ、前記修正されたプロファイルが、前記GUIを介して受け取られる請求項4に記載の方法。
- 6前記コントローラに基づくデバイスから前記遠隔の呼び出しを受信すると、前記更新されたプロファイルを使用して前記コード仮想化サーバ上で前記第2のコードを実行するステップをさらに含む請求項1に記載の方法。
- 7前記第2のコードを実行することが、前記プロファイルを使用して少なくとも1つの遠隔のサービスのプロビジョニングを開始し、前記遠隔のサービスが、前記コントローラに基づくデバイス、前記ユーザデバイス、および前記コード仮想化サーバの遠隔のデバイス上でプロビジョニングされる請求項6に記載の方法。
- 8前記遠隔のサービスの前記プロビジョニングに関連するデータを、前記遠隔のサービスの前記プロビジョニングの後に、前記ユーザデバイスまたは前記コントローラに基づくデバイスのうちの少なくとも1つに送信するステップをさらに含む請求項7に記載の方法。
- 9コントローラに基づくデバイスのためのコードの挙動を遠隔で修正するための装置であって、 プロセッサと、 前記プロセッサを使用して実行されるときに、 コード仮想化サーバにおいてユーザデバイスから修正されたプロファイルを受信するステップであって、前記修正されたプロファイルが、前記コントローラに基づくデバイス上で実行するための第1のコードに関連するプロファイルに対応し、前記コントローラに基づくデバイスが、前記ユーザデバイスおよび前記コード仮想化サーバの遠隔にある、ステップ、ならびに 前記プロファイルを前記修正されたプロファイルによって更新するステップを含む方法の実行を引き起こす実行可能な命令を含むメモリとを含み、 前記第1のコードが、前記プロファイルを使用して前記コード仮想化サーバ上で第2のコードを実行することを引き起こすための、前記コントローラに基づくデバイスから前記コード仮想化サーバへの遠隔の呼び出しを含む、装置。
- 10前記コントローラに基づくデバイスを前記プロファイルを含む少なくとも1つのプロファイルと相互に関連付けるインデックスをさらに含み、更新する前記ステップが、前記修正されたプロファイルの対応するパラメータに従って前記プロファイルの少なくとも1つのパラメータを修正することを含む請求項9に記載の装置。
- 11前記方法が、 ユーザデバイス上に表示するために複数のコントローラに基づくデバイスのリストを前記コード仮想化サーバから前記ユーザデバイスに送信するステップと、 前記コントローラに基づくデバイスのための前記コードの挙動を修正するための、前記複数のコントローラに基づくデバイスからの前記コントローラに基づくデバイスの選択を前記ユーザデバイスから受け取るステップと、 前記修正されたプロファイルを使用して更新されるための前記プロファイルを取り出すステップと、 表示するために前記プロファイルを前記ユーザデバイスに送信するステップとをさらに含み、 前記リストが、前記ユーザデバイスのグラフィカルユーザインターフェース(GUI)において表示するために送信され、前記選択が、前記GUIを介して受け取られ、前記修正されたプロファイルが、前記GUIを介して受け取られる請求項9に記載の装置。
- 12前記方法が、前記修正されたプロファイルを使用して更新された後、前記プロファイルを記憶するステップをさらに含む請求項9に記載の装置。
- 13前記方法が、前記コントローラに基づくデバイスから前記遠隔の呼び出しを受信すると、前記更新されたプロファイルを使用して前記コード仮想化サーバ上で前記第2のコードを実行するステップをさらに含む請求項9に記載の装置。
- 14前記第2のコードを実行することが、前記プロファイルを使用して少なくとも1つの遠隔のサービスのプロビジョニングを開始し、前記遠隔のサービスが、前記コントローラに基づくデバイス、前記ユーザデバイス、および前記コード仮想化サーバの遠隔のデバイス上でプロビジョニングされる請求項13に記載の装置。
- 15前記方法が、前記遠隔のサービスの前記プロビジョニングに関連するデータを、前記サービスの前記プロビジョニングの後に、前記ユーザデバイスまたは前記コントローラに基づくデバイスのうちの少なくとも1つに送信するステップをさらに含む請求項14に記載の装置。
Independent claims15
50 paragraphs, as filed
0001Embodiments of the invention generally relate to methods and devices for modifying the behavior of code for controller-based devices.
0002The use of field programmable gate arrays (FPGAs) and other controller-based devices such as MCUs, SoCs, mobile phones, and computers (eg, based on microcontrollers or microprocessors) has become very widespread. Low manufacturing costs, availability, and customization of controllers make microcontrollers and systems on a chips (SoCs) (for example, PIC, ARDUINO, RASPBERRY PI, etc.) commercial for device creation. And it has led to a surge in its use by enthusiasts. Controller-based devices include processor cores and memory that are programmable to communicate with peripherals and process input / output data. Not only a small amount of random access memory (RAM), but also program memory in the form of NOR flash or OTP ROM is often included in devices based on such controllers. Devices based on some such controllers are designed for applications that are embedded within larger devices.
0003Real-world applications of such controller-based devices could potentially involve connecting controller-based devices to ordinary objects or systems as peripherals, thereby such peripherals. It enables device digitization, connectivity, and even remote control. However, to allow such real-world applications to be used by the average user, especially those with limited programming and hardware knowledge or no such knowledge at all. , There are some challenges.
0004Configuring peripherals (ordinary objects or systems) for use with controller-based devices is generally very complex. In addition, in some applications of controller-based devices, the ability to accommodate dynamic inputs and / or generate dynamic outputs may be desirable. Configuring and programming controller-based devices for dynamic inputs or outputs requires writing or rewriting code for all controller-based devices, rewriting code or making the controller Very much for the average user as reprogramming a based device requires an understanding of the peripheral device hierarchy and controller-based devices suitable for the peripheral, coding commands, proper calling syntax, and other programming parameters. Have difficulty. Without the correct code, the program will either not work or will generate an error. Moreover, rewriting the program each time an input, output modification, or any other change in code behavior is required is tedious and time consuming, even for a simple and small group of devices based on such a controller. It may be too much. In some cases, reprogramming or rewriting code can be almost as labor-intensive as programming or writing code for the first time.
0005Moreover, as the Internet of Things (IoT) grows, more and more such controller-based devices are connected to each other and / or the Internet, and reprogramming related to achieving the desired code behavior. Significantly increases the complexity of. A group of such devices may communicate with each other and / or with the gateway such that the gateway is a proxy for Internet communication for so-called edge devices. Edge devices may communicate directly through one or more gateways or as independent devices. Within the group, all devices (gateways and edges) must be programmed in a compatible way to facilitate interoperability. In addition to reprogramming according to customizations to achieve the desired code behavior, managing compatibility with each customization can be too time consuming.
<p num="0006"><patcit num="1"><text>U.S. Patent Application No. 11 / 853,137</text></patcit><patcit num="2"><text>U.S. Patent Application No. 11 / 853,143</text></patcit><patcit num="3"><text>U.S. Patent Application No. 12 / 931,292</text></patcit><patcit num="4"><text>U.S. Patent Application No. 14 / 307,198</text></patcit><patcit num="5"><text>U.S. Patent Application No. 14 / 307,208</text></patcit><patcit num="6"><text>U.S. Patent Application No. 14 / 307,227</text></patcit><patcit num="7"><text>U.S. Patent Application No. 14 / 328,415</text></patcit><patcit num="8"><text>U.S. Patent Application No. 14 / 593,151</text></patcit><patcit num="9"><text>U.S. Patent Application No. 14 / 685,064</text></patcit></p>
<p num="0007"> Therefore, there is a need in the art to modify the behavior of code for controller-based devices and reduce at least some of the above problems.</p>
<p num="0008"> Embodiments of the present invention generally represent and describe remotely the behavior of the code for a controller-based device, which is shown and described in connection with substantially at least one of the figures, which is fully described by the claims. Related to methods and equipment for modification.</p><p num="0009"> These and other features and advantages of the present disclosure may be understood by reviewing the following detailed description of the present disclosure, along with accompanying drawings in which similar reference numbers refer to similar parts throughout.</p><p num="0010"> A more specific description of the invention, briefly described above, is made by reference to embodiments, some of which are illustrated in the accompanying drawings, so that the above-mentioned features of the invention can be understood in detail. There is a possibility that However, the accompanying drawings show only typical embodiments of the invention and should therefore not be considered limiting the scope of the invention, as the reason may lead to other equally effective embodiments of the invention. Please note that there is.</p>
0011<figref num="1">It is a block diagram of the system 100 for remotely modifying the behavior of a code according to the embodiment of the present invention.</figref><figref num="2">FIG. 5 is a flow diagram of a method according to an embodiment of the present invention for modifying the behavior of code for a controller-based device by modifying the profile associated with the process executed by the code virtualization server of FIG.</figref><figref num="3">FIG. 5 is a flow chart of a method 300 performed by various devices of device 100 of FIG. 1 to modify the behavior of code to be executed by a controller-based device according to an embodiment of the present invention.</figref><figref num="4">FIG. 5 is a flow diagram of a method performed by a device based on at least one controller and a code virtualization server of FIG. 1 to control the behavior of code for a device based on at least one controller according to an embodiment of the invention.</figref>
0012In more detail, embodiments of the present invention relate to methods and devices for remotely modifying code behavior for edge devices and gateway devices (also referred to as "controller-based devices" or "CB devices" for short). On changing the code-related profile for a controller-based device without changing the code itself. The code for controller-based devices is executed using the modified profile, thereby modifying the behavior of the code without the need to rewrite the entire code for controller-based devices. Code deployed on a controller-based device ("first code") includes a call to perform a function ("second code") on a remote device, eg, a server. The code deployed on the controller-based device (first code) and the remote function (second code) together form the code for the controller-based device or related to the controller-based device. Profiles are associated with such code for controller-based devices (eg, devices with controllers such as microcontrollers, microprocessors, SoCs, MCUs, etc.) and are used to implement such code. .. The profile is modified and stored on a remote device of the controller-based device, eg, a code virtualization server, which may be a remote device executing the second code. An embodiment of the invention uses a graphical user interface (GUI) on a user device to allow the user to select a remote controller-based device for the user device and to profile the code for the controller-based device. Allows you to access, modify the profile remotely, and start executing code with the modified profile. Enforcing the code with the modified profile is a modification of the code itself Achieve the desired modified code behavior without the need for positives. As a result, the behavior of the code to run on the controller-based device is remotely controlled or modified without the need to reprogram the controller-based device.
0013As used herein, the terms "code related to a controller-based device," "code for a controller-based device," and "code for running on a controller-based device" are not. May be used interchangeably unless it is clear from the context. The code for the controller-based device is the first code that runs on the controller-based device and the second code that is called by the first code to run on the remote device of the controller-based device. Includes code and. The second code is executed using the profile, and the profile is therefore associated with the second code. The profile is also associated with the first code, which requires the execution of the second code. In this way, the profile is also associated with the code to run on the controller-based device.
0014U.S. Patent Application Nos. 11 / 853,137 filed on September 11, 2007, filed on September 11, 2007, Nos. 11 / 853,143, and January 28, 2011, assigned to the assignee of the invention. No. 12 / 931,292 (now US Pat. No. 8,726,285), filed with, describes techniques for remotely generating, deploying, and executing workflows. U.S. Patent Application No. 14 / 307,198 filed on June 17, 2014, filed on June 17, 2014, No. 14 / 307,208, transferred to the transferee of the invention, on June 17, 2014. No. 14 / 307,227 filed, No. 14 / 328,415 filed on July 10, 2014, No. 14 / 593,151 filed on January 9, 2015, and No. 14 filed on April 13, 2015. / 685,064 describes techniques for automatic code and SDK generation, code and SDK virtualization, and generation of remote process calls for code virtualization. The enumerated applications automatically create software for controller-based devices that incorporate the controller, and remotely map and define the use of hardware such as sensors or actuators to the controller using a graphical user interface. Describes techniques for running software, for example, remotely to extend the capabilities of such controller-based devices through workflows. Each of the applications listed above is incorporated herein by reference in its entirety.
0015These techniques work by placing code snippets and / or libraries in the memory of controller-based devices, because snippets run on remote devices, such as code virtualization servers, when run. (Or part of the code) and / or send data (either directly or through the code virtualization server) to a remote service remote to the code virtualization server, and / or by the remote service Invoke further functions that are executed remotely on the data. These techniques are used to create and manage controller-based solutions that include controller-based devices, including generating programs for controller-based devices. Embodiments of the present invention use these techniques to modify the behavior of program code for controller-based devices. Depending on such embodiments, the behavior of the code can be modified, for example, in a dynamic environment where the input for the code needs to be modified, different outputs are required, or both. Further, embodiments allow the user to remotely modify the behavior of the code, for example by using a remote user computer of the device on which the code is executed.
0016FIG. 1 is a block diagram of a system 100 for remotely modifying the behavior of a code according to one or more embodiments of the present invention. System 100 is a device 102 based on multiple controllers 102<sub>1</sub> ... 102<sub>N</sub> Multiple controller-based devices 103 (collectively referred to as controller-based devices 102)<sub>1</sub> ... 103<sub>P</sub> Includes (collectively referred to as controller-based device 103), gateway 108, Internet 110, user computer 112, code virtualization server 114, arbitrary database 115, and remote service 118.
0017The controller-based device 102 and gateway 108 form a group (or device group 116) of devices connected to the Internet 110. Device group 116 is the communication path 106<sub>1</sub> ... 106<sub>N</sub>Communicate between the controller-based device 102 and the gateway 108 along. The communication path is generally a wireless path, but in some embodiments the path may be wired. In addition, in some embodiments, the controller-based device 102 is a dashed path 104.<sub>1</sub> ... 104<sub>N</sub>It may be possible to communicate between devices 102 based on those controllers along the way. The controller-based device 103 communicates directly with the Internet 110 and communicates between those controller-based devices 103 along the dashed path 109. Although a single gateway 108 is shown, multiple gateways 108 may be used within a group or across multiple groups similar to device group 116. Each of the controller-based device 102, the controller-based device 103, and the gateway 108 can be programmed either remotely from the controller, eg, the user device 112, or through a direct connection from the user device 112. Includes processor. In some embodiments, each of the controller-based device 102, controller-based device 103, and gateway 108 microcontrollers may be programmed by the code virtualization server 114.
0018The devices based on each controller (edge devices 102, 103, and gateway 108) include a device controller (DC), peripheral electronics (PE), and memory. For example, for brevity, controller-based device 103<sub>P</sub>Only device controller 120, peripheral electronics 122, and memory 124 are shown to be included, but each device (edge devices 102, 103, and gateway 108) includes device controller and memory, and includes peripheral electronics. there is a possibility. The device controller 120 includes a microcontroller (for example, PIC, AVR type, ARM type, etc.) and a system-on-chip (SoC, for example, RASPBERRY). PI), or one or more of the microprocessors widely known in the art. The type of controller can vary from device to device, for example, based on the intended use and required functionality of such devices. Peripheral electronics 122 includes, but is not limited to, sensors, lights, audio speakers, actuators, displays, printers, scanners, I / O devices, and the like. Peripheral electronics 122 include components for managing or operating a normal system, or peripheral electronics 122 itself, among other things, music systems, alarms, household appliances, etc. It is a normal system such as an electric device or an electromechanical device. Memory 124 is any form of digital storage used to store data and executable software. Such memory includes, but is not limited to, random access memory, read-only memory, disk storage, optical storage, and the like. Memory 124 is a computer-readable instruction, controller-based device 103 corresponding to the operating system (not shown).<sub>P</sub>Stores a first code 126 that further includes a call 128 to a second code on a remote device, eg, a code virtualization server 114. The first code 126 contains the automatically generated controller program (AGCP) code and other code components (not shown) that contain the first code 126 and the libraries needed to execute call 128. And can be included. Code components can also ensure that controller-based devices can communicate with the code virtualization server 114 through or without gateway 108, and similar code components for gateway 108 are such. Communication can be enabled.
0019User device 112 includes CPU 130, support circuitry 132, and memory 136. CPU The 130 could be any off-the-shelf processor, microprocessor, microcontroller, and so on. The support circuit 132 includes a well-known circuit that provides the CPU with functions such as a user interface, a clock circuit, network communication, a cache, a power supply, and an I / O circuit. I / O circuits include a display 134, for example, various standard or touch based displays such as computer monitors widely known in the art. In some embodiments, the user interface includes a keypad, electronic buttons, speakers, touch screen, display, or other user interaction mechanism. Memory 136 is any form of digital storage used to store data and executable software. Such memory includes, but is not limited to, random access memory, read-only memory, disk storage, optical storage, and the like. Memory 136 is a computer-readable instruction, graphical user interface (GUI) corresponding to the operating system (not shown). 138, List 140 of controller-based devices for which modification of code behavior is available using this embodiment, and remembers one or more profiles received from the code virtualization server 114 or modifications to them. Store profile store 142 for. User device 112 selects a controller-based device to modify the behavior of the code, generates a modified profile to modify the behavior of the code, sends it, and executes the modified code to display it. Joined to network 110 when receiving the result of. The GUI 138 is a controller-based device (102, 103, 108) from the code virtualization server 114 to modify the behavior of the code installed on the controller-based device (102, 103, 108) (for example, the first code). , 108) Take out the list. GUI 138 also retrieves profiles related to code installed on devices based on one or more controllers in Listing 140, and such retrieved profiles can be stored in profile store 142 before and after modification. There is sex. In some embodiments, GUI 138 is software on a code virtualization server that is rendered on the user device by the browser of user device 112. In some embodiments (not shown), the listing 140 and the profile store 142 are on the code virtualization server 114 and are displayed by the browser on the user device 112.
0020GUI 138 (displayed directly or by a browser) is rendered on display 134. Listing 140 is displayed in GUI 138 as selectable listing 144, from which selectable listing 144 is a controller-based device (CBD).<sub>1</sub> ... CBD<sub>x</sub>) Can be selected. The selectable list 146 of profiles retrieved by GUI 138 from Code Virtualization Server 114 is one or more profiles (Profile) corresponding to the device based on the selected controller.<sub>1</sub> ... Profile<sub>y</sub>)including. Each profile is a list of parameters 148 (Parameter)<sub>1</sub> ... Parameter<sub>z</sub>)including. The user may request Listing 140, which may be requested by the Code Virtualization Server 114 and, once retrieved, appear as Listing 144, from Listing 144 where the user is CBD. CBD to remotely modify the behavior of the code for 145<sub>1</sub> Select (or "CBD 145"). Upon receiving the CBD 145 selection, the GUI 138 retrieves the profile associated with the code for the CBD 145 (the code to run on the CBD and / or the code associated with that code) for user selection. Presents a list of profiles 146. The user is Profile<sub>1</sub> Select (or "Profile 147") and GUI 138 displays a list of parameters 148 contained in profile 147. Parameter to modify parameter 149 to modify the behavior of the code for CBD 145 as desired<sub>1</sub> Select (or "Parameter 149"). Users may modify one or more parameters using well-known I / O devices in the art to accommodate devices based on one or more controllers in Listing 140. May modify one or more parameters and profiles as well. The modified profile is stored in the profile store 142, for example, using the Save button 133 and sent to the Code Virtualization Server 114, for example, using the Submit button 135. The above description merely illustrates one possible GUI layout configuration and does not limit the techniques described herein to such examples.
0021In some embodiments (not shown), the GUI 138 further displays the result of the modified code behavior on the display 134. In some embodiments (not shown), GUI 138 creates and / or modifies a program for a controller-based device, tests the program, and onto controller-based devices 102, 103 and / or gateway 108. Includes an integrated development environment (IDE) for deployment. An alternative embodiment may provide the functionality provided by any combination of CPU 130, support circuit 132, and memory 136 using an algorithm on a custom application specific integrated circuit (ASIC). is there. In some embodiments, the I / O device includes a keypad, electronic buttons, speakers, touch screen, display, or other user interaction mechanism.
0022The code virtualization server 114 may be a multipurpose computer or other electronic processing device programmed to be a dedicated computer for performing functions related to embodiments of the present invention. The code virtualization server 114 includes a CPU 150, a support circuit 152, and a memory 154 containing instructions and algorithms. CPU 150 can be any off-the-shelf processor, microprocessor, microcontroller, and so on. Support circuit 152 includes well-known circuits that provide CPU with functions such as user interface, clock circuit, network communication, cache, power supply, and I / O circuit. An alternative embodiment is a CPU The functionality provided by any combination of 150, support circuitry 152, and memory 154 may be provided using control algorithms on custom application specific integrated circuits (ASICs). In some embodiments, the user interface includes a keypad, electronic buttons, speakers, touch screen, display, or other user interaction mechanism. In some embodiments, the user interface may communicate with controller-based devices 102, 103, and 108.
0023Memory 154 can be any form of digital storage used to store data and executable software. Such memory includes, but is not limited to, random access memory, read-only memory, disk storage, optical storage, and the like. The memory stores computer-readable instructions corresponding to interface 156, profile updater 157, process library 158, software development kit (SDK) generator 160, code generator 162, profile database 164, execution engine 166, and device database 178.
0024Interface 156 provides the ability for user device 112 to interact with code virtualization server 114. In some embodiments, the interface 156 may be sent to the user device by the code virtualization server 114 or otherwise provided to the user for installation on the user device 112, for example. It may also include GUI software that supports GUI 138. In some embodiments, interface 156 is a GUI through the browser of user device 112. Includes software for rendering 138. In addition, interface 156 provides connectivity to controller-based devices 102, 103, 108 and remote service 118. Profile updater 157 updates profile 168, for example, with the modified profile received from user device 112. Profile updater 157 modifies one or more parameters of profile 168 according to the corresponding parameters of the modified profile. In addition, the profile updater 157 stores the updated profile in or as profile 168. In some embodiments, the profile updater 157 is included in interface 156. Process library 158 contains code that can be executed upon receiving a call from a controller-based device (ie, a second code 159, also known as "choreograph" or "choreo"). According to some embodiments, the second code is executed with an updated profile based on the modified profile received from user device 112. According to some embodiments, the second code performs functions that are detached from the device based on a particular controller, otherwise the device controller of the controller-based device performs those functions. I don't get it. The SDK Generator 160 provides the required code libraries, for example, depending on the hardware, software platform, communication infrastructure, and other code execution parameters, so that the first code, the second code, or both. Generate an SDK to support execution. The code generator 162 generates the first code for the controller-based device, the first code is the second code 1 using the profile associated with the controller-based device. Includes a controller-based device-to-code virtualization server 114 call to run 59. The profile database 164 contains at least one profile 168 corresponding to at least one process in process library 158 (eg, second code 159). Profile 168 includes a connection profile 172 containing process parameters 170 and user data such as their list, username, identity, and password, connection parameters 174, and protocol 176 related to the execution of code 159. Profile 168 can also include a profile name, for example a parameter such as the name of a set of parameters (including all subprofiles), a hardware profile parameter such as a hardware type or processor type, for example Arduino. Uno and Arduino Yun are examples of hardware types, and AVR, ARM and PIC are examples of processor types. Examples of profile parameters are shown in Table 1 without limitation. The profile 168 is set according to the desired behavior of the second code 159. The profile database 164 contains several profiles (not shown) similar to profile 168. The device database 178 includes a list 182 of controllers 102, 103, 108 based on controllers whose code behavior may be modified, and a profile, eg, profile 168, based on one or more controller devices, eg, controllers. Based on device 103 1 (Table 1). The profile 168 is set according to the desired behavior of the second code 159. The profile database 164 contains several profiles (not shown) similar to profile 168. The device database 178 includes a list 182 of controllers 102, 103, 108 based on controllers whose code behavior may be modified, and a profile, eg, profile 168, based on one or more controller devices, eg, controllers. Based on device 103<sub>P</sub>Includes index 184 and associated with. The information contained in profile database 164 and device database 178 can be distributed to one or more databases on code virtualization server 114 or optionally on devices on network 110, for example database 115. ..
0025According to an embodiment of the invention, profile updater 157 updates profile 168 with the modified profile received from user device 112 via GUI 138. Controller-based device 103<sub>P</sub>Executing the first code 126 above makes a call 128 to execute the second code 159 on the code virtualization server 114 using the updated profile 168. Execution engine 166 uses the updated profile 168 to execute the second code 159, resulting in code behavior according to the updated profile 168. In this way, the controller-based device 103<sub>P</sub>The behavior of the code associated with (ie, the first code and the second code) is modified, for example, remotely from the code, without modifying the code itself.
0026<tables num="1A"><img id="000003" he="232" wi="170" file="JP2018519611A_D0001.tif" img-format="tif" img-content="drawing" /></tables>
0027<tables num="1B"><img id="000004" he="99" wi="170" file="JP2018519611A_D0001.tif" img-format="tif" img-content="drawing" /></tables>
0028Execution engine 166 supports all of the above-mentioned functions to facilitate interoperability between the various components of device 100. The execution engine utilizes each of the functional blocks described above to allow the user to program the controller-based device to control and modify the functionality of the controller-based device through a GUI on the user device.
0029Remote service 118 is a private service provided by a remote third party server or database (ie, device) of user device 112, code virtualization server 114, and controller-based device (102, 103, 108). Or include public services. For example, remote services 118 can be third-party databases and services (eg AMAZON, EBAY, FACEBOOK, APPLE PUSH NOTIFICATION servers, text message servers, email servers, etc.), or internal data sources (eg DB, NoSQL DB). , Files, etc.). The remote service 118 may be accessed by the code virtualization server 114 via network 110 or another network. According to some embodiments, the remote service 118 is provisioned by using the execution engine 166 and executing the second code 159 with the updated profile 168.
0030The network 110 includes the Internet, or wide area network (WAN), or combination, and may include one or more such networks. All components of device 100 are connected to network 110 or to each other as shown in FIG. 1 using known methods and components.
0031FIG. 2 illustrates the behavior of code associated with a controller-based device remotely by updating the profile used to execute the code associated with the controller-based device according to an embodiment of the invention. The flow diagram of the method 200 executed by the code virtualization server 114 is shown. Method 200 begins at step 202 and proceeds to step 204. In step 204, the code virtualization server 114 is a controller-based device, eg, a controller-based device 103.<sub>P</sub>Receives a modified profile from the user device 112 that corresponds to the profile used to execute the code associated with (eg, code 126 and / or code 159 of the second). In some embodiments, profile updater 157 receives the modified profile from GUI 138. Method 200 proceeds to step 206, where method 200 updates the profile used for code execution with the modified profile. According to some embodiments, the profile updater 157 modifies at least one parameter of profile 168 to the same value as the corresponding parameter of the modified profile. Method 200 proceeds to step 208, in step 208, a controller-based device 103 for executing a second code (eg, second code 159) on the code virtualization server 114.<sub>P</sub>Upon receiving the call from, Method 200 executes the second code with the updated profile. According to some embodiments, the execution engine 166 uses the updated profile 168 to execute the second code 159 and is a controller-based device 103.<sub>P</sub>Brings a fix to the behavior of the code associated with. The method 200 then proceeds to step 210, at which the method 200 ends.
0032FIG. 3 is performed by various devices of device 100 of FIG. 1 to modify the behavior of the code to be executed by a controller-based device by modifying the profile associated with the code according to an embodiment of the invention. The flow chart of the method 300 is shown. User device 112 performs method 302, code virtualization server 114 performs method 330, and controller-based device 130<sub>P</sub>Performs method 350, remote service 118 performs method 360, and methods 302, 330, 350, and 360 together provide the functionality of method 300. In this regard, the various steps described herein are referred to as the steps of method 300, but it is clear that each step is also one of methods 302, 330, 350, and 360. ..
0033In step 304, method 300 uses GUI 138, for example, on display 134 to display a list 140 of controller-based devices, as discussed above. The list may be a list of controllers 102, 103, 108 based on the controller sent by the code virtualization server in response to a request by user device 112 (for example, list 182), or the list may be other. May be provided to user device 112 in a way. In some embodiments, the user device 112 stores the list as list 140. In step 306, method 300 is a controller-based device via GUI 138, eg, a controller-based device 130.<sub>P</sub>The selection is received and the selection is sent to the code virtualization server 114 in step 308.
0034Execution of method 300 moves to code virtualization server 114 in step 332, where method 300 uses one or more profiles, such as profile 168, and a controller-based device 103.<sub>P</sub>Extract other profiles related to the code to run above. Method 300 proceeds to step 334, where profile 168 and other profiles are sent to user device 112 for modification.
0035Execution of method 300 moves to the user device in step 310, where method 300 is, for example, a GUI. Use 138 to view received profiles, including profile 168. In step 312, method 300 selects a profile, eg, profile 168, to modify profile 168 (eg, input entered by the user on user device 112, or another file or database selected by the user. Receive (as input from). In step 314, method 300 displays one or more parameters contained in profile 168 for modification or update. In step 316, method 300 receives an input for modifying the parameters of profile 168, and in step 318, method 300 generates a modified profile with the parameters modified in step 316. Method 300 may receive multiple inputs related to multiple parameters and generate a modified profile accordingly. According to some embodiments, method 300 is a GUI Generate a modified profile using 138. Further, the method 300 optionally stores the modified profile in, for example, the profile store 142. In step 320, method 300 sends the modified profile to the code virtualization server 114.
0036Execution of method 300 moves to code virtualization server 114 in step 336, and in step 336 method 300 updates profile 168 with the modified profile. Method 300 updates profile 168 with profile updater 157 by updating each parameter according to the corresponding parameter of the modified profile, or replaces profile 168 with the modified profile, in step 338. The 300 stores the modified profile as profile 168. In this way, steps 304-320 and 332-338 achieve updating profile 168 with the modified profile. For brevity, the examination of Method 300 is made in connection with a single profile, eg, Profile 168, but the steps of Method 300 include multiple profiles so that those skilled in the art can easily conceive. Can be extended to incorporate. A further step is a controller-based device 103 with an updated profile to correct the behavior of the code.<sub>P</sub>Regarding executing code related to.
0037In step 352, method 300 is a controller-based device 103.<sub>P</sub>Run the first code 126 above. Method 300 proceeds to step 354, in step 354 where the first code 126 calls the code virtualization server 114 by call 128 to execute the second code 159 on the code virtualization server 114.
0038Execution of method 300 proceeds to code virtualization server 114 in step 340, where method 300 receives a call 128 from user device 112. In step 342, the code virtualization server 114 executes the second code 159 with the updated profile 168 with the modified profile, as described above. Executing the second code 159 with the updated profile 168 causes a difference in the behavior of the second code 159, thereby causing the behavior of the first code 126. However, neither the first code 126 nor the second code 159 needs modification. In some embodiments, method 300 includes any step 344 for provisioning remote service 118 as part of the execution of code 159. Updating profile 168 fixes the code behavior associated with provisioning remote services 118. For example, profile modifications can result in desired changes in the remote services used (FACEBOOK, AMAZON, etc.), the accounts used, and the text displayed, among other things.
0039If any step 344 is performed, the execution of method 300 is controller-based device 103.<sub>P</sub>, Code virtualization server 114, or remote service 118 that may be provided by one or more remote servers on user device 112. In step 362, method 300 performs remote service 118 according to the second code 159 and, for example, according to the parameters of the modified profile 168. In step 364, method 300 sends the data resulting from the execution of remote service 118 to code virtualization server 114. The data resulting from the execution of the remote service 118 may include updating the status of successful provisioning of the remote service, or any output of the remote service 118.
0040Execution of method 300 moves to code virtualization server 114 in step 346, where method 300 transfers the data resulting from provisioning of remote service 118 to controller-based device 103.<sub>P</sub>And optionally send to user device 112.
0041Execution of method 300 is a controller-based device 103 in step 356.<sub>P</sub>In step 356, method 300 continues to execute the first code 126. If any step 344 is not performed, the execution of method 300 is the controller-based device 103 in step 356 after step 342.<sub>P</sub>Move to. Further, in some embodiments, a controller-based device 103<sub>P</sub>Execution of the first code 126 above ends after step 354, and in such an embodiment, method 300 does not perform step 356.
0042In step 346, the data is transmitted to the user device 112, the execution of method 300 moves to the user device in step 322, and in step 322, method 300 receives, for example, the data and displays GUI 138 on the display 134. Display data through.
0043Advantageously, all other processes related to the code, such as code development, testing, and deployment, are maintained, that is, no modifications to such processes are required. Therefore, modifying the profile according to the disclosed embodiments does not require modification of the code itself and modifies the behavior of the code without re-running the development, testing, and deployment steps. Make it possible.
0044FIG. 4 shows at least one controller-based device (102, 103, 108), eg, a controller, to control the behavior of the code for the at least one controller-based device of FIG. 1 according to an embodiment of the invention. Based on device 103<sub>P</sub>And a flow diagram of Method 400 executed by Code Virtualization Server 114. Method 400 begins on a controller-based device in step 402 and proceeds to step 404, where in step 404 method 400 is a controller-based device 103.<sub>P</sub>Start running the code above (for example, the first code 126). The first code 126 is the controller-based device 103<sub>P</sub>Contains predefined program code or processes associated with. The first code 126 includes one or more calls 128 for the functionality provided by the code virtualization server 114. In step 406, the call is controller-based device 103<sub>P</sub>To the code virtualization server 114, method 400 switches to the code virtualization server 114. Method 400 proceeds to step 408, in step 408 where method 400 is a function called on code virtualization server 114 using the first profile (or PROFILE 1) stored in code virtualization server 114. Execute the code corresponding to (for example, the second code 159). When step 408 is executed on the code virtualization server 114, in step 410, method 400 executes the code on the controller-based device 103.<sub>P</sub>Return to. In step 412, method 400 is a controller-based device 103.<sub>P</sub>Complete the execution of the first code 126 above. In some embodiments, the execution of the first code 126 may be completed on the code virtualization server 114 in step 410, and no additional code execution may occur in step 412. There is. Method 400 proceeds to step 414, where method 400 ends.
0045Steps 402 through 414 are controller-based devices 103 using PROFILE 1, which is stored as profile 168.<sub>P</sub>Indicates to execute the code for. For example, in an embodiment, a controller-based device 103<sub>P</sub>Is a temperature sensor configured to turn on heating when the temperature drops below a predetermined value. When the temperature drops below a certain value, the code is executed using PROFILE 1. In particular, when the conditions are met (the temperature drops below a certain value), the first code 128 turns on the heating and provisions a remote service 118 (for example, posts a predefined text on FACEBOOK). ) Is configured to call Code Virtualization Server 114 (by call 128). Upon receiving the call 128, the code virtualization server 114 executes the second code 159 with PROFILE 1, which contains the user's login credentials and predefined text. Executing the second code 159 results in generating a FACEBOOK post from the user's account stating "Heating has been turned on." The result is a controller-based device 103<sub>P</sub>Is the first behavior of the code for (first code 128 and second code 159).
0046According to some embodiments of the invention, the first profile (PROFILE 1) is described, for example, in method 200 described in connection with FIG. 2 or steps 304-320 described in method 300 of FIG. And modified or updated to the second profile (PROFILE 2) by the user using steps 332-338. This updates profile 168 to PROFILE 2. Method 400 is then performed in a manner similar to steps 402-414, using a second profile, PROFILE 2, as described below in connection with, for example, steps 422-434.
0047Method 400 is a controller-based device 103 in step 422.<sub>P</sub>Starting above, proceeding to step 424, in step 424, method 400 is a controller-based device 103.<sub>P</sub>Start running the code above (for example, the first code 126). The first code 126 is the controller-based device 103<sub>P</sub>Contains predefined program code or processes associated with. The first code 126 includes one or more calls 128 for the functionality provided by the code virtualization server 114. In step 426, call 128 is controller-based device 103.<sub>P</sub>To the code virtualization server 114, method 400 switches to the code virtualization server 114. Method 400 proceeds to step 428, in step 428 where method 400 is a function called on code virtualization server 114 using the updated profile (or PROFILE 2) stored on code virtualization server 114. Execute the code corresponding to (for example, the second code 159). When step 428 is performed on the code virtualization server 114, in step 430, method 400 executes the controller-based device 103.<sub>P</sub>Return to. In step 432, method 400 is a controller-based device 103.<sub>P</sub>Complete the execution of the first code 126 above. In some embodiments, the execution of the first code 126 may be completed on the code virtualization server 114 in step 430, and the additional execution of the code may not be performed in step 432. There is. Method 400 proceeds to step 434, at step 434, method 400 ends.
0048Steps 422-434 are controller-based devices 103 with PROFILE 2 stored as profile 168 after modification of profile 168 using the techniques described above.<sub>P</sub>Indicates to execute the code for. Controller-based device 103<sub>P</sub>Continue with the example of a temperature sensor configured to turn on heating when the temperature drops below a given value. When the temperature drops below a certain value, the code is now executed using PROFILE 2. In particular, when the conditions are met (the temperature drops below a certain value), the first code 128 turns on the heating and provisions a remote service 118 (for example, posting a different text on TWITTER). Configured to call Code Virtualization Server 114 (by call 128). Upon receiving the call 128, the code virtualization server 114 executes the second code 159 with PROFILE 2, which contains the user's login credentials for TWITTER and the predefined text. Executing the second code 159 results in generating a TWITTER post from the user's account that says "It's really cold here!". The result is a controller-based device 103<sub>P</sub>Is the second behavior of the code for (first code 128 and second code 159). In this way, the embodiments described are controller-based devices 103 without the need to rewrite or modify the code itself.<sub>P</sub>Allows you to modify the behavior of the code for.
0049In addition, the examples described only change behavior in relation to provisioning different services and posting different texts, but the combination of code and profile is configured to provide a wide range of modifications to the behavior of the code. there is a possibility. Such changes in the composition of the code and profile are readily conceived by those skilled in the art without departing from the scope and spirit of the invention as defined in these claims. The techniques presented by the various embodiments discussed herein allow the user to quickly control or modify the behavior of the code by avoiding the need to individually reprogram the device based on each controller. make it easier. In some embodiments, the code virtualization server 114 has a default web interface or any GUI. Implemented as a service (not shown) that provides access to code generation, deployment, and remote reprogramming through (eg, smartphone apps or computer applications). Although embodiments are described in the context of Internet of Things (IoT) devices, those skilled in the art will appreciate that the techniques illustrated by the disclosed embodiments are applicable to some other programming environment. It will be easy to understand.
0050The methods described herein may be implemented in different embodiments with software, hardware, or a combination thereof. In addition, the order of the methods is subject to change, and various elements may be added, sorted, combined, omitted, or otherwise modified. There is sex. All the examples described herein are presented in a non-limiting manner. Various modifications and changes may be made as will be apparent to those skilled in the art who will benefit from this disclosure. Realization by embodiment has been described in the context of a particular embodiment. These embodiments are intended to be exemplary and not intended to be limiting. Many changes, corrections, additions, and improvements are possible. Therefore, multiple instances may be provided with respect to the components described herein as a single instance. The boundaries between the various components, behaviors, and data stores are somewhat arbitrary, and certain behaviors are shown in certain exemplary component contexts. Other assignments of functionality are possible and may fall within the scope of the appended claims. Finally, the structures and functions presented as separate components in the exemplary configuration may be implemented as combined structures or components. These and other changes, modifications, additions, and improvements may fall within the scope of the embodiments defined in the appended claims.
0051Although the above covers embodiments of the invention, other and further embodiments of the invention may be devised without departing from the basic scope of the invention. Determined by the attached claims.
0052100 systems, equipment 102 Controller-based device, edge device 102<sub>1</sub> ... 102<sub>N</sub> Controller-based device 103 Controller-based devices, edge devices 103<sub>1</sub> ... 103<sub>P</sub> Controller-based device 104<sub>1</sub> ... 104<sub>N</sub> Route 106<sub>1</sub> ... 106<sub>N</sub> Communication path 108 gateway 110 internet 112 User computer, user device 114 Code virtualization server 115 Any database 116 device group 118 Remote service 120 device controller 122 Peripheral electronics 124 memory 126 First code 128 call 130 CPU 132 Support circuit 133 "Save" button 134 display 135 "Send" button 136 memory 138 Graphical User Interface (GUI) 140 list 142 Profile Store 144 list 145 Controller-based device 146 Selectable list of profiles 147 Profile 148 List of parameters 149 parameters 150 CPU 152 Support circuit 154 memory 156 interface 157 Profile Updater 158 Process library 159 Second code 160 Software Development Kit (SDK) Generator 162 Code Generator 164 Profile database 166 Execution engine 168 Profile 170 process parameters 172 Connection profile 174 Connection parameters 176 protocol 178 Device database 182 list 184 Index 200 ways 300 ways
7 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| JP2001325237A | Cites | Japan | Search report |
| JP2002157178A | Cites | Japan | Search report |
| JP2003052093A | Cites | Japan | Search report |
| US2004193635A1 | Cites | United States of America | Search report |
| JP2015121887A | Cites | Japan | Search report |
| JPH09160847A | Cites | Japan | Search report |
61 members in 10 offices
Priority claims9
| Document | Office | Kind | Date |
|---|---|---|---|
| 62190408 | United States of America | – | |
| 201562190408 | United States of America | P | |
| 62270107 | United States of America | – | |
| 201562270107 | United States of America | P | |
| 15063764 | United States of America | – | |
| 201615063764 | United States of America | A | |
| PCTUS2016031217 | United States of America | – | |
| 2016031217 | United States of America | W | |
| 2016041573 | United States of America | W |
Members61
| Document | Office | Kind | |
|---|---|---|---|
| US2016327925A1 | United States of America | A1 | |
| US2016328216A1 | United States of America | A1 | |
| CA2984106A1 | Canada | A1 | |
| WO2016182913A1 | World Intellectual Property Organization (WIPO) | A1 | |
| CA2989654A1 | Canada | A1 | |
| WO2017008036A1 | World Intellectual Property Organization (WIPO) | A1 | |
| US2017180462A1 | United States of America | A1 | |
| CA3009166A1 | Canada | A1 | |
| WO2017112735A2 | World Intellectual Property Organization (WIPO) | A2 | |
| SG11201708743UA | Singapore | A | |
| KR20180008548A | Republic of Korea | A | |
| US2018054850A1 | United States of America | A1 | |
| WO2017112735A3 | World Intellectual Property Organization (WIPO) | A3 | |
| CA3034838A1 | Canada | A1 | |
| WO2018039201A1 | World Intellectual Property Organization (WIPO) | A1 | |
| CN107750356A | China | A | |
| KR20180027529A | Republic of Korea | A | |
| EP3295649A1 | European Patent Office (EPO) | A1 | |
| CN107851009A | China | A | |
| EP3320426A1 | European Patent Office (EPO) | A1 | |
| JP2018518746A | Japan | A | |
| JP2018519611AThis record | Japan | A | |
| SG11201805215UA | Singapore | A | |
| KR20180087446A | Republic of Korea | A | |
| US10067490B2 | United States of America | B2 | |
| HK1246421A | Hong Kong, China | A | |
| HK1246421A1 | Hong Kong, China | A1 | |
| CN108604186A | China | A | |
| US10095495B2 | United States of America | B2 | |
| EP3394743A2 | European Patent Office (EPO) | A2 | |
| EP3295649A4 | European Patent Office (EPO) | A4 | |
| JP2019503549A | Japan | A | |
| SG11201901459VA | Singapore | A | |
| EP3320426A4 | European Patent Office (EPO) | A4 | |
| IL264978A | Israel | A | |
| CN109891854A | China | A | |
| EP3501160A1 | European Patent Office (EPO) | A1 | |
| HK1254161A | Hong Kong, China | A | |
| HK1254161A1 | Hong Kong, China | A1 | |
| JP6626956B2 | Japan | B2 | |
| CN107750356B | China | B | |
| EP3394743A4 | European Patent Office (EPO) | A4 | |
| EP3501160A4 | European Patent Office (EPO) | A4 | |
| JP6719484B2 | Japan | B2 | |
| US10732969B2 | United States of America | B2 | |
| US10798780B2 | United States of America | B2 | |
| JP6925365B2 | Japan | B2 | |
| IL264978B | Israel | B | |
| CN107851009B | China | B | |
| CN108604186B | China | B | |
| CA2989654C | Canada | C | |
| CA2984106C | Canada | C | |
| CN109891854B | China | B | |
| EP3394743B1 | European Patent Office (EPO) | B1 | |
| EP3394743C0 | European Patent Office (EPO) | C0 | |
| EP3501160B1 | European Patent Office (EPO) | B1 | |
| EP3501160C0 | European Patent Office (EPO) | C0 | |
| KR102567780B1 | Republic of Korea | B1 | |
| KR102622652B1 | Republic of Korea | B1 | |
| EP3295649B1 | European Patent Office (EPO) | B1 | |
| KR102783146B1 | Republic of Korea | B1 |
12 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Receipt of annual feesJAPANESE INTERMEDIATE CODE: R250R250 | R250 | |
| Receipt of annual feesJAPANESE INTERMEDIATE CODE: R250R250 | R250 | |
| Receipt of annual feesJAPANESE INTERMEDIATE CODE: R250R250 | R250 | |
| Certificate of patent or registration of utility modelJAPANESE INTERMEDIATE CODE: R150R150 | R150 | |
| First payment of annual fees (during grant procedure)JAPANESE INTERMEDIATE CODE: A61A61 | A61 | |
| Written decision to grant a patent or to grant a registration (utility model)JAPANESE INTERMEDIATE CODE: A01A01 | A01 | |
| Decision of grant or rejection writtenTRDD | TRDD | |
| Report on retrievalJAPANESE INTERMEDIATE CODE: A971007A977 | A977 | |
| Report on accelerated examinationJAPANESE INTERMEDIATE CODE: A971005A975 | A975 | |
| Request for written amendment filedJAPANESE INTERMEDIATE CODE: A523A521 | A521 | |
| Written request for application examinationJAPANESE INTERMEDIATE CODE: A621A621 | A621 | |
| Explanation of circumstances concerning accelerated examinationJAPANESE INTERMEDIATE CODE: A871A871 | A871 |
Numbers
- Publication
- 2018519611
- Application
- 2018500410
Titles2
- Japanese
- コントローラに基づくデバイスのためのコードの挙動を修正するための方法および装置
- English
- Methods and devices for modifying code behavior for controller-based devices
Classification
- CPC, 4
- G06F8/65
- G06F9/30181
- G06F9/44505
- G06F9/547
- IPC, 1
- G06F8 65
Designated states143
- Regional, 80
- Botswana
- Ghana
- Gambia
- Kenya
- Liberia
- Lesotho
- Malawi
- Mozambique
- Namibia
- Rwanda
- Sudan
- Sierra Leone
- Sao Tome and Principe
- Eswatini
- United Republic of Tanzania
- Uganda
- Zambia
- Zimbabwe
- Armenia
- Azerbaijan
- Belarus
- Kyrgyzstan
- Kazakhstan
- Russian Federation
and 56 moreShow fewer
- Tajikistan
- Turkmenistan
- Albania
- Austria
- Belgium
- Bulgaria
- Switzerland
- Cyprus
- Czechia
- Germany
- Denmark
- Estonia
- Spain
- Finland
- France
- United Kingdom
- Greece
- Croatia
- Hungary
- Ireland
- Iceland
- Italy
- Lithuania
- Luxembourg
- Latvia
- Monaco
- North Macedonia
- Malta
- Netherlands (Kingdom of the)
- Norway
- Poland
- Portugal
- Romania
- Serbia
- Sweden
- Slovenia
- Slovakia
- San Marino
- Türkiye
- Burkina Faso
- Benin
- Central African Republic
- Congo
- Côte d’Ivoire
- Cameroon
- Gabon
- Guinea
- Equatorial Guinea
- Guinea-Bissau
- Comoros
- Mali
- Mauritania
- Niger
- Senegal
- Chad
- Togo
- National, 63
- United Arab Emirates
- Antigua and Barbuda
- Angola
- Australia
- Bosnia and Herzegovina
- Barbados
- Bahrain
- Brunei Darussalam
- Brazil
- Belize
- Canada
- Chile
- China
- Colombia
- Costa Rica
- Cuba
- Dominica
- Dominican Republic
- Algeria
- Ecuador
- Egypt
- Grenada
- Georgia
- Guatemala
and 39 moreShow fewer
- Honduras
- Indonesia
- Israel
- India
- Iran (Islamic Republic of)
- Japan
- Saint Kitts and Nevis
- Democratic People’s Republic of Korea
- Republic of Korea
- Lao People’s Democratic Republic
- Saint Lucia
- Sri Lanka
- Libya
- Morocco
- Republic of Moldova
- Montenegro
- Madagascar
- Mongolia
- Mexico
- Malaysia
- Nigeria
- Nicaragua
- New Zealand
- Oman
- Panama
- Peru
- Papua New Guinea
- Philippines
- Qatar
- Saudi Arabia
- Seychelles
- Singapore
- El Salvador
- Syrian Arab Republic
- Thailand
- Tunisia
- Trinidad and Tobago
- Ukraine
- United States of America