以下、本発明の実施の形態について、図面を用いて詳細に説明する。
(実施の形態1)
まず、本発明に係るケーブルテレビシステムの実施の形態1を、図面を参照しながら説明する。図1は、ケーブルシステムを構成する装置の関係を表したブロック図であり、ヘッドエンド101及び3個の端末装置A111、端末装置B112、端末装置C113で構成される。本実施の形態では、1つのヘッドエンドに対して3つの端末装置が結合されているが、任意の数の端末装置をヘッドエンドに結合しても、本発明は実施可能である。
ヘッドエンド101は、複数の端末装置に対して映像・音声・データ等の放送信号を送信するとともに、端末装置からのデータ送信を受信する。これを実現するため、ヘッドエンド101と端末装置A111、端末装置B112、端末装置C113間の伝送に用いられる周波数帯域は、分割して用いられる。図2は、周波数帯域の分割の一例を示す表である。周波数帯域は、Out Of Band(略称OOB)とIn−Bandの2種類に大別される。5〜130MHzがOOBに割り当てられ、主にヘッドエンド101と端末装置A111、端末装置B112、端末装置C113間のデータのやり取りに使用される。130MHz〜864MHzはIn−Bandに割り当てられ、主として、映像・音声を含む放送チャンネルに使用される。OOBではQPSK変調方式が、In−BandはQAM64変調方式が使用される。変調方式技術については、本発明に関与が薄い公知技術であるので、詳細な説明は省略する。図3は、OOB周波数帯域の更に詳細な使用の一例である。70MHz〜74MHzはヘッドエンド101からのデータ送信に使用され、全ての端末装置A111、端末装置B112、端末装置C113が、ヘッドエンド101から同じデータを受け取ることになる。一方、10.0MHz〜10.1MHzは端末装置A111からヘッドエンド101へのデータ送信に使用され、10.1MHz〜10.2MHzは端末装置B112からヘッドエンド101へのデータ送信に使用され、10.2MHz〜10.3MHzは端末装置C113からヘッドエンド101へのデータ送信に使用される。これにより、各端末装置固有のデータを各端末装置A111、端末装置B112、端末装置C113からヘッドエンド101に送信することができる。図4は、In−Bandの周波数帯に対する使用の一例である。150〜156MHzと156〜162MHzはそれぞれテレビチャンネル1とテレビチャンネル2に割り当てられ、以降、6MHz間隔でテレビチャンネルが割り当てられている。310MHz以降は、1MHz単位でラジオチャンネルに割り当てられている。これらの各チャンネルはアナログ放送として使用してもデジタル放送として使用してもよい。デジタル放送の場合は、MPEG2仕様に基づいたMOEG2トラスポートパケット形式で伝送され、音声や映像に加え、各種データ放送用データも送信することができる。
ヘッドエンド101は、これらの周波数帯域に適切な放送信号を送信するため、QPSK変調部やQAM変調部等を有する。また、端末装置からのデータを受信するため、QPSK復調器を有する。また、ヘッドエンド101は、これら変調部及び復調部に関連する様々な機器を有すると考えられる。しかし、本発明は主として端末装置に関わるので、詳細な説明は省略する。
端末装置A111、端末装置B112、端末装置C113は、ヘッドエンド101からの放送信号を受信し再生する。また、ヘッドエンド101に対して、各端末装置固有のデータを送信する。3つの、端末装置は本実施の形態では同じ構成を取る。
図5は、端末装置のハードウエア構成を表すブロック図である。500は端末装置であり、QAM復調部501、QPSK復調部502、QPSK変調部503、TSデコーダ505、オーディオデコーダ506、スピーカ507、ビデオデコーダ508、ディスプレイ509、2次記憶部510、1次記憶部511、ROM512、入力部513、CPU514で構成される。また端末装置500には、POD504が着脱できる。
図6は、端末装置500の外観の一例である薄型テレビである。
601は、薄型テレビの筐体であり、POD504を除く、端末装置500の構成要素をすべてを内蔵している。
602はディスプレイであり、図5におけるディスプレイ509に相当する。
603は複数のボタンで構成されるフロントパネル部であり、図5の入力部513に相当する。
604は信号入力端子であり、ヘッドエンド101との信号の送受信を行うためにケーブル線を接続する。信号入力端子は、図5のQAM復調部501、QPSK復調部502、QPSK変調部503と接続されている。
605は、図5のPOD504に相当するPODカードである。POD504は、図6のPODカード605のように、端末装置500とは独立した形態を取り、端末装置500に着脱可能となっている。POD504の詳細は後述する。
606はPODカード605を挿入する挿入スロットである。
図5を参照して、QAM復調部501は、CPU514から指定された周波数を含むチューニング情報で、ヘッドエンド101でQAM変調され送信されてきた信号を復調し、POD504に引き渡す。
QPSK復調部502は、CPU514から指定された周波数を含むチューニング情報で、ヘッドエンド101でQPSK変調され送信されてきた信号を復調し、POD504に引き渡す。
QPSK変調部503は、CPU514から指定された周波数を含む復調情報で、POD504から渡された信号をQPSK復調し、ヘッドエンド101に送信する。
POD504は、図6のように端末装置本体500から着脱可能な形態をしている。POD504の一例としては、CableCard(TM)と呼ばれるデスクランブル等を行うカードがある。端末本体500とPOD504の接続インターフェースは、OpenCable(TM) HOST−POD Interface Specification(OC−SP−HOSTPOD−IF−I12−030210)及び、この仕様書から参照されている仕様書で定義されている。ここでは、詳細は省略し、本発明に関する部分のみを解説する。
図7は、POD504の内部構成を表すブロック図である。POD504は、第1デスクランブラ部701、第2デスクランブラ部702、スクランブラ部703、第1記憶部704、第2記憶部705、CPU706で構成される。
第1デスクランブラ部701は、CPU706からの指示により、端末装置500のQAM復調部501から暗号化された信号を受け取り、復号を行う。そして、復号された信号を端末装置500のTSデコーダ505に送る。デコードに必要な鍵などの情報はCPU706から適宜与えられる。具体的には、ヘッドエンド101はいくつかの有料チャンネルを放送している。ユーザーが、この有料チャンネルを購買すると、第1デスクランブラ部701は、CPU706から鍵等の必要な情報を受け取りデスクランブルすることで、ユーザーは有料チャンネルを閲覧することができる。鍵などの必要な情報が与えられない場合は、第1デスクランブラ部701は、デスクランブルを行わず、受け取った信号をそのまま、TSデコーダ505に送る。
第2デスクランブラ部702は、CPU706からの指示により、端末装置500のQPSK復調部502から暗号化された信号を受け取り、復号を行う。そして、復号されたデータをCPU706に引き渡す。
スクランブラ部703は、CPU706からの指示により、CPU706から受け取ったデータを暗号化し、端末装置500のQPSK変調部503に送る。
第1記憶部704は、具体的にはRAM等の一次記憶メモリーで構成され、CPU706が処理を行う際、一時的にデータを保存するために使用される。
第2記憶部705は、具体的にはフラッシュROM等の2次記憶メモリーで構成され、CPU706が実行するプログラムを格納し、また、電源OFFになっても消去されては困るデータの保存に使用される。
CPU706は、第2記憶部705が記憶するプログラムを実行する。プログラムは複数のサブプログラムで構成される。図8は、第2記憶部705が記憶するプログラムの一例である。図8では、プログラム800は、メインプログラム801、初期化サブプログラム802、ネットワークサブプログラム803、再生サブプログラム804、PPVサブプログラム805等複数のサブプログラムで構成されている。
ここでPPVとはPay Per Viewの略であり、映画など特定の番組を有料で視聴できるようにするサービスである。ユーザーが暗証番号を入力すると、購入したことがヘッドエンド101に通知され、スクランブルが解除され、視聴することが出来る。この視聴により、ユーザーは後日、購入代金を支払うものである。
メインプログラム801は、CPU706が電源投入時に最初に起動するサブプログラムであり、他のサブプログラムの制御を行う。
初期化サブプログラム802は、電源投入時にメインプログラム801によって起動され、端末装置500との情報交換等を行い、初期化処理を行う。初期化処理の詳細は、OpenCable(TM) HOST−POD Interface Specification(OC−SP−HOSTPOD−IF−I12−030210)及び、この仕様書から参照されている仕様書で定義されている。また、仕様書に定義されていない初期化処理も行う。ここでは、その一部を紹介する。電源が投入されると、初期化サブプログラム802は、第2記憶部705が記憶する第1の周波数を端末装置500のCPU514を通して、QPSK復調部502に通知する。QPSK復調部502は、与えられた第1の周波数でチューニングを行い、信号を第2デスクランブラ部702に送る。また、初期化サブプログラム802は、第2記憶部705が記憶する第1の鍵等の復号情報を第2デスクランブラ部702に与える。その結果、第2デスクランブラ部702は、デスクランブルを行い、初期化サブプログラム802を実行するCPU706に引き渡す。よって、初期化サブプログラム802は情報を受け取ることができる。本実施の形態では、初期化サブプログラム802はネットワークサブプログラム803を通して情報を受け取ることとする。詳細は後述する。
また、初期化サブプログラム802は、第2記憶部705が記憶する第2の周波数を端末装置500のCPU514を通して、QPSK変調部503に通知する。初期化サブプログラム802は第2記憶部705が記憶する暗号化情報をスクランブラ部703に与える。初期化サブプログラム802が送信したい情報を、ネットワークサブプログラム803を介して、スクランブラ部703に与えると、スクランブラ部703は、与えられた暗号化情報を用いて、データを暗号化し、端末装置500のQPSK変調部503に与える。QPSK変調部503は、与えられた暗号化された情報を変調し、ヘッドエンド101に送信する。
この結果、初期化サブプログラム802は、端末装置500、第2デスクランブラ部702、スクランブラ部703、ネットワークサブプログラム803を通して、ヘッドエンド101と双方向通信を行うことができる。
ネットワークサブプログラム803は、メインプログラム801、初期化サブプログラム802等の複数のサブプログラムから使用される、ヘッドエンド101との双方向通信を行うためのサブプログラムである。具体的には、ネットワークサブプログラム803を使用する他のサブプログラムに対して、TCP/IPによって、ヘッドエンド101と双方向通信を行っているように振舞う。TCP/IPは、複数の装置間で情報交換を行うためのプロトコルを規定した公知の技術であり、詳細な説明は省略する。ネットワークサブプログラム803は、電源投入時に初期化サブプログラム802に起動されると、予め第2記憶部705が記憶しているPOD504を識別する識別子であるMACアドレス(Media Access Controlアドレスの略)を、端末装置500を通してヘッドエンド101に通知し、IPアドレスの取得を要求する。ヘッドエンド101は、端末装置500を介してPOD504にIPアドレスを通知し、ネットワークサブプログラム803は、IPアドレスを第1記憶部704に記憶する。以降、ヘッドエンド101とPOD504は、このIPアドレスを、POD504の識別子として使用し、通信を行う。
再生サブプログラム804は、第2記憶部705が記憶する第2の鍵等の復号情報や、端末装置500から与えられる第3の鍵等の復号情報を第1デスクランブラ部701に与えて、デスクランブルを可能にする。また、ネットワークサブプログラム803を通して、第1デスクランブラ部701に入力されている信号が、PPVチャンネルであることの情報を受け取る。PPVチャンネルと知ったときは、PPVサブプログラム805を起動する。
PPVサブプログラム805は、起動されると、端末装置500に番組の購入を促すメッセージを表示し、ユーザーの入力を受け取る。具体的には、端末装置500のCPU514に画面に表示したい情報を送ると、端末装置500のCPU514上で動作するプログラムが、端末装置500のディスプレイ509上にメッセージを表示する。ユーザーは、端末装置500の入力部513を通して暗証番号を入力すると、端末装置500のCPU514が、それを受け取り、POD504のCPU706上で動作するPPVサブプログラム805に通知する。PPVサブプログラム805は、受け取った暗証番号をネットワークサブプログラム803を通してヘッドエンド101に送信する。ヘッドエンド101は、暗証番号が正しければ、復号に必要な第4の鍵などの復号化情報をネットワークサブプログラム803を介して、PPVサブプログラム805に通知する。PPVサブプログラム805は受け取った第4の鍵などの復号化情報を第1デスクランブラ部701に与え、第1デスクランブラ部701は、入力されている信号をデスクランブルする。
図5を参照して、TSデコーダ505は、POD504から受け取った信号のフィルタリングを実施し、必要なデータをオーディオデコーダ506及びビデオデコーダ508、CPU514に引き渡す。ここで、POD504から来る信号はMPEG2トランスポートストリームである。MPEG2トランスポートストリームの詳細はMPEG規格書 ISO/IEC13818−1に記載されており、本実施の形態では詳細は省略する。MPEG2トランスポートストリームは、複数の固定長パケットで構成され、各パケットには、パケットIDが振られている。図9はパケットの構成図である。900はパケットであり、固定長の188バイトで構成される。先頭4バイトがヘッダー901で、パケットの識別情報を格納しており、残り184バイトがペイロード902で、送信したい情報を含んでいる。903は、ヘッダー901の内訳である。先頭から12ビット目〜24ビット目までの13ビットにパケットIDが含まれている。図10は送られてくる複数のパケットの列を表現した模式図である。パケット1001は、ヘッダーにパケットID「1」を持ち、ペイロードには映像Aの1番目の情報が入っている。パケット1002は、ヘッダーにパケットID「2」を持ち、ペイロードには音声Aの1番目の情報が入っている。パケット1003は、ヘッダーにパケットID「3」を持ち、ペイロードには音声Bの1番目の情報が入っている。
パケット1004は、ヘッダーにパケットID「1」を持ち、ペイロードには映像Aの2番目の情報が入っており、これはパケット1001の続きになっている。同様にパケット1005、1026、1027も他のパケットの後続データを格納している。このように、同じパケットIDを持つ、パケットのペイロードの内容を連結すると、連続した映像や音声を再現することができる。
図10を参照して、CPU514がパケットID「1」と出力先として「ビデオデコーダ508」をTSデコーダ505に指示すると、TSデコーダ505はPOD504から受け取ったMPEG2トランスポートストリームからパケットID「1」のパケットを抽出し、ビデオデコーダ508に引き渡す。図10においては、映像データのみをビデオデコーダ508に引き渡すことになる。同時に、CPU514がパケットID「2」と「オーディオデコーダ506」をTSデコーダ505に指示すると、TSデコーダ505はPOD504から受け取ったMPEG2トランスポートストリームからパケットID「2」のパケットを抽出し、オーディオデコーダ506に引き渡す。図10においては、音声データのみをビデオデコーダ508に引き渡すことになる。
このパケットIDに応じて必要なパケットだけを取り出す処理が、TSデコーダ505が行うフィルタリングである。TSデコーダ505はCPU514から指示された複数のフィルタリングを同時に実行することができる。
図5を参照して、オーディオデコーダ506は、TSデコーダ505から与えられたMPEG2トランスポートストリームのパケットに埋め込まれたオーディオデータを連結し、デジタル−アナログ変換を行いスピーカ507に出力する。
スピーカ507は、オーディオデコーダ506から与えられた信号を音声出力する。
ビデオデコーダ508は、TSデコーダ505から与えられたMPEG2トランスポートストリームのパケットに埋め込まれたビデオデータを連結し、デジタル−アナログ変換を行いディスプレイ509に出力する。
ディスプレイ509は、具体的にはブラウン管や液晶等で構成され、ビデオデコーダ508から与えられたビデオ信号を出力したり、CPU514から指示されたメッセージを表示したりする。
2次記憶部510は、具体的には、フラッシュメモリーやハードディスク等で構成され、CPU514から指示されたデータやプログラムを保存したり削除したりする。また、保存されているデータやプログラムはCPU514に参照される。保存されているデータやプログラムは、端末装置500の電源が切断された状態でも保存しつづける。
1次記憶部511は、具体的には、RAM等で構成され、CPU514から指示されたデータやプログラムを一次的に保存したり削除したりする。また、保存されているデータやプログラムはCPU514に参照される。保存されているデータやプログラムは、端末装置500の電源が切断された際に、抹消される。
ROM512は、書き換え不可能なメモリーデバイスであり、具体的にはROMやCD−ROM、DVDなどで構成される。ROM512は、CPU514が実行するプログラムが格納されている。
入力部513は、具体的には、フロントパネルやリモコンで構成され、ユーザーからの入力を受け付ける。図11は、フロントパネルで入力部513を構成した場合の一例である。1100はフロントパネルであり、図6のフロントパネル部603に相当する。フロントパネル1100は7つのボタン、上カーソルボタン1101、下カーソルボタン1102、左カーソルボタン1103、右カーソルボタン1104、OKボタン1105、取消ボタン1106、EPGボタン1107を備えている。ユーザーがボタンを押下すると、押下されたボタンの識別子が、CPU514に通知される。
CPU514は、ROM512が記憶するプログラムを実行する。実行するプログラムの指示に従い、QAM復調部501、QPSK復調部502、QPSK変調部503、POD504、TSデコーダ505、ディスプレイ509、2次記憶部510、1次記憶部511、ROM512を制御する。
図12は、ROM512に記憶され、CPU514に実行されるプログラムの構成図の一例である。
プログラム1200は、複数のサブプログラムで構成され、具体的にはOS1201、EPG1202、Java(登録商標)VM1203、サービスマネージャ1204、Javaライブラリ1205で構成される。
OS1201は、端末装置500の電源が投入されると、CPU514が起動するサブプログラムである。OS1201は、オペレーティングシステムの略であり、Linux等が一例である。OS1201は、他のサブプログラムを平行して実行するカーネル1201a及びライブラリ1201bで構成される公知の技術の総称であり、詳細な説明は省略する。本実施の形態においては、OS1201のカーネル1201aは、EPG1202とJavaVM1203をサブプログラムとして実行する。また、ライブラリ1201bは、これらサブプログラムに対して、端末装置500が保持する構成要素を制御するための複数の機能を提供する。
機能の一例として、チューニング機能を紹介する。チューニング機能は、他のサブプログラムから周波数を含むチューニング情報を受け取り、それをQAM復調部501に引き渡す。QAM復調部501は与えられたチューニング情報に基づき復調処理を行い、復調したデータをPOD504に引き渡すことができる。この結果、他のサブプログラムはライブラリ1201bを通してQAM復調器を制御することができる。
EPG1202は、ユーザーに番組一覧を表示及び、ユーザーからの入力を受け付ける番組表示部1202aと、チャンネル選局を行う再生部1102bで構成される。ここで、EPGはElectric Program Guideの略である。EPG1202は、端末装置500の電源が投入されると、カーネル1201aによって起動される、起動されたEPG1202の内部では、番組表示部1202aが端末装置500の入力部513を通して、ユーザーからの入力を待つ。ここで、入力部513が図11で示されるフロントパネルで構成されている場合、ユーザーが、入力部513のEPGボタン1107を押下すると、EPGボタンの識別子がCPU514に通知される。CPU514上で動作するサブプログラムであるEPG1202の番組表示部1202aは、この識別子を受け取り、番組情報をディスプレイ509に表示する。図13(1)及び(2)は、ディスプレイ509に表示された番組表の一例である。図13(1)を参照して、ディスプレイ509には、格子状に番組情報が表示されている。列1301には、時刻情報が表示されている。列1302には、チャンネル名「チャンネル1」と、列1301の時刻に対応する時間帯に放映される番組が表示されている。「チャンネル1」では、9:00〜10:30に番組「ニュース9」が放映され、10:30〜12:00は「映画AAA」が放映されることを表す。列1303も列1302同様、チャンネル名「チャンネル2」と、列1301の時刻に対応する時間帯に放映される番組が表示されている。9:00〜11:00に番組「映画BBB」が放映され、11:00〜12:00は「ニュース11」が放映される。1330は、カーソルである。カーソル1330は、フロントパネル1100の左カーソル1103と右カーソル1104を押下すると移動する。図13(1)の状態で、右カーソル1104を押下すると、カーソル1330は右に移動し、図13(2)のようになる。また、図13(2)の状態で、左カーソル1103を押下すると、カーソル1330は左に移動し、図13(1)のようになる。
図13(1)の状態で、フロントパネル1100のOKボタン1105が押下されると、番組表示部1202aは、「チャンネル1」の識別子を再生部1102bに通知する。図13(2)の状態で、フロントパネル1100のOKボタン1105が押下されると、番組表示部1202aは、「チャンネル2」の識別子を再生部1102bに通知する。
また、番組表示部1202aは、表示する番組情報を、POD504を通してヘッドエンド101から定期的に、1次記憶部511に記憶しておく。一般的に、ヘッドエンドからの番組情報の取得は時間が掛かる。入力部513のEPGボタン1107が押下された時、1次記憶部511に予め保存された番組情報を表示することで、素早く番組表を表示することができる。
再生部1102bは、受け取ったチャンネルの識別子を用いて、チャンネルを再生する。チャンネルの識別子とチャンネルの関係は、チャンネル情報として、2次記憶部510に予め格納されている。図14は2次記憶部510に格納されているチャンネル情報の一例である。チャンネル情報は表形式で格納されている。列1401は、チャンネルの識別子である。列1402は、チャンネル名である。列1403はチューニング情報である。ここで、チューニング情報は周波数や転送レート、符号化率などを含み、QAM復調部501に与える値である。列1404はプログラムナンバーである。プログラムナンバーとは、MPEG2規格で規定されているPMTを識別するための番号である。PMTに関しては、後述する。行1411〜1414の各行は、各チャンネルの識別子、チャンネル名、チューニング情報の組となる。行1411は識別子が「1」、チャンネル名が「チャンネル1」、チューニング情報に周波数「312MHz」、プログラムナンバーが「101」を含む組となっている。再生部1102bは、チャンネルの再生を行うため、受け取ったチャンネルの識別子をそのままサービスマネージャに引き渡す。
また、再生部1102bは、再生中に、ユーザーがフロントパネル1100の上カーソル1101と下カーソル1102を押下すると、入力部513からCPU514を通して、押下された通知を受け取り、再生しているチャンネルを変更する。まず、再生部1102bは、1次記憶部511に現在再生中のチャンネルの識別子を記憶する。図15(1)(2)及び(3)は、1次記憶部511に保存しているチャンネルの識別子の例である。図15(1)では識別子「3」が記憶されており、図14を参照し、チャンネル名「TV 3」のチャンネルが再生中であることを示す。図15(1)の状態で、ユーザーが上カーソル1101を押下すると再生部1102bは、図14のチャンネル情報を参照し、表中の前のチャンネルであるチャンネル名「チャンネル2」のチャンネルに再生を切り変えるため、サービスマネージャにチャンネル名「チャンネル2」の識別子「2」を引き渡す。同時に、1次記憶部511に記憶されているチャンネル識別子「2」に書き換える。図15(2)は、チャンネル識別子が書き換えられた状態を表す。また、図15(1)の状態で、ユーザーが下カーソル1102を押下すると再生部1102bは、図14のチャンネル情報を参照し、表中の次のチャンネルであるチャンネル名「TV Japan」のチャンネルに再生を切り変えるため、サービスマネージャにチャンネル名「TV Japan」の識別子「4」を引き渡す。同時に、1次記憶部511に記憶されているチャンネル識別子「4」に書き換える。図15(3)は、チャンネル識別子が書き換えられた状態を表す。
JavaVM1203は、Java(TM)言語で記述されたプログラムを逐次解析し実行するJavaバーチャルマシンである。Java言語で記述されたプログラムはバイトコードと呼ばれる、ハードウエアに依存しない中間コードにコンパイルされる。Javaバーチャルマシンは、このバイトコードを実行するインタープリタである。また、一部のJavaバーチャルマシンは、バイトコードをCPU514が理解可能な実行形式に翻訳してから、CPU514に引渡し、実行することも行う。JavaVM1203は、カーネル1201aに実行するJavaプログラムを指定され起動される。本実施の形態では、カーネル1201aは、実行するJavaプログラムとしてサービスマネージャ1204を指定する。Java言語の詳細は、書籍「Java Language Specification(ISBN 0−201−63451−1)」等の多くの書籍で解説されている。ここでは、その詳細を省略する。また、JavaVM自体の詳細な動作などは、「Java Virtual Machine Specification(ISBN 0−201−63451―X)」等の多くの書籍で解説されている。ここでは、その詳細を省略する。
サービスマネージャ1204は、Java言語で書かれたJavaプログラムであり、JavaVM1203によって逐次実行される。サービスマネージャ1204は、JNI(Java Native Interface)を通して、Java言語で記述されていない他のサブプログラムを呼び出したり、または、呼び出されたりすることが可能である。JNIに関しても、書籍「Java Native Interface」等の多くの書籍で解説されている。ここでは、その詳細を省略する。
サービスマネージャ1204は、JNIを通して、再生部1102bよりチャンネルの識別子を受け取る。
サービスマネージャ1204は、最初にJavaライブラリ1205の中にあるTuner1205cに、チャンネルの識別子を引き渡し、チューニングを依頼する。Tuner1205cは、2次記憶部510が記憶するチャンネル情報を参照し、チューニング情報を獲得する。今、サービスマネージャ1204がチャンネルの識別子「2」をTuner1205cに引き渡すと、Tuner1205cは、図14の列1412を参照して、対応するチューニング情報「156MHz,」を獲得する。Tuner1205cは、OS1201のライブラリ1201bを通して、QAM復調部501にチューニング情報を引き渡す。QAM復調部501は与えられたチューニング情報に従ってヘッドエンド101から送信されてきた信号を復調し、POD504に引き渡す。
次にサービスマネージャ1204は、Javaライブラリ1205の中にあるCA1205dにデスクランブルを依頼する。CA1205dは、OS1201のライブラリ1201bを通して復号に必要な情報をPOD504に与える。POD504は、与えられた情報を元に、QAM復調部501から与えられた信号を復号しTSデコーダ505に引き渡す。
次にサービスマネージャ1204は、Javaライブラリ1205の中にあるJMF1205aにチャンネルの識別子を与え、映像・音声の再生を依頼する。
まず、最初にJMF1205aは、再生すべき映像と音声を特定するためのパケットIDをPAT、PMTから取得する。PATやPMTはMPEG2規格で規定されている、MPEG2トランスポートストリーム内の番組構成を表現するテーブルであり、MPEG2トランスポートストリームに含まれるパケットのペイロードに埋め込まれて、音声や映像と共に送信されるものである。詳細は規格書を参照されたい。ここでは、概略のみ説明する。PATは、Program Association Tableの略で、パケットID「0」のパケットに格納され送信されている。JMF1205aは、PATを取得するため、OS1201のライブラリ1201bを通して、TSデコーダ505にパケットID「0」とCPU514を指定する。TSデコーダ505がパケットID「0」でフィルタリングを行い、CPU514に引き渡すことでJMF1205aは、PATのパケットを収集する。図16は、収集したPATの情報の一例を模式的に表した表である。列1601は、プログラムナンバーである。列1602は、パケットIDである。列1602のパケットIDはPMTを取得するために用いられる。行1611〜1613は、チャンネルのプログラムナンバーと対応するパケットIDの組である。ここでは、3つのチャンネルが定義されている。行1611はプログラムナンバー「101」とパケットID「501」の組が定義されている。今、JMF1205aに与えられたチャンネルの識別子が「2」とすると、JMF1205aは、図14の列1412を参照して、対応するプログラムナンバー「102」を獲得し、次に、図16のPATの列1612を参照し、プログラムナンバー「102」に対応するパケットID「502」を獲得する。PMTは、Program Map Tableの略で、PATで規定されたパケットIDのパケットに格納され送信されている。JMF1205aは、PMTを取得するため、OS1201のライブラリ1201bを通して、TSデコーダ505にパケットIDとCPU514を指定する。ここで、指定するパケットIDは「502」とする。TSデコーダ505がパケットID「502」でフィルタリングを行い、CPU514に引き渡すことでJMF1205aは、PMTのパケットを収集する。図17は、収集したPMTの情報の一例を模式的に表した表である。列1701は、ストリーム種別であり。列1702は、パケットIDである。列1702で指定されるパケットIDのパケットには、ストリーム種別で指定された情報がペイロードに格納され送信されている。列1703は補足情報である。列1711〜1714はエレメンタリ−ストリームと呼ばれる、パケットIDと送信している情報の種別の組である。列1711は、ストリーム種別「音声」とパケットID「5011」の組であり、パケットID「5011」のペイロードには音声が格納されていることを表す。JMF1205aは、PMTから再生する映像と音声のパケットIDを獲得する。図17を参照して、JMF1205aは、行1711から音声のパケットID「5011」を、行1712から映像のパケットID「5012」を獲得する。
次に、JMF1205aは、OS1201のライブラリ1201bを通して、獲得した音声のパケットIDと出力先としてオーディオデコーダ506、映像のパケットIDと出力先としてビデオデコーダ508の組を、TSデコーダ505に与える。TSデコーダ505は与えられたパケットIDと出力先に基づいて、フィルタリングを行う。ここではパケットID「5011」のパケットをオーディオデコーダ506に、パケットID「5012」のパケットをビデオデコーダ508に引き渡す。オーディオデコーダ506は、与えられたパケットのデジタル−アナログ変換を行いスピーカ507を通して音声を再生する。ビデオデコーダ508は、与えられたパケットのデジタル−アナログ変換を行いディスプレイ509に映像を表示する。
最後にサービスマネージャ1204は、Javaライブラリ1205の中にあるAM1205bにチャンネルの識別子を与え、データ放送再生を依頼する。ここで、データ放送再生とは、MPEG2トランスポートストリームに含まれるJavaプログラムを抽出し、JavaVM1203に実行させることである。MPEG2トランスポートストリームにJavaプログラムを埋め込む方法は、MPEG規格書 ISO/IEC13818−6に記述されたDSMCCという方式を用いる。ここではDSMCCの詳細な説明は省略する。DSMCC方式は、MPEG2トランスポートストリームのパケットの中に、コンピュータで使用されているディレクトリやファイルで構成されるファイルシステムをエンコードする方法を規定している。また、実行するJavaプログラムの情報はAITと呼ばれる形式で、MPEG2トランスポートストリームのパケットの中に埋め込まれ送信されている。AITは、DVB−MHP規格(正式には、ETSI TS 101 812 DVB−MHP仕様V1.0.2)の10章に定義されている、Application Information Tableの略である。
AM1205bは、まず、AITを獲得するため、JMF1205a同様PAT、PMTを取得し、AITが格納されているパケットのパケットIDを獲得する。今、与えられたチャンネルの識別子が「2」で、図16のPAT、図17のPMTが送信されていると、JMF1205aと同様の手順で、図17のPMTを獲得する。AM1205bは、PMTからストリーム種別が「データ」で補足情報として「AIT」を持つエレメンタリ−ストリームからパケットIDを抽出する。図17を参照して、行1713のエレメンタリ−ストリームが該当し、パケットID「5013」を獲得する。
AM1205bは、OS1201のライブラリ1201bを通してTSデコーダ505にAITのパケットIDと出力先CPU514を与える。TSデコーダ505、与えられたパケットIDでフィルタリングを行い、CPU514に引き渡す。この結果、AM1205bは、AITのパケットを収集することができる。図18は、収集したAITの情報の一例を模式的に表した表である。列1801はJavaプログラムの識別子である。列1802はJavaプログラムの制御情報である。制御情報には「autostart」「present」「kill」などがあり、「autostart」は即時に端末装置500がこのプログラムを自動的に実行することを意味し、「present」は自動実行しないことを意味し、「kill」はプログラムを停止することを意味する。列1803は、DSMCC方式でJavaプログラムを含んでいるパケットIDを抽出するためのDSMCC識別子である。列1804はJavaプログラムのプログラム名である。列1811と1812は、Javaプログラムの情報の組である。列1811で定義されるJavaプログラムは、識別子「301」、制御情報「autostart」、DSMCC識別子「1」、プログラム名「a/TopXlet」の組である。列1812で定義されるJavaプログラムは、識別子「302」、制御情報「present」、DSMCC識別子「1」、プログラム名「b/GameXlet」の組である。ここで2つのJavaプログラムは同じDSMCC識別子を持つが、これは1つのDSMCC方式でエンコードされたファイルシステム内に2つのJavaプログラムが含まれていることを表す。ここでは、Javaプログラムに対して4つの情報しか規定しないが、実際にはより多くの情報が定義される。詳細はDVB−MHP規格を参照されたい。
AM1205bは、AITの中から「autostart」のJavaプログラムを見つけ出し、対応するDSMCC識別子及びJavaプログラム名を抽出する。図18を参照して、AM1205bは行1811のJavaプログラムを抽出し、DSMCC識別子「1」及びJavaプログラム名「a/TopXlet」を獲得する。
次にAM1205bは、AITから取得したDSMCC識別子を用いて、JavaプログラムをDSMCC方式で格納しているパケットのパケットIDをPMTから獲得する。具体的には、PMTの中でストリーム種別が「データ」で、補足情報のDSMCC識別子が合致するエレメンタリ−ストリームのパケットIDを取得する。
今、DSMCC識別子が「1」であり、PMTが図17とすると、行1714のエレメンタリ−ストリームが合致し、パケットID「5014」を取り出す。
AM1205bは、OS1201のライブラリ1201bを通してTSデコーダ505にDSMCC方式でデータが埋めこめられたパケットのパケットIDと出力先としてCPU514を指定する。ここでは、パケットID「5014」を与える。TSデコーダ505、与えられたパケットIDでフィルタリングを行い、CPU514に引き渡す。この結果、AM1205bは、必要なパケットを収集することができる。AM1205bは、収集したパケットから、DSMCC方式に従ってファイルシステムを復元し、1次記憶部511に保存する。MPEG2トランスポートストリーム中のパケットからファイルシステム等のデータを取り出し1次記憶部511等の記憶手段に保存することを以降、ダウンロードと呼ぶ。
図19は、ダウンロードしたファイルシステムの一例である。図中、丸はディレクトリを四角はファイルを表し、1901はルートディレクトリ、1902はディレクトリ「a」,1903はディレクトリ「b」,1904はファイル「TopXlet.class」、1905はファイル「GameXlet.class」である。
次にAM1205bは、1次記憶部511にダウンロードしたファイルシステム中から実行するJavaプログラムをJavaVM1203に引き渡す。今、実行するJavaプログラム名が「a/TopXlet」とすると、Javaプログラム名の最後に「.class」を付加したファイル「a/TopXlet.class」が実行すべきファイルとなる。「/」はディレクトリやファイル名の区切りであり、図19を参照して、ファイル1904が実行すべきJavaプログラムである。次にAM1205bは、ファイル1904をJavaVM1203に引き渡す。
JavaVM1203は、引き渡されたJavaプログラムを実行する。
サービスマネージャ1204は、他のチャンネルの識別子を受け取ると、Javaライブラリ1205に含まれる各ライブラリを通して再生している映像・音声及びJavaプログラムの実行を、同じくJavaライブラリ1205に含まれる各ライブラリを通して停止し、新たに受け取ったチャンネルの識別子に基づいて、映像・音声の再生及びJavaプログラムの実行を行う。
Javaライブラリ1205は、ROM512に格納されている複数のJavaライブラリの集合である。本実施の形態では、ここでは、Javaライブラリ1205は、JMF1205a,AM1205b,Tuner1205c,CA1205d、POD Lib1205e等を含んでいる。
次に、本発明の主要機能であるJavaプログラムのダウンロード・保存及び実行機能について説明する。
サービスマネージャ1204は、Javaライブラリ1205に含まれるPOD Lib1205eを通してヘッドエンド101と双方向通信を行う。この双方向通信は、POD Lib1205eはOS1201のライブラリ1201b及び、POD504を介して、QPSK復調部502、QPSK変調部503を使用して実現される。
サービスマネージャ1204は、この通信を用いてヘッドエンド101から、端末装置500が2次記憶部510に保存すべきJavaプログラムの情報を受け取る。この情報をXAIT情報と呼ぶ。XAIT情報は、ヘッドエンド101とPOD504間で、任意の形式で送信される。どのような送信形式を採用しても、XAITに必要とする情報が含まれていれば、本発明は実施可能である。
図20は、ヘッドエンド101から取得したXAITの情報の一例を模式的に表した表である。列2001はJavaプログラムの識別子である。列2002はJavaプログラムの制御情報である。制御情報には「autoselect」「present」などがあり、「autoselect」は端末装置500が電源投入時にこのプログラムを自動的に実行することを意味し、「present」は自動実行しないことを意味する。列2003は、DSMCC方式でJavaプログラムを含んでいるパケットIDを抽出するためのDSMCC識別子である。列2004はJavaプログラムのプログラム名である。列2005は、Javaプログラムの優先度である。列2011と2012は、Javaプログラムの情報の組である。列2011で定義されるJavaプログラムは、識別子「701」、制御情報「autoselect」、DSMCC識別子「1」、プログラム名「a/PPV1Xlet」の組である。ここでは、Javaプログラムに対して5つの情報しか規定しないが、より多くの情報が定義されていても本発明は実施可能である。
サービスマネージャ1204は、XAIT情報を受け取ると、AIT情報からJavaプログラムをダウンロードした手順と同じ手順で、MPEG2トランスポートストリームからファイルシステムを1次記憶部511に保存する。その後、保存したファイルシステムを2次記憶部510に複写する。なお、1次記憶部511を介さず、直接2次記憶部510にダウンロードすることも実施可能である。次に、サービスマネージャ1204は、XAIT情報にダウンロードしたファイルシステムの格納位置を対応づけて2次記憶部510に保存する。図21は、2次記憶部510がXAIT情報とダウンロードしたファイルシステムが対応づけられて保存されている一例を表す。図21の中で、図20と同じ番号の要素は図20と同じなので、説明は省略する。列2101は対応するダウンロードしたファイルシステムの保存位置を格納する。図中、保存位置は矢印で示している。2110はダウンロードしたファイルシステムであり、内部にトップディレクトリ2111、ディレクトリ「a」2112、ディレクトリ「b」2113、ファイル「PPV1Xlet.class」2114、ファイル「PPV2Xlet.class」2115を保持する。
ここで、XAIT情報は、Javaプログラムを保存してから保存しているが、Javaプログラムを保存する前に保存することも実施可能である。
端末装置500に電源が投入後、OS1201が、サービスマネージャ1204をJavaVM1203に指定し、JavaVM1203がサービスマネージャ1204を起動した後、サービスマネージャ1204は、最初に2次記憶部510に保存されたXAIT情報を参照する。ここで各Javaプログラムの制御情報を参照し「autoselect」のプログラムをJavaVM1203に引き渡し、起動する。図21を参照して、行2011で定義されるJavaプログラム「PPV1Xlet」が起動される。
ここで、Javaプログラム「PPV1Xlet」はPOD504が内部に持つPPVサブプログラム805に対応して、PPV対象の番組情報を表示するプログラムとする。端末装置500に、Javaプログラム「PPV1Xlet」が無いときは、PPVサブプログラム805が端末装置500のCPU514に画面に表示したい情報を送ると、OS1201のライブラリ1201bに含まれるダイアログ表示プログラムが、図22に示すような番組購入を促すメッセージをディスプレイ509に表示する。2201はダイアログボックスであり、メッセージ2202、4桁の暗証番号を入力するための暗証番号ボックス2203、OKボタン2204、取消ボタン2205の表示要素を持つ。しかしながら、この表示では、番組内容が不明なため、ユーザーは番組ガイドなどの本を参照するなどして番組内容を確認する必要があり不便である。
端末装置500に、Javaプログラム「PPV1Xlet」が保存され、起動されると、Javaプログラム「PPV1Xlet」は、Javaライブラリ1205のPOD Lib1205eに自身を、POD504から参照可能なJavaプログラムとして登録する。登録の際、自身のJavaプログラムの識別子と動作種別、優先度も同時に登録する。POD Lib1205eは登録された内容を2次記憶部510に記憶する。図23は、2次記憶部510が、登録されたPOD504から参照可能なJavaプログラムの情報を保存している状態の一例である。この例では、表形式で保存しており、列2301はJavaプログラムの識別子、列2302はJavaプログラムの動作種別、列2303Javaプログラムの優先度、列2304はJavaプログラムの名前を記憶している。ここで、Javaプログラムの動作種別は、図24の通り「1」と「2」の2通りの値があり、値「1」は、登録されたJavaプログラムが他に登録されたJavaプログラムや、OS1201のライブラリ1201bに含まれるプログラムと同時に実行されることが不可能なことを表す。値「2」は、登録されたJavaプログラムが他に登録されたJavaプログラムや、OS1201のライブラリ1201bに含まれるプログラムと同時に実行可能なことを表す。図23を参照して、行2311〜2312は登録されているJavaプログラムを表す。行2311は、識別子「PPV」、動作種別「2」、優先度「200」、Javaプログラムの名前「PPV1Xlet」の組となっている。
POD Lib1205eは、登録されたJavaプログラムの情報をPOD504に通知し、POD504内のサブプログラムと、登録されたJavaプログラム間でデータの送受信が可能となる。例えば、POD504内のPPVサブプログラム805は、図23の行2311で示される登録されたJavaプログラムに、PPV購入対象の番組内容を送り、Javaプログラムは、図25のようにディスプレイ509に表示を行うことができる。図22と同じ番号の要素は、図22と同じなので説明を省略する。2501は登録されたJavaプログラムが表示している番組情報である。ここでは、OS1201のライブラリ1201bのダイアログ表示プログラムと登録されたJavaプログラムが同時に実行されている。この際、POD504からは、登録されたJavaプログラムの種別を参照してデータを送る相手のJavaプログラムを識別している。
一方、OS1201のライブラリ1201bのダイアログ表示プログラムと登録されたJavaプログラムは別々に開発されて、結果として、2201と2501が重なって表示されてしまうかもしれない。これを回避するため、OS1201のライブラリ1201bのダイアログ表示プログラムを停止することも可能である。具体的には、Javaプログラムは、OS1201のライブラリ1201bのダイアログ表示プログラムが行うべき暗証番号入力などの機能も全て備え、更に、動作種別「1」で登録する。図26は、この場合の登録されたJavaプログラムがPOD504のPPVサブプログラムから指示を受けてディスプレイ509に表示を行った一例である。
ここで、図27のように2次記憶部510が登録されたJavaプログラムを保存しているとする。この例では、2つのJavaプログラムは同じ識別子「PPV」を持っており、更に動作種別は「1」で共存不可能である。このような場合、POD Lib1205eは、優先度の高いJavaプログラムのみを動作させる。あるいは、両方動作させるが、POD504からのメッセージは優先度の高いJavaプログラムのみに配送する。
図28・図29は、POD Lib1205eにJavaプログラムが登録された場合の、POD Lib1205eの動作をまとめたフローチャートである。POD Lib1205eは、Javaプログラムの登録を受け付ける(ステップS2801)。受け付けた情報を2次記憶部510に保存する(ステップS2802)。既に2次記憶部510に登録されているJavaプログラムと、受け付けたJavaプログラムの識別子を比較し、同じ識別子のJavaプログラムが複数あるかどうか判定する(ステップS2803)。同じ識別子のJavaプログラムがある場合は、図29のステップS2901に進む。同じ識別子のJavaプログラムが無い場合、受け付けたJavaプログラムの動作種別が共存実行可能かどうかしらべる(ステップS2804)。不可能な場合、POD504から、OS1201のライブラリ1201bへのメッセージ配送を停止する(ステップS2805)。その後、受け付けたJavaプログラムへのPOD504からのメッセージ配送を有効にし(ステップS2806)、登録処理を終了する。ステップS2803で、同じ識別子のJavaプログラムがある場合は、複数の同じ識別子のJavaプログラムの動作種別が全て共存実行可能かどうかを調べる(ステップS2901)。共存実行不可能なJavaプログラムがある場合は、受け付けたJavaプログラムの優先度と、既存のJavaプログラムの優先度を比較する(ステップS2902)。受け付けたJavaプログラムの優先度が最も高いときは、POD504から、既存のJavaプログラムへのメッセージ配送を停止し(ステップS2903)、POD504から受け付けたJavaプログラムへのメッセージ配送を有効にする(ステップS2904)。ステップS2901で、全Javaプログラムの動作種別が全て共存実行可能な場合、ステップS2904に進む。ステップS2902で、受け付けたJavaプログラムの優先度が最高で無い場合は既存のJavaプログラムがメッセージを受け続けるため、何もせずに、処理を終了する。
図30、図31、図32は、本動作のフローチャートに基づいて、POD504からのメッセージの配送先の変化を表す模式図である。図30(1)は、Javaプログラムが登録されていない状態を表し、POD504から全てのメッセージがOS1201のライブラリ1201bに配送されている。矢印3001は、メッセージ配送を表す。図30(1)の状態で、Javaプログラムが登録されると、登録されたJavaプログラムの動作種別が共存動作可能な場合、図28のフローチャートを参照して、ステップS2801、S2802、S2803、S2804、S2806の処理が行われ、図30(2)の状態になる。ここで3011は登録されたJavaプログラムであり、矢印3002は、新規に設定されたPOD504からJavaプログラム3011へのメッセージの流れである。厳密には、POD504とJavaプログラムの間には、CPU514やPOD Lib1205eが介在している。登録されたJavaプログラムの動作種別が共存動作不可能な場合、図28のフローチャートを参照して、ステップS2801、S2802、S2803、S2804、S2805、S2806の処理が行われ、図30(3)の状態になる。矢印3001で表されるPOD504からライブラリ1201bのメッセージの流れを停止し、新規POD504からJavaプログラム3011へのメッセージの配送が設定される。
図31(1)は、Javaプログラムが1つ登録され、POD504から全てのメッセージがOS1201のライブラリ1201bと登録されているJavaプログラム3111に配送されている状態を表す。矢印3101と3102は、メッセージ配送を表す。図31(1)の状態で、Javaプログラムが登録されると、登録されたJavaプログラムの動作種別が共存動作可能な場合、図28、図29のフローチャートを参照して、ステップS2801、S2802、S2803、S2901、S2904の処理が行われ、図31(2)の状態になる。ここで3112は登録されたJavaプログラムであり、矢印3103は、新規に設定されたPOD504からJavaプログラム3112へのメッセージの配送を表す。
図32(1)は、Javaプログラムが1つ登録され、POD504から全てのメッセージが登録されているJavaプログラム3211に配送されている状態を表す。Javaプログラム3211は、動作種別が共存実行不可能なため、このような状態になっている。矢印3201は、メッセージ配送を表す。図31(1)の状態で、Javaプログラムが登録されると、登録されたJavaプログラムの動作種別が共存動作可能な場合、既存のJavaプログラム3211と登録されたJavaプログラムの優先度が比較される。登録されたJavaプログラムの優先度が高い場合、図28、図29のフローチャートを参照して、ステップS2801、S2802、S2803、S2901、S2902、S2903、S2904の処理が行われ、図31(2)の状態になる。矢印3201で表されるPOD504からJavaプログラム3211へのメッセージの配送を停止し、新規POD504からJavaプログラム3212へのメッセージの配送が設定される。既存のJavaプログラム3211の優先度が高い場合、図28、図29のフローチャートを参照して、ステップS2801、S2802、S2803、S2901、S2902の処理が行われ、図31(3)の状態になる。メッセージの配送は変わらない。
なお、ステップS2902で既存のJavaプログラムの最高優先度と受け付けたJavaプログラムの優先度が等しい場合、制御をステップS2903に写し、受け付けたJavaプログラムがメッセージを受け取れるようにしてもよい。これは、複数のJavaプログラムの優先度が等しい場合、任意の1つを選び一考することを意味する。
あるいは、複数のJavaプログラムを実行し、複数のJavaプログラムに同じメッセージを送る。この場合は、意図的に複数のJavaプログラムは同じ優先度と識別子が与えられており、お互いの動作を理解し、同時に動作しても問題が起こらないよう実装されているものとする。図33は、複数のJavaプログラムが同じ識別子と優先度を持っている場合の一例である。ここで、POD504からは番組に内容と、料金の情報を送る。行3311のJavaプログラムは料金表示と暗証番号入力の受付を行い、行3312のJavaプログラムは番組内容の表示のみを行うことも実施可能である。
POD Lib1205eは、Javaプログラムの登録を受け付けると共に、削除も受け付ける。図34・図35は、POD Lib1205eがJavaプログラムの登録を削除する場合の、POD Lib1205eの動作をまとめたフローチャートである。POD Lib1205eは、Javaプログラムの削除を受け付ける(ステップS3401)。2次記憶部510より受け付けたJavaプログラムを削除する(ステップS3402)。削除するJavaプログラムが現在、POD504からメッセージを受け取っているかを調べ(ステップS3403)、受け取っていれば、POD504から受け付けたJavaプログラムへのメッセージ配送を無効にする(ステップS3404)。2次記憶部510に同じ識別子のJavaプログラムがあるかどうかを調べ(ステップS3405)、なければPOD504からOS1201のライブラリ1201bへのメッセージ配送を有効にする(ステップS3406)。ステップS3403において、削除するJavaプログラムがPOD504からメッセージを受け取っていなければ、処理を終了する。ステップS3405で、削除するJavaプログラムと同じ識別子のJavaプログラムがある場合は、図35を参照して、全Javaプログラムが共存実行可能かどうかを調べる(ステップS3501)。識別子が等しい共存可能な全てのJavaプログラム及びOS1201のライブラリ1201bへのPOD504からのメッセージ配送を有効にする(ステップS3502)。全Javaプログラムが共存実行でない場合、最高の優先度を持つJavaプログラムを抽出する(ステップS3503)。抽出したJavaプログラムへのPOD504からのメッセージ配送を有効にする(ステップS3504)。
以上のように、本実施の形態によれば、既存のプログラムを削除することなく、一時的にダウンロードしたプログラムを代わりに実行することで、プログラムの更新が可能になると同時に、既存のプログラムを容易に戻すことも可能になる。また、既存のプログラムと同時に実行可能となるようにプログラムをダウンロードして保存することで、既存のプログラムに無い機能を追加することができる。
なお、本実施の形態においては、POD504内のPPVサブプログラム805とJavaプログラムがメッセージ交換を行い、動作を行うこととしているが、PPVに限らず、POD504上のいかなるサブプログラムと、端末装置500上のいかなるJavaプログラムの間でメッセージ交換を行い、動作することに対しても適応可能である。また、JavaプログラムはJavaで記述された部分と、CPUが直接実行できるバイナリ形式の部分の混合でもよいし、CPUが直接実行できるバイナリ形式のみで構成されていても実施可能である。
本実施の形態では、ROM512が保存する内容を2次記憶部510が保存することで、ROM512を削除することも実施可能である。また、2次記憶部510は、複数のサブ2次記憶部で構成し、個々のサブ2次記憶部が異なる情報を保存しても実施可能である。例えば、1つのサブ2次記憶部はチューニング情報のみを保存し、別のサブ2次記憶部は、OS1201のライブラリ1201bを保存し、更に別のサブ2次記憶部は、ダウンロードしたJavaプログラムを保存するなど、詳細に分割することが可能である。
(実施の形態2)
実施の形態1においては、Javaプログラムが登録されると、OS1201のライブラリ1201bや2次記憶部510に既登録のJavaプログラムがPOD504とのメッセージ通信を突然停止されてしまう。例えば、ユーザーがPPV購入処理の途中で、Javaプログラムが登録されると、購買処理が中断され、途中まで入力した暗証番号が無効になる可能性がある。
よって、本実施の形態においては、メッセージ通信を停止されるOS1201のライブラリ1201bや既存のJavaプログラムに対して、事前に通知を行い、了承を得てから停止することとする。具体的には、実施の形態1における動作を表すフローチャートである図28のステップS2805のライブラリ1201bへのメッセージの配送の停止、図29のステップS2903の既存のJavaプログラムへのメッセージ配送停止を図33に記述されたフローチャートに置き換える。
図36を参照して、POD Lib1205eは、メッセージ送信が停止される対象、具体的にはJavaプログラムやOS1201のライブラリ1201bに対して、メッセージ送信が停止することを事前通知する(ステップS3601)。停止通知を受けたJavaプログラムやOS1201のライブラリ1201bは、必要な処理を終了したあと、POD Lib1205eにメッセージ送信の停止の了解を通知する(ステップS3602)。POD Lib1205eはメッセージの送信を停止する(ステップS3603)。
また、POD504上のサブプログラムもメッセージ通知先が変更されることを知らせる必要がある。図37は、POD Lib1205eがPOD504にメッセージ通知先が変更されることを通知する動作を表すフローチャートである。
POD Lib1205eは、POD504に対して、メッセージ送信が停止することを事前通知する(ステップS3701)。停止通知を受けたPOD504は、必要な処理を終了したあと、POD Lib1205eにメッセージ送信の停止の了解を通知する(ステップS3702)。POD Lib1205eはメッセージの送信を停止し(ステップS3703)、新たな配送先を設定する(ステップS3704)。POD Lib1205eは最後に、新たな配送先が設定されたことを、POD504に通知する(ステップS3705)。
また、新たに配送先に設定されたJavaプログラムやOS1201のライブラリ1201bも、設定されたことの通知を受けてもよい。JavaプログラムやOS1201のライブラリ1201bは、POD504からメッセージ受け取るだけでなく、メッセージをPOD504に送る場合もあるからである。具体的には、PPVでユーザーが入力する暗証番号をPOD504に送るなどが挙げられる。メッセージ送信が有効になったことを知ることが出来ると、無駄にメッセージを送る必要がなくなる。
(実施の形態3)
実施の形態1においては、登録されたJavaプログラムを2次記憶部510に保存していたが、1次記憶部511に保存することも実施可能である。
1次記憶部511に保存する場合、電源OFF時に、保存された情報は全て消える。しかしながら、前述の通りXAITに基づきJavaプログラムをダウンロードし実行すると、実行されたJavaプログラムが自身をPOD Lib1205eに登録するので、復元可能である。しかし、この場合、電源投入後しばらくは、OS1201のライブラリ1201bが動作しているため、切り替えが発生する。図38は、端末装置500が電源投入されてから、POD504からのメッセージ配送が変更されるまでの動作を表すフローチャートである。端末装置500に電源が投入されると(ステップS3801)、端末装置500及びPOD504のプログラムが起動され、POD504とライブラリ1201b間にメッセージ配送が確立される(ステップS3802)。AM1205bは、XAIT情報に基づいて、Javaプログラムをダウンロードし、JavaVM1203は、このJavaプログラムを実行する(ステップS3803)。JavaプログラムがPOD504とのメッセージ交換が必要な場合は、自身をPOD Lib1205eに登録する(ステップS3804)。図28、図29で規定されたフローチャートに基づき、メッセージ配送が必要に応じて変更される(ステップS3805)。
一方、実施の形態1のように、登録されたJavaプログラムを2次記憶部510に保存していた場合は、電源投入後から、OS1201のライブラリ1201bの代わりに登録されたJavaプログラムにPOD504からのメッセージが配送される。しかし、前述の通りXAITに基づきJavaプログラムをダウンロードし実行すると、実行されたJavaプログラムが自身をPOD Lib1205eに登録するため、二重登録になる。これを防ぐため、POD Lib1205eは,既に登録されているJavaプログラムの登録は、受け付けないこととする。図39は、端末装置500が電源投入されてから、POD504からのメッセージ配送が変更されるまでの動作を表すフローチャートである。端末装置500に電源が投入されると(ステップS3901)、端末装置500及びPOD504のプログラムが起動され、2次記憶部510が保存された登録情報に基づき、POD504とJavaプログラムあるいはライブラリ1201b間にメッセージ配送が確立される(ステップS3902)。AM1205bは、XAIT情報に基づいて、Javaプログラムをダウンロードし、JavaVM1203は、このJavaプログラムを実行する(ステップS3903)。JavaプログラムがPOD504とのメッセージ交換が必要な場合は、自身をPOD Lib1205eに登録する(ステップS3904)。POD Lib1205eは、2次記憶部510を参照し、既に同じJavaプログラムが登録されているかどうか調べる(ステップS3905)。保存されていなければ、登録処理が行われ、図28、図29で規定されたフローチャートに基づき、メッセージ配送が必要に応じて変更される(ステップS3906)。
なお、実施の形態1、2,3を通して、以下の応用が可能である。
本発明は、パーソナルコンピュータや携帯電話などの情報機器であれば、適応可能である。
また、POD504は着脱可能な形態としているが、内蔵していても実施可能である。なお、内蔵した場合、POD504のCPU706を取り外し、CPU514がCPU706の動作も行うことも実施可能である。
POD Lib1205eに登録されるJavaプログラムは、ダウンロードされたJavaプログラムだけでなく、予め内蔵されているJavaプログラムでも実施可能である。また、SDメモリーカードなどの着脱可能な記憶媒体を着脱するとスロット部を取り付け、そこからJavaプログラムを取り込むことも可能である。また、ネットワークに接続するネットワーク部を取り付け、インターネットからJavaプログラムを取り出すことも可能である。
更に、本実施の形態1〜3では、POD504上の1つのサブプログラムのみが、Javaプログラムにメッセージを配送しているが、2つ以上のサブプログラム及びJavaプログラムが、それぞれ個別にメッセージを配送することも実施可能である。図40は、POD504上の複数のサブプログラム及び複数のJavaプログラム間での、メッセージの配送の一例を示す。POD504にはサブプログラムA4001、サブプログラムB4002、サブプログラムC4003が動作しており、端末装置500上では、JavaプログラムX4011、JavaプログラムY4012、JavaプログラムZ4013が動作している。矢印4021、4022、4023、4024は設定されているメッセージ配送のパスを示す。サブプログラムA4001からJavaプログラムX4011へメッセージ配送のパス4021が設定されており、サブプログラムとJavaプログラムが1対1になっている。一方、サブプログラムB4002は、JavaプログラムY4012、JavaプログラムZ4013の2つのJavaプログラムにメッセージ配送のパスを持つ。逆に、JavaプログラムZ4013は、サブプログラムB4002、サブプログラムC4003の2つのサブプログラムからメッセージを受け取る。
また、この図ではサブプログラムからJavaプログラムにメッセージが配送されているが、Javaプログラムからサブプログラムへメッセージを配送することも実施可能である。また、双方向でメッセージを交換することも可能である。
ここで、メッセージの配送のパスに、メッセージパスIDを割り当て、サブプログラム及びJavaプログラムは、メッセージパスIDを用いて、メッセージの送信相手を特定しても良い。また、Javaプログラムを登録する際、同時に登録するJavaプログラムの識別子の代わりに、このメッセージパスIDを用いても、本発明は実施可能である。競合するJavaプログラムとPOD504上のサブプログラムのメッセージパスに対して、動作種別などを元にメッセージ配送を行うJavaプログラムを特定できる。あるいは、POD504上のサブプログラムを識別するためのサブプログラム識別子を定義し、Javaプログラムを登録する際、同時に登録するJavaプログラムの識別子の代わりに、このサブプログラム識別子を用いても、本発明は実施可能である。
また、メッセージを配送するJavaプログラムを、動作種別を用いて決定していたが、動作種別を用いず、最後に登録されたJavaプログラムを優先する、あるいは、先に登録されたJavaプログラムを優先する等、予め用意された規則に基づいて決定してもよい。
本実施の形態1〜3において、POD Lib1205eに登録されるJavaプログラムの動作とは、メッセージの配送を受けて行う動作を意味している。つまり、Javaプログラムは、メッセージの配送を受けることによって動作する。一方、Javaプログラムは、一般に複数の処理を平行して行うことが可能である。本発明では、メッセージの配送を受けることによって動作する処理以外のJavaプログラムが有するその他の処理に対して、一切制限することなく、実施可能である。
また、上述の実施の形態で説明したようにPOD Lib1205eはメッセージの配送の対象となるJavaプログラムに対するメッセージの配送の登録と共に削除(つまり非登録とすること)も受け付けるようにしている。
図41は、POD Lib1205eにJavaプログラムが登録される場合におけるPOD Lib1205eの動作をまとめたフローチャートである。
POD Lib1205eは、Javaプログラムとのメッセージの配送(送信/受信の少なくとも一方をまたは両方を含む)の登録を受け付けると、2次記憶部510へ必要な情報(例えば図27に示すような情報)を保存し(ステップSX101)、ステップSX101において登録を受け付けたJavaプログラムの識別子と、既に2次記憶部510に登録されている他のJavaプログラムの識別子とを比較することで、登録を受け付けたJavaプログラムの識別子と同じ識別子のJavaプログラムが2次記憶部510にあるかどうか判定する(ステップSX102)。
その結果、同じ識別子のJavaプログラムが2次記憶部510にある場合(つまりステップSX101において登録を受け付けたJavaプログラムと同じ識別子を有する他のJavaプログラムに対しメッセージの配送を受け付ける登録がステップSX101の時点よりも前にPOD Lib1205eによりなされている場合)は(ステップSX102でYes)、POD Lib1205eは、メッセージ送信が停止される対象、具体的には、2次記憶部510に登録されている他のJavaプログラム(つまりステップSX101においてメッセージの配送の登録を受け付けたJavaプログラムと同じ識別子を有し、メッセージの配送を受け付ける登録がなされた他のJavaプログラム)やOS1201のライブラリ1201bに対して、メッセージ送信が停止することを事前通知する(ステップSX103)。停止通知を受けたJavaプログラムやOS1201のライブラリ1201bは、必要な処理(POD504からのメッセージの配送の停止(つまりメッセージの配送の登録を非登録とすること)前に終了すべき必要な内部処理)を終了したあと、POD Lib1205eにメッセージ送信の停止の了解を通知する(ステップSX104)。その了解通知を受けたPOD Lib1205eは、POD504から既存の(2次記憶部510に既に登録されており、POD504からのメッセージの配送の停止の対象となっている)JavaプログラムまたはOS1201のライブラリ1201bとのメッセージ配送の登録を削除(つまり非登録)し、Javaプログラムへのメッセージ配送を停止する(ステップSX105)。そして、ステップSX101において登録を受け付けたJavaプログラムに対しメッセージ配送を開始する旨の通知をした後に(ステップSX106)、ステップSX101において登録を受け付けたJavaプログラムへのPOD504からのメッセージの配送を受け付ける登録を行うことで、メッセージの配送を有効にする(ステップSX107)。
一方、同じ識別子のJavaプログラムが2次記憶部510にない場合は(ステップSX102でNo)、POD Lib1205eは、ステップSX101において登録を受け付けたJavaプログラムに対してメッセージ配送を開始する旨を通知した後に(ステップSX106)、ステップSX101において登録を受け付けたJavaプログラムへのPOD504からのメッセージの配送を受け付ける登録を行うことで、メッセージの配送を有効にする(ステップSX107)。
図42は、POD Lib1205eがJavaプログラムの登録を削除する(つまり2次記憶部510に登録したJavaプログラムとのメッセージの配送の登録を非登録とする)場合におけるPOD Lib1205eの動作をまとめたフローチャートである。
POD Lib1205eは、Javaプログラムの削除を受け付けると(ステップSX201)、削除の対象となるJavaプログラムに対して、メッセージの配送が停止することを事前通知する(ステップSX202)。停止通知を受けたJavaプログラムは、必要な処理(POD504からのメッセージの配送の停止(つまりメッセージの配送の登録を非登録とすること)前に終了すべき必要な内部処理)を終了したあと、POD Lib1205eにメッセージの配送の停止の了解を通知する(ステップSX203)。その了解通知を受けたPOD Lib1205eは、2次記憶部510に登録されたJavaプログラムのうち要求された削除の対象となっているJavaプログラムへのメッセージ配送の登録を削除する(つまり非登録とする)ことにより、POD504から対象となるJavaプログラムへのメッセージ配送を停止する(ステップSX204)。そして、POD Lib1205eは、OS1201のライブラリ1201bに対しPOD504とのメッセージの配送を受け付ける登録を行うことでOS1201のライブラリ1201bとのメッセージの配送を有効にする(ステップSX205)。
また、ステップSX205において2次記憶部510に登録されている他のJavaプログラムまたは新たに登録されたJavaプログラムがありこれらのJavaプログラムのいずれか1つとのメッセージの配送を行いたい(または行える)場合には、POD504と対象となるJavaプログラムとのメッセージの配送を受け付ける登録を行うことで対象となるJavaプログラムとのメッセージの配送を有効にするようにしても良い。更にPOD504とのメッセージの配送において配送の対象となるJavaプログラムとOS1201のライブラリ1201bとが互いに共存しうる(つまり互いに競合しない)ならばOS1201のライブラリ1201bとのメッセージの配送を受け付ける登録を行い、対象となるJavaプログラムとOS1201のライブラリ1201bとにメッセージを配送するようにしても良い。
以上のように、本実施の形態によれば、既存のプログラムを削除することなく、一時的にダウンロードしたプログラムを代わりに実行することで、プログラムの更新(置き換え)が可能になるとともに、既存のプログラムを容易に戻すことも可能となる。