説明

情報処理装置、その制御方法、およびデバイス制御システム

【課題】情報処理装置がデバイスサーバを介してデバイスとデータ通信を行う際、デバイスのインターフェース規格などで規定される最大接続台数に制限されることなく、デバイスを接続制御できるようにする。
【解決手段】情報処理装置は、デバイスサーバを介してデバイスとデータ通信を行う際、デバイスサーバ通信モジュールで生成される通信スレッドによって、予め規格された個数に達するまで、デバイスサーバを介してデバイスを直接接続したときと同様に制御するためのデバイススタックを生成する。そして、通信スレッドがデバイスとの接続を示す接続通知を受信すると、デバイススタックから非データ送受信状態であるデバイススタックの検出を行い、検出した非データ送受信状態のデバイススタックを介してデバイスサーバと接続しデータ送受信を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ネットワークを介して各種デバイスと通信を行う情報処理装置、その制御方法、およびデバイス制御システムに関する。
【背景技術】
【0002】
従来、パーソナルコンピュータなどの情報処理装置(以下,PC)をクライアントとしてネットワークを介してプリンタ、ストレージ、およびスキャナなどのデバイス(周辺機器)を利用するシステムが知られている。このようなシステムにおいて、クライアントがネットワーク上のデバイスをローカル接続されたデバイスとして仮想的に認識して、ネットワーク上のクライアントからデバイスをアクセスできるようにしたものがある。
【0003】
本出願人は、この際、ネットワーク上に存在するデバイスの台数分だけクライアントにデバイスサーバを介してデバイスを制御するためのデバイススタックを構成して、デバイスのインターフェース規格やメーカー又はベンダーが提供するデバイスの制御に必要なプログラム(機能)であるSDK(Software Development Kit)などで規定される最大接続台数までデバイスを接続できるように制御するクライアント装置及びデバイス制御システムを提案している(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2011−129111号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
本発明は、出願人自らが先に提案した特許文献1のクライアント装置及びデバイス制御システムをさらに拡張・発展させ、デバイスのインターフェース規格やSDKで規定される最大接続台数を超えてデバイスを接続制御できる情報処理装置、その制御方法、およびデバイス制御システムを提供することを目的とする。
【課題を解決するための手段】
【0006】
上記目的を達成するため、本発明による情報処理装置は、デバイスがローカル接続されているデバイス制御装置にネットワークを介して接続される情報処理装置であって、上位層のソフトウェアからの要求により、前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド制御手段と、前記通信スレッド制御手段によって生成される通信スレッドと、前記通信スレッドにより生成され、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックとを備え、前記通信スレッドは、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行い、当該検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行うことを特徴とする。
【0007】
本発明によるデバイス制御システムは、上記の情報処理装置と、前記情報処理装置にネットワークを介して接続されたデバイス制御装置と、前記デバイス制御装置にローカル接続されたデバイスとを有し、前記情報処理装置が前記デバイス制御装置を介して前記デバイスを制御してデータ通信を行うことを特徴とする。
【0008】
本発明による制御方法は、デバイスがローカル接続されているデバイスサーバにネットワークを介して接続される情報処理装置の制御方法であって、上位層のソフトウェアからの要求により、通信スレッド制御手段が前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド生成ステップを実行し、前記通信スレッド生成ステップで生成された通信スレッドは、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックを生成するデバイススタック生成ステップと、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行う検出ステップと、前記検出ステップで検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行う接続ステップとを実行することを特徴とする。
【発明の効果】
【0009】
本発明によれば、情報処理装置がデバイス制御装置を介してデバイスとデータ通信を行う際、デバイスのインターフェース規格やSDKで規定される最大接続台数に制限されることなく、情報処理装置の性能を効果的に発揮して、デバイスを接続制御できるようになる。
【図面の簡単な説明】
【0010】
【図1】本発明の第1の実施形態による情報処理装置の一例が用いられたデバイス制御システムを示すブロック図である。
【図2】図1に示すデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。
【図3】図1に示す情報処理装置においてデバイスサーバ通信モジュールの動作の一例を説明するためのフローチャートである。
【図4】図3に示すフローチャートにおける通信スレッド生成・開始処理を説明するためのフローチャートである。
【図5】図3に示すフローチャートにおける接続処理を説明するためのフローチャートである。
【図6】図1に示すデバイス制御モジュールで行われるデータ送受信の一例を説明するためのフローチャートである。
【図7】図3に示すフローチャートにおける終了処理を説明するためのフローチャートである。
【図8】本発明の第2の実施形態によるデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。
【図9】本発明の第2の実施形態による情報処理装置においてデバイスサーバ通信モジュールの動作の一例を説明するためのフローチャートである。
【図10】本発明の第3の実施形態によるデバイス制御システムの一例を示すブロック図である。
【発明を実施するための形態】
【0011】
以下、本発明の実施の形態による情報処理装置について図面を参照して説明する。なお、以下の説明では、情報処理装置としてパーソナルコンピュータ(PC)を一例に挙げて説明する。
【0012】
[第1の実施形態]
図1は、本発明の第1の実施形態による情報処理装置の一例が用いられたデバイス制御システムを示すブロック図である。
【0013】
情報処理装置11は、LAN(ローカルエリアネットワーク)などのネットワーク10を介してデバイスサーバ12−1〜12−n(図示の例では、n=4)と接続可能に構成されている。なお、上記のネットワーク10は、有線又は無線のいずれの方式を用いてもよい。
【0014】
また、デバイスサーバ12−1〜12−4夫々は、汎用的なインターフェースを備える入出力機器であるデバイス13−1〜13−2が接続ケーブル10a〜10dでローカル接続されている。ここでは、USB(Universal Serial Bus)インターフェースで接続されている例について説明するが、これに限定されるものではなく、例えば、HDMIやThunderboltなどの他のインターフェースに準拠するインターフェースを用いるようにしてもよい。
【0015】
デバイス13−1〜13−4は、汎用的なインターフェース(ここでは、USBインターフェース)を備えた入出力機器である。例えば、キーボード、マウス、又はカードリーダのような入力機器、ディスプレイなどの表示(出力)機器、そして、プリンタなどの単機能周辺機器、又は、プリント機能の他にスキャン機能、コピー機能、およびストレージ機能などを備える多機能周辺機器であってもよく、これら以外の入出力機器であってもよい。なお、デバイスサーバ12−1〜12−4は、それぞれが接続しているデバイス13−1〜13−4と一体化した構造とするようにしてもよい。
【0016】
図1に示す例では、情報処理装置が1台であるが、複数の情報処理装置がネットワーク10に接続されている構成であってよい。また、デバイスサーバには、夫々デバイスが1台ずつ接続されているが、複数のデバイスが接続されている構成であってもよい。
【0017】
<情報処理装置の構成>
図1に示す情報処理装置11は、本発明の情報処理装置の一例であり、例えば、PC(パーソナルコンピュータ)などの装置であって、内部バスで互いに接続されたCPU、入力部、表示部、メモリ、通信部、外部記憶部(何れも不図示)で構成され、ネットワーク10を介してデバイスサーバ12−1〜12−4と通信することができる。
【0018】
外部記憶部は、不図示のオペレーティングシステム(以下、OS)、外部アプリケーション11a、常駐モジュール11b、デバイスサーバ通信モジュール11c、デバイス制御モジュール11d−1〜11d−3、デバイススタック11f〜1〜11f−3、および通信制御部11e等のソフトウェア部品に加えて、各種データが記憶される。これらソフトウェア部品及び各種データは、CPU及びOSの制御に従い、メモリ上に読み出されて各種制御が実行される。
【0019】
<情報処理装置のソフトウェア構成>
外部アプリケーション11aは、デバイス13に対する要求(起動、接続、又は終了など)やユーザ操作に応じた要求を、常駐モジュール11bを介して指示し、当該要求に対する結果を得るためのソフトウェアである。
【0020】
常駐モジュール11bは、OSが起動している際、常に待機および動作しているソフトウェアであり、デバイスサーバ通信モジュール11cおよび通信制御部11eを起動して、ネットワーク上に存在するデバイスサーバ12−1〜12−4とデータ送受信を行う。また、常駐モジュール11bは、デバイスサーバ12及び夫々のデバイスサーバ12にローカル接続されたデバイス13−1〜13−4を検知して、デバイスサーバ12に関するデバイスサーバ情報及びデバイス13に関するデバイス情報を取得する。
【0021】
デバイスサーバ通信モジュール11cは、常駐モジュール11bによって起動されるソフトウェア部品であって、メインスレッド120及び通信スレッド121〜124によってデバイスサーバ12−1〜12−4夫々との通信を独立して制御するとともに、通信スレッドの個数、デバイススタック(後述)の個数及びその通信状態に関する情報(データ送受信中か否かなど)の管理を行う。
【0022】
メインスレッド120は、上位層のソフトウェアである外部アプリケーション11a、OS、常駐モジュール11bの制御に従い、通信スレッド121〜124を生成、起動し、デバイスサーバ12との間の通信を制御するソフトウェアである(通信スレッド制御手段)。
【0023】
通信スレッド121〜124各々は、デバイス13(13−1〜4)が接続されたデバイスサーバ12−1〜12−4との間の通信制御を独立して実行するためのプログラムであり、外部アプリケーション11aからの起動要求が契機となり、制御対象とするデバイス13(13−1〜4)ごとに生成される。図1では、4個の通信スレッドが生成されているが、生成される個数はこれに限定されるものではなく、これ以上の個数であってもよい。
【0024】
当該生成された通信スレッドは、常駐モジュール11bが取得したデバイス情報に基づいてデバイス13(13−1〜13−4)との間のデータ送受信に必要なドライバソフトウェアであるデバイスドライバ110、クラスドライバ111、および仮想バスドライバ112を一意に特定し、順次動的に生成する。これらドライバソフトウェア(デバイスドライバ110、クラスドライバ111、および仮想バスドライバ112)を総称してデバイススタックという。図1では、3つのデバイススタック11f−1〜11f−3が生成される。
【0025】
なお、デバイススタックは、生成できる個数が決まっており、デバイスのインターフェース規格やSDKなどによって規定された接続可能なデバイスの台数の上限(以後、最大接続数)と同数まで生成できる。例えば、USBインターフェースの規格では、最大接続数は127台であり、規格によるとデバイススタックは127個まで生成できる。本実施例では、便宜上、最大接続数を3台、即ち、デバイススタックを3個まで生成できるものとして説明する。
【0026】
また、デバイスの機種が異なる場合は、それぞれの機種に応じたデバイススタックが生成、起動される。この場合も同様に、生成可能なデバイススタックの総個数は、上述した最大接続数まで生成される。
【0027】
更に、通信スレッド121〜124の各々は、外部アプリケーション11a若しくは、デバイスサーバ12を介してデバイス13の動作状態(ステータス)の変化を示す接続通知を受けると、何れのデバイスサーバ12ともデータ送受信を実行していない状態(以下、非データ送受信状態)のデバイススタック11fの検出を行う。具体的には、デバイスサーバ通信モジュール11c内で管理してデバイスサーバとの通信状態に関する情報に基づいて非データ送受信状態を判断する。そして、該当する非データ送受信状態のデバイススタック11fが検出されると、該当するデバイススタック11fの仮想バスドライバ112に切替通知することで、データ通信経路の切り替えが行われ、デバイススタック11fとの接続が行われる。そして、当該デバイススタック11fを介して接続されるデバイスサーバ12に対して、独立したセッションを開始し、データ送受信が完了すると当該セッションの終了を指示する。
【0028】
通信スレッドの個数とデバイススタックの個数は必ずしも一致せず、デバイススタックの個数が最大接続数である場合、通信スレッド(121〜124)は、デバイススタックの生成を行わない。
【0029】
デバイス制御モジュール11d−1〜11d−3の各々は、デバイスサーバ通信モジュール11cによって、夫々のデバイススタック11fに対応して起動されるソフトウェアである。例えば、デバイス制御モジュール11d−1は、デバイススタック11f−1、デバイス制御モジュール11d−2は、デバイススタック11f−2、デバイス制御モジュール11d−3は、デバイススタック11f−3、というように夫々のデバイススタック11fと対応づけて起動される。そして、不図示のSDKを介しデバイススタック11f−1〜11f−3夫々と対となって動作し、デバイス13−1〜13−4を各々に独立して制御する。
【0030】
通信スレッド(121〜124)によってデバイスサーバ12とのセッションが開始されると、該当の通信スレッドに対してデータ送受信開始通知を送って、接続したデバイススタック11f(11f−1〜3)を介してデバイスサーバ12(12−1〜4)とのデータ送受信の制御を開始し、データ送受信が終了すると、データ送受信完了通知を該当の通信スレッドに送信する。
【0031】
<デバイススタックの構成>
次に、デバイススタック11f(11f−1〜3)を構成する各ソフトウェア部品について説明する。
【0032】
デバイスドライバ110は、OSや外部アプリケーション11a又はデバイス制御モジュール11d−1〜11d−3の指示によって、デバイス13(13−1〜4)に対する制御コマンドを生成してデータ送受信を実行する。そして、デバイスドライバ110は当該制御コマンドに対するデバイス13(13−1〜4)からの応答(つまり、データ送受信の結果)を待って、当該応答をデバイス制御モジュール11d(11d−1〜3)に通知するソフトウェアである。
【0033】
クラスドライバ111(ここでは、USBクラスドライバ)は、制御コマンドを送受信するためのUSBポートを有しており、デバイス制御モジュール11d(11d−1〜3)又はデバイスドライバ110で生成された制御コマンドをUSBパケットに変換して仮想バスドライバ112へ送り、さらに当該USBパケットを制御コマンドに変換してデバイス制御モジュール11d(11d−1〜3)又はデバイスドライバ110に渡す。
【0034】
仮想バスドライバ112(ここでは、USB仮想バスドライバ)は、通信制御部11eを介して夫々のデバイスサーバ12に接続されたデバイス13を、ローカル接続によって直接接続したときと同様に制御するためのソフトウェアである。
【0035】
通信制御部11eは、ネットワーク10と接続してデバイスサーバ12との間の通信を制御する。
【0036】
<デバイスサーバ12の構成>
デバイス制御装置の一例であるデバイスサーバ12(12−1〜4)の各々は、内部バスで互いに接続されたCPU、メモリ、通信部、ローカルインタフェース(ここでは、USBインターフェース)、及び外部記憶部(何れも不図示)で構成されており、ネットワーク10を介して情報処理装置11と通信すると共に、ローカル接続しているデバイス13−1〜13−4夫々と接続ケーブルを介してデータ送受信することができる。
【0037】
外部記憶部には、OS(不図示)、通信制御部12a、仮想化制御部12b、およびデバイス制御部12cなどのソフトウェアに加え各種データが記憶される。これらソフトウェア、及び記憶されたデータは、CPUの制御に従い、メモリ上に読み出されて各種制御が実行される。
【0038】
通信制御部12aは、ネットワーク10と接続して情報処理装置11との間の通信を制御する。仮想化制御部12bは、通信制御部12aを介して情報処理装置11の仮想バスドライバ112と通信し、デバイス制御部12cを制御する。デバイス制御部12cは、USBインターフェースを介して接続されているデバイス13(13−1〜4)を制御する。
【0039】
このような構成のデバイス制御システムにおいて、情報処理装置11は、仮想バスドライバ112によって、デバイスサーバ12の仮想化制御部12bを介しデバイス制御部12cを遠隔で制御することで、情報処理装置11にデバイス13(13−1〜4)があたかもローカル接続されたときと同様に制御することができる(仮想化制御)。
【0040】
また、デバイスサーバ12(12−1〜4)は、ローカル接続しているデバイス13(13−1〜4)からデバイス情報(デバイス識別情報、デバイス構成、種別など)をデバイス制御部12cによって取得し、当該デバイス情報及び自装置の情報であるデバイスサーバ情報(サーバ識別情報、サーバ設定情報など)を情報処理装置11に送信する。
【0041】
デバイス情報やデバイスサーバ情報は、情報処理装置11からの要求でデバイスサーバ12を介して取得するようにしてもよいし、デバイスサーバ12で電源がオンされた場合又はデバイスサーバ12の設定が変更された場合に、デバイスサーバ12から情報処理装置11に送信することで、情報処理装置11に通知されるようにしてもよい。
【0042】
<第1の実施形態のデバイス制御システムの制御シーケンス及びフロー>
図2は、図1に示すデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。なお、情報処理装置11は、デバイスサーバ情報やデバイス情報を取得しているものとして説明する。
【0043】
<デバイスサーバ通信モジュール11の動作フロー>
図3は、図1に示す情報処理装置11においてデバイスサーバ通信モジュール11cのメインスレッド120の動作の一例を説明するためのフローチャートであり、図2のシーケンス図を参照しながら説明する。
【0044】
常駐モジュール11bは、プロセス起動通知によってデバイスサーバ通信モジュール11cを起動する。デバイスサーバ通信モジュール11cが起動するとメインスレッド120が開始され、メインスレッド120は、常駐モジュール11bからの要求(起動、接続、又は終了など)を待ち受ける待機状態となる(ステップS301)。
【0045】
そして、この待機状態において、常駐モジュール11bからの要求を受けると常駐モジュール11bからのプロセス終了通知であるか否かを判定する(ステップS302)。プロセス終了通知であると判定した場合(ステップS302において、YES)、デバイスサーバ通信モジュール11cによる処理を終了する。一方、プロセス終了通知でない場合(ステップS302において、NO)、外部アプリケーション11aから通知されるデバイス13に対する要求(起動、接続、又は終了など)の通知(以下、要求通知)であると判断する(ステップS303)。
【0046】
続いて、受信した要求通知の判定処理を行う。まず、デバイスサーバ通信モジュール11cは当該要求通知が起動通知であるか否かを判定する(ステップS304)。
【0047】
<通信スレッドの生成・開始>
メインスレッド120は、要求通知が「起動通知」であると判定すると(ステップS304において、YES)、デバイスサーバ12(12−1〜4)毎に独立したデータ通信制御を行う通信スレッド(121〜124)を生成して、当該通信スレッドを開始させ(ステップS305)。そして、ステップS301の処理に戻る。
【0048】
図4は、図3のステップS305に示す通信スレッド生成・開始処理を説明するためのフローチャートである。
【0049】
メインスレッド120は、外部アプリケーション11aからの起動要求に応じて、常駐モジュール11bから送られてくる起動通知を受けると、通信スレッドを生成し、当該通信スレッドは、デバイスサーバ12との通信プロトコルの決定を行う。例えば、LAN(Local Area Network)で通信するか、HTTP(HyperText Transfer Protocol)などを使ってインターネットなど外部のネットワークを介して接続して通信するかを決定する(ステップS401)。なお、ここでは、LANで通信するためのプロトコルで通信するものとし、以降、LANで接続するものとして説明する。
【0050】
次に、通信スレッドでは、デバイススタック11fの個数が規定された最大接続数(ここでは、3個)か否かを判定する(ステップS402)。そして、デバイススタックの個数が最大接続数(3個)未満の場合(ステップS402において、NO)、常駐モジュール11bが取得したデバイス情報に基づいてデバイススタック11fを生成し、前述の仮想化制御を開始する(ステップS403)。
【0051】
なお、デバイススタックを生成するときに、後述する非データ送受信状態のデバイススタックの検出を行い、当該非データ送受信状態のデバイススタックが検出されない(存在しない)場合のみ、新たにデバイススタックを生成するようにしてもよい。
【0052】
続いて、通信スレッド(121〜124)は、ステップS403の処理で生成したデバイススタック11fに応じたデバイス制御モジュール11dを起動し(ステップS404)、当該デバイス制御モジュール11dからの起動完了イベントの通知を受けると、該当するデバイスサーバ12へセッションの接続を通信制御部11eに対して指示する(ステップS405)。
【0053】
そして、当該セッションが接続されると、通信スレッド(121〜124)に対してデバイス監視情報(後述)をデバイスサーバ12に対して送信するように指示する(ステップS406)。そして、デバイスサーバ12への送信が完了すると、通信制御部11eに対してセッションの終了を指示し(ステップS407)、デバイスサーバ12とのセッションが終了するとデバイスとの通信が切断され、常駐モジュール11bやメインスレッド120からの指示を待機する。
【0054】
なお、ステップS402において、デバイススタック11fの個数が最大接続数(3個)である場合(ステップS402において、YES)、ステップS405の処理に移行する。
【0055】
一方、ステップS406において、情報処理装置11からのデバイス監視情報を受信したデバイスサーバ12は、当該デバイス監視情報に基づいて、自装置にローカル接続されているデバイス13の動作状態を監視する。そして、当該デバイス13の状態変化を検知すると、当該検知を情報処理装置11へ通知(接続通知)する。
【0056】
ここで、状態変化とは、例えば、カードリーダ(デバイス)に対してカードの読み取り操作(ユーザIDの取得)が行われたことや、デバイスの操作ボタンが押下されたことなどによって生じるものであるが、これらに限定されるものではない。
【0057】
なお、デバイス監視情報とは、デバイス13の監視を行なうための1組の監視プログラム(監視情報)であり、デバイスの機種ごとに異なるっており、あらかじめデバイスサーバ12に導入しておいてもよいし、必要なデータだけを情報処理装置11などから取得するようにしてもよい。
【0058】
<通信スレッドによる接続処理>
再び、図3を参照し、メインスレッド120は、ステップS304において、要求通知が「起動通知」でない場合(ステップS304において、NO)、「接続通知」であるか否かを判定する(ステップS306)。要求通知が「接続通知」である場合(ステップS306において、YES)、通信スレッド(121〜124)に接続処理を開始させ(ステップS307)、ステップS301の処理に戻る。
【0059】
図5は、図3のステップS307に示す接続処理を説明するためのフローチャートである。
【0060】
通信スレッド(121〜124)は、メインスレッド120で生成・開始された後、常駐モジュール11bやメインスレッド120からの指示、若しくは、デバイスサーバ12−1〜12−4のいずれかからの接続通知を待つ待機状態となる(ステップS501)。
【0061】
そして、常駐モジュール11bを介して外部アプリケーション11aからの接続通知を受けた場合、若しくは、デバイスサーバ12(12−1〜4)のいずれかから接続通知を受けると、通信スレッド(121〜124)は、デバイススタック11fのうち非データ送受信状態のデバイススタックの検出を行う(ステップS502)。
【0062】
ここで、デバイススタック11f(11f−1〜3)の全てがデータ送受信状態である場合(ステップS502において、NO)、通信スレッド(121〜124)は非データ送受信状態のデバイススタックが検出されるまで待機状態とし(ステップS503)、ステップS502の処理へ戻る。
【0063】
一方、非データ送信状態のデバイススタックが検出されると(ステップS502において、YES)、通信スレッド(121〜124)は、当該非データ送受信状態のデバイススタック(例えば、デバイススタック11f−2)と接続するためにデータ通信経路を切り替える(ステップS504)。
【0064】
次に、通信スレッド(121〜124)は、非データ送受信状態であるデバイススタック11f−2を介して接続されるデバイスサーバ12−2に対して独立したセッションを開始させ(ステップS505)、セッションが開始されると、デバイス制御モジュール11d−2は、通信スレッド(121〜124)にデータ送受信開始通知を送る(ステップS506)。
【0065】
デバイス制御モジュール11d−2は、データ送受信開始通知を受信すると、デバイススタック11f−2を経由し、通信スレッド(ここでは、通信スレッド124)にデバイスサーバ12−4を介してデバイス13−4との間でデータ送受信の制御を行う。
【0066】
通信スレッド124は、デバイススタック11f−2の制御によるデータ送受信が完了するまで待機し(ステップS507)、デバイス制御モジュール11d−2からデータ送受信終了通知を受信すると、デバイススタック11f−2を介して通信制御部11eにデバイスサーバ12−4との間のセッションを終了させる(ステップS508)。
【0067】
<デバイス制御モジュールによるデータ送受信制御フロー>
図6は、図5のステップS506〜S507の処理で実行されるデバイス制御モジュール11dによるデータ送受信制御の一例を説明するためのフローチャートである。
【0068】
デバイス制御モジュール11d(ここでは、11d−2とする)は、デバイススタック11f(ここでは、11f−2とする)に対応して起動されており、例えば、通信スレッド124からの指示によりデータ送受信するための通信ポートをオープンし(ステップS601)、通信スレッド124からのデータ送受信開始通知を受けるまで待機し(ステップS602)、通信スレッド124から送られてくる通知の判定を行う(ステップS603)。
【0069】
デバイス制御モジュール11d−2は、通信スレッド124からデータ送受信開始通知を受けると(ステップS603において、NO)、デバイススタック11f−2を制御して、デバイスサーバ12−4を介してデバイス13−4とのデータ送受信を開始し(ステップS604)、データ送受信が完了するまでの間(ステップS605において、NO)は、ステップS604に戻り、データ送受信を制御する。そして、データ送受信が完了すると(ステップS605において、YES)、通信スレッド124にデータ送受信完了通知を送信する(ステップS606)。そして、ステップS602の処理に戻る。
【0070】
一方、通信スレッド124からデータ送受信の待機状態終了の指示により(ステップS603において、YES)、オープンしていた通信ポートをクローズして(ステップS607)、デバイススタック11f−2を非データ送信状態とする。
【0071】
ここで、デバイススタック11f−2は、非データ送受信状態に遷移するだけであり、外部アプリケーション11aの指示などにより切断要求(後述)がなされるまで終了(消滅)させず、別の通信スレッドがすぐに利用可能な状態としておく。
【0072】
<終了処理について>
再び図3を参照し、ステップS306において、要求通知が「接続通知」でないと(ステップS306において、NO)、デバイスサーバ通信モジュール11cのメインスレッド120は要求通知が「終了通知」であるか否かを判定する(ステップS308)。要求通知が「終了通知」であると(ステップS308において、YES)、デバイスサーバ通信モジュール11cは後述する終了処理を行って(ステップS309)、ステップS301の処理に戻る。
【0073】
<通信スレッドの終了及びデバイススタックの終了(消滅)>
図7は、図3のステップS309に示す終了処理を説明するためのフローチャートである。
【0074】
終了処理は、外部アプリケーション11aからの切断要求応じて実行される。常駐モジュール11bは当該切断要求に応じてメインスレッド120に通信スレッド終了通知を送り、メインスレッド120は通信スレッド(121〜124)に終了を指示する。
【0075】
通信スレッド(121〜124)は、スレッド終了の指示を受けると、デバイスサーバ通信モジュール11c内で管理している通信スレッドの個数とデバイススタックの個数とを比較して、通信スレッドの個数がデバイススタックの個数以下であるか否かを判定する(ステップS701)。なお、このときの通信スレッドの個数は、終了させる通信スレッドを除いた個数である。
【0076】
通信スレッドの個数がデバイススタックの個数以下であると(ステップS701において、YES)、通信スレッド(121〜124)は、該当するデバイス制御モジュール11d(ここでは、11d−2)に終了通知を送って、デバイス制御モジュール11d−2は、デバイススタック11f(ここでは、11f−2)の終了処理を実行し、通信スレッド(121〜124)に終了処理完了イベントを通知する(ステップS702)。
【0077】
通信スレッド(121〜124)は、終了処理完了イベントの通知を受けると、デバイススタック11f−2による仮想制御を終了させてデバイス13との接続を切断し、デバイススタック11f−2を終了(消滅)させる(ステップS703)。
【0078】
常駐モジュール11bは、終了通知を送った後、メインスレッド120にプロセス終了通知を指示し、メインスレッド120はプロセス終了通知を受信すると当該通信スレッド(121〜124)を終了させる。
【0079】
一方、ステップS701において、通信スレッドの個数がデバイススタックの個数を超えている場合(ステップS701において、NO)、デバイススタック11f−2は、消滅させず、デバイススタック11f−2と接続していた通信スレッドのみを終了させる。
【0080】
上述のように、本発明の第1の実施形態では、情報処理装置において、接続通知に応じて非データ送受信状態であるデバイススタックの検出を行い、検出された非データ送受信状態のデバイススタックを介してデバイスサーバと通信を行うようにしたので、インターフェース規格やSDKなどの規定に制限されることなく、性能を効果的に発揮して、最大接続台数を超えたデバイスを制御することができる。
【0081】
そして、第1の実施形態では、デバイスとの間でデータ送受信が終了した際、通信スレッドの個数がデバイススタックの個数より少ない場合には、当該デバイススタックを消滅させるので、非データ送受信状態のデバイススタックによって情報処理装置のリソースが消費されることを低減させることができる。
【0082】
このように、最大接続台数を超えたデバイスを制御する場合も、1台の情報処理装置で制御、管理することが可能であり、新たに別の情報処理装置を用意しなくてもよいので、管理も容易となってコストを低減することができる。
【0083】
[第2の実施形態]
続いて、本発明の第2の実施形態による情報処理装置が用いられたデバイス制御システムの一例について説明する。
【0084】
第2の実施形態は、通信スレッドの終了時の処理が第1の実施例と異なっており、通信スレッド終了時にデバイススタックを終了(消滅)させない点が特徴である。
【0085】
なお、第2の実施形態によるデバイス制御システムの構成は図1に示すデバイス制御システムの構成と同様であり、図8に示すシーケンス図において、符号801で示す太線枠で囲った部分のみの制御が異なるだけであるため、システム構成や各装置の機能などの詳細な説明を省略する。
【0086】
<第2の実施形態のデバイス制御システムの制御シーケンス及びフロー>
図8は、本発明の第2の実施形態によるデバイス制御システムにおけるデータ送受信を説明するためのシーケンス図である。また、図9は、本発明の第2の実施形態による情報処理装置においてデバイスサーバ通信モジュールの動作の一例を説明するためのフローチャートである。
【0087】
図9は、図1に示す情報処理装置11においてデバイスサーバ通信モジュール11cのメインスレッド120の動作の一例を説明するためのフローチャートであり、図8を参照しながら説明する。
【0088】
<メインスレッドの動作フロー>
常駐モジュール11bは、プロセス起動通知によってデバイスサーバ通信モジュール11cを起動し、デバイスサーバ通信モジュール11cが起動するとメインスレッド120が開始され、メインスレッド120は、常駐モジュール11bからの要求(起動、接続、又は終了など)を待ち受ける待機状態となる(ステップS901)。
【0089】
そして、この待機状態において、常駐モジュール11bからの要求を受けると常駐モジュール11bからのプロセス終了通知であるか否かを判定する(ステップS902)。プロセス終了通知である場合は、後述するステップS910へ移行する。一方、プロセス終了通知のプロセス終了通知でない場合(ステップS902において、NO)、外部アプリケーション11aから通知されるデバイス13に対する要求(起動、接続、又は終了など)の通知(以下、要求通知)であると判断する(ステップS903)。
【0090】
<通信スレッドの生成・開始>
続いて、受信した要求通知の判定処理を行う。まず、デバイスサーバ通信モジュール11cは当該要求通知が「起動通知」であるか否かを判定する(ステップS904)。メインスレッド120は、要求通知が「起動通知」であると判定すると(ステップS304において、YES)、図4で説明したと同様のフローを実行し、デバイスサーバ12(12−1〜4)毎に独立した通信制御を行う通信スレッド(121〜124)を生成して、当該通信スレッドを開始させる(ステップS905)。そして、ステップS901の処理に戻る。
【0091】
<通信スレッドによる接続処理>
要求通知が「起動通知」でない場合(ステップS904において、NO)、「接続通知」であるか否かを判定する(ステップS906)。要求通知が「接続通知」である場合(ステップS906において、YES)、図5および図6の説明と同様のフローを実行し、通信スレッドに接続処理を開始させ(ステップS907)、ステップS301の処理に戻る。
【0092】
<通信スレッドの終了処理>
要求通知が接続通知でないと(ステップS906において、NO)、デバイスサーバ通信モジュール11cのメインスレッド120は要求通知が「終了通知」であるか否かを判定する(ステップS908)。要求通知が「終了通知」である場合(ステップS908において、YES)、メインスレッド120は該当する通信スレッドを終了させる(ステップS909)。この際、デバイススタック11fを終了(消滅)させず、ステップS901の処理に戻る。即ち、デバイススタック11fは終了させず、該当する通信スレッドのみを終了させる。
【0093】
<デバイススタックの終了(消滅)>
デバイススタック11fを終了(消滅)させる場合は、常駐モジュール11bからデバイスサーバ通信モジュール11cのメインスレッド120に対してプロセス終了通知を送ることによって実行される(ステップS902において、YES)。
【0094】
常駐モジュール11bからプロセス終了通知が送られると、デバイスサーバ通信モジュール11cのメインスレッド120は該当するデバイス制御モジュール11dに終了通知を送って、デバイス制御モジュール11d−2は、デバイススタック11f(ここでは、11f−2)の終了処理を実行し、通信スレッドに終了処理完了イベントを通知する(ステップS910)。
【0095】
通信スレッド(121〜124)は、終了処理完了イベントの通知を受けると、デバイススタック11f−2による仮想制御を終了させてデバイス13との接続を切断し、デバイススタック11f−2を終了(消滅)させる(ステップS911)。
【0096】
このように、第2の実施形態においても、情報処理装置において、接続通知に応じて非データ送受信状態であるデバイススタックの検出を行い、検出された非データ送受信状態のデバイススタックを介してデバイスサーバと通信を行うようにしたので、インターフェース規格やSDKなどの規定に制限されることなく、性能を効果的に発揮して、最大接続台数を超えたデバイスを制御することができる。
【0097】
そして、第2の実施形態では、デバイスとの間でデータ送受信が終了した際、当該データ送受信に係るデバイススタックを終了(消滅)させない、即ち、非データ送受信状態のデバイススタックとして終了(消滅)させないようにしたので、例えば、接続待ちの通信スレッドがある場合には、新たなデバイススタックの生成を待つことなく、当該非データ送受信状態のデバイススタックを利用してデータ送受信を実行することができる。
【0098】
なお、デバイススタックを生成した後、所定の時間が経過すると、当該デバイススタックを消滅させるようにして非データ送受信状態のデバイススタックの個数を制限し、情報処理装置のリソースが消費されることを低減するようにしてもよい。
【0099】
[第3の実施形態]
次に、本発明の第3の実施形態による情報処理装置が用いられたデバイス制御システムの一例について説明する。
【0100】
図10は、本発明の第3の実施形態によるデバイス制御システムの一例を示すブロック図であり、図1に示すネットワーク10がインターネットなど外部のネットワークを介して接続する場合のデバイス制御システムの一例を示す図である。
【0101】
なお、第3の実施形態に示すデバイス制御システムにおいて、情報処理装置11の構成は図1に示す情報処理装置と同様である。また、第3の実施形態に示すデバイス制御システムにおいて、図1に示すデバイス制御システムと同一の構成要素については同一の参照番号を付す。
【0102】
図10において、情報処理装置11はLANなどのネットワーク1000を介してプロキシサーバ1001に接続される。そして、プロキシサーバ1001はインターネット(Internet)など外部のネットワーク(以下、インターネット1002)と接続されている。
【0103】
さらに、図示の例では、インターネット1002にはプロキシサーバ1003および1004が接続され、プロキシサーバ1003にはLANなどのネットワーク1005を介してデバイスサーバ12−1および12−2が接続される。また、プロキシサーバ1004にはLANなどのネットワーク1006を介してデバイスサーバ12−3および12−4が接続される。
【0104】
ここでは、情報処理装置11に備えられたデバイスサーバ通信モジュール11cはインターネット接続による通信制御を行う。デバイスサーバ通信モジュール11cは、デバイススタックで生成されたUSBパケットとデバイスサーバと通信する際のネットワークパケットとを、例えば、HTTP(HyperText Transfer Protocol)などのプロトコルで規定されたデータ部に乗せてデバイスサーバと通信を行う。これによって、デバイスサーバ通信モジュール11cはブラウザによってWebサーバと接続する場合と同一の手法でプロキシサーバおよびファイアーウォール(FW)を越えて外部サーバであるデバイスサーバに接続する。
【0105】
なお、上述のように、インターネットなど外部のネットワークに接続するシステムの場合、例えば、サーバコンピュータをホスティングするサービスのようなクラウド・コンピューティング(以下クラウドという)の技術を利用してシステム構成するようにしてもよい。クラウドを利用することによって、本実施例におけるデバイスサーバおよびデバイスを外部のネットワーク上に任意に配置することが可能となり、ユーザがこれらの所在を意識することなく、インターネットなどのネットワークを通じて利用できる。このように、クラウドを用いればシステムを柔軟に構成(変更又は拡張)することができる。
【0106】
上述のように、本発明の実施の形態では、インターネットなど外部のネットワークを介して接続されており、デバイス(及びデバイスサーバ)の台数が確認できないような場合であっても、第1及び第2の実施形態と同様、情報処理装置は、インターフェース規格やSDKなどによって規定される最大接続数を超えてデバイスの制御を行うことができるので、外部のネットワーク上に接続されているデバイス(及びデバイスサーバ)の台数を意識することなく制御することが可能である。
【0107】
上述の説明から明らかなように、図1に示す例では、デバイスサーバ通信モジュール11c(メインスレッド)が通信スレッド制御手段として機能する。
【0108】
以上、本発明について実施の形態に基づいて説明したが、本発明は、これらの実施の形態に限定されるものではなく、この発明の要旨を逸脱しない範囲の様々な形態も本発明に含まれる。
【0109】
例えば、上記の実施の形態の機能を制御方法として、この制御方法を情報処理装置に実行させるようにすればよい。また、上述の実施の形態の機能を有するプログラムを制御プログラムとして、この制御プログラムを情報処理装置が備えるコンピュータに実行させるようにしてもよい。なお、制御プログラムは、例えば、コンピュータに読み取り可能な記録媒体に記録される。
【0110】
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)を、ネットワーク又は各種記録媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ(またはCPUやMPU等)がプログラムを読み出して実行する処理である。
【符号の説明】
【0111】
11 情報処理装置
12−1〜12−4 デバイスサーバ
13−1〜13−4 デバイス
11b 常駐モジュール
11c デバイスサーバ通信モジュール
120 メインスレッド
121〜124 通信スレッド
11d−1〜11d−3 デバイス制御モジュール
11f−1〜11f−3 デバイススタック
11e 通信制御部
1001,1003,1004 プロキシサーバ

