Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
00001 #include "mbed.h" 00002 #include "parser.h" 00003 #include "string" 00004 #include "list" 00005 00006 Serial pc(USBTX, USBRX); // initialize RS232 via USB 00007 00008 DigitalOut prg_activity_led(LED1); // some LED to show activity 00009 DigitalOut rx_activity_led(LED2); 00010 DigitalOut tx_activity_led(LED3); 00011 DigitalOut message_led(LED4); 00012 00013 // we need some storage for the messages we want to send and receive 00014 string singleSendMessageBuffer; 00015 string singleReceiveMessageBuffer; 00016 // and a buffer for those messages, until they are processed 00017 list<string> sendMessagesBuffer; 00018 list<string> receiveMessagesBuffer; 00019 00020 00021 // Interupt Routine to read in data from serial port 00022 void Rx_interrupt() { 00023 rx_activity_led=!rx_activity_led; 00024 // Loop just in case more than one character is in UART's receive FIFO buffer 00025 while (pc.readable()) { 00026 char c = pc.getc(); 00027 unwrap_protocol(&c, &singleReceiveMessageBuffer, &receiveMessagesBuffer); 00028 // pc.putc(c); // echo 00029 } 00030 return; 00031 } 00032 00033 00034 // Interupt Routine to write out data to serial port 00035 void Tx_interrupt() { 00036 char c; 00037 int finished = WRAP_SEND; 00038 int messageAvailable = !sendMessagesBuffer.empty(); 00039 00040 tx_activity_led=!tx_activity_led; 00041 00042 // Loop to fill more than one character in UART's transmit FIFO buffer 00043 while ( pc.writeable() && messageAvailable && (finished == WRAP_SEND)) { 00044 finished = wrap_protocol( &c, &singleSendMessageBuffer, &sendMessagesBuffer ); 00045 if (finished != WRAP_ABORT) 00046 pc.putc(c); 00047 } 00048 00049 //tx_activity_led=0; 00050 return; 00051 } 00052 00053 00054 int main() { 00055 00056 string sendString; 00057 00058 pc.baud(115200); // other high speed: 921600 00059 00060 // Setup a serial interrupt function to receive data 00061 pc.attach(&Rx_interrupt, Serial::RxIrq); 00062 // Setup a serial interrupt function to transmit data 00063 pc.attach(&Tx_interrupt, Serial::TxIrq); 00064 // enable interrupt 00065 NVIC_EnableIRQ(UART1_IRQn); 00066 00067 set_time(0); // needed to initialize rtc 00068 00069 while (1) { 00070 prg_activity_led = !prg_activity_led; // toggle LED 00071 time_t seconds = time(NULL); // get current time 00072 00073 //printf("Time as a string = %s\r\n", ctime(&seconds)); 00074 00075 if (!receiveMessagesBuffer.empty()) { 00076 //pc.printf("\r\nMessage: %s\r\n", receiveMessagesBuffer.front().c_str()); 00077 00078 sendString = "Message '"; 00079 sendString += receiveMessagesBuffer.front().c_str(); 00080 sendString += "' received at "; 00081 sendString += ctime(&seconds); 00082 sendString += "\r"; 00083 00084 sendMessagesBuffer.push_back(sendString); 00085 receiveMessagesBuffer.pop_front(); 00086 00087 } else { 00088 //sendString = "Hallo Welt!\r\n"; 00089 sendString = ctime(&seconds); 00090 sendString += "\r"; 00091 sendMessagesBuffer.push_back(sendString); 00092 } 00093 00094 00095 // trigger sending interrupt 00096 char c; 00097 int finished = wrap_protocol( &c, &singleSendMessageBuffer, &sendMessagesBuffer ); 00098 if (finished != WRAP_ABORT) 00099 pc.putc(c); 00100 00101 wait(1); // wait and don't flood the RS232 00102 } 00103 }
Generated on Tue Jul 12 2022 23:17:07 by
1.7.2