Dependencies:   mbed

Committer:
nucho
Date:
Mon Aug 01 14:45:42 2011 +0000
Revision:
1:ab3c75cf5906
Parent:
0:a70ea71286b6

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nucho 0:a70ea71286b6 1 /*******************************************
nucho 0:a70ea71286b6 2 * RTno.cpp
nucho 0:a70ea71286b6 3 * @author Yuki Suga
nucho 0:a70ea71286b6 4 * @copyright Yuki Suga (ysuga.net) Nov, 10th, 2010.
nucho 0:a70ea71286b6 5 * @license LGPLv3
nucho 0:a70ea71286b6 6 *****************************************/
nucho 0:a70ea71286b6 7 /********************************************
nucho 0:a70ea71286b6 8 It changed a little for mbed.
nucho 0:a70ea71286b6 9 The serial buffer is not used.
nucho 0:a70ea71286b6 10 2011/7/27 @nucho
nucho 0:a70ea71286b6 11 ********************************************/
nucho 0:a70ea71286b6 12
nucho 0:a70ea71286b6 13 #include "RTno.h"
nucho 0:a70ea71286b6 14 //#include "WConstants.h"
nucho 0:a70ea71286b6 15 //#include "HardwareSerial.h"
nucho 0:a70ea71286b6 16 #include "ReceivePacket.h"
nucho 0:a70ea71286b6 17 #include "SendPacket.h"
nucho 0:a70ea71286b6 18 #include "Serial.h"
nucho 0:a70ea71286b6 19 #include "mbed.h"
nucho 0:a70ea71286b6 20
nucho 0:a70ea71286b6 21 using namespace RTno;
nucho 0:a70ea71286b6 22
nucho 0:a70ea71286b6 23 config_str conf;
nucho 0:a70ea71286b6 24 exec_cxt_str exec_cxt;
nucho 0:a70ea71286b6 25
nucho 0:a70ea71286b6 26 enum {
nucho 0:a70ea71286b6 27 CREATED='C',
nucho 0:a70ea71286b6 28 INACTIVE='I',
nucho 0:a70ea71286b6 29 ACTIVE='A',
nucho 0:a70ea71286b6 30 ERROR='E',
nucho 0:a70ea71286b6 31 };
nucho 0:a70ea71286b6 32
nucho 0:a70ea71286b6 33 char condition = CREATED;
nucho 0:a70ea71286b6 34 static char packet_buffer[64];
nucho 0:a70ea71286b6 35
nucho 0:a70ea71286b6 36 void RTno::setup() {
nucho 0:a70ea71286b6 37 rtcconf();
nucho 0:a70ea71286b6 38 pc.baud(conf._default.baudrate);
nucho 0:a70ea71286b6 39 }
nucho 0:a70ea71286b6 40
nucho 0:a70ea71286b6 41
nucho 0:a70ea71286b6 42 static const char rtc_ok = RTNO_OK;
nucho 0:a70ea71286b6 43 static const char rtc_error = RTNO_ERROR;
nucho 0:a70ea71286b6 44 #define LP_RTC_OK (&rtc_ok)
nucho 0:a70ea71286b6 45 #define LP_RTC_ERROR (&rtc_error)
nucho 0:a70ea71286b6 46
nucho 0:a70ea71286b6 47
nucho 0:a70ea71286b6 48 int main() {
nucho 0:a70ea71286b6 49 RTno::setup();
nucho 0:a70ea71286b6 50
nucho 0:a70ea71286b6 51 while(1){
nucho 0:a70ea71286b6 52 RTno::loop();
nucho 0:a70ea71286b6 53 }
nucho 0:a70ea71286b6 54 }
nucho 0:a70ea71286b6 55
nucho 0:a70ea71286b6 56 void RTno::loop() {
nucho 0:a70ea71286b6 57 ReceivePacket(packet_buffer);
nucho 0:a70ea71286b6 58
nucho 0:a70ea71286b6 59 switch (condition) {
nucho 0:a70ea71286b6 60 case CREATED:
nucho 0:a70ea71286b6 61 if (packet_buffer[INTERFACE] == INITIALIZE) {
nucho 0:a70ea71286b6 62 if (onInitialize() == RTC_OK) {
nucho 0:a70ea71286b6 63 condition = INACTIVE;
nucho 0:a70ea71286b6 64 SendPacket(INITIALIZE, 1, LP_RTC_OK);
nucho 0:a70ea71286b6 65 } else {
nucho 0:a70ea71286b6 66 condition = ERROR;
nucho 0:a70ea71286b6 67 SendPacket(INITIALIZE, 1, LP_RTC_ERROR);
nucho 0:a70ea71286b6 68 }
nucho 0:a70ea71286b6 69 }
nucho 0:a70ea71286b6 70 break;
nucho 0:a70ea71286b6 71 case ERROR:
nucho 0:a70ea71286b6 72 if (packet_buffer[INTERFACE] == ONERROR) {
nucho 0:a70ea71286b6 73 onError();
nucho 0:a70ea71286b6 74 SendPacket(ONERROR, 1, LP_RTC_OK);
nucho 0:a70ea71286b6 75 } else if (packet_buffer[INTERFACE] == RESET) {
nucho 0:a70ea71286b6 76 if (onReset() == RTC_OK) {
nucho 0:a70ea71286b6 77 condition = INACTIVE;
nucho 0:a70ea71286b6 78 SendPacket(RESET, 1, LP_RTC_OK);
nucho 0:a70ea71286b6 79 } else {
nucho 0:a70ea71286b6 80 condition = ERROR;
nucho 0:a70ea71286b6 81 SendPacket(RESET, 1, LP_RTC_ERROR);
nucho 0:a70ea71286b6 82 }
nucho 0:a70ea71286b6 83 }
nucho 0:a70ea71286b6 84 break;
nucho 0:a70ea71286b6 85 case INACTIVE:
nucho 0:a70ea71286b6 86 if (packet_buffer[INTERFACE] == ACTIVATE) {
nucho 0:a70ea71286b6 87 if (onActivated() == RTC_OK) {
nucho 0:a70ea71286b6 88 condition = ACTIVE;
nucho 0:a70ea71286b6 89 SendPacket(ACTIVATE, 1, LP_RTC_OK);
nucho 0:a70ea71286b6 90 } else {
nucho 0:a70ea71286b6 91 condition = ERROR;
nucho 0:a70ea71286b6 92 SendPacket(ACTIVATE, 1, LP_RTC_ERROR);
nucho 0:a70ea71286b6 93 }
nucho 0:a70ea71286b6 94 }
nucho 0:a70ea71286b6 95 break;
nucho 0:a70ea71286b6 96 case ACTIVE:
nucho 0:a70ea71286b6 97 if (packet_buffer[INTERFACE] == DEACTIVATE) {
nucho 0:a70ea71286b6 98 onDeactivated();
nucho 0:a70ea71286b6 99 condition = INACTIVE;
nucho 0:a70ea71286b6 100 SendPacket(DEACTIVATE, 1, LP_RTC_OK);
nucho 0:a70ea71286b6 101 } else if (packet_buffer[INTERFACE] == EXECUTE) {
nucho 0:a70ea71286b6 102 if (onExecute() == RTC_OK) {
nucho 0:a70ea71286b6 103 SendPacket(EXECUTE, 1, LP_RTC_OK);
nucho 0:a70ea71286b6 104 } else {
nucho 0:a70ea71286b6 105 condition = ERROR;
nucho 0:a70ea71286b6 106 SendPacket(EXECUTE, 1, LP_RTC_ERROR);
nucho 0:a70ea71286b6 107 }
nucho 0:a70ea71286b6 108 }
nucho 0:a70ea71286b6 109 break;
nucho 0:a70ea71286b6 110 default:
nucho 0:a70ea71286b6 111 condition = ERROR;
nucho 0:a70ea71286b6 112 break;
nucho 0:a70ea71286b6 113 }
nucho 0:a70ea71286b6 114
nucho 0:a70ea71286b6 115 if (packet_buffer[INTERFACE] == GET_STATUS) {
nucho 0:a70ea71286b6 116 SendPacket(GET_STATUS, 1, &condition);
nucho 0:a70ea71286b6 117 }
nucho 0:a70ea71286b6 118 }
nucho 0:a70ea71286b6 119
nucho 0:a70ea71286b6 120
nucho 0:a70ea71286b6 121 /*NNN
nucho 0:a70ea71286b6 122 l:TimedLong
nucho 0:a70ea71286b6 123 d:TimedDouble
nucho 0:a70ea71286b6 124 f:TimedFloat
nucho 0:a70ea71286b6 125 L:TimedLongSeq
nucho 0:a70ea71286b6 126 D:TimedDoubleSeq
nucho 0:a70ea71286b6 127 F:TimedFloatSeq
nucho 0:a70ea71286b6 128 */
nucho 0:a70ea71286b6 129
nucho 0:a70ea71286b6 130 void addInPort(InPortBase& Port) {
nucho 0:a70ea71286b6 131 int len = strlen(Port.GetName());
nucho 0:a70ea71286b6 132 char *data = (char*)malloc(len+1);
nucho 0:a70ea71286b6 133 data[0] = Port.GetTypeCode();
nucho 0:a70ea71286b6 134 memcpy(&(data[1]), Port.GetName(), len);
nucho 0:a70ea71286b6 135 SendPacket(ADD_INPORT, len+1, data);
nucho 0:a70ea71286b6 136 ReceivePacket(packet_buffer);
nucho 0:a70ea71286b6 137 free(data);
nucho 0:a70ea71286b6 138 }
nucho 0:a70ea71286b6 139
nucho 0:a70ea71286b6 140 void addOutPort(OutPortBase& Port) {
nucho 0:a70ea71286b6 141 int len = strlen(Port.GetName());
nucho 0:a70ea71286b6 142 char *data = (char*)malloc(len+1);
nucho 0:a70ea71286b6 143 data[0] = Port.GetTypeCode();
nucho 0:a70ea71286b6 144 memcpy(&(data[1]), Port.GetName(), len);
nucho 0:a70ea71286b6 145 SendPacket(ADD_OUTPORT, len+1, data);
nucho 0:a70ea71286b6 146 ReceivePacket(packet_buffer);
nucho 0:a70ea71286b6 147 free(data);
nucho 0:a70ea71286b6 148 }