【特許請求の範囲】
【請求項1】
デバイスがローカル接続されているデバイス制御装置にネットワークを介して接続される情報処理装置であって、
上位層のソフトウェアからの要求により、前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド制御手段と、
前記通信スレッド制御手段によって生成される通信スレッドと、
前記通信スレッドにより生成され、前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックとを備え、
前記通信スレッドは、前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行い、当該検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行うことを特徴とする情報処理装置。
【請求項2】
前記通信スレッドは、前記非データ送受信状態であるデバイススタックが存在しない場合、当該非データ送受信状態であるデバイススタックが検出されるまで前記デバイス制御装置との接続を待機することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記通信スレッドは、前記デバイススタックが予め規定された個数生成されている場合、新たなデバイススタックの生成を行わないことを特徴とする請求項1に記載の情報処理装置。
【請求項4】
前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、
新たなデバイススタックを生成することを特徴とする請求項1に記載の情報処理装置。
【請求項5】
前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、
前記非データ送受信状態であるデバイススタックの検出を行い、当該非データ送受信状態であるデバイススタックが検出されない場合のみ、新たなデバイススタックを生成することを特徴とする請求項1に記載の情報処理装置。
【請求項6】
前記通信スレッド制御手段は、前記通信スレッドを終了させる際、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させることを特徴とする請求項1に記載の情報処理装置。
【請求項7】
前記通信スレッド制御手段は、前記通信スレッドを終了させる際、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させないことを特徴とする請求項1に記載の情報処理装置。
【請求項8】
前記通信スレッド制御手段は、前記通信スレッドを終了させる際、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数を超える場合、当該通信スレッドとの接続に用いたデバイススタックを終了させないことを特徴とする請求項1に記載の情報処理装置。
【請求項9】
請求項1〜8のいずれか1項に記載の情報処理装置と、前記情報処理装置にネットワークを介して接続されたデバイス制御装置と、前記デバイス制御装置にローカル接続されたデバイスとを有し、前記情報処理装置が前記デバイス制御装置を介して前記デバイスを制御してデータ通信を行うことを特徴とするデバイス制御システム。
【請求項10】
デバイスがローカル接続されているデバイスサーバにネットワークを介して接続される情報処理装置の制御方法であって、
上位層のソフトウェアからの要求により、通信スレッド制御手段が前記デバイス制御装置とのデータ通信を制御する通信スレッドを生成する通信スレッド生成ステップを実行し、
前記通信スレッド生成ステップで生成された通信スレッドは、
前記デバイス制御装置を介して前記デバイスを直接接続したときと同様に制御するためのデバイススタックを生成するデバイススタック生成ステップと、
前記デバイスとの接続を示す接続通知を受信すると、前記デバイススタックから非データ送受信状態であるデバイススタックの検出を行う検出ステップと、
前記検出ステップで検出した非データ送受信状態のデバイススタックを介して前記デバイス制御装置と接続しデータ送受信を行う接続ステップとを実行することを特徴とする制御方法。
【請求項11】
前記通信スレッドは、前記非データ送受信状態であるデバイススタックが存在しない場合、当該非データ送受信状態であるデバイススタックが検出されるまで前記デバイス制御装置との接続を待機する待機ステップを実行することを特徴とする請求項10に記載の制御方法。
【請求項12】
前記通信スレッドは、前記デバイススタックが予め規定された個数生成されている場合、前記デバイススタック生成ステップにおいて新たなデバイススタックの生成を行わないことを特徴とする請求項10に記載の制御方法。
【請求項13】
前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、
前記デバイススタック生成ステップにおいて新たなデバイススタックを生成することを特徴とする請求項10に記載の制御方法。
【請求項14】
前記通信スレッドは、前記デバイススタックが予め規定された個数未満である場合、
前記検出ステップにおいて前記非データ送受信状態であるデバイススタックの検出を行い、当該非データ送受信状態であるデバイススタックが検出されない場合のみ、新たなデバイススタックを生成することを特徴とする請求項10に記載の制御方法。
【請求項15】
前記通信スレッドを終了させる際、前記通信スレッド制御手段が、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させる終了処理ステップを実行することを特徴とする請求項10に記載の制御方法。
【請求項16】
前記通信スレッドを終了させる際、通信スレッド制御手段が、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数以下となる場合、当該通信スレッドとの接続に用いたデバイススタックを終了させない第2の終了処理ステップを実行することを特徴とする請求項10に記載の制御方法。
【請求項17】
前記通信スレッドを終了させる際、前記通信スレッド制御手段が、前記通信スレッドの個数と前記デバイススタックの個数とを比較して、前記通信スレッドの個数が前記デバイススタックの個数を超える場合、当該通信スレッドとの接続に用いたデバイススタックを終了させない第3の終了処理ステップを実行することを特徴とする請求項10に記載の制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公開番号】特開2013−89204(P2013−89204A)
【公開日】平成25年5月13日(2013.5.13)
【国際特許分類】
【出願番号】特願2011−232230(P2011−232230)
【出願日】平成23年10月21日(2011.10.21)
【出願人】(500232640)キヤノンイメージングシステムズ株式会社 (27)
【Fターム(参考)】