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

Committer:
ysuga
Date:
Thu Aug 29 05:29:55 2013 +0000
Revision:
7:6c7af1d50fb3
Parent:
2:cd91d780177c
update v5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ysuga 2:cd91d780177c 1 // Set 1 if use this main program.
ysuga 2:cd91d780177c 2 // I recommend to copy and paste this template to your main.cpp.
ysuga 2:cd91d780177c 3 // And your main function in your main.cpp generated by server must be deleted.
ysuga 2:cd91d780177c 4
ysuga 2:cd91d780177c 5 #if 0
ysuga 2:cd91d780177c 6 #include "mbed.h"
ysuga 2:cd91d780177c 7
ysuga 2:cd91d780177c 8 /**
ysuga 2:cd91d780177c 9 * RTno_Template.pde
ysuga 2:cd91d780177c 10 * RTno is RT-middleware and arduino.
ysuga 2:cd91d780177c 11 *
ysuga 2:cd91d780177c 12 * Using RTno, arduino device can communicate any RT-components
ysuga 2:cd91d780177c 13 * through the RTno-proxy component which is launched in PC.
ysuga 2:cd91d780177c 14 * Connect arduino with USB, and program with RTno library.
ysuga 2:cd91d780177c 15 * You do not have to define any protocols to establish communication
ysuga 2:cd91d780177c 16 * between arduino and PC.
ysuga 2:cd91d780177c 17 *
ysuga 2:cd91d780177c 18 * Using RTno, you must not define the function "setup" and "loop".
ysuga 2:cd91d780177c 19 * Those functions are automatically defined in the RTno libarary.
ysuga 2:cd91d780177c 20 * You, developers, must define following functions:
ysuga 2:cd91d780177c 21 * int onInitialize(void);
ysuga 2:cd91d780177c 22 * int onActivated(void);
ysuga 2:cd91d780177c 23 * int onDeactivated(void);
ysuga 2:cd91d780177c 24 * int onExecute(void);
ysuga 2:cd91d780177c 25 * int onError(void);
ysuga 2:cd91d780177c 26 * int onReset(void);
ysuga 2:cd91d780177c 27 * These functions are spontaneously called by the RTno-proxy
ysuga 2:cd91d780177c 28 * RT-component which is launched in the PC.
ysuga 2:cd91d780177c 29 * @author Yuki Suga
ysuga 2:cd91d780177c 30 * This code is written/distributed for public-domain.
ysuga 2:cd91d780177c 31 */
ysuga 2:cd91d780177c 32
ysuga 2:cd91d780177c 33 #include <RTno.h>
ysuga 2:cd91d780177c 34
ysuga 2:cd91d780177c 35 /**
ysuga 2:cd91d780177c 36 * This function is called at first.
ysuga 2:cd91d780177c 37 * conf._default.baudrate: baudrate of serial communication
ysuga 2:cd91d780177c 38 * exec_cxt.periodic.type: reserved but not used.
ysuga 2:cd91d780177c 39 */
ysuga 2:cd91d780177c 40 void rtcconf(config_str& conf, exec_cxt_str& exec_cxt) {
ysuga 2:cd91d780177c 41 // If you want to use Serial Connection, configure below:
ysuga 2:cd91d780177c 42 conf._default.connection_type = ConnectionTypeSerialUSB; // USBTX & USBRX (In Windows, Driver must be updated.)
ysuga 2:cd91d780177c 43 //conf._default.connection_type = ConnectionTypeSerial1; // pin9=tx, pin10=rx
ysuga 2:cd91d780177c 44 //conf._default.connection_type = ConnectionTypeSerial2; // pin13=tx, pin14=rx
ysuga 2:cd91d780177c 45 //conf._default.connection_type = ConnectionTypeSerial3; // pin28=tx, pin27=rx
ysuga 2:cd91d780177c 46 conf._default.baudrate = 57600; // This value is required when you select ConnectionTypeSerial*
ysuga 2:cd91d780177c 47
ysuga 2:cd91d780177c 48 // If you want to use EthernetTCP, configure below:
ysuga 2:cd91d780177c 49 //conf._default.connection_type = ConnectionTypeEtherTcp;
ysuga 2:cd91d780177c 50 //conf._default.port = 23;
ysuga 2:cd91d780177c 51 //conf._default.mac_address = MACaddr(0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED);
ysuga 2:cd91d780177c 52 //conf._default.ip_address = IPaddr(192,168,42,100);
ysuga 2:cd91d780177c 53 //conf._default.subnet_mask = IPaddr(255,255,255,0);
ysuga 2:cd91d780177c 54 //conf._default.default_gateway = IPaddr(192,168,42,254);
ysuga 2:cd91d780177c 55 exec_cxt.periodic.type = ProxySynchronousExecutionContext;
ysuga 2:cd91d780177c 56 //exec_cxt.periodic.type = Timer1ExecutionContext; // onExecute is called by Timer1. Period must be specified by 'rate' option.
ysuga 2:cd91d780177c 57 exec_cxt.periodic.rate = 100; // [Hz] This option is indispensable when type is Timer*ExecutionContext.
ysuga 2:cd91d780177c 58 }
ysuga 2:cd91d780177c 59
ysuga 2:cd91d780177c 60
ysuga 2:cd91d780177c 61 /**
ysuga 2:cd91d780177c 62 * Declaration Division:
ysuga 2:cd91d780177c 63 *
ysuga 2:cd91d780177c 64 * DataPort and Data Buffer should be placed here.
ysuga 2:cd91d780177c 65 *
ysuga 2:cd91d780177c 66 * available data types are as follows:
ysuga 2:cd91d780177c 67 * TimedLong
ysuga 2:cd91d780177c 68 * TimedDouble
ysuga 2:cd91d780177c 69 * TimedFloat
ysuga 2:cd91d780177c 70 * TimedLongSeq
ysuga 2:cd91d780177c 71 * TimedDoubleSeq
ysuga 2:cd91d780177c 72 * TimedFloatSeq
ysuga 2:cd91d780177c 73 *
ysuga 2:cd91d780177c 74 * Please refer following comments. If you need to use some ports,
ysuga 2:cd91d780177c 75 * uncomment the line you want to declare.
ysuga 2:cd91d780177c 76 **/
ysuga 2:cd91d780177c 77 TimedLong in0;
ysuga 2:cd91d780177c 78 InPort<TimedLong> in0In("in0", in0);
ysuga 2:cd91d780177c 79 ///TimedLong in1;
ysuga 2:cd91d780177c 80 //InPort<TimedLong> in1In("in1", in1);
ysuga 2:cd91d780177c 81 //TimedLongSeq in0;
ysuga 2:cd91d780177c 82 //InPort<TimedLongSeq> in0In("in0", in0);
ysuga 2:cd91d780177c 83
ysuga 2:cd91d780177c 84 TimedLong out0;
ysuga 2:cd91d780177c 85 OutPort<TimedLong> out0Out("out0", out0);
ysuga 2:cd91d780177c 86 //TimedLongSeq<TimedLongSeq> out0;
ysuga 2:cd91d780177c 87 //OutPort out0Out("out0", out0);
ysuga 2:cd91d780177c 88
ysuga 2:cd91d780177c 89 DigitalOut led1(LED1);
ysuga 2:cd91d780177c 90 DigitalOut led2(LED2);
ysuga 2:cd91d780177c 91 DigitalOut led3(LED3);
ysuga 2:cd91d780177c 92 DigitalOut led4(LED4);
ysuga 2:cd91d780177c 93
ysuga 2:cd91d780177c 94 DigitalIn sw1(p21);
ysuga 2:cd91d780177c 95 //////////////////////////////////////////
ysuga 2:cd91d780177c 96 // on_initialize
ysuga 2:cd91d780177c 97 //
ysuga 2:cd91d780177c 98 // This function is called in the initialization
ysuga 2:cd91d780177c 99 // sequence. The sequence is triggered by the
ysuga 2:cd91d780177c 100 // PC. When the RTnoRTC is launched in the PC,
ysuga 2:cd91d780177c 101 // then, this function is remotely called
ysuga 2:cd91d780177c 102 // through the USB cable.
ysuga 2:cd91d780177c 103 // In on_initialize, usually DataPorts are added.
ysuga 2:cd91d780177c 104 //
ysuga 2:cd91d780177c 105 //////////////////////////////////////////
ysuga 2:cd91d780177c 106 int RTno::onInitialize() {
ysuga 2:cd91d780177c 107 /* Data Ports are added in this section.
ysuga 2:cd91d780177c 108
ysuga 2:cd91d780177c 109 addInPort(in1In);
ysuga 2:cd91d780177c 110 addOutPort(out0Out);
ysuga 2:cd91d780177c 111 addOutPort(out1Out);
ysuga 2:cd91d780177c 112 */
ysuga 2:cd91d780177c 113
ysuga 2:cd91d780177c 114 addInPort(in0In);
ysuga 2:cd91d780177c 115 //addInPort(in1In);
ysuga 2:cd91d780177c 116 addOutPort(out0Out);
ysuga 2:cd91d780177c 117 led1 = 1;
ysuga 2:cd91d780177c 118 led2 = 0;
ysuga 2:cd91d780177c 119 led3 = 0;
ysuga 2:cd91d780177c 120 led4 = 0;
ysuga 2:cd91d780177c 121 sw1.mode(PullUp);
ysuga 2:cd91d780177c 122 // Some initialization (like port direction setting)
ysuga 2:cd91d780177c 123 // int LED = 13;
ysuga 2:cd91d780177c 124 // pinMode(LED, OUTPUT);
ysuga 2:cd91d780177c 125
ysuga 2:cd91d780177c 126 return RTC_OK;
ysuga 2:cd91d780177c 127 }
ysuga 2:cd91d780177c 128
ysuga 2:cd91d780177c 129 ////////////////////////////////////////////
ysuga 2:cd91d780177c 130 // on_activated
ysuga 2:cd91d780177c 131 // This function is called when the RTnoRTC
ysuga 2:cd91d780177c 132 // is activated. When the activation, the RTnoRTC
ysuga 2:cd91d780177c 133 // sends message to call this function remotely.
ysuga 2:cd91d780177c 134 // If this function is failed (return value
ysuga 2:cd91d780177c 135 // is RTC_ERROR), RTno will enter ERROR condition.
ysuga 2:cd91d780177c 136 ////////////////////////////////////////////
ysuga 2:cd91d780177c 137 int RTno::onActivated() {
ysuga 2:cd91d780177c 138 // Write here initialization code.
ysuga 2:cd91d780177c 139 led2 = 1;
ysuga 2:cd91d780177c 140 led3 = 0;
ysuga 2:cd91d780177c 141 led4 = 0;
ysuga 2:cd91d780177c 142 return RTC_OK;
ysuga 2:cd91d780177c 143 }
ysuga 2:cd91d780177c 144
ysuga 2:cd91d780177c 145 /////////////////////////////////////////////
ysuga 2:cd91d780177c 146 // on_deactivated
ysuga 2:cd91d780177c 147 // This function is called when the RTnoRTC
ysuga 2:cd91d780177c 148 // is deactivated.
ysuga 2:cd91d780177c 149 /////////////////////////////////////////////
ysuga 2:cd91d780177c 150 int RTno::onDeactivated()
ysuga 2:cd91d780177c 151 {
ysuga 2:cd91d780177c 152 // Write here finalization code.
ysuga 2:cd91d780177c 153 led2 = 0;
ysuga 2:cd91d780177c 154 led3 = 0;
ysuga 2:cd91d780177c 155 led4 = 0;
ysuga 2:cd91d780177c 156 return RTC_OK;
ysuga 2:cd91d780177c 157 }
ysuga 2:cd91d780177c 158
ysuga 2:cd91d780177c 159 //////////////////////////////////////////////
ysuga 2:cd91d780177c 160 // This function is repeatedly called when the
ysuga 2:cd91d780177c 161 // RTno is in the ACTIVE condition.
ysuga 2:cd91d780177c 162 // If this function is failed (return value is
ysuga 2:cd91d780177c 163 // RTC_ERROR), RTno immediately enter into the
ysuga 2:cd91d780177c 164 // ERROR condition.r
ysuga 2:cd91d780177c 165 //////////////////////////////////////////////
ysuga 2:cd91d780177c 166 int RTno::onExecute() {
ysuga 2:cd91d780177c 167 /**
ysuga 2:cd91d780177c 168 * Usage of InPort with premitive type.
ysuga 2:cd91d780177c 169 */
ysuga 2:cd91d780177c 170 if(in0In.isNew()) {
ysuga 2:cd91d780177c 171 in0In.read();
ysuga 2:cd91d780177c 172 led4 = in0.data > 0 ? 1 : 0;
ysuga 2:cd91d780177c 173 }
ysuga 2:cd91d780177c 174
ysuga 2:cd91d780177c 175 //if(in1In.isNew()) {
ysuga 2:cd91d780177c 176 // in1In.read();
ysuga 2:cd91d780177c 177 // led4 = in1.data;
ysuga 2:cd91d780177c 178 //}
ysuga 2:cd91d780177c 179
ysuga 2:cd91d780177c 180 /**
ysuga 2:cd91d780177c 181 * Usage of InPort with sequence type
ysuga 2:cd91d780177c 182 if(in0In.isNew(&in1In)) {
ysuga 2:cd91d780177c 183 in0In.read();
ysuga 2:cd91d780177c 184 for(int i = 0;i < in0.data.length;i++) {
ysuga 2:cd91d780177c 185 long data_buffer = in0.data[i];
ysuga 2:cd91d780177c 186 }
ysuga 2:cd91d780177c 187 }
ysuga 2:cd91d780177c 188 */
ysuga 2:cd91d780177c 189
ysuga 2:cd91d780177c 190 /**
ysuga 2:cd91d780177c 191 * Usage of OutPort with primitive type.
ysuga 2:cd91d780177c 192 out0.data = 3.14159;
ysuga 2:cd91d780177c 193 out0Out.write();
ysuga 2:cd91d780177c 194 */
ysuga 2:cd91d780177c 195 out0.data = sw1;
ysuga 2:cd91d780177c 196 out0Out.write();
ysuga 2:cd91d780177c 197
ysuga 2:cd91d780177c 198 /**
ysuga 2:cd91d780177c 199 * Usage of OutPort with sequence type.
ysuga 2:cd91d780177c 200 out0.data.length(3);
ysuga 2:cd91d780177c 201 out0.data[0] = 1.1;
ysuga 2:cd91d780177c 202 out0.data[1] = 2.2;
ysuga 2:cd91d780177c 203 out0.data[2] = 3.3;
ysuga 2:cd91d780177c 204 out0Out.write();
ysuga 2:cd91d780177c 205 */
ysuga 2:cd91d780177c 206
ysuga 2:cd91d780177c 207 return RTC_OK;
ysuga 2:cd91d780177c 208 }
ysuga 2:cd91d780177c 209
ysuga 2:cd91d780177c 210
ysuga 2:cd91d780177c 211 //////////////////////////////////////
ysuga 2:cd91d780177c 212 // on_error
ysuga 2:cd91d780177c 213 // This function is repeatedly called when
ysuga 2:cd91d780177c 214 // the RTno is in the ERROR condition.
ysuga 2:cd91d780177c 215 // The ERROR condition can be recovered,
ysuga 2:cd91d780177c 216 // when the RTno is reset.
ysuga 2:cd91d780177c 217 ///////////////////////////////////////
ysuga 2:cd91d780177c 218 int RTno::onError()
ysuga 2:cd91d780177c 219 {
ysuga 2:cd91d780177c 220 return RTC_OK;
ysuga 2:cd91d780177c 221 }
ysuga 2:cd91d780177c 222
ysuga 2:cd91d780177c 223 ////////////////////////////////////////
ysuga 2:cd91d780177c 224 // This function is called when
ysuga 2:cd91d780177c 225 // the RTno is reset. If on_reset is
ysuga 2:cd91d780177c 226 // succeeded, the RTno will enter into
ysuga 2:cd91d780177c 227 // the INACTIVE condition. If failed
ysuga 2:cd91d780177c 228 // (return value is RTC_ERROR), RTno
ysuga 2:cd91d780177c 229 // will stay in ERROR condition.ec
ysuga 2:cd91d780177c 230 ///////////////////////////////////////
ysuga 2:cd91d780177c 231 int RTno::onReset()
ysuga 2:cd91d780177c 232 {
ysuga 2:cd91d780177c 233 return RTC_OK;
ysuga 2:cd91d780177c 234 }
ysuga 2:cd91d780177c 235
ysuga 2:cd91d780177c 236
ysuga 2:cd91d780177c 237 #endif