RTno is communicating library and framework which allows you to make your embedded device capable of communicating with RT-middleware world. RT-middleware is a platform software to realize Robotic system. In RTM, robots are developed by constructing robotics technologies\' elements (components) named RT-component. Therefore, the RTno helps you to create your own RT-component with your mbed and arduino. To know how to use your RTno device, visit here: http://ysuga.net/robot_e/rtm_e/rtc_e/1065?lang=en To know about RT-middleware and RT-component, visit http://www.openrtm.org
Dependencies: EthernetInterface mbed-rtos
main_template.cpp
- Committer:
- ysuga
- Date:
- 2013-08-29
- Revision:
- 7:6c7af1d50fb3
- Parent:
- 2:cd91d780177c
File content as of revision 7:6c7af1d50fb3:
// Set 1 if use this main program.
// I recommend to copy and paste this template to your main.cpp.
// And your main function in your main.cpp generated by server must be deleted.
#if 0
#include "mbed.h"
/**
* RTno_Template.pde
* RTno is RT-middleware and arduino.
*
* Using RTno, arduino device can communicate any RT-components
* through the RTno-proxy component which is launched in PC.
* Connect arduino with USB, and program with RTno library.
* You do not have to define any protocols to establish communication
* between arduino and PC.
*
* Using RTno, you must not define the function "setup" and "loop".
* Those functions are automatically defined in the RTno libarary.
* You, developers, must define following functions:
* int onInitialize(void);
* int onActivated(void);
* int onDeactivated(void);
* int onExecute(void);
* int onError(void);
* int onReset(void);
* These functions are spontaneously called by the RTno-proxy
* RT-component which is launched in the PC.
* @author Yuki Suga
* This code is written/distributed for public-domain.
*/
#include <RTno.h>
/**
* This function is called at first.
* conf._default.baudrate: baudrate of serial communication
* exec_cxt.periodic.type: reserved but not used.
*/
void rtcconf(config_str& conf, exec_cxt_str& exec_cxt) {
// If you want to use Serial Connection, configure below:
conf._default.connection_type = ConnectionTypeSerialUSB; // USBTX & USBRX (In Windows, Driver must be updated.)
//conf._default.connection_type = ConnectionTypeSerial1; // pin9=tx, pin10=rx
//conf._default.connection_type = ConnectionTypeSerial2; // pin13=tx, pin14=rx
//conf._default.connection_type = ConnectionTypeSerial3; // pin28=tx, pin27=rx
conf._default.baudrate = 57600; // This value is required when you select ConnectionTypeSerial*
// If you want to use EthernetTCP, configure below:
//conf._default.connection_type = ConnectionTypeEtherTcp;
//conf._default.port = 23;
//conf._default.mac_address = MACaddr(0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED);
//conf._default.ip_address = IPaddr(192,168,42,100);
//conf._default.subnet_mask = IPaddr(255,255,255,0);
//conf._default.default_gateway = IPaddr(192,168,42,254);
exec_cxt.periodic.type = ProxySynchronousExecutionContext;
//exec_cxt.periodic.type = Timer1ExecutionContext; // onExecute is called by Timer1. Period must be specified by 'rate' option.
exec_cxt.periodic.rate = 100; // [Hz] This option is indispensable when type is Timer*ExecutionContext.
}
/**
* Declaration Division:
*
* DataPort and Data Buffer should be placed here.
*
* available data types are as follows:
* TimedLong
* TimedDouble
* TimedFloat
* TimedLongSeq
* TimedDoubleSeq
* TimedFloatSeq
*
* Please refer following comments. If you need to use some ports,
* uncomment the line you want to declare.
**/
TimedLong in0;
InPort<TimedLong> in0In("in0", in0);
///TimedLong in1;
//InPort<TimedLong> in1In("in1", in1);
//TimedLongSeq in0;
//InPort<TimedLongSeq> in0In("in0", in0);
TimedLong out0;
OutPort<TimedLong> out0Out("out0", out0);
//TimedLongSeq<TimedLongSeq> out0;
//OutPort out0Out("out0", out0);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
DigitalIn sw1(p21);
//////////////////////////////////////////
// on_initialize
//
// This function is called in the initialization
// sequence. The sequence is triggered by the
// PC. When the RTnoRTC is launched in the PC,
// then, this function is remotely called
// through the USB cable.
// In on_initialize, usually DataPorts are added.
//
//////////////////////////////////////////
int RTno::onInitialize() {
/* Data Ports are added in this section.
addInPort(in1In);
addOutPort(out0Out);
addOutPort(out1Out);
*/
addInPort(in0In);
//addInPort(in1In);
addOutPort(out0Out);
led1 = 1;
led2 = 0;
led3 = 0;
led4 = 0;
sw1.mode(PullUp);
// Some initialization (like port direction setting)
// int LED = 13;
// pinMode(LED, OUTPUT);
return RTC_OK;
}
////////////////////////////////////////////
// on_activated
// This function is called when the RTnoRTC
// is activated. When the activation, the RTnoRTC
// sends message to call this function remotely.
// If this function is failed (return value
// is RTC_ERROR), RTno will enter ERROR condition.
////////////////////////////////////////////
int RTno::onActivated() {
// Write here initialization code.
led2 = 1;
led3 = 0;
led4 = 0;
return RTC_OK;
}
/////////////////////////////////////////////
// on_deactivated
// This function is called when the RTnoRTC
// is deactivated.
/////////////////////////////////////////////
int RTno::onDeactivated()
{
// Write here finalization code.
led2 = 0;
led3 = 0;
led4 = 0;
return RTC_OK;
}
//////////////////////////////////////////////
// This function is repeatedly called when the
// RTno is in the ACTIVE condition.
// If this function is failed (return value is
// RTC_ERROR), RTno immediately enter into the
// ERROR condition.r
//////////////////////////////////////////////
int RTno::onExecute() {
/**
* Usage of InPort with premitive type.
*/
if(in0In.isNew()) {
in0In.read();
led4 = in0.data > 0 ? 1 : 0;
}
//if(in1In.isNew()) {
// in1In.read();
// led4 = in1.data;
//}
/**
* Usage of InPort with sequence type
if(in0In.isNew(&in1In)) {
in0In.read();
for(int i = 0;i < in0.data.length;i++) {
long data_buffer = in0.data[i];
}
}
*/
/**
* Usage of OutPort with primitive type.
out0.data = 3.14159;
out0Out.write();
*/
out0.data = sw1;
out0Out.write();
/**
* Usage of OutPort with sequence type.
out0.data.length(3);
out0.data[0] = 1.1;
out0.data[1] = 2.2;
out0.data[2] = 3.3;
out0Out.write();
*/
return RTC_OK;
}
//////////////////////////////////////
// on_error
// This function is repeatedly called when
// the RTno is in the ERROR condition.
// The ERROR condition can be recovered,
// when the RTno is reset.
///////////////////////////////////////
int RTno::onError()
{
return RTC_OK;
}
////////////////////////////////////////
// This function is called when
// the RTno is reset. If on_reset is
// succeeded, the RTno will enter into
// the INACTIVE condition. If failed
// (return value is RTC_ERROR), RTno
// will stay in ERROR condition.ec
///////////////////////////////////////
int RTno::onReset()
{
return RTC_OK;
}
#endif
Yuki Suga