GPRの読み書き

GPR(General Purpose Register)を読み書きするサンプルコード。

 

GPRは読み書き可能な32bit長のレジスタであり、プレーヤーには4096個存在する(#0-#4095)。
そこに格納された値はHDMV Title、BD-J Titleを問わす保持されるため、主にHDMV TitleとBD-J Titleの間の値のやり取りに使用される。
BD-J Title間の値のやり取りにおいても、Local StorageTitle unbound applicationを使うよりお手軽である。

 

本サンプルは以下のTitle構成で使用することを想定しており、その場合、Top Menuキーを押すたびに画面に表示されるGPR#1の値がインクリメントされる。

 

Main.java

import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
 
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
 
import org.bluray.system.RegisterAccess;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
 
public class Main extends Component implements Xlet {
    String msg = "";
    HScene hs = null;
    public void initXlet(XletContext xc) {
        try {
            hs= HSceneFactory.getInstance().getFullScreenScene(
                    HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
            setBounds(hs.getBounds());
            setFont(new Font(null, Font.BOLD, 72));
            hs.setBackground(Color.black);
            hs.setBackgroundMode(HScene.BACKGROUND_FILL);
            hs.add(this);
            hs.setVisible(true);
            // GPR取得のためのハンドルを取得
            RegisterAccess ra = RegisterAccess.getInstance();
            // GPR#1の値を取得
            int valueOfGPR1 = ra.getGPR(1);
            msg = "GPR#1: "+ valueOfGPR1; hs.repaint()
            // GPR#1に値を設定;
            ra.setGPR(1,  valueOfGPR1+1);
        } catch (Throwable e) {
            msg = e.toString(); hs.repaint();
        }
    }
    public void paint(Graphics g){
        int x = 100, y = 100;
        g.setColor(Color.white);
        g.drawString(msg, x, y); y+=50;
    }
    public void startXlet() {}
    public void pauseXlet() {}
    public void destroyXlet(boolean unconditional) {}
}

 


関連する項目

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください