DOC_cpak.pc
3.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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 構造体を持ち、それぞれのパックの
関数ごとに使いわけることによって、初期化をいちいちせずに済ませ
る事が出来るようにように思われるかもしれませんが、予期しない動
作をする場合があるため、そのような使用方法はしないでください。
パックが変わる毎に、必ずパックに対応した初期化関数を呼んでくだ
さい。