//==============================================================================
//  共通のビーコン
//==============================================================================

すれ違い通信で送信しているビーコンデータはこちらです。

///送受信するビーコンデータ
typedef struct
{
  GameServiceID gsid; ///<Game Service ID
  
  u8 member_num:4;      ///<現在の参加人数
  u8 member_max:4;      ///<最大人数
  
  u8 error:1;           ///<エラー状況
  u8 beacon_type:5;     ///<ビーコンの種類 GBS_BEACONN_TYPE
  u8 restrictPhoto:1;   ///<TRUE:写真データ交換に制限がかかっている
  u8 isTwl:1;           ///<TRUE:TWLモードで動作している
  
  u8 intrude_ng:1;      ///<TRUE:乱入禁止
  u8 pad_detect_fold:1; ///<TRUE:DSの蓋を閉じている(PAD_DetectFold)
  u8 padding:6;
  
  u32 trainer_id;
  
  union
  {
    GAMEBEACON_INFO info;
    MYSTATUS intrude_myst;      ///<侵入時のビーコン
    struct MESSAGE_DATA
    {
      u16 word[BEACON_MESSAGE_DATA_WORD_NUM];
      STRCODE name[BEACON_MESSAGE_DATA_NAME_LENGTH];  //8
      
      u8  msgCnt;
      u8  pad[3];
    }bmData;
    struct DUMMY_DATA
    {
      u32 data[8];
    }dummyData;
  };
}GBS_BEACON;

この構造体は「すれ違い用」「侵入用」２つのアプリ共通になっていて、
共用体になっている部分が、それぞれのアプリに特化した独自のビーコンデータになっています。
・GAMEBEACON_INFO info;
  すれ違い用です。

・MYSTATUS intrude_myst;      ///<侵入時のビーコン
  侵入用です。(侵入しようとしている(親)が発信しているビーコンです)

・struct MESSAGE_DATA
  未使用です。

・struct DUMMY_DATA
  未使用です。


//==============================================================================
//  すれ違い用のビーコンデータ
//==============================================================================
GAMEBEACON_INFO構造体がすれ違い画面で表示されたり、アンケートを集計する為の
データです。この中で特筆すべきものはversion_bitです。
version_bitは受信したビーコンデータを受け取っていいバージョン、
受け取ってはいけないバージョン、が記されています。
WBが送信しているビーコンデータのversion_bitは全ビットがONの状態です。
これは上位バージョンであれば受け取った後に、pm_versionを見て、
捨てるなり、必要な箇所だけ受け取るなり、いくらでも対応が可能な為です。
version_bitは上位バージョンから下位バージョンに対して
受け取らせたくない場合に使用するものです。

例えばゾーンIDが上位バージョンで増えた場合、それを
すれ違いでWBが受信してしまうと不正データとなってしまいます。
そこでWBでは受け取るとまずいデータが入っている場合は
version_bitのWBのbitをOFFしておく事で、
WBがビーコンを受信しても、「自分は受け取ってはいけないデータ」と
判断して、そのビーコンを参照しません。(ハイリンクはversion_bitと関係ありません)

//==============================================================================
//  NEXTバージョンでの変更
//==============================================================================
最も素直な形は、
　・ビーコンの構造は変えない(アンケートの内容含む)
　・ゾーンIDやGパワー、行動番号が拡張されてWBが受け取るとまずい場合は
　　version_bitをWBはOFFにしておく、受け取っても良い値が入っている場合は
    version_bitをONにしておく
と、することです。

ビーコンの構造を丸ごと変えてしまうのも一つの手段です。
例えば上位バージョン用のビーコンデータと下位(WB)バージョン用のビーコンデータを
ダブルバッファで保持し、送信ビーコンを一定間隔で切り替える、
という手段が取れます。
version_bitの位置さえ変えなければ、それ以外は丸々上位バージョン用にカスタマイズできます。
上位でゾーンIDが拡張された場合、
  ・上位バージョン用のビーコンバッファにはそのままのゾーンIDを入れる
　・下位(WB)バージョン用のビーコンバッファには、近い場所のゾーンID、自宅に設定しておく。
Gパワーが拡張された場合は
  ・上位バージョンはそのままのGパワーIDを入れる。
　・下位バージョンはGパワーIDを無し扱いにする。
といった手段が取れます。
※下位バージョン用のversion_bitは上位バージョンが受け取らないように、
　上位バージョンのbitをOFFする必要があります。

デメリットとしてビーコンの送信間隔が半分になるため、多少受け取りづらくなることが懸念されます。
どの程度受け取りづらくなるのか検証する必要があります。


//==============================================================================
//  不正データ
//==============================================================================

見知らぬ相手のデータを常に受信している為、
不正な値は厳重にチェックされています。
不正データは基本的にビーコンそのものを参照しないようにしています。
岩澤さんが徹底的にやってくれていますので詳しくは岩澤さんへ。


//==============================================================================
//  常駐配置
//==============================================================================
すれ違いのメインはgame_beacon.cになっています。
このソースにはすれ違い送信データのセット関数なども含まれています。
裏で常に動いているものであり、セットもオーバーレイを気にせず呼び出せる形にしています。
厳密にやればセット関数はオーバーレイ化可能ですが、
デバッグ時に相当気にする必要が出てきますので、オススメしません。


//==============================================================================
//  Gパワーの拡張
//==============================================================================
Gパワーは自分だけで使用するものではなく、
自分が使用するとすれ違いのビーコンにも載せられます。
その為、下位バージョンであるWBにも影響が発生します。
Gパワーを拡張した場合、「NEXTバージョンでの変更」に従った処理も
同時に実装してください。
