(57)【特許請求の範囲】
【請求項１】
対応する外部コントローラに通信可能に結合されたユーザデバイス上のグラフィカルユーザインターフェース(GUI)内に表示された複数のコントローラの中からコントローラを決定するステップと、
前記コントローラについて前記GUI内にユーザ対話的ピンレイアウトを生成するステップと、
前記GUI内に、前記コントローラによる実行のための複数の動作を表示するステップと、
前記コントローラのための前記複数の動作の中から動作を決定するステップであって、前記複数の動作はリモートコーディングサーバへの少なくとも1つのリモートプロセス呼出しを含む、ステップと、
選択されたピンを前記動作のパラメータに関連付けるステップと、
前記GUI内の少なくとも1つのデータ入力フィールドから前記動作のためのパラメータデータを受け取るステップと、
前記ユーザ対話的ピンレイアウト、前記受け取られたパラメータデータ、および前記動作に基づいて前記コントローラのためのプログラムを生成するステップであって、前記プログラムは前記少なくとも1つのリモートプロセス呼出しを含み、前記少なくとも1つのリモートプロセス呼出しに従って、前記リモートコーディングサーバ上に記憶された事前に生成されたコードが実行される、ステップと、
前記外部コントローラ上のメモリ内での記憶のために前記プログラムを送信するステップと
を含む、デバイスプログラムの自動生成のためのコンピュータ実施される方法。
【請求項２】
前記ピンを関連付けるステップは、前記動作に関して前記ピンに少なくとも1つの変数を割り当てるステップをさらに含む、請求項1に記載の方法。
【請求項３】
前記ユーザ対話的ピンレイアウト内で選択されるピンは、選択されないピンの中で強調される、請求項1に記載の方法。
【請求項４】
前記ピンを関連付けるステップは、前記ピンが異なる動作に以前に関連付けられたと判定するステップと、前記関連付けの通知を生成するステップとをさらに含む、請求項1に記載の方法。
【請求項５】
前記GUIは、前記コントローラ上の前記ピンの選択およびこれへの関連付けのために少なくとも1つの周辺デバイスを表示するステップをさらに含む、請求項1に記載の方法。
【請求項６】
前記少なくとも1つの周辺デバイスは、センサ、アンテナ、入力デバイス、発光デバイス、ディスプレイ、またはスピーカのうちの少なくとも1つである、請求項5に記載の方法。
【請求項７】
前記動作は、前記ピンから生成されるデータを受信するように構成されたリモートコーディングサーバへの少なくとも1つのリモートプロセス呼出しをさらに含む、請求項1に記載の方法。
【請求項８】
前記プログラムを送信するステップは、前記プログラムを前記コントローラのネイティブ言語に変換するステップをさらに含む、請求項1に記載の方法。
【請求項９】
ディスプレイと、
プロセッサと、
対応する外部コントローラに通信可能に結合された装置上のグラフィカルユーザインターフェース(GUI)内に表示された複数のコントローラの中でコントローラを決定し、前記コントローラについて前記GUI内にユーザ対話的ピンレイアウトを生成し、前記GUI内に、前記コントローラによる実行のための複数の動作を表示し、前記コントローラのための前記複数の動作の中から動作を決定し、ピンを前記動作のパラメータに関連付け、前記GUI内の少なくとも1つのデータ入力フィールドから前記動作のためのパラメータデータを受け取り、前記ユーザ対話的ピンレイアウト、前記受け取られたパラメータデータ、および前記動作に基づいて前記コントローラのためのプログラムを生成し、前記外部コントローラ上のメモリ内での記憶のために前記プログラムを送信するように構成されたビジュアルコントローラモジュールであって、前記複数の動作はリモートコーディングサーバへの少なくとも1つのリモートプロセス呼出しを含み、前記プログラムは前記少なくとも1つのリモートプロセス呼出しを含み、前記少なくとも1つのリモートプロセス呼出しに従って、前記リモートコーディングサーバ上に記憶された事前に生成されたコードが実行される、ビジュアルコントローラモジュール
を含むプロセッサ実行可能命令を含むメモリと
を含む、デバイスプログラムの自動生成のための装置。
【請求項１０】
前記ピンを関連付けることは、前記動作に関して前記ピンに少なくとも1つの変数を割り当てることをさらに含む、請求項9に記載の装置。
【請求項１１】
前記ユーザ対話的ピンレイアウト内で選択されるピンは、選択されないピンの中で強調される、請求項9に記載の装置。
【請求項１２】
前記ピンを関連付けることは、前記ピンが異なる動作に以前に関連付けられたと判定することと、前記関連付けの通知を生成することとをさらに含む、請求項9に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、全般的には、自動デバイスプログラム生成のための方法および装置に関する。
【背景技術】
【０００２】
フィールドプログラマブルゲートアレイ(FPGA)およびマイクロコントローラの使用が、かなりの人気を得るようになった。コントローラの低い製造コスト、可用性、およびカスタマイゼーションは、デバイスの作成のために商業会社によってもホビイストによっても使用されるマイクロコントローラ(たとえば、PICまたはARDUINOおよび類似物)の普及につながった。マイクロコントローラは、周辺機器と通信して入出力データを処理するためにプログラム可能であるプロセッサコアとメモリとを含む単一の集積回路上の小型コンピュータである。NOR FLASHまたはOTP ROMの形のプログラムメモリも、しばしば、マイクロコントローラチップ上に含まれ、通常は少量のランダムアクセスメモリ(RAM)も含まれる。マイクロコントローラは、通常、組込み応用のために設計される。
【０００３】
しかし、マイクロコントローラは、一般に、オンボードメモリの容量以内でなければならない所与のコードセットに制限される。プログラムの複雑さが高まるにつれて、メモリに記憶される必要があるコードのサイズが増える。しばしば、プログラマは、使用可能なメモリ空間を節約するために、潜在的なプログラムを犠牲にすることに頼る。さらに、プログラムは、マイクロコントローラにネイティブなローカルライブラリによって定義されるローカル機能性および制限された能力と、プロセッサの性能とにも制限される。最善でも、基本的な外部通信は、非常に狭い範囲のアプリケーション(たとえば、マイクロコントローラ上にローカルに記憶されたプログラム)との相互作用に制限される。さらに、マイクロコントローラのプログラミングは、コーディングコマンドを記憶し、階層を理解し、正しい呼出し構文を利用するなどを行わなければならないので、ユーザにとって非常に難しい。そうしなければ、書かれたプログラムは、走らないかエラーを発生することになる。
【０００４】
したがって、当技術分野には、最小限のメモリフットプリントを維持しながらマイクロコントローラプログラミングを単純にし、マイクロコントローラ能力を拡張する必要がある。
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明の実施形態は、一般に、特許請求の範囲により完全に示されている、図面のうちの少なくとも1つに実質的に示され、かつ/またはこれに関連して説明される、自動デバイスプログラム生成のための方法、装置に関する。
【０００６】
本開示の上記および他の特徴および利点は、添付図面と一緒に本開示の以下の詳細な説明の再検討から了解され得、添付図面では、終始、同様の符号が同様の部分を指す。
【図面の簡単な説明】
【０００７】
本発明の上で列挙された特徴を詳細に理解できる方法、上で短く要約された本発明のより特定の説明を、実施形態を参照することによって得ることができるように、それらの実施形態のいくつかが、添付図面に示されている。しかし、添付図面は、本発明の通常の実施形態を示すのみであり、したがって、その範囲の限定と考えられてはならないことに留意されたい。というのは、本発明が、他の同等に有効な実施形態を許すことができるからである。
【０００８】
【図１】本発明の1つまたは複数の実施形態による、自動デバイスプログラム生成システムを示す概略図である。
【図２】本発明の1つまたは複数の実施形態による、対話的ハードウェアビジュアライゼーションを用いてデバイス固有ハードウェアをプログラミングするための例示的なグラフィカルユーザインターフェース(GUI)を示す図である。
【図３】本発明の1つまたは複数の実施形態による、対話的ハードウェアビジュアライゼーションのための例示的なグラフィカルユーザインターフェース(GUI)を示す図である。
【図４】本発明の1つまたは複数の実施形態による、リモートサービスと相互作用する自動的に生成されるデバイスプログラムを実行するためのコントローラによって実行される方法を示す流れ図である。
【図５】本発明の1つまたは複数の実施形態による、図2の例示的GUIとの自動デバイスプログラム生成相互作用の例示的方法を示す流れ図である。
【図６】本発明の1つまたは複数の実施形態による、図2の例示的GUIを介してプログラムされた外部コントローラによるリモートプロセス呼出しのためにコーディングサーバによって実行される例示的方法を示す流れ図である。
【図７】本発明の1つまたは複数の実施形態による、例示的なコンピューティングシステム内のモジュールを示すブロック図である。コンピュータシステムは、前述の実施形態のサーバまたは電子デバイスを含む、実質的に同様の構造を含む。
【発明を実施するための形態】
【０００９】
本発明の実施形態は、自動化されたデバイスコードジェネレータに関し、より具体的には、グラフィカルインターフェースを介して外部コントローラのためのプログラムを自動的に生成することに関する。グラフィカルインターフェースは、物理属性をすばやく選択し(たとえば、ピンレイアウトを介して)、生成されるプログラムでの動作のために入力パラメータまたは出力パラメータのいずれかとして物理属性を割り当てるために、物理コントローラのビジュアライゼーションを可能にする。ビジュアルキューは、外部コントローラ上のプログラムを正しく実行するために、ユーザがネットリストに従ってまたは回路図をコントローラとペアにするのに費やす時間の長さを減らす。
【００１０】
いくつかの実施形態では、生成されるプログラムは、コーディングサーバまたはサーバのグループへのリモートプロセス呼出しを実行することによって、電子デバイス内の外部コントローラの機能性を拡張する。電子デバイスは、タスクを実行するために少なくとも1つのプロセッサまたはマイクロコントローラを有するデバイスである。電子デバイスのいくつかの実施形態は、ARDUINO、TEXAS INSTRUMENTS LAUNCHPAD、FREESCALE BOARDS KINETIS、ST MICROELECTRONICS STM32、INTEL EDISON、および類似物などのプログラミング基板を含む。コントローラのための電子デバイスのいくつかの実施形態は、NEST THERMOSTAT、PHILIPPS HUE、BELKIN、WITHINGS、および類似物などの他の組み立てられたデバイスおよびシステムのコントローラをプログラムすることができる。
【００１１】
コーディングサーバは、外部コントローラがハードウェア制限およびソフトウェア制限(たとえば、低い能力のプロセッサ、限られたメモリ容量、縮小されたオペレーティングシステム、命令セットの欠如など)に起因して実行を制限される、より複雑なプログラムを実行するために、より重い処理負荷を実行する。コーディングサーバは、追加のサードパーティデータベースおよびサービス(たとえば、AMAZON、EBAY、FACEBOOK（登録商標）、APPLE PUSH NOTIFICATIONサーバ、テキストメッセージサーバ、電子メールサーバなど)を認証し、これにアクセスするためにコマンドを実行することもできる。
【００１２】
コードは、カスタマイズされたグラフィカルユーザインターフェース(GUI)を介して、外部コントローラおよび動作のために自動的に生成される。コードは、外部コントローラに関する着信および発信の処理されたデータを扱うために、コントローラのために自動的に生成されたコードをミラーリングするプログラムを有することもできるリモートコーディングサーバと互いに整合的に作用する。GUIは、選択されたコントローラと、そのコントローラがリモートコーディングサーバ上のプロセスにアクセスし、これに対する呼出しを生成するための動作の事前に決定されたリストおよびライブラリとを表す。GUIは、コントローラの実際のピンの表現を含む。ピンレイアウト内のピンの選択は、選択されたコントローラに関するプロセス呼出しに対応する事前に生成されたコードにデータが挿入されることと解釈される。いくつかの実施形態では、プロセス呼出しは、リモートサーバまたはコーディングサーバに常駐するプロセスに対するものである。コントローラ上に記憶される自動的に生成されたコントローラプログラム(AGCP)は、複数のプロセス呼出しを含むことができる。プロセス呼出しおよび変数に関する関連するデータは、AGCPからの変数データを記憶し、これを使用してコードを実行するリモートコーディングサーバに通信される。事前に生成されたコードを実行した後に、リモートコーディングサーバは、外部コントローラタイプにネイティブであるフォーマットされたデータをフィルタリングし、処理し、返す。他の実施形態では、AGCPは、伝統的なコードおよびプロセス呼出しをも含む。さらなる実施形態は、後続のプロセス呼出しに関してコントローラに送信するための、リモートコーディングサーバ上でのコードの生成を含む。
【００１３】
説明される以下の実施形態では、「プロセス」は、実行コンピュータ(たとえば、サーバ、パーソナルコンピュータ、モバイルデバイスなど)上にすでに展開されている、走らせる準備のできたコードベースまたは事前に生成されたコードを指す。各プロセスは、名前、プロセスID、アイコン、またはユーザに対する他の識別子によって、ユーザに対して一意に識別される。「実行」は、コンピュータ上のプロセスの開始(ローカルもしくはリモート、またはクラウドベース)を指す。「バンドル」は、共通の属性(API名、共通のパラメータ、SDK、パラメータ名、リモートサーバなど)によって編成されたプロセスの集合を指す。本明細書で議論される例は、範囲において限定的ではなく、むしろ説明のために特定の実施形態を区別するものである。
【００１４】
図1は、本発明の1つまたは複数の実施形態による、自動デバイスプログラム生成システム100の概略図である。システム100は、ユーザデバイス105、集積回路デバイス(すなわち、電子デバイス)130、リモートコーディングサーバ135、および外部サーバ140を含む。いくつかの実施形態では、リモートコーディングサーバ135は、複数のリモートコーディングサーバのうちの少なくとも1つである。同様に、いくつかの実施形態では、外部サーバ140は、複数の外部サーバのうちの少なくとも1つである。いくつかの実施形態では、ユーザデバイス105および集積回路デバイス130は、インターネット154または他のネットワークを介して通信可能に結合される。しかし、説明の簡単さのために、下の実施形態は、ユーザデバイス105が集積回路デバイス130に直接に(たとえば、USB、パラレル/シリアルデータケーブル、ネットワークケーブルなどを介して)結合されると企図する。
【００１５】
集積回路デバイス130は、外部コントローラ110およびメモリ115を含む。いくつかの実施形態では、集積回路デバイス130は、外部コントローラ110に結合された周辺エレクトロニクス120をさらに含む。周辺エレクトロニクス120は、センサ、ライト、オーディオスピーカ、アクチュエータ、ディスプレイ、プリンタ、スキャナ、入出力デバイス、および類似物を含むが、これに限定はされない。外部コントローラ110を、マイクロコントローラ(たとえば、PIC、ARDUINO YUN、および類似物)とすることができる。外部コントローラ110は、インターネット154、クラウド、ネットワーク、または類似物を介してリモートコーディングサーバ135に通信可能に結合される。いくつかの実施形態では、外部コントローラ110は、ユーザデバイス105による自動プログラム生成ならびに/または対応するヘッダファイルおよびライブラリがリモートコーディングサーバ135上の命令を実行するためにメモリ115に記憶された後に、リモートコーディングサーバ135に結合される。ヘッダファイルは、リモートコーディングサーバ135上のリモートプロセス呼出しの実行を可能にする。
【００１６】
リモートコーディングサーバ135は、外部コントローラ110上で記憶されたAGCPに統合されたユーザデバイス上での選択された提供される動作を実行するために、ライブラリ、アプリケーションプログラムインターフェース(API)、およびソフトウェア開発キット(SDK)を記憶する。いくつかの実施形態では、リモートコーディングサーバ135は、外部コントローラ110上で記憶されたAGCP内のリモートプロセス呼出しを実行するために、ユーザアカウント、証明書、および他のデータを記憶する。リモートコーディングサーバ135は、リモートプロセス呼出しを実行するために外部サーバ140とインターフェースするのにも、プログラム論理ライブラリ、記憶されたAPI、および証明書を使用する。リモートコーディングサーバ135は、プログラム論理ライブラリ内に記憶された機能を展開するために、リモートプロセス呼出し内に埋め込まれたパラメータデータを受信する。いくつかの実施形態では、プロセス呼出しは、マークアップ言語(たとえば、XML、JAVASCRIPT（登録商標）、および類似物)で事前に生成され得る所定のコードに対応する。マークアップ言語は、変数データおよびパラメータの割振り、解析、および事前に生成されるコードを含む所定の提供される動作への挿入を可能にする。しかし、代替実施形態は、所定のコード構文に基づいて、パラメータおよび変数データの受信時にコードを生成することを含む。
【００１７】
リモートコーディングサーバ135上での処理および実行に続いて、リモートコーディングサーバ135は、リモートプロセス呼出しおよび/またはリモートコーディングサーバ135上で記憶されたユーザアカウントの所定の命令に従って、受信されたデータを外部コントローラ110にネイティブなコードに変換することができる。いくつかの実施形態では、リモートコーディングサーバ135は、リモートプロセス呼出しを実行するために、コードジェネレータおよびランタイムエンジン(図示せず)を含むこともできる。そのような実施形態では、集積回路デバイス130から受信されたリモートプロセス呼出しは、リモートプロセスをトリガし、このリモートプロセスは、ランタイムエンジンによる展開のためにコードをさらに生成する。プログラムは、外部または内部とされ、外部APIを含むことができるコードユーティリティを介して外部サーバ140にアクセスするコードを含むことができる。コードユーティリティは、データ変換、ファイル変換、暗号化、デバッギング、および類似物など、技術的問題を解決するルーチンである。
【００１８】
外部サーバ140は、実行可能命令を介してアクセスされるサードパーティデータベースおよびサービスをホスティングするコンピュータを含む。外部サーバ140は、AMAZON、EBAY、TWITTER（登録商標）、電子メールサーバ、テキストメッセージサーバ、銀行口座、および類似物など、プライベートサーバおよびパブリックサーバを含む。外部サーバ140は、リモートコーディングサーバ135に直接に接続される(矢印160として図示)。他の実施形態では、外部サーバ140は、インターネット154または他のネットワークを介してリモートコーディングサーバ135に通信可能に接続される。
【００１９】
ユーザデバイス105は、ユーザインターフェースおよび統合開発環境(IDE)を有するコンピュータ、ラップトップ、タブレット、または他の電子処理デバイスとすることができる。ユーザデバイス105は、CPU 108と、サポート回路112と、命令およびアルゴリズムを含むメモリ114とを含む。CPU 108は、ユーザデバイス105への入力および出力を処理する。CPU 108は、任意の市販プロセッサ、マイクロプロセッサ、マイクロコントローラ、および類似物とすることができる。サポート回路112は、ユーザインターフェース、クロック回路、ネットワーク通信、キャッシュ、電源、入出力回路、および類似物など、CPU 108に機能性を提供する周知の回路を含む。代替実施形態は、カスタム特定用途向け集積回路(ASIC)上の制御アルゴリズムを使用することができる。いくつかの実施形態では、ユーザインターフェースは、キーパッド、電子ボタン、スピーカ、タッチスクリーン、ディスプレイ、または他のユーザ対話機構を含む。いくつかの実施形態では、ユーザインターフェースは、集積回路デバイス130と通信することができる。
【００２０】
メモリ114は、データおよび実行可能ソフトウェアを記憶するのに使用される、任意の形のデジタルストレージとすることができる。そのようなメモリは、ランダムアクセスメモリ、読取専用メモリ、ディスクストレージ、光ストレージ、および類似物を含むが、これに限定はされない。メモリ114は、オペレーティングシステム116、IDE 118、およびビジュアルコントローラモジュール122に対応するコンピュータ可読命令を記憶する。ビジュアルコントローラモジュール122は、説明の簡単さのために単一のモジュールとして説明されるが、他の実施形態は、ストレージまたは処理の効率を改善するために別々のモジュールに分離された特定のプロセスを含む。
【００２１】
ビジュアルコントローラモジュール122は、リモートコーディングサーバ135によって実行され得る事前に生成されたバンドルおよび動作を取り出すために、リモートコーディングサーバ135と通信する(矢印150)。リモートコーディングサーバ135は、プログラム論理ライブラリ、API、SDK、および、いくつかの実施形態ではリモートプロセス呼出しに対応する事前に生成されたコードを記憶する。ビジュアルコントローラモジュール122は、インターネット154および/または他のネットワークを介してリモートコーディングサーバ135と通信する。ビジュアルコントローラモジュール122は、ユーザが外部コントローラ110のためのAGCPに組み込むために選択するための選択可能な動作のライブラリを生成する。ライブラリは、インターネット154を介してリモートコーディングサーバ135からダウンロードされ得る(矢印150として図示)。
【００２２】
いくつかの実施形態では、ビジュアルコントローラモジュール122およびIDE 118は、リモートコーディングサーバ135上のAGCPのためのプロセスまたはプログラムをさらに記憶する。AGCPに対応するプログラムの記憶は、リモートコーディングサーバ135が、外部サーバ140からのデータをリスンし、追加処理および外部コントローラ110へのデータの送信を実行することを可能にする。たとえば、ツイートがユーザによって受信される時に必ず、外部コントローラ110のピンに結合されたLEDを光らせるAGCPが、生成され得る。ツイートは、外部コントローラ110によって直接には受信されない。そうではなく、ユーザアカウントに受信されるツイートは、TWITTER（登録商標）にアクセスするためにユーザアカウント認証証明書を有するリモートコーディングサーバ135への通知をトリガすることができる。ビジュアルコントローラモジュール122からのプログラムに従うリモートコーディングサーバは、ツイート通知を「PIN 7 HIGH」コマンドに変換し、このコマンドを外部コントローラ110に通信する。AGCPに従う外部コントローラ110は、PIN 7 HIGHコマンドを待ち、その後、接続されたLEDをオフに切り替えるために、ピン6をロウにセットする。したがって、上の例では、リモートコーディングサーバ135上のプログラムは、外部コントローラ110上でAGCPを正しく実施するように準備されなければならない。
【００２３】
ビジュアルコントローラモジュール122は、外部コントローラ110のトポロジを表す、外部コントローラ110のビジュアル表現をも生成する。下でさらに説明するように、ビジュアル表現は、ピンレイアウトとすることができる。選択が、ピンレイアウト内で行われ、選択されたピンをプログラム内の変数に関連付ける。たとえば、ユーザは、センサ(たとえば、温度計、光ダイオード、マイクロホン、電圧計、および類似物)およびアクチュエータ(モータ、リレー、および類似物)などのピンに結合されたある種の周辺エレクトロニクスのピンレイアウトに関して明記することができる。
【００２４】
ビジュアルコントローラモジュール122は、選択された動作の機能に対応する所定のフィールド内でプログラムのための追加パラメータを受信する。その後、ビジュアルコントローラモジュール122は、選択された動作、ピンデータ、およびパラメータを有する、コントローラのネイティブ言語で記述されたパッケージ化されたプログラムを自動的に生成するためにIDE 118と通信し、メモリ115内に記憶されるプログラムを外部コントローラ110に通信する(矢印145として図示)。いくつかの実施形態では、IDEは、リモートプロセス呼出しの実行のためにリモートコーディングサーバ135にアクセスするために、対応するヘッダファイルおよび単純化された命令を送信することができる。
【００２５】
動作中に、ユーザは、結合された温度センサがある温度値に達する時にテキストメッセージ(たとえば、あるフィールド内で指定される)を送信する動作を選択することができる。ユーザは、外部コントローラ110を温度センサに物理的に結合するピンを選択する。ユーザは、インターネット154にアクセスするために、接続された通信回路網に対応するピンを選択することもできる。完了したならば、IDE 118は、リモートコーディングサーバ135上に記憶されたテキストメッセージプロセスへのリモートプロセス呼出しを使用してテキストメッセージを送信するための、関連するピンおよびフィールドデータを有するプログラムを自動的にコンパイルする。その後、リモートコーディングサーバ135は、インターネット154を介して命令を受信し、外部サーバ140を介してテキストメッセージを送信する(矢印160として図示)ために所定のAPIにアクセスする。外部コントローラ110は、自動的に生成されたコントローラプログラム(AGCP)の独立実行のためにユーザデバイスから切断され得る。
【００２６】
外部コントローラ110が、インターネット154から開始されるデータを受信する実施形態では、リモートコーディングサーバ135は、AGCPと互いに整合的に作用するために、対応するプログラムを記憶する。外部コントローラ110が、FACEBOOK（登録商標）ポストが受信されるたびにLEDを光らせる例では、リモートコーディングサーバ135は、ユーザ証明書に基づいてFACEBOOK（登録商標）にログインする、事前に生成されたプロセスまたは記憶されたプログラムを有する。このプログラムは、その後、FACEBOOK（登録商標）通知をリスンし、その通知を、コントローラのネイティブ言語の対応する外部コントローラ110コマンド(たとえば、PIN 8 HIGH)に変換する。このプログラムは、インターネット154を介して外部コントローラ110にPIN 8 HIGHコマンドを送信する。その後、外部コントローラ110は、メモリ115内に記憶されたAGCPを使用してPIN 8 HIGHコマンドを処理する。
【００２７】
図2は、本発明の1つまたは複数の実施形態による、対話的ハードウェアビジュアライゼーションを用いてデバイス固有ハードウェアをプログラミングするための例示的なグラフィカルユーザインターフェース(GUI)200の図である。GUI 200は、上で図1で説明されたシステム100での動作を企図する。
【００２８】
GUI 200は、上で図1で議論されたIDE 118の一部として提示される。GUI 200は、サービスモジュール205と、ピンレイアウト210と、動作パラメータモジュール215および225と、コントローラレイアウトモジュール230と、アプリケーション選択モジュール235と、コーディングウィンドウ240と、展開ボタン245とを含む。サービスモジュール205は、ユーザによって入力されたパラメータだけを使用して特定の動作をプログラミングできるように、GUI 200を介してユーザによって選択され得る動作を編成し、提示するための命令を含む。サービスモジュール205は、IDE 118、リモートコーディングサーバ135、および外部サーバ140によって提供される動作のユーザ選択可能なバンドルを生成する。いくつかの実施形態では、サービスモジュール205は、リモートコーディングサーバ135から、動作の更新されたリストをダウンロードする。
【００２９】
コントローラレイアウトモジュール230は、IDE 118によってプログラムされ得る様々なコントローラタイプを記憶し、認識する。コントローラレイアウトモジュール230は、プログラムとインターフェースし、プログラムを様々なコントローラ上で記憶するために、コンパイルする言語とデータ通信命令とを判定する。コントローラレイアウトモジュール230は、ユーザによるプログラミング中にIDE 118およびUIを用いてピンレイアウト210とインターフェースし、これを生成するための命令および詳細をも含む。下でさらに説明するように、ピンは、選択された動作220に関連付けるためにユーザによって選択される。追加の実施形態は、ピンレイアウト210内に示されているように、選択された動作を展開するために必要なピン数のカウント特徴を含む。ユーザの選択したまたは自動的に判定された外部コントローラ110が、コントローラレイアウトモジュール230によって識別される(ARDUINO YUNとして図示)。
【００３０】
アプリケーション選択モジュール235は、外部コントローラ110に対応するコントローラレイアウトモジュールのために自動的に生成される少なくとも1つのプログラムに命名し、これを記憶するためのものである。説明される実施形態では、アプリケーションは、外部コントローラ110に結合された温度センサによって特定の温度が感知される時にテキストメッセージを送信する。生成されるプログラムに対応するコードは、コーディングウィンドウ240内に表示される。コーディングウィンドウ240は、外部コントローラ110およびメモリ115に記憶される前にコードに対する特定のカスタマイズを行うために、ユーザによって編集されることも可能である。展開ボタン245の選択は、プログラムを外部コントローラ110のネイティブ言語に変換し、このプログラムを通信する。いくつかの実施形態では、変換を、コンパイルする機能とすることができる。オプションの実施形態は、自動的に生成されたコードを異なるファイルフォーマット(たとえば、.js、.txt、.xml、および類似物)にエクスポートするためのダウンロードボタン250を含む。当業者は、本明細書で説明されるボタンが、任意のユーザ選択可能なアイコン、テキスト、またはビジュアルインターフェースを含むことを認めるはずである。
【００３１】
たとえば、選択された動作220は、ショートメッセージサービス(SMS)テキストメッセージを送信することである。テキストメッセージの宛先番号は、パラメータモジュール225内の対応するフィールドに入力される。さらに、選択されたピンは、やはりサービスモジュール205から選択される動作(たとえば、温度感知)に関するパラメータモジュール225内の事前に決定されたフィールド内で指定されるアナログ温度センサに対応する。温度感知に必要な追加パラメータは、動作パラメータモジュール215内で要求される。GUI 200は、選択された動作に必要なパラメータデータだけを表示する。
【００３２】
動作中に、SMSテキストメッセージは、リモートコーディングサーバ135上のリモートプロセスを呼び出すことによって送信される。外部コントローラ110は、記憶された命令(たとえば、ヘッダファイル)を介してリモートコーディングサーバ135に通信する。このプロセスは、ユーザが指定した電話番号に関してゲートウェイおよびルックアップテーブルを突き止めることによってSMSテキストメッセージを送信し、SMSサーバにアクセスするために、所定のコードを展開する。
【００３３】
例示的なシステムでは、このシステムは、コード生成サービスとしてTEMBOOサービスを使用することができる。TEMBOOクライアント(GUI 200)は、ARDUINOコントローラ上にフラッシュ書込されたスケッチプログラムを走らせつつあるARDUINOコントローラ内で接続性クライアントとして使用される。このシステムは、事前に生成されたコードおよび動作(たとえば、2000個を超える「スマートコードプロセス」)を有するTEMBOOコード生成サーバに到達するのに例示的なHTTPS通信プロトコルを使用する。事前に生成されたコードは、TEMBOOサーバ上のスマートプロセスへの呼出しを含むARDUINOコントローラにフラッシュ書込されたスケッチを実施するのに、データベース、コードユーティリティ、API、およびカスタムプロセスを利用する。ARDUINOは、本明細書で議論される実施形態と共に使用するために使用可能であるか使用可能になる可能性がある、無数の可能なマイクロプロセッサおよびコントローラの一例を表す。
【００３４】
図3は、本発明の1つまたは複数の実施形態による、対話的ハードウェアビジュアライゼーションの例示的なグラフィカルユーザインターフェース(GUI)の図である。この図は、上で図2で説明したピンレイアウト210に似た例示的なピンレイアウト305である。ピンレイアウト305は、上で議論したAGCPの動作に関連付けるために選択された、強調表示されたまたは強調されたピン3および4を含む。強調されたピンは、様々な色、シンボル、発光、形状、また選択されていないか動作に対応しないピンからのビジュアルな区別の他の形であるものとすることができる。いくつかの実施形態では、強調されたピンは、プログラミングにおける進行を示すために強調の組合せを使用する。言い換えると、ピンを、接続された周辺機器のための変数パラメータが欠けている時に光る赤、変数パラメータが入力済みの場合に緑とすることができる。たとえば、モータ負荷を測定する動作での検出された電流引出など、すべてのパラメータが対応する動作パラメータモジュール215内に入力されるまで、モータへの結合のために選択されているピンを、赤く光らせることができる。
【００３５】
選択されたピン310は、入力ピン315、出力ピン、クロック信号、および類似物など、自動生成されるプログラム内で役割を指定され得る。いくつかの実施形態では、ピンレイアウトのより高速のユーザ認識のために、ピンに、カスタマイズされた機能のラベル(たとえば、ライト、温度計、モータなど)を付けることができる。選択されたピン310は、アナログ信号またはデジタル信号など、信号タイプ320を受け取りまたは出力するようにもセットされる。選択されたピン、信号タイプ、および動作データは、上でGUI 200で議論されたAGCP内に統合される。
【００３６】
したがって、GUI 200全体は、ピンレイアウト305を介する外部コントローラ110のビジュアライゼーションを可能にすると同時に、外部コントローラ110上でユーザによって望まれる選択された動作220のプログラミングを単純化する。表示されたピンレイアウト305上で行われる選択は、物理ピン機能と、ピンが出力ピン、入力ピン、クロック、および類似物として指定されるのかどうかとのビジュアル調整を可能にする。ビジュアルキューは、外部コントローラ110上でプログラムを正しく実行するために、ユーザがネットリストに従ってまたは回路図をコントローラとペアにするのに費やす時間の長さを減らす。
【００３７】
図4は、本発明の1つまたは複数の実施形態による、リモートサービスと相互作用する自動的に生成されるデバイスプログラムを実行する外部コントローラ110によって実行される方法400の流れ図である。方法400は、リモートコーディングサーバ135、外部コントローラ110、およびGUI 200によって実施される。いくつかの実施形態では、GUI 200は、ホストコンピュータなどのユーザデバイス105上にある。
【００３８】
方法400は、ステップ405で開始され、ステップ410に継続する。ステップ410では、選択されたコントローラレイアウト、選択された動作、パラメータに基づいて、GUI 200およびIDE 118を介してプログラムが自動的に生成される。GUI 200を介して、ユーザは、選択されたコントローラのビジュアルピンレイアウト210上でピンを選択し、ピンに接続される周辺機器のタイプを選択することができ、IDE 118内で、外部コントローラ110のためのコードを生成するために、変数データを入力することができる。生成されるプログラムは、リモートコーディングサーバ135上の動作へのプロセス呼出しおよびローカルコントローラ機能に関するネイティブコードを含む。たとえば、生成されるプログラムは、図2におけるように外部コントローラ110が31℃を超える温度を検出する時に必ずテキストメッセージを送信するためのものとすることができる。したがって、プログラムは、温度センサに結合された外部コントローラ110の指定されたピン上の電圧を読み取るローカルコマンドに基づいて、リモートコーディングサーバ135によって(たとえば、ランタイムエンジンを介して)実行されるテキストメッセージの送信へのプロセス呼出しを含む。
【００３９】
AGCPは、外部コントローラ110に無線で(たとえば、Wi-Fi、セルラ、および類似物)または有線で(たとえば、USB、CAT5、および類似物)送信され得る。いくつかの実施形態では、メモリ115は、リモートコーディングサーバ135にアクセスするためのヘッダファイルを含めて、「フラッシュ書込」されまたはプログラムによって他の形で完全に上書きされる。いくつかの実施形態では、外部コントローラ110上へのプログラムの記憶は、コードを異なるコンピュータ言語(たとえば、機械語)に変換しまたはコンパイルすることを含む。
【００４０】
ステップ415では、外部コントローラ110のプログラムが、メモリ115上に記憶される。ステップ420では、AGCPが、外部コントローラ110上で実行を開始する。いくつかの実施形態では、外部コントローラ110は、関連するアタッチされた周辺エレクトロニクス120からサンプリングし、データを生成する。この例を続けると、外部コントローラ110は、環境温度条件に関して温度センサによって生成されるアナログ電圧レベルの読取を開始する。
【００４１】
方法400は、ステップ425に継続して、TEMBOOサービスなどのコード生成サービスを有するリモートコーディングサーバ135にリモートプロセス呼出しおよび関連する変数データを送信する。例を継続すると、温度しきい値を超えるものとして温度が読み取られたならば、外部コントローラ110は、リモートプロセス呼出しを実行して、リモートコーディングサーバ135上の事前に生成されたコードとして記憶されたテキストメッセージ動作への呼出しを通信することを介してテキストメッセージを送信する。
【００４２】
ステップ430では、リモートコーディングサーバ135が、リモートコーディングサーバ135上に記憶された事前に生成されたコードに変数データを挿入することによって、事前に生成されたコードを実行する。例を継続すると、リモートコーディングサーバ135は、SMSテキストメッセージを送信するための、事前に生成されたコードを取り出し、テキストストリングメッセージおよびGUI 200を使用する自動プログラム生成中に指定された受信者電話番号を挿入する。その後、リモートコーディングサーバ135は、電話番号に関連する受信者デバイスがテキストメッセージを受信するように、関連するインターネットプロトコルおよびセルラプロトコルを使用してネットワークにコードを展開する。
【００４３】
ステップ435では、外部コントローラ110が、リモートコーディングサーバ135サービスから、外部コントローラ110にネイティブな言語の、関連する変数データなどのデータを受信する。リモートコーディングサーバ135は、プロセス呼出しを実行するのに使用されるプログラミング言語からネイティブ言語へデータを変換することができる。外部コントローラ110は、プログラミング中にユーザによって選択された外部コントローラ110による効率的な処理のためにコード生成サービスによってネイティブフォーマット(たとえば、2進データ、ハイまたはロウの信号、数値、ストリング、および類似物)にフォーマットされた関連する変数データを受信する。例を継続すると、ユーザプログラムは、テキストメッセージが成功して送信される時に、ピン5に結合されたLEDを光らせる命令をも含むことができる。そのような場合に、変数データは、ピン5をハイにセットするコードを含む。代替実施形態では、変数データは、AGCPを実行するために外部コントローラ110によって値に復号されるデータとすることができる。そのような例では、「51」を、数値51に対応するデータをリスンする外部コントローラ110に送信することができ、この外部コントローラ110は、その後、ローカルの記憶された論理を使用して、第1の桁をピン番号として、第2の桁をハイ(「1」)またはロウ(「0」)のいずれかとして解析しまたは復号する。
【００４４】
ステップ440では、外部コントローラ110が、リモートコーディングサーバ135から受信されたデータを使用してAGCPの実行を継続する。例を終了すると、外部コントローラ110は、ピン5およびグラウンドに結合されたLEDを光らせるためにピン5に電圧バイアスをかけるために、外部コントローラ110に結合されたローカル電力を選択的にリダイレクトする。方法400は、ステップ445で終了する。
【００４５】
図5は、本発明の1つまたは複数の実施形態による、図2の例示的GUI 200との自動デバイスプログラム生成相互作用の例示的な方法500の流れ図である。GUI 200は、外部コントローラ110をプログラムするためにユーザデバイス105によって実施される。
【００４６】
この方法は、ステップ505で開始され、ステップ510に継続する。ステップ510では、リスト、アイコンの選択可能なグループ、および類似物として表示された事前に決定された複数のコントローラから選択されたものとしてコントローラのタイプを判定する。コントローラを選択することによって、ビジュアルコントローラモジュール122は、既知のライブラリ、ピン構成、ピン動作、最大電圧/電流許容範囲、クロック周波数、および類似物など、選択されたコントローラに独自の詳細を取り出し、投入する。いくつかの実施形態では、選択の判定は、ユーザデバイス105に接続された外部コントローラ110のタイプを自動的に検出することに基づく。
【００４７】
次に、ステップ515では、選択されたコントローラのビジュアルレイアウトをGUI 200内に表示する。ビジュアルレイアウトは、外部コントローラ110をプログラミングするために選択可能であり、対話的であるピンレイアウト210を含む。いくつかの実施形態では、ピンは、プログラム内の他の選択された動作で使用された割り当てられた機能に関して強調表示される。他の実施形態では、付随するマイクロコントローラデータシートからの追加の表示されるデータを抽出し、投入して、外部コントローラ110のビジュアライゼーションのプログラミングおよび生成においてユーザを支援することができる。
【００４８】
次に、ステップ520では、事前に決定された動作の選択において行われた判定をGUI 200内で受け取る。事前に決定された動作は、外部サーバ140上の外部電子サービスに関してサービスモジュール205によって提示されるサービスのバンドルの中での選択、および外部コントローラ110に関する事前に決定されたローカル機能または電子サービスとローカル機能との組合せを含む。たとえば、ツイートすることを、外部サービスとして選択することができ、アタッチされたプッシュボタンからの入力(たとえば、2つのピンにまたがる短絡)をリスンすることを、ローカル機能とすることができる。したがって、組合せの例は、プッシュボタンが押されるたびに特定のメッセージをツイートすることになるはずである。
【００４９】
次に、ステップ525では、ユーザによって入力される動作に関するパラメータデータを、事前に決定されるフィールドまたはドロップダウンメニューを使用して受け取る。追加の実施形態は、ラジオボタン、チェックボックス、ファイルアタッチメント、およびIDE 118内の他の入力インターフェースを選択することを含む。他の実施形態では、パラメータデータは、外部データベースから取り出される。プログラムを生成するための変数データとして動作データだけを受け入れることによって、所望の動作および動作パラメータだけが、知られる必要があるので、ユーザの展望からのプログラミングが、ビジュアル的に単純化される。より高度なソフトウェア開発者またはユーザは、関連するコーディングウィンドウ240内で行われる選択および入力に対応する生成されたコードを編集することができる。その後、方法500は、ステップ530に継続する。
【００５０】
ステップ530では、選択された動作のための通常の基本動作(たとえば、電力、クロック、通信、メモリ、および類似物)に関するピン以外に、外部コントローラ110のそれぞれのピンへのローカル外部接続があるかどうかを判定する。追加の接続がないと判定される場合には、方法500は、ステップ550に継続して、別の動作がAGCPに挿入されなければならないかどうかを判定する。
【００５１】
しかし、追加の接続が、選択された動作のために行われなければならない場合には、方法500は、ステップ535に継続する。ステップ535では、選択された動作の対応するピンに関して、ピンレイアウト210上でピンを選択する。次に、ステップ540では、選択された動作内で外部コントローラ110のためのピンを表す言語を関連付けることによって、ピン選択を動作に割り当てる。たとえば、コントーラ内で入力のためにピン5が選択される場合に、選択されたコントローラのためのコマンドを、「PIN IN 5」とし、選択された動作に関してコーディングウィンドウ240に挿入することができる。追加の実施形態では、ステップ540は、複数の動作が外部コントローラ110上の1つのピンの使用を必要とする可能性がある時などに、生成されるプログラム内の他の選択された動作のためにもピン選択を割り当てる。
【００５２】
その後、方法500は、ステップ545に継続して、動作呼出しを終了するために、ピン選択および割当を、フィールドからの要求されたデータパラメータと統合する。例を継続すると、「if then」ステートメントが、選択されたピンを挿入することによってプロセス動作のために作成される。サンプルコードは、コーディングウィンドウ240内で、「IF PIN IN 5 == 1 THEN Temboo.Tweet ('Little Red Button Pushed!')」のように見えるものとすることができる。代替実施形態は、選択された動作が多数のピンを利用するかどうかに依存して、より多くのピン選択を含むことができる。この方法は、ステップ550に継続する。
【００５３】
ステップ550では、方法500は、追加の動作をAGCPに追加しなければならないのかどうかを判定する。追加の動作を追加しなければならない場合には、方法500は、ステップ520に戻る。しかし、追加の動作を追加する必要がない場合には、ステップ555で、動作および動作データをパッケージ化するかまたは統合する。
【００５４】
ステップ555では、すべての動作を、外部コントローラ110上での記憶またはこれへのフラッシュ書込のためにパッケージ化する。パッケージ化は、ファイルを選択されたコントローラによって受け入れられるネイティブフォーマットにコンパイルすることまたは変換することを含む。追加の実施形態は、リモートコーディングサーバ135にアクセスするための命令を含むヘッダファイルを含む。いくつかの実施形態では、コンパイルされるプログラムをパッケージ化する時に、そのプログラムおよび選択された動作の実行に必要なコードライブラリも、パッケージ化される。たとえば、動作が、インターネット接続を必要とする場合には、HTTPライブラリまたはHTTPSライブラリを含めなければならず、あるいは、マルチスレッディングが、動作のために必要である場合には、選択されたコントローラのためにプログラムを変換する前に、別のライブラリが、コンパイルされ一緒にリンクされるために含まれなければならない。
【００５５】
ステップ560では、生成されたプログラムを外部コントローラ110に記憶するかまたはフラッシュ書き込みする。ステップ565では、コントローラが、外部コントローラ110上でAGCPを実行する。いくつかの実施形態では、AGCPの実行は、上で議論した選択された動作に対応するプロセスへのリモートプロセス呼出しを含む。プロセスは、インターネット154または他のネットワークを介して外部コントローラ110からリモートコーディングサーバ135上に展開される。さらに依然として、リモートコーディングサーバ135による処理の後に、外部コントローラ110にネイティブな言語で応答データを返す実施形態がある。方法500は、ステップ570で終了する。
【００５６】
図6は、本発明の1つまたは複数の実施形態による、図2の例示的GUI 200を介してプログラムされた外部コントローラ110によるリモートプロセス呼出しのためにコーディングサーバによって実行される例示的な方法600の流れ図である。
【００５７】
方法600は、リモートコーディングサーバ135が外部サーバ140上の外部サービスからデータを受信する時に発生する。リモートコーディングサーバ135は、受信されたデータを処理し、それに従って、リモートコーディングサーバ135上に記憶されたプログラムに基づいて、変換されたデータを外部コントローラ110に返す。いくつかの実施形態では、記憶されたプログラムは、外部コントローラ110上のAGCPと共に調整される。
【００５８】
方法600は、ステップ605で開始され、ステップ610に継続し、ここで、外部サーバ140が、インターネットからサービスデータを受信するか、またはリモートコーディングサーバ135上のプロセスに対応するデータを生成する。外部サービスは、リモートコーディングサーバ135によって以前に認証されたものとされ得る。たとえば、AGCPは、電子メールサーバが新しい電子メールメッセージを受信するたびに、外部コントローラ110に結合されたLEDを光らせることができ、リモートコーディングサーバ135は、電子メール受信トレイ通知をチェックする/受信することを認可されなければならない。代替の例は、FACEBOOK（登録商標）ステータスに対するコメントが行われる時に、LEDを光らせるはずであり、これは、FACEBOOK（登録商標）認証証明書を記憶することをも必要とする。ステップ615では、外部サーバ140が、リモートコーディングサーバ135(たとえば、TEMBOOサービス)にデータを送信する。
【００５９】
ステップ620では、リモートコーディングサーバ135が、外部サーバ140からサービスデータを受信する。ステップ625では、リモートコーディングサーバ135が、サービスデータを、プログラム論理ライブラリ内のプロセスおよびリモートコーディングサーバ135上に記憶されたユーザプログラムと照合する。プログラム論理ライブラリは、事前に生成されたコードを含むことができる。事前に生成されたコードは、関連付けられたサービス(たとえば、電子メール、FACEBOOK（登録商標）、テキストメッセージ、および類似物)または論理動作(たとえば、カウント、if/then条件ステートメント、および類似物)に従って編成される。例を継続すると、プロセスは、GUI 200および外部コントローラ110に従って記憶されたプログラムに従ってリモートコーディングサーバ135上に記憶されたユーザアカウントまたは受信者電子メールアドレスと一致する電子メール通知である。上の例では、ユーザは、ユーザアカウントまたは、外部サービスからのサービスデータをリスンするリモートコーディングサーバ135上に記憶されたプログラムを有することができる。
【００６０】
ステップ630では、変数のパラメータデータを、プログラム論理ライブラリに従ってサービスから抽出する/解析する。変数のデータまたはパラメータデータは、追加処理のための事前に生成されたコードへの挿入に備えてフィルタリングされる。フィルタリングおよび挿入は、コーディング構文内の事前に決定された関係(たとえば、IF-THEN、変数タイプ、式、および類似物)およびプログラム内で指定される動作に基づく。上の例を継続すると、電子メール通知サービスデータは、プログラム論理ライブラリ内の所定のプロセスによって要求されない、受信時刻、メッセージトピック、メッセージ本体などの追加情報を含む場合がある。
【００６１】
ステップ635では、ランタイムエンジンを介してプログラムデータを生成するために、記憶された事前に生成されたプロセスおよびプログラムに関連する機能に従って追加の動作を実行することによって、解析されたサービスデータに基づいて追加の処理を実行する。プログラムは、リモートコーディングサーバ135上の方法400および500で議論されたAGCPに関連付けられる。たとえば、プログラム論理ライブラリは、メッセージに関して他の電子メールアカウントを同時にチェックするためのパラメータを有することができる。
【００６２】
ステップ640では、リモートコーディングサーバ135が、リモートコーディングサーバ135上に記憶されたプログラムが1つまたは複数の外部サーバ140(たとえば、TWITTER（登録商標）、EBAY、緊急テキスト通知、および類似物)からの追加サービスデータを呼び出すべきかどうかを判定する。プログラムが追加サービスデータを必要とすると判定される場合には、方法600は、ステップ610に戻る。しかし、追加サービスデータが要求されないとの判定が行われる場合には、方法600はステップ645に進む。
【００６３】
ステップ645では、ステップ635でのプログラム論理からのプログラムデータを、プログラムのターゲットコントローラのためのネイティブ言語または信号に変換する。ターゲットコントローラは、プログラム内でまたはユーザアカウントプリファレンスに従って指定され得る。ステップ650では、変換されたプログラムデータを外部コントローラ110に送信する。データは、リモートコーディングサーバ135の通信回路を使用して送信される。変換されたプログラムデータは、効率的な処理をさらに提供するために外部コントローラ110によって内部的に生成されかつ/または期待されるはずのデータから実質的に区別不能とされ得る。
【００６４】
ステップ655では、外部コントローラ110が、変換されたプログラムデータを受信する。変換されたプログラムデータは、ネットワーク、インターネット、または直接接続を介して受信され得る。次に、ステップ660では、変換されたプログラムデータが、外部コントローラ110上でたやすく処理される。ステップ665では、外部コントローラ110が、メモリ115内の記憶された命令を実行する。いくつかの実施形態では、記憶された命令は、変換されたデータを使用するAGCPに対応する。その後、方法600は、ステップ670で終了する。
【００６５】
図7は、本発明の1つまたは複数の実施形態による、例示的なコンピューティングシステム700内のモジュールのブロック図である。このコンピュータシステムは、前述の実施形態のサーバまたは電子デバイスを含む、実質的に同様の構造を含む。
【００６６】
自動電子デバイスプログラム生成のための方法および装置の様々な実施形態。1つのそのようなコンピュータシステムは、図1〜図6に示された要素または機能性のいずれかを様々な実施形態内で実施することができる、図1によって示されるシステム100である。様々な実施形態では、コンピュータシステム700を、上で説明された方法を実施するように構成することができる。コンピュータシステム700は、上で説明された実施形態の任意の他のシステム、デバイス、要素、機能性、または方法を実施するのに使用され得る。図示の実施形態では、コンピュータシステム700は、様々な実施形態でプロセッサ実行可能プログラム命令722(たとえば、プロセッサ710によって実行可能なプログラム命令)として方法400、500、および600を実施するように構成され得る。
【００６７】
図示の実施形態では、コンピュータシステム700は、入出力(I/O)インターフェース730を介してシステムメモリ720に結合された1つまたは複数のプロセッサ710a〜710nを含む。コンピュータシステム700は、入出力インターフェース730に結合されたネットワークインターフェース740と、カーソル制御デバイス760、キーボード770、およびディスプレイ780などの1つまたは複数の入出力デバイス750とをさらに含む。いくつかの実施形態では、キーボード770を、タッチスクリーン入力デバイスとすることができる。
【００６８】
様々な実施形態では、コンポーネントのいずれかをシステムによって利用して、上で説明したファームウェアを仮想化することができる。様々な実施形態では、ユーザインターフェースを生成し、ディスプレイ780上に表示することができる。いくつかの場合に、諸実施形態を、コンピュータシステム700の単一のインスタンスを使用して実行することができると同時に、他の実施形態では、複数のそのようなシステムまたはコンピュータシステム700を構成する複数のノードを、様々な実施形態の異なる部分またはインスタンスをホスティングするように構成できることが企図されている。たとえば、一実施形態では、いくつかの要素を、他の要素を実施するノードとは別個のコンピュータシステム700の1つまたは複数のノードを介して実施することができる。別の例では、複数のノードが、分散された形でコンピュータシステム700を実施することができる。
【００６９】
異なる実施形態では、コンピュータシステム700を、パーソナルコンピュータシステム、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、アプリケーションサーバ、ストレージデバイス、スイッチ、モデム、ルータなどの周辺デバイス、または一般に任意のタイプのコンピューティングデバイスもしくは電子デバイスを含むがこれに限定されない様々なタイプのデバイスのいずれかとすることができる。
【００７０】
様々な実施形態では、コンピュータシステム700を、1つのプロセッサ710を含むユニプロセッサシステムまたは複数のプロセッサ710(たとえば、2つ、4つ、8つ、または別の適当な個数)を含むマルチプロセッサシステムとすることができる。1つのプロセッサ710を含むユニプロセッサシステムは、プログラムの同時データの処理および実行のために複数のプロセッサに見えるように単一のプロセッサの機能性を分割することができる。プロセッサ710は、命令を実行することができる任意の適切なプロセッサとすることができる。たとえば、様々な実施形態において、プロセッサ710は、様々な命令セットアーキテクチャ(ISA)のいずれかを実施する汎用プロセッサまたは組込みプロセッサとすることができる。マルチプロセッサシステムでは、プロセッサ710のそれぞれは、同一のISAを共通して実施することができるが、必ずしもそうとは限らない。
【００７１】
システムメモリ720は、プロセッサ710によってアクセス可能なプログラム命令722、ファームウェア733、および/またはデータ732を記憶するように構成され得る。様々な実施形態では、システムメモリ720は、スタティックランダムアクセスメモリ(SRAM)、シンクロナスダイナミックRAM (SDRAM)、不揮発性/フラッシュタイプのメモリ、または任意の他のタイプのメモリなど、任意の適切なメモリ技術を使用して実施され得る。図示の実施形態では、上で説明された実施形態の要素のいずれかを実施するプログラム命令およびデータを、システムメモリ720内に記憶することができる。他の実施形態では、プログラム命令および/またはデータを、システムメモリ720またはコンピュータシステム700とは別々の異なるタイプのコンピュータアクセス可能媒体または同様の媒体上で受信するか、送信するか、または記憶することができる。
【００７２】
一実施形態では、入出力インターフェース730を、プロセッサ710、システムメモリ720、および、ネットワークインターフェース740または入出力デバイス750などの他の周辺インターフェースを含むデバイス内の任意の周辺デバイスとの間の入出力トラフィックを調整するように構成することができる。いくつかの実施形態では、入出力インターフェース730は、任意の必要なプロトコル、タイミング、または他のデータ変換を実行して、データ信号をあるコンポーネント(たとえば、システムメモリ720)から別のコンポーネント(たとえば、プロセッサ710)による使用に適するフォーマットに変換することができる。いくつかの実施形態では、入出力インターフェース730は、たとえばPeripheral Component Interconnect (PCI)バス標準規格またはUniversal Serial Bus (USB)標準規格の変形など、様々なタイプの周辺バスを介してアタッチされたデバイスに関するサポートを含むことができる。いくつかの実施形態では、入出力インターフェース730の機能を、たとえばノースブリッジおよびサウスブリッジなど、複数の別々のコンポーネントに分割することができる。また、いくつかの実施形態では、システムメモリ720へのインターフェースなど、入出力インターフェース730の機能性の一部またはすべてを、プロセッサ710内に直接に組み込むことができる。
【００７３】
ネットワークインターフェース740は、コンピュータシステム700と1つもしくは複数の外部システムなどのネットワーク(たとえば、ネットワーク790)にアタッチされた他のデバイスとの間またはコンピュータシステム700のノードの間でデータを交換することを可能にするように構成され得る。様々な実施形態では、ネットワーク790は、ローカルエリアネットワーク(LAN)(たとえば、イーサネット（登録商標）または会社ネットワーク)、広域ネットワーク(WAN)(たとえば、インターネット)、無線データネットワーク、セルラネットワーク、Wi-Fi、何らかの他の電子データネットワーク、またはその何らかの組合せを含むがこれに限定されない1つまたは複数のネットワークを含むことができる。様々な実施形態では、ネットワークインターフェース740は、たとえば任意の適切なタイプのイーサネット（登録商標）ネットワークなど、有線または無線の一般的なデータネットワークを介するか、アナログ音声ネットワークもしくはデジタルファイバ通信ネットワークなどの遠隔通信/テレフォニネットワークを介するか、ファイバチャネルSANなどのストレージエリアネットワークを介するか、または任意の他の適切なタイプのネットワークおよび/もしくはプロトコルを介する、通信をサポートすることができる。
【００７４】
入出力デバイス750は、いくつかの実施形態で、1つもしくは複数のディスプレイ端末、キーボード、キーパッド、タッチパッド、タッチスクリーン、スキャニングデバイス、音声認識デバイスもしくは光学認識デバイス、または1つもしくは複数のコンピュータシステム700によってデータを入力するかもしくはデータにアクセスするのに適する任意の他のデバイスを含むことができる。複数の入出力デバイス750が、コンピュータシステム700内に存在することができるか、または、コンピュータシステム700の様々なノード上に分散され得る。いくつかの実施形態では、同様の入出力デバイスが、コンピュータシステム700から分離され得、ネットワークインターフェース740を介するなど、有線または無線の接続を介してコンピュータシステム700の1つまたは複数のノードと相互作用することができる。
【００７５】
いくつかの実施形態では、図示されたコンピュータシステムは、図3〜図5の流れ図によって示される方法など、上で説明された方法のいずれかを実施することができる。他の実施形態では、異なる要素およびデータを含めることができる。
【００７６】
当業者は、コンピュータシステム700が、単に例示的であって、実施形態の範囲を限定することが意図されていないことを認めるであろう。具体的には、コンピュータシステムおよびデバイスは、コンピュータ、ネットワークデバイス、インターネットアプライアンス、スマートフォン、タブレット、PDA、無線電話機、ページャ、および類似物を含む、様々な実施形態の示された機能を実行することのできるハードウェアまたはソフトウェアの任意の組合せを含むことができる。コンピュータシステム700は、図示されていない他のデバイスにも接続され得るか、またはその代わりに、独立型システムとして動作することができる。さらに、図示のコンポーネントによって提供される機能性を、いくつかの実施形態で、より少数のコンポーネント内で組み合わせるか、または追加のコンポーネント内で分散させることができる。同様に、いくつかの実施形態で、図示されたコンポーネントのいくつかの機能性が、提供されなくてもよく、かつ/または、他の追加の機能性を使用可能にすることができる。
【００７７】
当業者は、様々な項目が、使用されつつある間にメモリ内またはストレージ上に記憶されるものとして図示されたが、これらの項目またはそれらの一部が、メモリ管理およびデータ完全性の目的のためにメモリと他のストレージデバイスとの間で転送され得ることをも了解するであろう。代替案では、他の実施形態において、ソフトウェアコンポーネントの一部またはすべてが、別のデバイス上のメモリ内で実行し、コンピュータ間通信を介して図示のコンピュータシステムと通信することができる。システムコンポーネントまたはデータ構造の一部またはすべてを、適当なドライブによって読み取られるコンピュータアクセス可能媒体または携帯可能な物品上に記憶することもでき(たとえば、命令または構造化データとして)、その様々な例は、上で説明される。いくつかの実施形態では、コンピュータシステム700とは別々のコンピュータアクセス可能媒体上に記憶される命令を、コンピュータシステム700に、伝送媒体または、ネットワークおよび/もしくは無線リンクなどの通信媒体を介して伝えられる電気信号、電磁信号、もしくはデジタル信号などの信号を介して送信することができる。様々な実施形態は、コンピュータアクセス可能媒体上でまたは通信媒体を介して前述の説明に関連して実施される命令および/またはデータの受信、送信、または記憶をさらに含むことができる。一般に、コンピュータアクセス可能媒体は、磁気媒体または光媒体、たとえばディスクまたはDVD/CD-ROM、RAM(たとえば、SDRAM、DDR、RDRAM、SRAM、および類似物)、ROM、および類似物などの揮発性または不揮発性の媒体などの記憶媒体またはメモリ媒体を含むことができる
【００７８】
本明細書で説明される方法を、異なる実施形態で、ソフトウェア、ハードウェア、またはその組合せで実施することができる。さらに、方法の順序を変更することができ、様々な要素を、追加、並べ変え、組合せ、省略、または他の形で変更することができる。本明細書で説明されたすべての例は、非限定的な形で提示される。本開示の利益を有する当業者に明白になるはずであるように、様々な修正および変更を行うことができる。諸実施形態による実現は、特定の実施形態の文脈において説明された。これらの実施形態は、例示的であって限定的ではないことが意図されている。多数の変形形態、修正形態、追加、および改善が可能である。したがって、複数のインスタンスが、単一のインスタンスとして本明細書で説明されるコンポーネントについて提供され得る。様々なコンポーネント、動作、およびデータストアの間の境界は、多少任意であり、特定の動作は、特定の例示的構成の文脈において示される。機能性の他の割振りが、想像されており、以下の特許請求の範囲に含まれ得る。最後に、例の構成において別個のコンポーネントとして提示された構造および機能性を、組み合わされた構造またはコンポーネントとして実施することができる。上記および他の変形形態、修正形態、追加、および改善は、以下の特許請求の範囲で定義される実施形態の範囲に含まれ得る。
【００７９】
前述は、本発明の実施形態を対象とするが、本発明の他のおよびさらなる実施形態が、本発明の基本的な範囲から逸脱せずに考案され得、本発明の範囲は、以下の特許請求の範囲によって決定される。
【符号の説明】
【００８０】
100  自動デバイスプログラム生成システム
105  ユーザデバイス
108  CPU
110  外部コントローラ
112  サポート回路
114  メモリ
115  メモリ
116  オペレーティングシステム
118  IDE
120  周辺エレクトロニクス
122  ビジュアルコントローラモジュール
130  集積回路デバイス
135  リモートコーディングサーバ
140  外部サーバ
154  インターネット
200  GUI
205  サービスモジュール
210  ピンレイアウト
215  動作パラメータモジュール
220  選択された動作
225  動作パラメータモジュール
230  コントローラレイアウトモジュール
235  アプリケーション選択モジュール
240  コーディングウィンドウ
245  展開ボタン
250  ダウンロードボタン
305  ピンレイアウト
310  選択されたピン
315  入力ピン
320  信号タイプ
400  方法
500  方法
600  方法
700  コンピューティングシステム
710  プロセッサ
710a〜710n  プロセッサ
720  システムメモリ
722  プロセッサ実行可能プログラム命令
730  入出力(I/O)インターフェース
732  データ
733  ファームウェア
740  ネットワークインターフェース
750  入出力デバイス
760  カーソル制御デバイス
770  キーボード
780  ディスプレイ
790  ネットワーク
【図１】
0006581097.tif 000002
【図２】
0006581097.tif 000003
【図３】
0006581097.tif 000004
【図４】
0006581097.tif 000005
【図５】
0006581097.tif 000006
【図６】
0006581097.tif 000007
【図７】
0006581097.tif 000008