以下、好ましい実施形態を図面に基づいて説明する。なお、図中同一又は相当部分には同一符号を付す。
好ましい実施形態に係る無線通信システム1は、図1に示すように、親端末100と、子端末200A~200Cと、スキャナ端末300と、を備える。親端末100、子端末200A~200C、及びスキャナ端末300は、Bluetooth(登録商標) Low Energy(以下、BLEという)に基づいて、互いに無線通信を行う無線通信装置である。BLEとは、Bluetooth(登録商標)と呼ばれる近距離無線通信規格において、低消費電力を目的として策定された規格(モード)である。さらに、本実施形態においては、親端末100、子端末200A~200C、及びスキャナ端末300は、Bluetooth(登録商標) 5(Bluetooth(登録商標) コア仕様 バージョン5.0)の仕様に従って、動作するものとする。図1では、子端末として、子端末200A~200Cの3台が記載されているが、子端末の数は任意である。また、各子端末の仕様は同一なので、各子端末を区別せずに扱う場合には子端末200と表記する。
本実施形態において、親端末100は、スキャナ端末300にブロードキャスト送信したい大容量データを保持しているが、サイズが大きすぎる(例えば21MB以上)ため、上述の理由により、スキャナ端末300に直接ブロードキャスト送信することはできない。そこで、親端末100はブロードキャスト送信したい大容量データを子端末200の数(図1に示す例では3)に分割した分割データを用意し、その分割データを各子端末200に送信する。また、各子端末200からブロードキャスト送信される拡張アドバタイズパケットをスキャナ端末300が受信できるようにするために、親端末100は、後述するアドバタイズに関する情報を各子端末200及びスキャナ端末300に送信する。そして、各子端末200は、親端末100から受信したアドバタイズに関する情報に基づいて、親端末100から受信した分割データを拡張アドバタイズパケットによりブロードキャスト送信する。すると、スキャナ端末300は、親端末100から受信した情報に基づいて、各子端末200から送信された拡張アドバタイズパケットを受信できる。この仕組みについて以下説明する。
まず、実施形態に係る親端末100のハードウェア構成について説明する。親端末100は、図2に示すように、ハードウェア構成として、マイクロコンピュータ101と、ROM(Read Only Memory)102と、通信部103と、アンテナ104と、表示部106と、操作受付部107と、を備える。
マイクロコンピュータ101は、制御部としてのCPU(Central Processing Unit)110と、記憶部としてのRAM(Random Access Memory)111と、を備える。なお、RAM111及び計時部112は、マイクロコンピュータ101の内部に限られず、マイクロコンピュータ101の外部に設けられてもよい。また、ROM102、通信部103、アンテナ104、及び電力供給部105は、マイクロコンピュータ101の外部に限られず、マイクロコンピュータ101の内部に設けられてもよい。
CPU110は、各種演算処理を行い、親端末100の全体動作を統括制御するプロセッサである。CPU110は、ROM102から制御プログラムを読み出し、RAM111にロードして各種機能に係る演算制御や表示などの各種動作処理を行う。また、CPU110は、通信部103を制御して子端末200及びスキャナ端末300とデータ通信を行う。
RAM111は、SRAM(Static Random Access Memory)やDRAM(Dynamic Random Access Memory)等の揮発性のメモリである。RAM111は、一時データ、各種設定データ等を記憶する。
計時部112は、発振回路、分周回路、計時回路等から構成され、現在時刻を計時したり、他の無線通信装置とクロック同期を取ったりする。
ROM102は、マスクROMやフラッシュメモリ等の不揮発性メモリであり、制御プログラムや初期設定データを記憶する。制御プログラムには、子端末200及びスキャナ端末300との無線通信を制御するための各種処理の制御に係るプログラム113が含まれる。
通信部103は、例えば無線周波数(RF:Radio Frequency)回路やベースバンド(BB:Baseband)回路、メモリ回路で構成され、無線通信部とも呼ばれる。通信部103は、アンテナ104を介して受信した無線信号を、復調、復号等してCPU110へ送る。また、通信部103は、CPU110から送られた信号を、符号化、変調等して、アンテナ104を介して外部へ送信する。本実施形態において、通信部103は、BLEに基づく無線信号の送信及び受信を行うBluetooth(登録商標)コントローラにより実現される。
電力供給部105は、例えば、バッテリ、及び電圧変換回路を備える。電力供給部105は、親端末100内の各部の動作電圧で電力を供給する。
表示部106は、例えば、液晶ディスプレイ(LCD:Liquid Crystal Display)や有機EL(Electro-Luminescence)ディスプレイ等の表示パネルや、表示パネルの種別に応じた駆動信号をマイクロコンピュータ101からの制御信号に基づいて表示パネルに出力するドライバから構成される。表示部106は、例えば、親端末100の状態等を表示する。
操作受付部107は、例えば、センサ、ボタン、スイッチ等から構成され、ユーザからの入力操作を受け付けて、当該入力操作に応じた電気信号をマイクロコンピュータ101に出力する。例えば、操作受付部107としてタッチセンサが表示部106の表示パネルに重ねて設けられ、表示パネルとともにタッチパネルディスプレイを構成してもよい。
次に、実施形態に係る子端末200のハードウェア構成について説明する。子端末200は、図3に示すように、ハードウェア構成として、マイクロコンピュータ201と、ROM202と、通信部203と、アンテナ204と、電力供給部205と、表示部206と、操作受付部207と、を備える。
マイクロコンピュータ201は、制御部としてのCPU210、記憶部としてのRAM211、計時部212等を備える。なお、RAM211及び計時部212は、マイクロコンピュータ201の内部に限られず、マイクロコンピュータ201の外部に設けられてもよい。また、ROM202、通信部203、アンテナ204、及び電力供給部205は、マイクロコンピュータ201の外部に限られず、マイクロコンピュータ201の内部に設けられてもよい。
CPU210は、各種演算処理を行い、子端末200の全体動作を統括制御するプロセッサである。CPU210は、ROM202から制御プログラムを読み出し、RAM211にロードして各種機能に係る演算制御や表示などの各種動作処理を行う。また、CPU210は、通信部203を制御して親端末100及びスキャナ端末300とデータ通信を行う。
RAM211は、SRAMやDRAM等の揮発性のメモリである。RAM211は、一時データ、各種設定データ等を記憶する。
計時部212は、発振回路、分周回路、計時回路等から構成され、現在時刻を計時したり、他の無線通信装置とクロック同期を取ったりする。
ROM202は、マスクROMやフラッシュメモリ等の不揮発性メモリであり、制御プログラムや初期設定データを記憶する。制御プログラムには、親端末100及びスキャナ端末300との無線通信を制御するための各種処理の制御に係るプログラム213が含まれる。
通信部203は、例えば無線周波数(RF)回路やベースバンド(BB)回路、メモリ回路で構成され、端末無線通信部とも呼ばれる。通信部203は、アンテナ204を介して受信した無線信号を、復調、復号等してCPU210へ送る。また、通信部203は、CPU210から送られた信号を、符号化、変調等して、アンテナ204を介して外部へ送信する。本実施形態において、通信部203は、BLEに基づく無線信号の送信及び受信を行うBluetooth(登録商標)コントローラにより実現される。
電力供給部205は、例えば、バッテリ、及び電圧変換回路を備える。電力供給部205は、子端末200内の各部の動作電圧で電力を供給する。また、電力供給部205は、バッテリの残存量(バッテリ残量)をCPU210に通知することができる。
表示部206は、例えば、LCDや有機ELディスプレイ等の表示パネルや、表示パネルの種別に応じた駆動信号をマイクロコンピュータ201からの制御信号に基づいて表示パネルに出力するドライバから構成される。表示部206は、例えば、親端末100から受信した情報や、子端末200の状態等を表示する。
操作受付部207は、例えば、センサ、ボタン、スイッチ等から構成され、ユーザからの入力操作を受け付けて、当該入力操作に応じた電気信号をマイクロコンピュータ201に出力する。例えば、操作受付部207としてタッチセンサが表示部206の表示パネルに重ねて設けられ、表示パネルとともにタッチパネルディスプレイを構成してもよい。
次に、実施形態に係るスキャナ端末300のハードウェア構成について説明する。スキャナ端末300は、図4に示すように、ハードウェア構成として、マイクロコンピュータ301と、ROM302と、通信部303と、アンテナ304と、電力供給部305と、表示部306と、操作受付部307とを備える。スキャナ端末300は、例えば、スマートフォンから構成される。
マイクロコンピュータ301は、制御部としてのCPU310、記憶部としてのRAM311、計時部312等を備える。なお、RAM311及び計時部312は、マイクロコンピュータ301の内部に限られず、マイクロコンピュータ301の外部に設けられてもよい。また、ROM302、通信部303、アンテナ304、及び電力供給部305は、マイクロコンピュータ301の外部に限られず、マイクロコンピュータ301の内部に設けられてもよい。
CPU310は、各種演算処理を行い、スキャナ端末300の全体動作を統括制御するプロセッサである。CPU310は、ROM302から制御プログラムを読み出し、RAM311にロードして各種機能に係る演算制御や表示などの各種動作処理を行う。また、CPU310は、通信部303を制御して親端末100及び子端末200とデータ通信を行う。
RAM311は、SRAMやDRAM等の揮発性のメモリである。RAM311は、一時データ、各種設定データ等を記憶する。
計時部312は、発振回路、分周回路、計時回路等から構成され、現在時刻を計時したり、他の無線通信装置とクロック同期を取ったりする。
ROM302は、マスクROMやフラッシュメモリ等の不揮発性メモリであり、制御プログラムや初期設定データを記憶する。制御プログラムには、親端末100及び子端末200との無線通信を制御するための各種処理の制御に係るプログラム313が含まれる。
通信部303は、例えば無線周波数(RF)回路やベースバンド(BB)回路、メモリ回路で構成される。通信部303は、アンテナ304を介して受信した無線信号を、復調、復号等してCPU310へ送る。また、通信部303は、CPU310から送られた信号を、符号化、変調等して、アンテナ304を介して外部へ送信する。本実施形態において、通信部303は、BLEに基づく無線信号の送信及び受信を行うBluetooth(登録商標)コントローラにより実現される。
電力供給部305は、例えば、バッテリ、及び電圧変換回路を備える。電力供給部305は、スキャナ端末300内の各部の動作電圧で電力を供給する。
表示部306は、例えば、LCDや有機ELディスプレイ等の表示パネルや、表示パネルの種別に応じた駆動信号をマイクロコンピュータ301からの制御信号に基づいて表示パネルに出力するドライバから構成される。表示部306は、例えば、子端末200から受信した情報を表示する。
操作受付部307は、ユーザからの入力操作を受け付けて、当該入力操作に応じた電気信号をマイクロコンピュータ301に出力する。例えば、操作受付部307としてタッチセンサが表示部306の表示パネルに重ねて設けられ、表示パネルとともにタッチパネルを構成してもよい。
次に、実施形態に係る親端末100のCPU110の機能構成について説明する。図2に示すように、CPU110は、アドバタイズ送信制御部121として機能する。アドバタイズ送信制御部121の機能は、通信部103のCPU等、マイクロコンピュータ101以外のプロセッサにより実現されても良い。
アドバタイズ送信制御部121としてのCPU110は、通信部103を制御して、各子端末200と接続し、定期的に各子端末200用のPeriodic Advertisingに関する情報(以下「PA情報」と言う。)や、各子端末200にブロードキャスト送信してもらう分割データを各子端末200に送信するとともに、各子端末200と同期を取る。ここで、分割データとは、親端末100がスキャナ端末300に直接ブロードキャスト送信することができない大容量データを、分割数(通常、子端末200の台数)分に分割して、各子端末200に割り当てたデータである。
また、PA情報については後述するが、その前に、Periodic Advertisingについて説明する。Periodic Advertisingとは、周期的にアドバタイズパケットをブロードキャスト送信する機能であり、Bluetooth(登録商標) 5で新たに追加された機能である。Periodic Advertisingによるブロードキャスト送信は、通常、Bluetooth(登録商標) 5で新しく追加された拡張アドバタイズパケットであるAUX_SYNC_IND及びAUX_CHAIN_INDを使用して行われる。
ただし、通常は、最初からAUX_SYNC_INDパケットが送信されるのではなく、まず従来のBLEでも対応しているアドバタイズ用のチャネル(37ch~39chのいずれか)で従来のアドバタイズパケットADV_EXT_INDが送信され、次にアドバタイズパケットADV_EXT_INDで指定された任意のチャネル(0ch~36chのいずれか)で拡張アドバタイズパケットAUX_ADV_INDが送信され、その後、拡張アドバタイズパケットAUX_ADV_INDで指定されたタイミング及びチャネルで拡張アドバタイズパケットAUX_SYNC_INDが送信される仕組みになっている。これは、従来の(Bluetooth(登録商標) 5に対応していない)BLEとの互換性を確保するためである。
そして、拡張アドバタイズパケットAUX_SYNC_INDだけでは送信しきれないデータは、拡張アドバタイズパケットAUX_CHAIN_INDを使用して続きを送信できるようになっている。拡張アドバタイズパケットAUX_SYNC_IND(及びAUX_CHAIN_IND)の後に、データの続きが拡張アドバタイズパケットAUX_CHAIN_INDで送信される際には、続きがあることを示すフラグとして、拡張アドバタイズパケットAUX_SYNC_IND(及びAUX_CHAIN_IND)内のmoreDataビットが1にセットされる。
なお、BLEでは、2.4GHzから2.48GHzまでの周波数帯域を2MHz幅で分割した40チャネルを利用して通信する。この40チャネルは、0chから39chまでの番号が割り当てられており、従来のBLEでは、このうち0chから36chがデータ通信に用いられ、37chから39chがアドバタイズパケットの送受信に用いられている。Bluetooth(登録商標) 5では、0chから36chを拡張アドバタイズパケットの送受信に用いることができるようになったが、従来のBLEとの互換性のために最初のアドバタイズパケットの送信は37chから39chのいずれかのチャネルで行われる。そこで、以下、37chから39chをプライマリチャネル、0chから36chをセカンダリチャネルと呼ぶことにする。つまり、従来のアドバタイズパケットはプライマリチャネルを使ってブロードキャスト送信され、拡張アドバタイズパケットはセカンダリチャネルを使ってブロードキャスト送信される。
上述の拡張アドバタイズパケットAUX_ADV_INDは、その後に送信される拡張アドバタイズパケットAUX_SYNC_INDの送信チャネル、送信タイミング等に関する情報であるSyncInfoデータを含んでいるが、上述のPA情報は、このSyncInfoデータと同等のデータである。
例えば、PA情報は、図5に示すように、シンクパケットオフセット(Sync Packet Offset)と、オフセットユニット(Offset Units)と、RFU(Reserved for Future Use)と、インターバル(Interval)と、ChM(Channel Map)と、SCA(Sleep Clock Accuracy)と、AA(Access Address)と、CRCInit(Cyclic Redundancy Check Initialization value)と、イベントカウンター(Event Counter)と、を含む。
シンクパケットオフセットとオフセットユニットは、この後に拡張アドバタイズパケットAUX_SYNC_INDが送信されるまでの時間を示す。具体的には、この時間はシンクパケットオフセットの値にオフセットユニットで設定された単位(30μs又は300μs)を乗じた値である。また、インターバルに1.25msを乗じた値が、Periodic Advertisementの開始パケット(AUX_SYNC_IND)の開始から次の周期の開始パケット(AUX_SYNC_IND)までの時間間隔、つまり1周期分の時間を示す。
ChMとイベントカウンターは、拡張アドバタイズパケットAUX_SYNC_INDの送信に使用されるセカンダリチャネルの算出に用いられる。具体的には、このセカンダリチャネルは、ChM及びイベントカウンターから、BLEで規定されているChannel Selection Algoritym #2で算出される。なお、セカンダリチャネルは、図5のフォーマットで、ChM(37ビット)とイベントカウンター(2オクテット)の代わりにChannel Index(6ビット)を付加し、このChannel Indexにより、拡張アドバタイズパケットAUX_SYNC_INDの送信に使用されるセカンダリチャネルを決定してもよい。
以上、PA情報について詳細に説明したが、簡単に説明すると、PA情報とは、周期的に送信される拡張アドバタイズパケットAUX_SYNC_INDの送信タイミングや送信チャネルを含む情報であり、各子端末200やスキャナ端末300に、拡張アドバタイズパケットAUX_SYNC_INDの送信タイミング及び送信チャネル(スキャナ端末300にとっては受信タイミング及び受信チャネル)を知らせるために送信される。
また、アドバタイズ送信制御部121としてのCPU110は、通信部103を制御して、従来のアドバタイズパケットADV_NONCONN_INDを用いて、各子端末200のPA情報をスキャナ端末300にブロードキャスト送信する。これにより、スキャナ端末300は、各子端末200から送信される拡張アドバタイズパケットAUX_SYNC_INDの送信タイミングや送信チャネルを知ることができる。なお、アドバタイズパケットADV_NONCONN_INDは、不特定多数のデバイスに、非接続で情報をブロードキャスト送信するためのパケットである。スキャナ端末300は、後述するアドバタイズ受信制御処理により、このパケットを常時スキャンしている。
実施形態に係るアドバタイズパケットADV_NONCONN_INDの構成例を図6に示す。リンクレイヤにおけるアドバタイズパケットのPDU(Protocol Data Unit)は、2~39バイトのサイズであり、2バイトのヘッダ(Header)と、最大37バイトのペイロード(Payload)とを含む。アドバタイズパケットの種類「ADV_NONCONN_IND」は、ヘッダで指定される。さらに、ペイロードは、親端末100のアドレスを示す6バイトのアドバタイザアドレス(Adv A)と、最大31バイトのアドバタイジングデータ(Adv Data)とを含む。
アドバタイジングデータのサイズは、1パケットのペイロードの大きさの制約により最大31バイトである。アドバタイジングデータは、一組のレングス(Length)とデータ(Data)とを含む。データは、それぞれAD TypeとAD Dataとを含む。各AD Typeは、AD Dataの種類を表し、ここでは「Manufacturer Specific Data」である。AD Typeが「Manufacturer Specific Data」である場合、AD Dataが、企業により任意に定められるデータであることを表す。AD Dataは、企業を識別するための「Company ID」と、任意のデータを含むことができる。一方のAD Dataは、2バイトの「Company ID」と18バイトのPA情報を含む。他方のAD Dataは、2バイトの「Company ID」と2バイトの子端末情報を含む。したがって、Payloadは、PA情報(18バイト)と子端末情報(2バイト)を少なくとも含むことになり、PDUのサイズは少なくとも36バイトになる。
ここで、2バイトの子端末情報は、その子端末に割り当てられた分割データが何番目の子端末であるかという分割データの順番を示す情報(1バイト)と分割データの分割数(1バイト)とからなる。例えば、子端末200が、子端末200A、子端末200B、子端末200Cの3台存在し、分割データもこの順番に割り当てられた場合、子端末200Aに関するADV_NONCONN_INDパケットの子端末情報の1バイト目(順番)は1で、2バイト目(分割数)は3であり、子端末200Bに関するADV_NONCONN_INDパケットの子端末情報の1バイト目(順番)は2で、2バイト目(分割数)は3であり、子端末200Cに関するADV_NONCONN_INDパケットの子端末情報の1バイト目(順番)は3で、2バイト目(分割数)は3となる。
次に、実施形態に係る子端末200のCPU210の機能構成について説明する。図3に示すように、CPU210は、アドバタイズ送信制御部221として機能する。アドバタイズ送信制御部221の機能は、通信部203のCPU等、マイクロコンピュータ201以外のプロセッサにより実現されても良い。
アドバタイズ送信制御部221としてのCPU210は、通信部203を制御して、親端末100と接続し、定期的に親端末100とクロック同期を取り、親端末100にパッテリの残存量を通知し、親端末100から分割データ及びPA情報を受信する。ここで、分割データとは、上述したように、親端末100から、スキャナ端末300にブロードキャスト送信するように、子端末200の台数分に分割されて、各子端末200に割り当てられたデータである。そして、CPU210は、受信したPA情報に基づいて、RAM211に記憶したPA情報を更新し、PA情報により設定されたセカンダリチャネル及び送信間隔により、拡張アドバタイズパケットAUX_SYNC_INDにより分割データをブロードキャスト送信する。もし、分割データが大きくて、拡張アドバタイズパケットAUX_SYNC_INDだけでは送信しきれない場合は、拡張アドバタイズパケットAUX_CHAIN_INDも用いて残りの分割データをブロードキャスト送信する。
次に、実施形態に係るスキャナ端末300のCPU310の機能構成について説明する。図4に示すように、CPU310は、アドバタイズ受信制御部321として機能する。アドバタイズ受信制御部321の機能は、通信部303のCPU等、マイクロコンピュータ301以外のプロセッサにより実現されても良い。
アドバタイズ受信制御部321としてのCPU310は、通信部303を制御して、親端末100からブロードキャスト送信されたアドバタイズパケットADV_NONCONN_INDを受信する。そして、CPU310は、このアドバタイズパケットADV_NONCONN_INDに含まれるPA情報及び子端末情報をRAM311に格納し、PA情報で指定されたセカンダリチャネル及び送信間隔により、各子端末200から送信された拡張アドバタイズパケットAUX_SYNC_IND(及びAUX_CHAIN_IND)を受信する。そして、拡張アドバタイズパケットAUX_SYNC_IND(及びAUX_CHAIN_IND)に含まれる分割データを子端末情報に基づいて結合して元の大容量データを復元する。
次に、本実施形態に係る親端末100の動作について図7を参照して説明する。図7は、本実施形態における親端末100のCPU110が実行する親端末通信制御処理の流れを示すフローチャートの一例である。CPU110は、例えば、ユーザの操作や、所定の時間になったことを契機として、本処理を開始する。また、親端末100は、スキャナ端末300にブロードキャスト送信したい大容量データを保持しているが、データサイズが大きすぎて(例えば21MB以上)、直接ブロードキャスト送信できないものとする。
まず、CPU110は、子端末200(子端末200A~200C)と接続する(ステップS101)。接続する際に必要な子端末200のアドレス情報等はリスト化してROM102に予め記憶しておくようにしてもよいし、子端末200が接続可能であることを示す情報をブロードキャスト送信し、親端末100がその情報を受信することによって接続する子端末200のアドレス情報等を取得し、リスト化してRAM111に記憶するようにしてもよい。そして、CPU110は、これら子端末200のアドレス情報等から、接続する子端末200の数を取得する。
そして、CPU110は、子端末200と同期を取るタイミングか否かを判定する(ステップS102)。同期を取るタイミングか否かは、本処理の開始から又は前回子端末200と同期を取ってから所定の期間が経過したか否かにより判定する。子端末と同期を取るタイミングでなければ(ステップS102;No)、ステップS106に進む。子端末200と同期を取るタイミングであるなら(ステップS102;Yes)、CPU110は、通信部103を介して、子端末200(子端末200A~200Cのいずれか。最初は例えば子端末200A)から、バッテリ残量を受信する(ステップS103)。そして、CPU110は、通信部103を介して、子端末200(最初は例えば子端末200A)とクロック同期を取る(ステップS104)。
次に、CPU110は、全ての子端末200A~200Cと通信したか否かを判定する(ステップS105)。この判定は、ステップS103でバッテリ残量を受信した子端末200の数と、ステップS101で接続した子端末の数とを比較することによって行う。全ての子端末200A~200Cと通信していないなら(ステップS105;No)、ステップS103に戻って、まだ通信していない子端末200(例えば子端末200B)からバッテリ残量を受信し(ステップS103)、クロック同期を取る(ステップS104)。
全ての子端末200A~200Cと通信したなら(ステップS105;Yes)、CPU110は、子端末200からスキャナ端末300にブロードキャスト送信する分割データを更新する必要があるか否かを判定する(ステップS106)。親端末100が子端末200にまだ分割データを割り当てていない場合や、スキャナ端末300にブロードキャスト送信したい大容量データが更新された場合や、子端末200のバッテリ残量に基づいて大容量データを分割した分割データの割り振りを変更する場合は、子端末200からスキャナ端末300にブロードキャスト送信する分割データを更新する必要があると判定される。
子端末200からスキャナ端末300にブロードキャスト送信する分割データを更新する必要がないなら(ステップS106;No)、ステップS111に進む。子端末200からスキャナ端末300にブロードキャスト送信する分割データを更新する必要があるなら(ステップS106;Yes)、CPU110は、スキャナ端末300にブロードキャスト送信したい大容量データを子端末200の台数分の分割データに分割して、各分割データを各子端末200に割り当て、各子端末用のPA情報を設定する(ステップS107)。
その際、ステップS103で受信した子端末200のバッテリ残量に基づき、バッテリ残量が多い子端末200には大きなサイズの分割データを割り当て、バッテリ残量が少ない子端末200には、小さなサイズの分割データを割り当てるようにする。また、バッテリ残量が所定の閾値(例えば20%)未満の子端末200は、分割データを割り当てない不使用子端末にしてもよい。このような場合は、バッテリ残量が当該閾値以上の子端末200(不使用端末以外の子端末200)の台数を大容量データの分割数として分割データに分割し、不使用端末以外の子端末200に分割データを割り当てる。ただし、上述のように、1台の子端末200から送信できる最大のサイズは仕様上約20MBであるため、各分割データのサイズはPeriodic Advertisingの1周期の時間内に送信可能なサイズ以下に抑える必要がある。
また、各子端末用のPA情報の設定においては、各子端末200から送信される拡張アドバタイズパケットのデータのコリジョンを避けるため、各子端末200が使用するチャネルが被らないようにChM等を調整したPA情報を設定する。
そして、CPU110は、通信部103を介して、子端末200(子端末200A~200Cのいずれか。最初は例えば子端末200A)に、その子端末200(例えば子端末200A)に割り当てた分割データを送信する(ステップS108)。そして、CPU110は、通信部103を介して、その子端末200(例えば子端末200A)にその子端末用のPA情報を送信する(ステップS109)。
次に、CPU110は、全ての子端末200A~200Cと通信したか否かを判定する(ステップS110)。全ての子端末200A~200Cと通信していないなら(ステップS110;No)、ステップS108に戻って、まだ通信していない子端末200(例えば子端末200B)にその子端末200に割り当てた分割データを送信し(ステップS108)、その子端末用のPA情報を送信する(ステップS109)。
全ての子端末200A~200Cと通信したなら(ステップS110;Yes)、CPU110は、スキャナ端末300に向けてブロードキャスト送信するアドバタイズパケットADV_NONCONN_INDを準備する(ステップS111)。このアドバタイズパケットのデータ構造は図6に示すもので、子端末200毎に、その子端末用のPA情報と子端末情報とを含む。例えば、最初は、子端末200A用のPA情報及び子端末情報を含むADV_NONCONN_INDを準備する。なお、PA情報と子端末情報とを含む情報を送信データ情報と呼ぶ。
そして、CPU110は、通信部103を介して、ステップS111で準備したアドバタイズパケットADV_NONCONN_INDをブロードキャスト送信する(ステップS112)。
次に、CPU110は、全ての子端末200A~200C分のPA情報及び子端末情報をブロードキャスト送信したか否かを判定する(ステップS113)。全ての子端末200A~200C分のPA情報及び子端末情報をブロードキャスト送信していないなら(ステップS113;No)、ステップS111に戻って、まだブロードキャスト送信していない子端末200(例えば子端末200B)の分のPA情報及び子端末情報を含むADV_NONCONN_INDを準備し(ステップS111)、そのADV_NONCONN_INDをブロードキャスト送信する(ステップS112)。
全ての子端末200A~200C分のPA情報及び子端末情報をブロードキャスト送信したなら(ステップS113;Yes)、CPU110は、終了指示が出されたか否かを判定する(ステップS114)。終了指示は、ユーザの指示又は所定時間の経過によって出される。終了指示が出されていないなら(ステップS114;No)、ステップS102に戻り、ステップS102からの処理を繰り返す。終了指示が出されたなら(ステップS114;Yes)、CPU110は、子端末200A~200Cと通信を切断し(ステップS115)、本処理を終了する。
次に、本実施形態に係る子端末200の動作について、図8を参照して説明する。図8は、本実施形態における子端末200のCPU210が実行する子端末通信制御処理の流れを示すフローチャートの一例である。CPU210は、例えば、ユーザの操作や、所定の時間になったことを契機として、本処理を開始する。
まず、CPU210は、親端末100と接続する(ステップS201)。そして、CPU210は、親端末100から同期リクエストが送信されたか否かを判定する(ステップS202)。親端末100から同期リクエストが送信されていないなら(ステップS202;No)、ステップS205に進む。
一方、CPU210は、親端末100から同期リクエストが送信されたと判定すると(ステップS202;Yes)、通信部203を介して、親端末100に子端末200のバッテリ残量を送信する(ステップS203)。CPU210は、バッテリ残量を電力供給部205から取得することができる。バッテリ残量の表し方は任意(例えば、バッテリが完全に充電されているなら100%、消耗してほとんど残っていない場合は1%を示す等)であるが、上述した親端末通信制御処理(図7)のステップS107における所定の閾値や分割データの割り当て方と整合が取れるようにしておく。
そして、CPU210は、通信部203を介して、親端末100とクロック同期を取って(ステップS204)、ステップS205に進む。
次に、CPU210は、親端末からデータ更新通知が送信されたか否かを判定する(ステップS205)。親端末からデータ更新通知が送信されていないなら(ステップS205;No)、ステップS208に進む。
一方、親端末100からデータ更新通知が送信されたなら(ステップS205;Yes)、CPU210は、通信部203を介して、親端末100から自分に割り当てられた分割データとPA情報を受信する(ステップS206)。そして、CPU210は、RAM211に記憶されている分割データ及びPA情報を更新し(ステップS207)、ステップS208に進む。
次に、CPU210は、Periodic Advertisingを行うタイミングか否かを判定する(ステップS208)。子端末200は親端末100とクロック同期が取れているので、Periodic Advertisingを行うタイミングか否かは、PA情報(シンクパケットオフセット、オフセットユニット及びインターバル)に基づいて判定することができる。Periodic Advertisingを行うタイミングでないと判定すると(ステップS208;No)、ステップS202に戻る。
Periodic Advertisingを行うタイミングであると判定すると(ステップS208;Yes)、親端末100から割り当てられた分割データを拡張アドバタイズパケットによりブロードキャスト送信する(ステップS209)。CPU210は、この拡張アドバタイズパケットを、RAM211に記憶したPA情報に含まれるセカンダリチャネルのチャネルおよびタイミングに基づいて送信する。その際、分割データのサイズが小さく、拡張アドバタイズパケットAUX_SYNC_INDのペイロードに入りきる場合には、CPU210は、拡張アドバタイズパケットAUX_SYNC_INDのみをブロードキャスト送信する。
分割データのサイズが例えば255バイト以上ある等、拡張アドバタイズパケットAUX_SYNC_INDのペイロードに入りきらない場合には、CPU210は、拡張アドバタイズパケットAUX_CHAIN_INDも使い、複数の拡張アドバタイズパケットに分割してブロードキャスト送信する。データがペイロードに入りきらずに、そのデータの続きを拡張アドバタイズパケットAUX_CHAIN_INDで送信する場合は、CPU210は、拡張アドバタイズパケットAUX_SYNC_INDやAUX_CHAIN_INDのmoreDataビットを1に設定して送信する。データの続きがない場合は、CPU210は、moreDataビットを0に設定して送信する。
次に、CPU210は、終了指示が出されたか否かを判定する(ステップS210)。終了指示は、ユーザの指示又は所定時間の経過によって出される。終了指示が出されていないなら(ステップS210;No)、ステップS202に戻り、ステップS202からの処理を繰り返す。終了指示が出されたなら(ステップS210;Yes)、CPU210は、親端末100と通信を切断し(ステップS211)、本処理を終了する。
次に、本実施形態に係るスキャナ端末300の動作について図9を参照して説明する。図9は、本実施形態におけるスキャナ端末300のCPU310が実行するアドバタイズ受信制御処理の流れを示すフローチャートの一例である。CPU310は、例えば、ユーザの操作を契機として、本処理を開始する。
スキャナ端末300のCPU310は、アドバタイズのスキャンを開始する(ステップS301)。そして、CPU310は、通信部303を介してアドバタイズパケットADV_NONCONN_INDを受信したか否かを判定する(ステップS302)。アドバタイズパケットADV_NONCONN_INDを受信していないなら(ステップS302;No)、ステップS302に戻って、アドバタイズパケットADV_NONCONN_INDを受信するまで待つ。
アドバタイズパケットADV_NONCONN_INDを受信したなら(ステップS302;Yes)、CPU310は、アドバタイズパケットADV_NONCONN_INDに含まれるPA情報及び子端末情報をRAM311に格納する(ステップS303)。
そして、CPU310は、子端末情報に基づいて、子端末200の台数分のPA情報及び子端末情報を受信完了したか否かを判定する(ステップS304)。子端末情報には、分割データの分割数(子端末の台数)と、分割データの順番(その子端末情報が含まれているアドバタイズパケットADV_NONCONN_INVが、何番目の順番の分割データが割り当てられた子端末200の分のアドバタイズパケットであるか)を示す情報が含まれているため、子端末情報を確認することにより、子端末200の台数分のPA情報及び子端末情報を受信完了したか否かを判定できる。
子端末200の台数分のPA情報及び子端末情報を受信完了していなければ(ステップS304;No)、ステップS302に戻る。子端末200の台数分のPA情報及び子端末情報を受信完了しているなら(ステップS304;Yes)、CPU310は、子端末200A~200Cのいずれか1台(例えば子端末200A)についてのPA情報に基づいて、拡張アドバタイズパケットの受信チャネルと受信タイミングを設定する(ステップS305)。なお、通信部303の仕様により、拡張アドバタイズパケットAUX_SYNC_INDを受信するための設定が必要な場合には、CPU310は、ステップS305において、この設定に必要なイベントやコマンドのやり取りを通信部303と行う。
次に、CPU310は、通信部303を介して、拡張アドバタイズパケットAUX_SYNC_INDを受信したか否かを判定する(ステップS306)。拡張アドバタイズパケットAUX_SYNC_INDを受信していなければ(ステップS306;No)、ステップS310に進む。
拡張アドバタイズパケットAUX_SYNC_INDを受信したら(ステップS306;Yes)、CPU310は、拡張アドバタイズパケットAUX_SYNC_INDに含まれている分割データをRAM311に格納する(ステップS307)。そして、CPU310は、拡張アドバタイズパケットに含まれるmoreDataが1(さらにデータがある)か否かを判定する(ステップS308)。moreDataが1でなければ(ステップS308;No)、ステップS310に進む。
moreDataが1なら(ステップS308;Yes)、CPU310は、通信部303を介して、拡張アドバタイズパケットAUX_CHAIN_INDを受信したか否かを判定する(ステップS309)。拡張アドバタイズパケットAUX_CHAIN_INDを受信していなければ(ステップS309;No)、AUX_CHAIN_INDを受信するまで待つ。
拡張アドバタイズパケットAUX_CHAIN_INDを受信したなら(ステップS309;Yes)、ステップS307に戻って、CPU310は、拡張アドバタイズパケットAUX_CHAIN_INDに含まれている分割データの続きをRAM311に格納し(ステップS307)、データの続きがなくなるまで(moreDataが0になるまで)、拡張アドバタイズパケットAUX_CHAIN_INDの受信を続ける。
ステップS310では、CPU310は、子端末200全てから拡張アドバタイズパケットAUX_SYNC_INDを受信したか否かを判定する。まだ全ての子端末200からは拡張アドバタイズパケットAUX_SYNC_INDを受信していないなら(ステップS310;No)、ステップS305に戻る。ステップS305では、CPU310は、複数の子端末200のうちの1台の分のPA情報に基づいて拡張アドバタイズパケットの受信チャネルと受信タイミングを設定しているので、このステップS305での設定対象とする子端末200を順次変更していき、ステップS310では、全ての子端末200から拡張アドバタイズパケットを受信したか否かを判定することになる。
全ての子端末200から拡張アドバタイズパケットAUX_SYNC_INDを受信完了したなら(ステップS310;Yes)、CPU310は、各子端末200から受信した分割データを、子端末情報に基づいて並べ替えて結合して、大容量データを復元する(ステップS311)。
そして、CPU310は、終了指示が出されたか否かを判定する(ステップS312)。終了指示は、ユーザの指示又は所定時間の経過によって出される。終了指示が出されていないなら(ステップS312;No)、ステップS302に戻り、ステップS302からの処理を繰り返す。終了指示が出されたなら(ステップS312;Yes)、CPU310は、アドバタイズのスキャンを停止し(ステップS313)、本処理を終了する。
上述の処理により、スキャナ端末300はステップS311で復元した大容量データを用いた応用ソフトウェアを実行することができる。例えば、この大容量データがデータサイズ21MB以上の動画コンテンツの場合、親端末100は、スキャナ端末300に直接この大容量データをブロードキャスト送信することはできないが、上述の処理により大容量データを複数の分割データに分割し、複数の子端末200からブロードキャスト送信させることで、スキャナ端末300で元の大容量データを復元して、動画コンテンツとして再生することができる。
次に、本実施形態に係る無線通信システム1の動作例を、図10を参照して説明する。図10は、親端末100と、子端末200A~200Cと、スキャナ端末300と、の動作の例をシーケンス図で示している。
まず、親端末100は、子端末200A~200Cに接続する。その後、親端末100は、子端末200と同期を取るタイミングになると、子端末200Aからバッテリ残量を受信し(ステップS401)、子端末200Aとクロック同期を取る。そして、親端末100は、子端末200Bからバッテリ残量を受信し(ステップS402)、子端末200Bとクロック同期を取る。そして、親端末100は、子端末200Cからバッテリ残量を受信し(ステップS403)、子端末200Cとクロック同期を取る。
その後、親端末100は、子端末200からブロードキャスト送信させる分割データを各子端末200に割り当てる必要があるので、親端末100が保持している大容量データ(スキャナ端末300にブロードキャスト送信したい大容量データ)を分割して、子端末200に割り当て、各子端末200用のPA情報を設定する。ここでは、各子端末200のバッテリ残量は、子端末200Aが最も多く、子端末200Bが最も少なかったものとする。そして、そのため、分割データのデータサイズは、子端末200Aに割り当てられた分割データが最も大きく、子端末200Bに割り当てられた分割データが最も小さいものとする。
そして、親端末100は、各子端末200の子端末情報として、子端末200Aの子端末情報を「01、03」(分割数3の中の1番目の順番の分割データが割り当てられた子端末200であることを表す)に、子端末200Bの子端末情報を「02、03」(分割数3の中の2番目の順番の分割データが割り当てられた子端末200であることを表す)に、子端末200Cの子端末情報を「03、03」(分割数3の中の3番目の順番の分割データが割り当てられた子端末200であることを表す)に、それぞれ設定するものとする。
そして、親端末100は、子端末200Aに割り当てた分割データと子端末200A用のPA情報とを子端末200Aに送信する(ステップS404)。そして、親端末100は、子端末200Bに割り当てた分割データと子端末200B用のPA情報とを子端末200Bに送信する(ステップS405)。そして、親端末100は、子端末200Cに割り当てた分割データと子端末200C用のPA情報とを子端末200Cに送信する(ステップS406)。
次に、親端末100は、子端末200Aに関するPA情報及び子端末情報を含むアドバタイズパケットADV_NONCONN_INDをブロードキャスト送信する(ステップS407)。そして、親端末100は、子端末200Bに関するPA情報及び子端末情報を含むアドバタイズパケットADV_NONCONN_INDをブロードキャスト送信する(ステップS408)。そして、親端末100は、子端末200Cに関するPA情報及び子端末情報を含むアドバタイズパケットADV_NONCONN_INDをブロードキャスト送信する(ステップS409)。スキャナ端末300は、ステップS407~ステップS409でブロードキャスト送信されたアドバタイズパケットを受信する。
次に、子端末200Aは、親端末100からステップS404で送信されたPA情報に含まれるチャネルの情報及び送信タイミングの情報に基づいて、ステップS404で送信された(子端末200Aに割り当てられた)分割データを拡張アドバタイズパケットAUX_SYNC_INDでブロードキャスト送信する(ステップS410)。ここでは、ステップS404で送信された分割パケットはサイズが大きいため、拡張アドバタイズパケットAUX_SYNC_INDに続いて、2つの拡張アドバタイズパケットAUX_CHAIN_INDを用いてブロードキャスト送信する(ステップS411、ステップS412)ものとする。スキャナ端末300は、ブロードキャスト送信された拡張アドバタイズパケットに含まれる分割データを子端末200Aの子端末情報に基づいて、1番目の分割データとして、RAM311に格納する。
そして、子端末200Bは、親端末100からステップS405で送信されたPA情報に含まれるチャネルの情報及び送信タイミングの情報に基づいて、ステップS405で送信された(子端末200Bに割り当てられた)分割データを拡張アドバタイズパケットAUX_SYNC_INDでブロードキャスト送信する(ステップS413)。ここでは、ステップS405で送信された分割パケットはサイズが小さいため、拡張アドバタイズパケットAUX_SYNC_INDのみでブロードキャスト送信できたものとする。スキャナ端末300は、ブロードキャスト送信された拡張アドバタイズパケットに含まれる分割データを子端末200Bの子端末情報に基づいて、2番目の分割データとして、RAM311に格納する。
そして、子端末200Cは、親端末100からステップS406で送信されたPA情報に含まれるチャネルの情報及び送信タイミングの情報に基づいて、ステップS406で送信された(子端末200Cに割り当てられた)分割データを拡張アドバタイズパケットAUX_SYNC_INDでブロードキャスト送信する(ステップS414)。ここでは、ステップS406で送信された分割パケットはサイズが中位のため、拡張アドバタイズパケットAUX_SYNC_INDに続いて、1つの拡張アドバタイズパケットAUX_CHAIN_INDを用いてブロードキャスト送信する(ステップS415)ものとする。スキャナ端末300は、ブロードキャスト送信された拡張アドバタイズパケットに含まれる分割データを子端末200Cの子端末情報に基づいて、3番目の分割データとして、RAM311に格納する。
その後、スキャナ端末300は、RAM311に格納した分割データを1番目から3番目まで順番に結合することにより、親端末100が保持している大容量データを復元する。
以上説明したように、本実施形態に係る無線通信システム1は、親端末100が保持している大容量データを3つの分割データに分割し、子端末200A~200Cに割り当てて、各子端末200からブロードキャスト送信させることができる。これにより、Periodic Advertisingの仕様上の制限により、親端末100からは直接ブロードキャスト送信できなかった大容量データであっても、複数の分割データに分割して、複数の子端末200からブロードキャスト送信することができ、スキャナ端末300で元の大容量データを復元することができる。
また、分割データは子端末200のバッテリ残量に応じて割り当てられるので、子端末200全体を考慮した場合の通信可能時間(Periodic Advertisingによるデータの送信可能時間)を長時間化することができる。
なお、本発明は、上記実施形態に限られるものではなく、様々な変更が可能である。
例えば、上記の実施形態では、無線通信システム1が3台の子端末200を備える例について説明した。しかし、子端末200の数は3台に限られるものではない。無線通信システム1は、少なくとも2台の子端末200を備えればよく、4台以上の子端末を備えてもよい。また、分割データの分割数は、子端末の台数以下であればよく、必ずしも子端末の台数に分割しなくてもよい。
また、上記の実施形態では、親端末100が分割データを子端末200のバッテリ残量に応じて割り当てているが、これに限られるものではない。親端末100は子端末200のバッテリ残量を考慮せずに分割データを割り当ててもよい。この場合、親端末通信制御処理(図7)のステップS103の処理及び子端末通信制御処理(図8)のステップS203の処理は省略できる。また、この場合、電力供給部205は、バッテリ残量をCPU210に通知する機能を備えなくてもよい。
また、上記の実施形態において、親端末100、子端末200及びスキャナ端末300は、全て計時部を備え、計時機能を備える装置であるものとして説明した。しかし、これらの装置は、計時部無しでも通信部によりお互いにクロック同期を取ることができるのであれば、計時部を備えなくてもよい。親端末100、子端末200及びスキャナ端末300は、BLEに基づく無線信号の送信及び受信を行う通信部を備えているなら、任意の装置でよい。例えば、BLEによる無線通信機能を備えるスマートフォン、携帯電話、PC(Personal Computer)、PDA(Personal Digital Assistant)、電子時計、スマートウォッチ等の電子機器がこれらの装置として想定できる。
また、上記の実施形態では、CPU110、210、310が制御動作を行う例を説明した。しかし、制御動作は、CPU110、210、310によるソフトウェア制御に限られるものではない。制御動作の一部又は全部が専用の論理回路などのハードウェア構成を用いてなされてもよい。
また、以上の説明では、本発明の無線制御処理に係るプログラム113、213、313を記憶するコンピュータ読み取り可能な媒体としてフラッシュメモリなどの不揮発性メモリからなるROM102、202、302を例に挙げて説明した。しかし、コンピュータ読み取り可能な媒体は、これらに限定されず、HDD(Hard Disk Drive)、フレキシブルディスク、CD-ROM(Compact Disc Read Only Memory)、DVD(Digital Versatile Disc)、MO(Magneto-Optical Disc)、メモリカード、USB(Universal Serial Bus)メモリ、等の可搬型記憶媒体を適用してもよい。また、本発明に係るプログラムのデータを通信回線を介して提供する媒体として、キャリアウェーブ(搬送波)も本発明に適用される。
その他、上記実施形態で示した構成、制御手順や表示例などの具体的な細部は、本発明の趣旨を逸脱しない範囲において適宜変更可能である。
本発明のいくつかの実施形態を説明したが、本発明の範囲は、上述の実施形態に限定するものではなく、特許請求の範囲に記載された発明の範囲とその均等の範囲を含む。以下に、この出願の願書に最初に添付した特許請求の範囲に記載した発明を付記する。付記の番号は、この出願の願書に最初に添付した特許請求の範囲の通りである。
(付記1)
データを分割して複数の端末からブロードキャスト送信させるための無線通信装置であって、
ブロードキャスト送信及び前記端末との無線通信を行う無線通信部と、
前記端末の数を取得し、
前記データを前記端末の数以下の分割数の分割データに分割し、
前記分割データを前記端末に割り当て、
前記無線通信部を介して、前記分割データ及び前記端末が前記分割データをブロードキャスト送信するデータに関する情報である送信データ情報を、前記分割データを割り当てた端末に送信するとともに、前記送信データ情報を前記分割数だけブロードキャスト送信する、
制御部と、
を備える無線通信装置。
(付記2)
前記送信データ情報は、前記分割データの分割数及び順番を示す情報を含む、
付記1に記載の無線通信装置。
(付記3)
前記送信データ情報は、前記端末が前記分割データをブロードキャスト送信するチャネル及びタイミングに関する情報を含む、
付記1又は2に記載の無線通信装置。
(付記4)
前記制御部は、前記無線通信部を介して、前記端末の各々と同期を取る、
付記1から3の何れか1つに記載の無線通信装置。
(付記5)
前記制御部は、
前記無線通信部を介して前記端末から前記端末のバッテリ残量の情報を受信し、
前記バッテリ残量に応じて、前記分割データのデータサイズを変更する、
付記1から4の何れか1つに記載の無線通信装置。
(付記6)
前記制御部は、
前記バッテリ残量が所定の閾値未満の端末を、前記分割データのブロードキャスト送信に使用しない不使用端末とし、
前記データを前記不使用端末以外の端末の数以下の分割数の分割データに分割し、
前記不使用端末以外の前記端末に前記分割データを割り当てる、
付記5に記載の無線通信装置。
(付記7)
データを分割して複数の端末からブロードキャスト送信させるための無線通信装置と、前記端末と、を備える無線通信システムであって、
前記無線通信装置は、
ブロードキャスト送信及び前記端末との無線通信を行う無線通信部と、
前記端末の数を取得し、
前記データを前記端末の数以下の分割数の分割データに分割し、
前記分割データを前記端末に割り当て、
前記無線通信部を介して、前記分割データ及び前記端末が前記分割データをブロードキャスト送信するデータに関する情報である送信データ情報を、前記分割データを割り当てた端末に送信するとともに、前記送信データ情報を前記分割数だけブロードキャスト送信する、
制御部と、
を備え、
前記端末は、
ブロードキャスト送信及び前記無線通信装置との無線通信を行う端末無線通信部と、
前記端末無線通信部を介して、前記分割データ及び前記送信データ情報を受信するとともに、前記送信データ情報に基づいて、前記分割データをブロードキャスト送信する、制御部と、
を備える、
無線通信システム。
(付記8)
データを分割して複数の端末からブロードキャスト送信させるための無線通信装置が実行する無線通信方法であって、
前記端末の数を取得し、
前記データを前記端末の数以下の分割数の分割データに分割し、
前記分割データを前記端末に割り当て、
前記分割データ及び前記端末が前記分割データをブロードキャスト送信するデータに関する情報である送信データ情報を、前記分割データを割り当てた端末に送信し、
前記送信データ情報を前記分割数だけブロードキャスト送信する、
無線通信方法。
(付記9)
データを分割して複数の端末からブロードキャスト送信させるための無線通信装置のコンピュータに、
前記端末の数を取得するステップ、
前記データを前記端末の数以下の分割数の分割データに分割するステップ、
前記分割データを前記端末に割り当てるステップ、
前記分割データ及び前記端末が前記分割データをブロードキャスト送信するデータに関する情報である送信データ情報を、前記分割データを割り当てた端末に送信するステップ、及び、
前記送信データ情報を前記分割数だけブロードキャスト送信するステップ、
を実行させるためのプログラム。