# AIBO Remote Framework (for ERS-7) Specification

2005/10/06

# 1. Overview

> AIBO Remote Framework is a Windows PC application development environment which enables you to make software that works on a Windows PC. The software can control an AIBO (ERS-7) via wireless LAN. You can use AIBO Remote Framework with the AIBO MIND 3 "Memory Stick" and ERS-7 robot. An application programmer can make programs using the AIBO Remote Framework API to control AIBO remotely. AIBO Remote Framework (for ERS-7) contains libraries which connect your PC and AIBO (ERS-7) wirelessly allowing you to send and receive data.
> This document describes the AIBO Remote Framework API. First, we are going to explain the overview of the AIBO Remote Framework API. After that we will explain each function of the API.

# 2. Composition

## 2.1 Modules

> In this chapter, we explain the components of AIBO Remote Framework. The application using AIBO Remote Framework uses the following three modules:

> - Application - User application that utilizes AIBO Remote Framework
> - AIBO Remote Framework API - AIBO Remote Framework libraries
> - VirtualAIBO Server - The server program which connects AIBO and the AIBO Remote Framework application

> (Refer Fig. 2.1)

* AIBO Remote Framework is outlined by the red dotted line

Fig 2.1 AIBO Remote Framework Composition

> Multiple AIBOs and PC applications can be connected at the same time. However, in this case there is only one server program.
> The AIBO Remote Framework has four dynamically linked libraries (DLL);

> - VAIBOClient.dll | Connect/Disconnect to AIBO. Enable/Disable FTP, Sensor, Image, and Audio services that are internal AIBO functions. Send commands to AIBO to change posture, walk, etc. The VAIBOClient.dll is called VirtualAIBO Client and the server is called VirtualAIBO Server.

> - AIBO3D.DLL | 3D AIBO model

> - CPCInfo.DLL | Get AIBO's hardware configuration (Robot design)

> - VAIBOUPnP.DLL | Search for AIBO in the network using the UPnP feature

> - VAIBOTTS.dll | TTS(Text to Speech) engine

> Figure 2.2 describes the module structure of these DLLs and AIBO Objects.

Fig 2.2 Module structure diagram

## 2.2 Function List

> AIBO Remote Framework function list

> * Connect/Disconnect the network to AIBO
> Establish a network connection with a PC and AIBO. An IP address is needed to connect to AIBO.

> * Lock/Unlock the connection to the VirtualAIBO Server
> The client application can lock the connection to the VirtualAIBO Server for exclusive control when there are multiple client applications.

> * Control services of AIBO
> Start/Stop services on AIBO. These services are FTP, Sensor, Image, and Audio transmission. You can get the status of each service. If the service is not started, the API's relation with the service will not work. You should start the service before using the API's relation with it.

> * Get semantics data
> Semantics data can be retrieved. Semantics (SemID) are defined in the SemID.h header file. Some semantics also have SubInfo. SubInfo are described in Semantics.txt

> * FTP
> AIBO Remote Framework has FTP functions. The FTP is Memory Mapped FTP (MMFTP), the data is stored in memory. When you play user made contents (MOTION, AUDIO, LED), you should transfer the ODA files from the PC to AIBO using MMFTP. AIBO Remote Framework doesn't have the capability to write files directly to the Memory Stick Media in AIBO.

> * Get Sensor data
> Sensor data can be retrieved.

> * Get Camera Image data
> You can get camera image data from AIBO. The method is described in 3.2.1 Get Image Data

> * Setting Camera parameters
> The properties of AIBO's camera (Exposure, Shutter speed, AE(Auto Exposure), AWB(Auto White Balance)) can be set.

> * Send/Receive Audio Data
> You can transfer audio data from the PC to AIBO and play the audio data through AIBO's speaker. The method is described in 3.2.2 Send Audio Data.
> You can also transfer audio data from AIBO's microphones to the PC. The method is described in 3.2.3 Receive Audio Data.

> * Control Motion
> You can make AIBO play built-in contents that are categorized by Large/Middle/Small values by sending the LMS command. You can make AIBO play built-in contents that are specified by MWCID(Middle Ware Command ID). Some major motions (walk, change posture, change head angle, kick, and heading) are exclusive API functions.

