更新日：2004/06/01

（注）ERS-7以外のロボット形状に対応して用意された関数です。現在はAIBO Remote Frameworkは、
ERS-7のみの対応となるため、固定値のみを返す関数があります。

■CCpcInfo
【機能】コンストラクタ
【戻り値】なし
【機能説明】内部オブジェクトおよび内部変数の初期化
【形式】

CCpcInfo::CCpcInfo(
                   UINT robot)  // ロボット種別(DESIGN_ERS7)  VAIBO::GetRobotDesign()で取得する


■~CCpcInfo
【機能】デストラクタ
【戻り値】なし
【機能説明】内部オブジェクトおよび内部変数の後処理
【形式】

CCpcInfo::~CCpcInfo()


■GetJointArray
【機能】関節ID配列の取得
【戻り値】関節ID数
【機能説明】そのロボット種別が持つ３Ｄ表示する関節のIDと数を取得する。joint = NULLのときは関節識別子数だけ返す。
            配列に格納される整数値の意味は CpcInfo.h の enum JOINTS_ID {} で分かる。
            バグ; 関節リストにRollが含まれますが、ERS-7 には Roll 関節はありません。
【形式】

int CCpcInfo::GetJointArray(
                                int *joints)  // 関節識別子格納場所


■GetSensorArray
【機能】Primitive Locator ID とセンサー情報の対応テーブルの取得
【戻り値】テーブルの大きさ(Primitive Locator IDの大きさに等しい)
【機能説明】Primitive Locator ID (CpcInfo.h 内 enum SensorID{} で定義) 
    とセンサー情報の対応テーブルを取得する。array = NULL の場合はデータ数のみ返す。
    CCpcInfo::GetJointArray(int *joints) で取得できる関節角度のリストと
    WM_VAIBO_SENSOR_DATA で取得できるセンサー情報のリストの並びが異なるため、
    マッピングテーブルを取得する。
【形式】

int CCpcInfo::GetSensorArray(
                                 int *array)  // テーブル格納場所

【使用例】

class CTestDlg : public CDialog
{
    int     m_sensorArrayNum;       // The number of sensor array
    int     *m_sensorArray;         // Sensor array
    int     m_jointArrayNum;        // The number of sensor array
    int     *m_jointArray;          // Sensor array
    float   *m_angleArray;          // Joint angle array
}

CTestDlg::CTestDlg()
{
    CCpcInfo    cpc(DESIGN_ERS7);

    m_sensorArrayNum = cpc.GetSensorArray(NULL);
    m_sensorArray = (int*)malloc(sizeof(int)*m_sensorArrayNum);
    cpc.GetSensorArray(m_sensorArray);

    int m_jointArrayNum = cpc.GetJointArray(NULL);
    m_jointArray = (int*)malloc(sizeof(int)*m_jointArrayNum);
    cpc.GetJointArray(m_jointArray);

    m_angle = (float*)malloc(sizeof(float)*SENSOR_MAX);
}

ON_REGISTERED_MESSAGE(WM_VAIBO_SENSOR_DATA, OnVAIBOSensorData)

LRESULT CTestDlg::OnVAIBOSensorData( WPARAM wParam, LPARAM recArray )
{
  SensorRec *sensorRecAry = (SensorRec*)recArray
  int numOfData = LOWORD( wParam );
  
  for ( i = 0; i < numOfData; i++ ) {
     int ix = m_sensorArray[sensorRecAry[i].sensorID];
     if ( ix != -1 ) {  // It is information on the joint.
        m_angleArray[ix] = (float)(sensorRecAry[i].value) / 3.141592 * 1000000.0 * 180.0;
     }
  }
  m_aibo3D->RotateJoint( m_jointArray, m_angleArray, SENSOR_MAX, TRUE );
      // m_aibo3D is VAIBO3D class object, it should be constructed before use.
      // See RemoteTest sample to see full set program.
}


■GetPrimitiveLocator
【機能】Primitive Locator ID から Primitive Locator の取得
【戻り値】1：該当するLocatorがある  0：該当するLocatorがない
【機能説明】Primitive Locator ID(CpcInfo.h 内 enum SensorID{} で定義)
            に対応したPrimitive Locatorを char *szLocator に取得する。
            Primitive Locator とは、"PRM:/r1/c1-Joint2:11" のような文字列で、
            OPEN-R SDKでは、AIBOのセンサー、関節をあらわす。
            Primitive Locator は、AIBO Remote Framework でユーザーが使用することはない。
            OPEN-R SDK を理解している人用にPrimitive Locatorを表示させるなどの
            目的で利用できる。

【形式】

int CCpcInfo::GetPrimitiveLocator(
                        int nSensorID,    // Primitive Locator ID(=SensorID)
                        char *szLocator)  // Primitive Locator(128Bytes)

