Shows problem with holding down enter/return in terminal that causes MODSERIAL to backlog characters .

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #define True 1
00002 #define False 0
00003 #include "mbed.h"
00004 #include "MODSERIAL.h"
00005 
00006 
00007 
00008 MODSERIAL pc(USBTX,USBRX,512);
00009 Ticker tmer;
00010 DigitalOut rUSB(p14);
00011 
00012 
00013 float FirmVer=1.6;
00014 char buf[513];
00015 volatile int sFlag=0;
00016 int Diagnostic=0;
00017 
00018 
00019 
00020 struct tm t;
00021 time_t seconds;
00022 
00023 int HoldOFF;
00024 
00025 
00026 void update_cfg();
00027 void save_cfg();
00028 void restore_cfg();
00029 void ADCInit();
00030 void DACInit();
00031 void SerialInit();
00032 void EEInit();
00033 void RTCInit();
00034 void ADCint();
00035 void DACwr(int Ch, int Val);
00036 void parse();
00037 
00038 void PIDcalc(int eCh, int sCh, int Cntl);
00039 void SysInit();
00040 
00041 void rxCallback(MODSERIAL_IRQ_INFO *info);
00042 void flushSerialBuffer(void);
00043 extern "C" void HardFault_Handler()
00044 {
00045     pc.printf("Error Hard Fault!\n");
00046     //NVIC_SystemReset();
00047 }
00048 extern "C" void NMI_Handler()
00049 {
00050     pc.printf("Error NMI Fault!\n");
00051     //NVIC_SystemReset();
00052 }
00053 extern "C" void MemManage_Handler()
00054 {
00055     pc.printf("Error MemManage Fault!\n");
00056     //NVIC_SystemReset();
00057 }
00058 extern "C" void BusFault_Handler()
00059 {
00060     pc.printf("Error BusFault Fault!\n");
00061     //NVIC_SystemReset();
00062 }
00063 extern "C" void UsageFault_Handler()
00064 {
00065     pc.printf("Error UsageFault Fault!\n");
00066     //NVIC_SystemReset();
00067 }
00068 
00069 int main()
00070 {
00071     rUSB=1;
00072 
00073     FirmVer=1.6;  //Firmware Version
00074     SerialInit();
00075     SysInit();
00076     RTCInit();
00077     HoldOFF=0;
00078     flushSerialBuffer();
00079 
00080     while (1) {
00081         wait(.1);
00082         if (sFlag==1) {
00083             //  NVIC_DisableIRQ(UART0_IRQn);    //added to fix lockup 9-27-11
00084             int nNum = pc.move(buf,512);
00085             buf[nNum] = '\0';
00086             pc.printf("\n\r%s\n\r",buf);
00087             parse();
00088             sFlag=0;
00089             //  NVIC_EnableIRQ(UART0_IRQn);     //added to fix lockup 9-27-11
00090         }
00091         seconds  = time(NULL);
00092 
00093 
00094     }
00095 }
00096 
00097 void flushSerialBuffer(void)
00098 {
00099     char char1 = 0;
00100     while (pc.readable()) {
00101         char1 = pc.getc();
00102     }
00103     return;
00104 }
00105 
00106 void SysInit()
00107 {
00108 
00109 }
00110 
00111 void RTCInit()
00112 {
00113 
00114     t.tm_sec = 00;    // 0-59
00115     t.tm_min = 00;    // 0-59
00116     t.tm_hour = 12;   // 0-23
00117     t.tm_mday = 12;   // 1-31
00118     t.tm_mon = 5;     // 0-11
00119     t.tm_year = 109;  // year since 1900
00120     seconds = mktime(&t);
00121     set_time(seconds);
00122 
00123 }
00124 
00125 
00126 
00127 
00128 
00129 void ADCint()
00130 {
00131 
00132     if (Diagnostic==0) {
00133         PIDcalc(0, 1, 0);
00134         PIDcalc(2, 3, 1);
00135     }
00136 
00137 }
00138 
00139 void PIDcalc(int eCh, int sCh, int Cntl)
00140 {
00141 
00142 }
00143 
00144 
00145 
00146 void SerialInit()
00147 {
00148     pc.baud(115200);
00149     pc.autoDetectChar('\r');
00150     pc.attach(&rxCallback, MODSERIAL::RxAutoDetect);
00151 
00152 }
00153 
00154 void rxCallback(MODSERIAL_IRQ_INFO *info)
00155 {
00156     sFlag=1;
00157 }
00158 
00159 void parse()
00160 {
00161 
00162     char *pos;
00163     char key[]="Tt";
00164     pos=strpbrk(buf,key);
00165     if (pos) {
00166         //__NVIC_DisableIRQ(UART0_IRQn);
00167         //  pc.printf("%c",0x0c);
00168         pc.printf("hello you pressed T\n\r");
00169         //__NVIC_EnableIRQ(UART0_IRQn);
00170     } else {
00171         char key[]="Rr";
00172         pos=strpbrk(buf,key);
00173         if (pos) {
00174             //__NVIC_DisableIRQ(UART0_IRQn);
00175             //  pc.printf("%c",0x0c);
00176             pc.printf("hello you pressed R\n\r");
00177             //__NVIC_EnableIRQ(UART0_IRQn);
00178         } else {
00179             char key[]="sS";
00180             pos=strpbrk(buf,key);
00181             if (pos) {
00182                 pc.printf("hello you pressed S\n\r");
00183             } else {
00184                 char key[]="pP";
00185                 pos=strpbrk(buf,key);
00186                 if (pos) {
00187                     pc.printf("hello you pressed P\n\r");
00188                 } else {
00189                     char key[]="dD";
00190                     pos=strpbrk(buf,key);
00191                     if (pos) {
00192                         pc.printf("hello you pressed D\n\r");
00193                     } else {
00194                         char key[]="iI";
00195                         pos=strpbrk(buf,key);
00196                         if (pos) {
00197                             pc.printf("hello you pressed I\n\r");
00198                         } else {
00199                             char key[]="qQ";
00200                             pos=strpbrk(buf,key);
00201                             if (pos) {
00202                                 pc.printf("hello you pressed q\n\r");
00203                             } else {
00204                                 //__NVIC_DisableIRQ(UART0_IRQn);
00205                                 pc.printf("\n\rErr. %s\n\r",buf);
00206                                 //__NVIC_EnableIRQ(UART0_IRQn);
00207                             }
00208                         }
00209                     }
00210                 }
00211             }
00212         }
00213     }
00214 }