> * Internal/External Control
> AIBO can be controlled internally or externally. In the internal control mode, AIBO cannot receive control commands (ex. changing the head angle, walking, etc.), but you can get semantics data and sensor data.

> * Control Autonomous Objects
> You can start/stop autonomous object services. Autonomous object services are voice recognition, moving object recognition, face detection, face recognition, visual pattern recognition, target object recognition, cliff detection, and self recharging.

> * Display 3D AIBO
> A 3D AIBO model can be displayed using Direct X

> * AIBO Search using UPnP
> AIBO can be searched for by using UPnP (Universal Plug and Play)

> * TTS
> You can use the TTS (Text to Speech) engine and make AIBO speak by converting text to voice (in the PC). You can also make WAVE data by using TTS. (WAVE data cannot be created when you use the Sony TTS engine)

> * Other
> + Get remaining battery level
> + Set AIBO's status when the connection is disconnected
> + Stop motion (when it is playing)
> + Get the local IP address
> + Set AIBO's clock
> + Get the MAC address of AIBO
> + Authenticate by User ID/Password

# 3. VirtualAIBO Client

## 3.1 Sending Messages

### 3.1.1 Between VirtualAIBO Client - VirtualAIBO Server

> In AIBO Remote Framework, data transmission between VirtualAIBO Client and VirtualAIBO Server uses Windows Messaging. In the Fig 2.2, the thick line between VAIBOClient.DLL and VAIBOServer represents Windows Messages. VirtualAIBO Client (*.dll) creates Windows Messages and sends them to the application window.

### 3.1.2 Between Application - VirtualAIBO Client

> The following Windows Messages are sent from the VirtualAIBO Client to the application.

> > (1) WM_VAIBO_CONNECT
> > Description : Establish network connection notification
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : 0
> > (2) WM_VAIBO_DISCONNECT
> > Description : Finished network disconnection notification
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : 0
> > (3) WM_VAIBO_REMOTE_NOTIFY
> > Description : Get changing Internal/External control notification
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : 0 InternalControl 1 ExternalControl
> > (4) WM_VAIBO_SEMANTICS
> > Description : Get semantics message notification
> > wParam : Type of semantics message
> > + Upper word is AIBO ID
> > + Lower word is
> > SEM_STATUS // Condition transition notice
> > SEM_START // Start notice
> > SEM_DONE // End notice
> > SEM_ERROR // Error notice
> > SEM_RESULT // Result notice
> > SEM_FINISHED // // Finished self charging, or finished picking up its AIBone
> > lParam : Message Data (Defined in the VAIBODef.h header file)
> > (Note) Don't call VAIBO class functions that block/wait for a result in functions that process SEM_STATUS, SEM_RESULT, or SEM_FINISHED semantics messages. To send the result and to return from the blocking function, your program must return from the function that is processing the semantics message. But, the blocking function is located in the function that is processing result messages, so the program deadlocks and will not continue. In the following example, the two functions "SendCmd" and "SetRobotObjectMode" block and wait for the result, so this sample will deadlock.
> > // Dead Lock Sample
> > // CVAIBO *m_pVAibo
> > // ON_REGISTERED_MESSAGE(WM_VAIBO_SEMANTICS, OnVAIBOSemantics)
> > LRESULT CBaseClientDlg::OnVAIBOSemantics( WPARAM wParam, LPARAM lParam )
> > {
> > if ( semState == SEM_RESULT )
> > {
> > m_pVAibo->SendCmd( APPCMD_IMAGE_PLAY, TRUE);
> > m_pVAibo->SetRobotObjectMode(eRobotObjectRecognizeObjectPink, eRobotObjectModeStart );
> > }
> > }
> > (5) WM_VAIBO_INPUT_SEMANTICS
> > Description : Get input semantics notification
> > This message is needed to call VAIBO::GetInputSemantics() to get the data
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : 0
> > (6) WM_VAIBO_SENSOR_DATA
> > Description : Get sensor data notification
> > wParam : Upper word is AIBO ID. Lower word is number of sensor data
> > lParam : pointer to SensorRec data
> > (7) WM_VAIBO_PRODUCTID
> > Description : Get ProductID notification
> > This message is needed to call VAIBO::GetProductID() to get the data
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : 0

