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.
interface.cpp
00001 #include "main.h" 00002 #include "rtos.h" 00003 #include <vector> 00004 #include <algorithm> 00005 00006 std::vector<Signal> recall; 00007 00008 00009 bool get_amplitude (float & amplitude) { 00010 if(!serial.scanf("%f", &litude)) 00011 serial.puts("Invalid amplitude!\r\n"); 00012 else if(!(0 <= amplitude && amplitude <= 3.3f)) 00013 serial.puts("Amplitude not in range [0, 3.3].\r\n"); 00014 else return 1; 00015 return 0; 00016 } 00017 00018 bool get_frequency (float & frequency) { 00019 if(!serial.scanf("%f", &frequency)) 00020 serial.puts("Invalid frequency!\r\n"); 00021 else if(!(0 <= frequency && frequency <= 100000)) 00022 serial.puts("Frequency not in range [0, 100000].\r\n"); 00023 else return 1; 00024 return 0; 00025 } 00026 00027 00028 osThreadId mainThreadId; 00029 00030 void callback_on_input() { 00031 // inform mainThread that there is user input 00032 osSignalSet(mainThreadId, 0x1); 00033 //Thread::wait(1000); // wait 1s 00034 } 00035 00036 void userInterfaceFunc (void const* args) { 00037 mainThreadId = Thread::gettid(); 00038 serial.attach(&callback_on_input); 00039 while(1) { 00040 serial.puts("\r\n"); 00041 serial.puts("Enter signal to generate, in the form:\r\n"); 00042 serial.puts(" * constant <amplitude>\r\n"); 00043 serial.puts(" * sine <amplitude> <frequency>\r\n"); 00044 serial.puts(" * square <amplitude> <frequency>\r\n"); 00045 serial.puts(" * recall <index>\r\n"); 00046 serial.puts(" * clear\r\n"); 00047 00048 char* str = buffer; 00049 Signal signal; 00050 00051 while(1) { 00052 serial.puts("Choice: "); 00053 serial.flush(); 00054 00055 osSignalClear(mainThreadId, 0x1); // ensure thread_signal is cleared 00056 Thread::signal_wait(0x1); // now wait for that thread_signal 00057 serial.scanf("%s", str); // then get the available user input 00058 00059 if(0==strcmp(str, "constant")) { 00060 signal.frequency = 0; 00061 if(get_amplitude(signal.amplitude)) 00062 { signal.type = CONSTANT; break; } 00063 } 00064 else if(0==strcmp(str, "sine")) { 00065 if(get_amplitude(signal.amplitude) 00066 && get_frequency(signal.frequency)) 00067 { signal.type = SINE; break; } 00068 } 00069 else if(0==strcmp(str, "square")) { 00070 if(get_amplitude(signal.amplitude) 00071 && get_frequency(signal.frequency)) 00072 { signal.type = SQUARE; break; } 00073 } 00074 else if(0==strcmp(str, "recall")) { 00075 int i, max = recall.size()-1; 00076 if(!serial.scanf("%d", &i)) 00077 serial.puts("Invalid index!\r\n"); 00078 else if(i<0 || i>max) 00079 serial.printf("Index not in range [0, %d].\r\n", max); 00080 else { signal = recall[i]; break; } 00081 } 00082 else if(0==strcmp(str, "clear")) { 00083 recall.clear(); 00084 serial.puts("Done.\r\n"); 00085 } 00086 else serial.puts("Invalid command!\r\n"); 00087 } 00088 serial.printf("Done: %s.\r\n", signal.c_str(buffer)); 00089 00090 if(std::find(recall.begin(), recall.end(), signal) == recall.end()) // if signal does not already exists 00091 { 00092 serial.printf("Index of signal is %d.\r\n", recall.size()); // then add the new signal 00093 recall.push_back(signal); // and provide its index 00094 } 00095 updateSignal(signal); 00096 serial.puts("----------------------\r\n"); 00097 } 00098 } 00099
Generated on Thu Jul 14 2022 20:41:36 by
1.7.2