#ifndef BRICK
#define BRICK
#include <string>
#include "connection.h"
using namespace std;
/**
* Struct used to retriece device info
* @see Brick#get_device_info
*/
struct Device_info_t{
/**
* Brick name (maximum 15 characters)
*/
string name;
/**
* Bluetooth address on the form XX:XX:XX:XX:XX:XX:XX
*/
string bt_address;
/**
* free flash memory in bytes
*/
unsigned int flash_memory;
};
/**
* typedef for Device_info_t
* @see Device_info_t
* @see Brick#get_device_info
*/
typedef Device_info_t Device_info;
/**
* Struct uesd to retriece device version
* @see Device_version_t
* @see Brick#get_device_version
*/
struct Device_version_t{
/**
* The firmware version currently running on the NXT
*/
string firmware;
/**
* The protocol version currently running on the NXT
*/
string protocol;
};
/**
* typedef for Device_version_t
* @see Brick#get_device_version
*/
typedef Device_version_t Device_version;
using namespace std;
/**
* Class to get/set brick name, get/set battery level, R/W to mailbox, start/stop programs, play sound, stop sound ect...
*/
class Brick{
public:
/**
* @param *connection [attach a connection]
*/
Brick(Connection *connection);
/**
* Write a message to the NXT's mailbox
* @param message [string to be send to the inbox (maximum 57 characters)]
* @param inbox [specifies the inbox on the NXT(0-9)]
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void write_msg(string message, int inbox, bool reply=false);
/**
* Read a message from the NXT's mailbox
* @return returns a string from the inbox specified by inbox (maximum 57 characters)
* @param inbox [specifies the inbox on the NXT(0-9)]
* @param remove [true = remove the string from the inbox; false = leave the string in the inbox]
*/
string read_msg(int inbox, bool remove);
/**
* Set the name of the NXT
* @param name [new name of the NXT (maximum 15 characters)]
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void set_name(string name, bool reply=false);
/**
* Keep the NXT alive
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void keep_alive(bool reply=false);
/**
* Make the NXT play a tone
* @param freq [frequency in Hz (200-14000 Hz)]
* @param time [duration in ms]
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void play_tone(unsigned int freq, unsigned int time, bool reply=false);
/**
* Make the NXT beep
* @param time [duration in ms]
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void beep(unsigned int time, bool reply=false);
/**
* Play a soundfile from the NXT's flash
* @param file [file name *.rso (sound file) (maximum 19 characters)]
* @param loop [true = loop sound file indefinitely; false = play file once]
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void play_soundfile(string file, bool loop, bool reply=false);
/**
* Stop all sound playback
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void stop_soundplayback(bool reply=false);
/**
* Start executing a program from the NXT's flash
* @param file [file name *.rxe (downloaded program), *.rpg (On brick programs), *.rtm (Try me programs) (maximum 19 characters)]
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void start_program(string file, bool reply=false);
/**
* Stop executing program
* @param reply [true = require reply from NXT; false = no reply from NXT]
*/
void stop_programs(bool reply=false);
/**
* Get the current executing program
* @return the current executing program (maximum 19 characters)
*/
string get_current_program();
/**
* Get the name of the NXT
* @return the brick name (maximum 15 characters)
*/
string get_name();
/**
* Get the Bluetooth address of the NXT
* @return the BT address on the form XX:XX:XX:XX:XX:XX:XX
*/
string get_bt_address();
/**
* Get the firmware version currently running on the NXT
* @return the firmware version on the form x.xx
*/
string get_firmware_version();
/**
* Get the protocol version currently running on the NXT
* @return the protocol version as on the form x.xxx
*/
string get_protocol_version();
/**
* Get the battery level
* @return the the battery level in mVolts
*/
unsigned int get_battery_level();
/**
* Get free flash memory
* @return the remaining free flash memory in bytes
*/
unsigned int get_flash_memory();
/**
* Retrieve BT-address, brick name and free flash memory with a single call
* @param info [used to store the return values]
*/
void get_device_info(Device_info &info);
/**
* Retrieve Firmware version and Protrocol version with a single call
* @param version [used to store the return values]
*/
void get_device_version(Device_version &version);
private:
Connection *connection;
Device_info info;
Device_version version;
};
#endif