> > (8) WM_VAIBO_BATTERY_LVL
> > Description : Remaining battery level notification
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : remaining battery level

> > (9) WM_MMFTP_SENDING
> > Description : FTP file transfer notification
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : Data size that is transferred by the ftp service

> > (10) WM_IMAGETP_UPDATE
> > Description : Update image data notification
> > This message is needed to call VAIBO::ImageGetData() to get the image (JPEG) data
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : Received data size

> > (11) WM_AUDIOTP_UPDATE
> > Description : Update audio data notification
> > This message is needed to call VAIBO::AudioGetData() to get the audio (PCM) data
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : Received data size

> > (12) WM_VAIBO_CLIENT_UPDATE
> > Description : Add/Remove client connected to the server notification
> > wParam : Upper word is AIBO ID. Lower word is 1(Add) or 0(Remove)
> > lParam : Windows handle of client

> > (13) WM_VAIBO_LOCK
> > Description : Server lock change notification
> > wParam : Upper word is AIBO ID. Lower word is 0.
> > lParam : 1(Lock) or 0(Unlock)

## 3.2 Shared Memory

> The Shared Memory system is used when data is sent and received between the VirtualAIBO Server and the User application. The data can be Image data, Audio data, and server stored information (Windows handle, sensor data, posture data, AIBO's status, battery level, and semantics). Four shared memory areas are used: Image, Audio (Send), Audio (Receive), and server stored information. Image, Audio (Send), and Audio (Receive) shared memory areas are created when the VirtualAIBO Server is started. Sixteen shared memory areas are created for each type, so the maximum number of AIBO that can be connected to the VirtualAIBO Server is 16.

### 3.2.1 Get Image Data

> (1) VirtualAIBO Server stores image data to the shared memory (Key:VAIBOImageObject*).
> (2) VirtualAIBO Server sends a Windows Message to VirtualAIBO Client.
> (3) VirtualAIBO Client can get the image data from the shared memory (Key:VAIBOImageObject*).
> (4) After getting the image data, Virtual AIBO Client sends a Windows Message (WM_IMAGETP_UPDATE) to the user application.
> (5) When user application receives the Windows Message (WM_IMAGETP_UPDATE) from VirtualAIBO Client, it can retrieve the image data by using the Remote Framework API (VAIBO::ImageGetData). The user application can send the Windows handle to VirtualAIBO Client by using the Remote Framework API (VAIBO::ImageSetWindowHandle). VirtualAIBO Client will automatically draw the image on the window that was sent from the user application.

> (+) VAIBOImageObject* ; "*" specify AIBO's connection ID that is a number from 1 to 16.

### 3.2.2 Send Audio Data

> (1) To send audio data from the PC to AIBO, the user application should call the Remote Framework API (VAIBO::AudioSendData).
> (2) VirtualAIBO Client stores the audio data to the shared memory (Key:VAIBOAudioSendObject*).
> (3) VirtualAIBO Client sends a Windows Message to the VirtualAIBO Server after the audio data has been stored in the shared memory.
> (4) VirtualAIBO Server sends the audio data from the shared memory (Key:VAIBOAudioSendObject*) to AIBO.

> (+) VAIBOAudioSendObject* ; "*" specify AIBO's connection ID that is a number from 1 to 16.

### 3.2.3 Receive Audio Data

> (1) VirtualAIBO Server stores the audio data retrieved from AIBO to the shared memory (Key:VAIBOAudioRecvObject*).
> (2) VirtualAIBO Server sends a Windows Message to the VirtualAIBO Client.
> (3) VirtualAIBO Client can get the audio data from the shared memory (Key:VAIBOAudioRecvObject*).
> (4) VirtualAIBO Client sends a Windows Message (WM_AUDIOTP_UPDATE) to the user application.
> (5) When the user application receives the Windows Message (WM_AUDIOTP_UPDATE), it can retrieve the audio data by using the Remote Framework API (VAIBO::AudioGetData), and process the audio data.

> (+) VAIBOAudioRecvObject* ; "*" specify AIBO's connection ID that is a number from 1 to 16.

### 3.2.4 Get the other Server Stored Information

> The other server stored information (Windows handle, sensor data, posture data, AIBO's status, battery level, and semantics) can be retrieved by using the shared memory system. The process is the same as 3.2.1-3. Data is passed between VirtualAIBO Server and VirtualAIBO Client by using shared memory. The user application can get the data with the same method as getting image and audio data.

# 4. API List

## 4.1 VAIBOClient

> API Name | Function
> CVAIBO::CVAIBO | Constructor
> CVAIBO::~CVAIBO | Destructor
> CVAIBO::Connect | Connect to AIBO
> CVAIBO::Disconnect | Disconnect from AIBO
> CVAIBO::SetLock | Server Lock/Unlock
> CVAIBO::GetProductID | Get AIBO's product ID
> CVAIBO::GetRemoteMACAddress | Get AIBO's MAC address
> CVAIBO::GetRobotDesign | Get the robot design
> CVAIBO::RequestNetService | Request to start the network service
> CVAIBO::SendCmd | Send a command to AIBO
> CVAIBO::PlayMotion | Play a motion that is categorized with Larger/Middle/Small/Level values
> CVAIBO::PlayMotionWithAngle | Play a motion that is categorized with Larger/Middle/Small/Level values and angle parameters
> CVAIBO::IsConnect | Get the network connection status
> CVAIBO::IsLock | Get the server lock/unlock status
> CVAIBO::GetStateSensorTP | Get the Open/Close status of SensorTP
> CVAIBO::GetStateImageTP | Get the Open/Close status of ImageTP
> CVAIBO::GetStateAudioTP | Get the Open/Close status of AudioTP
> CVAIBO::GetStateNetAudio | Get the Open/Close status of NetAudio
> CVAIBO::IsFTPOpen | Get the Open/Close status of the FTP connection
> CVAIBO::GetInputSemantics | Get ImputSemantics data
> CVAIBO::GetSemInfo | Get Semantics information
> CVAIBO::SensorTransferStart | Start data transmission of SensorTP
> CVAIBO::SensorTransferStop | Stop data transmission of SensorTP
> CVAIBO::SensorGetData | Get SensorTP data
> CVAIBO::SensorGetSkipRate | Get the skip rate of SensorTP
> CVAIBO::SensorSetSkipRate | Set the skip rate of SensorTP
> CVAIBO::ImageInit | Initialize the Image object
> CVAIBO::ImageOpen | Start transmitting Image data
> CVAIBO::ImageClose | Stop transmitting Image data
> CVAIBO::ImagePause | Pause transmitting Image data
> CVAIBO::ImageResume | Resume transmitting Image data
> CVAIBO::ImageGetData | Get Image data
> CVAIBO::ImageSetWindowHandle | Set the Windows handle for displaying Image data
> CVAIBO::ImageOutputCaptureData | Take a Picture
> CVAIBO::ImageGetFrameRate | Get the frame rate of Image data transmission
> CVAIBO::CameraSetModeDefault | Set the camera mode to automatic
> CVAIBO::CameraSetModeManual | Set the camera mode to manual settings
> CVAIBO::CameraSetParamExposure | Set camera parameter (exposure)
> CVAIBO::CameraSetParamShutterSpeed | Set camera parameter (shutter speed)
> CVAIBO::CameraSetModeAEAWB | Set camera settings AE(Auto Exposure) and AWB(Auto White Balance)
> CVAIBO::AudioInit | Initialize the Audio object
> CVAIBO::AudioGetOpen | Start receiving Audio data
> CVAIBO::AudioSendOpen | Open the network port for AudioStream
> CVAIBO::AudioSendSetMode | Set AudioMode
> CVAIBO::AudioClose | Stop receiving Audio data
> CVAIBO::AudioGetData | Get Audio data
> CVAIBO::AudioSendData | Send Audio data by AudioStream
> CVAIBO::AudioSendWAVFile | Send Audio data (File) by AudioStream
> CVAIBO::AudioSendPlay | Start playing AudioStream
> CVAIBO::AudioSendStop | Stop playing AudioStream
> CVAIBO::FTPMMSendWAVFile | Send WAVE file by using MMFTP
> CVAIBO::FTPMMSendMWCFile | Send MWC file by using MMFTP
> CVAIBO::FTPMMSendMOTIONFile | Send MOTION file by using MMTFP
> CVAIBO::FTPMMSendAUDIOFile | Send AUDIO file by using MMFTP
> CVAIBO::FTPMMSendLEDFile | Send LED file by using MMFTP
> CVAIBO::UpdateContents | Update contents
> CVAIBO::PlayContents | Play contents
> CVAIBO::DoKick | Kick
> CVAIBO::DoHeader | Header
> CVAIBO::DoWalking | Walk
> CVAIBO::DoApproach | Walk to a target
> CVAIBO::DoGetOffStation | Get off of the station
> CVAIBO::SetPosture | Set posture
> CVAIBO::GetPosture | Get posture
> CVAIBO::GetStatus | Get current status of AIBO
> CVAIBO::ChangeHeadAngle | Move head
> CVAIBO::TurnBody | Turn body
> CVAIBO::MotionStop | Stop motion
> CVAIBO::GetBatteryLevel | Get remaining battery level
> CVAIBO::SetBatteryLevelNotify | Set remaining battery level notification ON/OFF
> CVAIBO::ExternalControl | Make AIBO remotely controlled
> CVAIBO::InternalControl | Make AIBO internally controlled
> CVAIBO::ChangeDisconnectMode | Set AIBO's mode when it is disconnected
> CVAIBO::SetRobotObjectMode | Start/Stop autonomous services
> CVAIBO::SetClock | Set internal clock
> CVAIBO::IsControlReady | Is AIBO controllable?
> CVAIBO::IsRemote | Is AIBO controlled remotely?
> CVAIBO::SetObserverWnd | Set message observer window
> CVAIBO::GetLocalIPAddress | Get Local IP address
> CVAIBO::GetLastCmdID | Get last CmdID
> CVAIBO::GetRobotObjectMode | Get the status of internal objects in AIBO
> CVAIBO::GetProtocolVersion | Get the protocol version of each service
> CVAIBO::DoRobotFunction | Execute an internal AIBO function
> CVAIBO::StopRobotFunction | Stop executing an internal AIBO function
> CVAIBO::VPRSetMode | Set VPR mode
> CVAIBO::VPRTrainModel | Train VPR model
> CVAIBO::VPRRemoveModel | Remove VPR model
> CVAIBO::VPRQueryModel | Query trained VPR model
> CVAIBO::VPRGetImage | Get the training image of a VPR model
> CVAIBO::SetVolume | Set sound volume
> CVAIBO::RequestVolume | Get sound volume
> CVAIBO::SetUserIdPwd | Set user ID and Password
> CVAIBO::GetUserIdPwd | Get user ID and Password
> CVAIBO::ImageGetInfo | Get image recognition setting information
> CVAIBO::ImageGetRecogData | Get image recognition data
> CATPDirectSound::CATPDirectSound | Constructor
> CATPDirectSound::~CATPDirectSound | Destructor
> CATPDirectSound::Init | Initialize class
> CATPDirectSound::StartPlay | Start playing audio
> CATPDirectSound::EndPlay | Stop playing audio
> CATPDirectSound::PlayWaveData | Play wave data
> CATPDirectSound::StartCapture | Start capturing audio
> CATPDirectSound::EndCapture | Stop capturing audio

> Header: The CVAIBO class is defined in VAIBO.h. The CATPDirectSound class is defined in ATPDirectSound.h.
> Library: VAIBOClient.lib
> [+] VAIBOClient uses ijl15.dll

## 4.2 VAIBO3D

> API Name | Function
> CAIBO3D::CAIBO3D | Constructor
> CAIBO3D::~CAIBO3D | Destructor
> CAIBO3D::Create3D | Create an AIBO 3D model
> CAIBO3D::Show | Show/Hide the AIBO 3D model
> CAIBO3D::HomePosition | Move the AIBO 3D model to the home position
> CAIBO3D::RotateBody | Rotate the AIBO 3D model
> CAIBO3D::GetBodyAngle | Get the body angle of the AIBO 3D model
> CAIBO3D::Set3DPosture | Set the posture of the AIBO 3D model
> CAIBO3D::MoveAIBOAnimation | Animation of the AIBO 3D model moving
> CAIBO3D::RotateAIBOAnimation | Animation of the AIBO 3D model rotating
> CAIBO3D::PlayAnimation | Play the animation of the AIBO 3D model
> CAIBO3D::StopAnimation | Stop the animation of the AIBO 3D model
> CAIBO3D::ClearTrack | Clear the motion path data
> CAIBO3D::DrawTrack | Draw the motion path
> CAIBO3D::RotateJoint | Rotate each joint of the AIBO 3D model
> CAIBO3D::SetColor | Set the color of the AIBO 3D model
> CAIBO3D::GetColor | Get the color of the AIBO 3D model
> CAIBO3D::MoveCamera | Move camera view
> CAIBO3D::ZoomCamera | Zoom camera
> CAIBO3D::RotateCamera | Rotate camera
> CAIBO3D::GetCameraPos | Get camera position
> CAIBO3D::GetCameraAngle | Get camera angle
> CAIBO3D::SetLight | Set light
> CAIBO3D::SetFloorTexture | Set floor texture
> CAIBO3D::SetBackTexture | Set background texture
> CAIBO3D::DeleteFloorTexture | Delete floor texture
> CAIBO3D::DeleteBackTexture | Delete background texture
> CAIBO3D::SetLocalRotationX | Set the X-axis rotation of the AIBO 3D model in local coordinates
> CAIBO3D::SetLocalRotationY | Set the Y-axis rotation of the AIBO 3D model in local coordinates
> CAIBO3D::SetLocalRotationZ | Set the Z-axis rotation of the AIBO 3D model in local coordinates
> CAIBO3D::SetLocalRotation | Set the rotation of the AIBO 3D model in local coordinates
> CAIBO3D::SetLocalTransfer | Set the parallel translation of the AIBO 3D model in local coordinates
> CAIBO3D::GetLocalRotation | Get the rotation of the AIBO 3D model in local coordinates
> CAIBO3D::GetLocalTransfer | Get the parallel translation of the AIBO 3D model in local coordinates
> CAIBO3D::ShowCopyModel | Show/Hide a duplicate model
> CAIBO3D::IsShowCopyModel | Get the status (shown/hidden) of the duplicate model
> CAIBO3D::SetCopyModelRotationX | Set the X-axis rotation of the duplicate AIBO 3D model in local coordinates
> CAIBO3D::SetCopyModelRotationY | Set the Y-axis rotation of the duplicate AIBO 3D model in local coordinates
> CAIBO3D::SetCopyModelRotationZ | Set the Z-axis rotation of the duplicate AIBO 3D model in local coordinates
> CAIBO3D::SetCopyModelRotation | Set the rotation of the duplicate AIBO 3D model in local coordinates
> CAIBO3D::SetCopyModelTransfer | Set the parallel translation of the duplicate AIBO 3D model in local coordinates
> CAIBO3D::GetCopyModelRotation | Get the rotation of the duplicate AIBO 3D model in local coordinates
> CAIBO3D::GetCopyModelTransfer | Get the parallel translation of the duplicate AIBO 3D model in local coordinates
> CAIBO3D::IsShowDrawText2D | Get the status (shown/hidden) of the 2D text
> CAIBO3D::ShowDrawText2D | Show/Hide the 2D text
> CAIBO3D::CreateDrawText2DSurface | Create the surface for the 2D text
> CAIBO3D::SetDrawText2DString | Set the string of the 2D text
> CAIBO3D::SetDrawText2DFont | Set the font of the 2D text
> CAIBO3D::SetDrawText2DColor | Set the color of the 2D text
> CAIBO3D::SetDrawText2DBackColor | Set the background color of the 2D text
> CAIBO3D::SetDrawText2DBackTransparent | Set the transparency of the 2D text
> CAIBO3D::SetDrawText2DDrawArea | Set the drawing area of the 2D text
> CAIBO3D::IsShowDrawText3D | Get the status (shown/hidden) of the 3D text
> CAIBO3D::ShowDrawText3D | Show/Hide the 3D text
> CAIBO3D::CreateDrawText3DSurface | Create the surface of the 3D text
> CAIBO3D::SetDrawText3DString | Set the string of the 3D text
> CAIBO3D::SetDrawText3DFont | Set the font of the 3D text
> CAIBO3D::SetDrawText3DColor | Set the color of the 3D text
> CAIBO3D::SetDrawText3DBackColor | Set the background color of the 3D text
> CAIBO3D::SetDrawText3DBackTransparent | Set the transparency of the 3D text
> CAIBO3D::SetDrawText3DBasePoint | Set the base point of the 3D text
> CAIBO3D::SetDrawText3DDrawArea | Set the drawing area of the 3D text
> CAIBO3D::GetVersion | Get the version

> Header: AIBO3D.h.
> Library: AIBO3D.lib

## 4.3 CPCINFO

> API Name | Function
> CCpcInfo::CCpcInfo | Constructor
> CCpcInfo::~CCpcInfo | Destructor
> CCpcInfo::GetJointArray | Get the array of joint IDs
> CCpcInfo::GetSensorArray | Get an array of Primitive Locator IDs and sensor data
> CCpcInfo::GetPrimitiveLocator | Get a Primitive Locator

> Header: CpcInfo.h
> Library: CpcInfo.lib

## 4.4 VAIBOUPnP

> API Name | Function
> DiscoveryAIBOByUPnP | Search for AIBO using UPnP

> Header: VAIBOUPnPClient.h
> Library: VAIBOUPnP.lib

## 4.5 VAIBOTTS

> API Name | Function
> CVAIBOTTS::Init | Initialize library
> CVAIBOTTS::End | End library
> CVAIBOTTS::GetTTSEngineNum | Get the number of TTS engines
> CVAIBOTTS::GetTTSEngineName | Get the name of a TTS engine
> CVAIBOTTS::GetTTSEngineKind | Get the type of TTS engine
> CVAIBOTTS::GetVoiceEngine | Get the current TTS engine
> CVAIBOTTS::SetVoiceEngine | Set the current TTS engine
> CVAIBOTTS::Speak | Generate speech from a string using TTS
> CVAIBOTTS::MakeWaveFile | Generate a WAV file from a string using TTS
> CVAIBOTTS::MakePcmData | Generate PCM data from a string using TTS
> CVAIBOTTS::SetVoiceSpeed | Set VOICE speed
> CVAIBOTTS::SetVoicePitch | Set VOICE pitch
> CVAIBOTTS::SetVoiceAccent | Set VOICE accent
> CVAIBOTTS::SetVoiceVolume | Set VOICE volume
> CVAIBOTTS::SetOutputFormat | Set PCM data output format
> CVAIBOTTS::GetVoiceSpeed | Get VOICE speed
> CVAIBOTTS::GetVoicePitch | Get VOICE pitch
> CVAIBOTTS::GetVoiceAccent | Get VOICE accent
> CVAIBOTTS::GetVoiceVolume | Get VOICE volume
> CVAIBOTTS::GetOutputFormat | Get PCM data output format
> CVAIBOTTS::GetWordNumInLexicon | Get the number of registered words in the lexicon
> CVAIBOTTS::GetWordInLexicon | Get a registered word in the lexicon
> CVAIBOTTS::GetPronunciationInLexicon | Get the pronunciation of a registered word in the lexicon
> CVAIBOTTS::GetPartInLexicon | Get a part of a registered word in the lexicon
> CVAIBOTTS::AddWordInLexicon | Add a word to the lexicon
> CVAIBOTTS::DeleteWordInLexicon | Delete a word from the lexicon

> Header: VAIBOTTS.h
> Library: VAIBOTTS.lib

> [+] ssnykp.dll, sony_tts_dll.dll, ssnykp.dll, udlib.dll, posattr.dll, and uwkanjidll.dll are used in CAIBOTTS.