DOC_cpak.jp 3.26 KB

        osPfsInitPak()関数の仕様変更について


1. 従来の問題点

        従来の osPfsInitPak()関数と osPfsRepairId()関数では、振動パッ
        ク等が差し込まれていた場合、PFS_ERR_ID_FATAL というエラーを返
        していました。しかし、この PFS_ERR_ID_FATAL というエラーは、振
        動パック等が差し込まれている場合の他に、コントローラパックの 
        ID 領域の内容が壊れたときにも発生します。

        そのため、現状では、PFS_ERR_ID_FATAL が発生したとき、どちらが
        原因なのか確定することができず、プログラム手順が非常に不明確な
        上、ゲームプレイヤーにとっても非常にわかりにくい状態でした。


2. 今回の修正について

        今回の修正で、振動パックや 64GBパック等、コントローラパック以
        外の機器が差し込まれていた場合、osPfsInitPak()関数と 
        osPfsRepairId()関数は、エラー PFS_ERR_ID_FATAL ではなく、エラー 
        PFS_ERR_DEVICE を返すようにしました。

        内部的には、コントローラパックの RAM のシステム領域のうち、読
        み書きしても問題ないエリアを使用して、読み書きのテストを行って
        います。書いて読んでみて、失敗した場合、RAM が存在しないと見な
        し、エラー PFS_ERR_DEVICE を返しています。


3. 複数の種類のパックの認識手順

        複数の種類のパックを使用する場合、例えば、コントローラパックと
        振動パックの両方を使用するようなアプリケーションでの、パックの
        認識手順は、今回の変更で以下のようになります。

                   osMotorInit()


          +——————+
          |ret = 0     |ret = PFS_ERR_DEVICE
          |            |
          ↓            ↓                                
      振動パック   osPfsInitPak()


          +——————+————————————+
          |ret = 0     |ret = PFS_ERR_DEVICE    |ret = PFS_ERR_ID_FATAL
          |            |                        |
          ↓            ↓                        ↓
     コントローラ   その他の機器          ID 領域が壊れているので、
        パック      (64GBパック等)        ユーザに確認した後、修復
                                            osPfsRepairId()


4. 注意事項

        複数のパックを使用する場合、osPfsRepairId()関数での修復は、
        必ず、osPfsInitPak()の直後に行うようにしてください。
        最初に osPfsInitPak() の呼び出しを行っていても、いったん、
        osMotorInit()関数等、他のパックの初期化関数の呼び出しを行って
        しまうと、 ID の修復を行うことはできませんので、ご注意ください。

        ちなみに、これは osPfsRepairId()関数だけでなく、他の pfs 関数
        でも同様です。このような呼び出しを行うと、エラー 
        PFS_ERR_INVALID が発生します。
        この理由は、osMotorInit()の呼び出しを行ってしまうと、OSPfs 構
        造体の内容が振動パック用に書き換えられてしまうためです。一度、
        osMotorInit()の呼び出しを行った後に、pfs 関数の呼び出しを行う
        場合には、もう一度 osPfsInitPak()関数の呼び出しを行ってくださ
        い。
        
        (注)パックの種類毎に osPfs 構造体を持ち、それぞれのパックの
        関数ごとに使いわけることによって、初期化をいちいちせずに済ませ
        る事が出来るようにように思われるかもしれませんが、予期しない動
        作をする場合があるため、そのような使用方法はしないでください。
        パックが変わる毎に、必ずパックに対応した初期化関数を呼んでくだ
        さい。