Treehouse Mbed Team / Mbed 2 deprecated APS_DCM1SL

Dependencies:   mbed

Committer:
mfwic
Date:
Sun Nov 25 01:23:33 2018 +0000
Revision:
2:46faae84b8b0
Parent:
1:9f8583ba2431
Child:
3:d8948c5b2951
Added call to menuRedraw() in main.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mfwic 0:44a3005d4f20 1 #include "mbed.h"
mfwic 0:44a3005d4f20 2 #include "serial.h"
mfwic 0:44a3005d4f20 3 #include "stdio.h"
mfwic 0:44a3005d4f20 4 #include "string.h"
mfwic 0:44a3005d4f20 5 #include "globals.h"
mfwic 1:9f8583ba2431 6 #include "all_io.h"
mfwic 0:44a3005d4f20 7
mfwic 0:44a3005d4f20 8 /************* GLOBAL VARIABLES *****************************/
mfwic 0:44a3005d4f20 9 struct serialStatusBits serialStatus;
mfwic 0:44a3005d4f20 10 char strbuf[100] = {0};
mfwic 0:44a3005d4f20 11 char rxbuf[MAXRXBUF+1] = {0};
mfwic 0:44a3005d4f20 12 volatile unsigned int bufloc = 0;
mfwic 0:44a3005d4f20 13
mfwic 0:44a3005d4f20 14 /************* FORWARD DECLARATIONS *************************/
mfwic 0:44a3005d4f20 15 void Rx_IRQHandler(void);
mfwic 0:44a3005d4f20 16
mfwic 0:44a3005d4f20 17
mfwic 0:44a3005d4f20 18 // set up serial port for 115200 baud
mfwic 2:46faae84b8b0 19 Serial dcm1(USBTX, USBRX, 115200);
mfwic 0:44a3005d4f20 20
mfwic 0:44a3005d4f20 21
mfwic 0:44a3005d4f20 22 // initialize the serial port variables
mfwic 0:44a3005d4f20 23 void initSerial(void)
mfwic 0:44a3005d4f20 24 {
mfwic 0:44a3005d4f20 25 // create the RxIRQ callback
mfwic 2:46faae84b8b0 26 dcm1.attach(&Rx_IRQHandler, Serial::RxIrq);
mfwic 0:44a3005d4f20 27
mfwic 0:44a3005d4f20 28 }
mfwic 0:44a3005d4f20 29
mfwic 0:44a3005d4f20 30
mfwic 0:44a3005d4f20 31 // this is the interrupt request handler (IRQ) for ALL Recoev interrupts
mfwic 0:44a3005d4f20 32 void Rx_IRQHandler(void)
mfwic 0:44a3005d4f20 33 {
mfwic 0:44a3005d4f20 34 // reinit the repeat flag
mfwic 0:44a3005d4f20 35 serialStatus.repeat = FALSE;
mfwic 0:44a3005d4f20 36
mfwic 0:44a3005d4f20 37 // check if the USART1 receive interrupt flag was set
mfwic 2:46faae84b8b0 38 while (dcm1.readable())
mfwic 0:44a3005d4f20 39 {
mfwic 1:9f8583ba2431 40 //led_usb = 0;
mfwic 2:46faae84b8b0 41 rxbuf[bufloc] = dcm1.getc();
mfwic 0:44a3005d4f20 42
mfwic 0:44a3005d4f20 43 if (rxbuf[bufloc] == CR) // check for end of command
mfwic 0:44a3005d4f20 44 {
mfwic 0:44a3005d4f20 45 serialStatus.command = TRUE;
mfwic 0:44a3005d4f20 46 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 47 bufloc = 0;
mfwic 0:44a3005d4f20 48 return;
mfwic 0:44a3005d4f20 49 }
mfwic 0:44a3005d4f20 50 else if (rxbuf[bufloc] == '$') // check for computer command
mfwic 0:44a3005d4f20 51 {
mfwic 0:44a3005d4f20 52 serialStatus.computer = TRUE;
mfwic 0:44a3005d4f20 53 bufloc = 0; // reset the buffer if computer command
mfwic 0:44a3005d4f20 54 }
mfwic 0:44a3005d4f20 55 else if (rxbuf[bufloc] == ')') // check for repeat command
mfwic 0:44a3005d4f20 56 {
mfwic 0:44a3005d4f20 57 serialStatus.repeat = TRUE;
mfwic 0:44a3005d4f20 58 rxbuf[bufloc] = 0;
mfwic 0:44a3005d4f20 59 }
mfwic 0:44a3005d4f20 60
mfwic 0:44a3005d4f20 61 // Echo character back out the serial port
mfwic 0:44a3005d4f20 62 if (!serialStatus.computer)
mfwic 0:44a3005d4f20 63 {
mfwic 2:46faae84b8b0 64 dcm1.putc((unsigned char)rxbuf[bufloc]);
mfwic 0:44a3005d4f20 65 }
mfwic 0:44a3005d4f20 66
mfwic 0:44a3005d4f20 67 // handle backspace
mfwic 0:44a3005d4f20 68 if (rxbuf[bufloc] != 0x08)
mfwic 0:44a3005d4f20 69 {
mfwic 0:44a3005d4f20 70 bufloc++; // increment the location
mfwic 0:44a3005d4f20 71 }
mfwic 0:44a3005d4f20 72 else
mfwic 0:44a3005d4f20 73 {
mfwic 0:44a3005d4f20 74 if (bufloc > 0)
mfwic 0:44a3005d4f20 75 {
mfwic 0:44a3005d4f20 76 rxbuf[--bufloc] = 0; // set to null
mfwic 0:44a3005d4f20 77 }
mfwic 0:44a3005d4f20 78 else
mfwic 0:44a3005d4f20 79 {
mfwic 0:44a3005d4f20 80 rxbuf[bufloc] = 0; // set to null
mfwic 0:44a3005d4f20 81 }
mfwic 0:44a3005d4f20 82 }
mfwic 0:44a3005d4f20 83
mfwic 0:44a3005d4f20 84 // check for overflow
mfwic 0:44a3005d4f20 85 if (bufloc >= MAXRXBUF)
mfwic 0:44a3005d4f20 86 {
mfwic 0:44a3005d4f20 87 bufloc = 0;
mfwic 0:44a3005d4f20 88 rxbuf[0] = 0;
mfwic 0:44a3005d4f20 89 }
mfwic 0:44a3005d4f20 90
mfwic 1:9f8583ba2431 91 //led_usb = 1;
mfwic 0:44a3005d4f20 92 }
mfwic 0:44a3005d4f20 93 }
mfwic 0:44a3005d4f20 94
mfwic 0:44a3005d4f20 95
mfwic 0:44a3005d4f20 96 // sends carriage return and linefeed and prompt character
mfwic 0:44a3005d4f20 97 void sendCRLF(void)
mfwic 0:44a3005d4f20 98 {
mfwic 0:44a3005d4f20 99 char strMenu[30] ={0};
mfwic 0:44a3005d4f20 100 /*
mfwic 0:44a3005d4f20 101 switch(menuType)
mfwic 0:44a3005d4f20 102 {
mfwic 0:44a3005d4f20 103 case MENU_DIFFERENTIAL: strcpy(strMenu,"DIFF"); break;
mfwic 0:44a3005d4f20 104 case MENU_SINGLE: strcpy(strMenu,"SINGLE"); break;
mfwic 0:44a3005d4f20 105 case MENU_DUAL: strcpy(strMenu,"DUAL"); break;
mfwic 0:44a3005d4f20 106 case MENU_INVERT: strcpy(strMenu,"INVERT"); break;
mfwic 0:44a3005d4f20 107 case MENU_SETTINGS: strcpy(strMenu,"SET"); break;
mfwic 0:44a3005d4f20 108 case MENU_SETTINGS_CHAN1: strcpy(strMenu,"SET CHAN1"); break;
mfwic 0:44a3005d4f20 109 case MENU_SETTINGS_CHAN2: strcpy(strMenu,"SET CHAN2"); break;
mfwic 0:44a3005d4f20 110 case MENU_SETTINGS_CLOCK: strcpy(strMenu,"SET CLOCK"); break;
mfwic 0:44a3005d4f20 111 case MENU_CALIBRATE: strcpy(strMenu,"CAL"); break;
mfwic 0:44a3005d4f20 112 case MENU_TEST: strcpy(strMenu,"TEST"); break;
mfwic 0:44a3005d4f20 113 case MENU_MAIN: strcpy(strMenu,"MAIN"); break;
mfwic 0:44a3005d4f20 114 default: strcpy(strMenu,"UNDF"); break;
mfwic 0:44a3005d4f20 115 }
mfwic 0:44a3005d4f20 116 */
mfwic 0:44a3005d4f20 117 // append the CR,LF and the ready character
mfwic 0:44a3005d4f20 118 if(serialStatus.computer)
mfwic 0:44a3005d4f20 119 {
mfwic 0:44a3005d4f20 120 sendSerial("\r");
mfwic 0:44a3005d4f20 121 }
mfwic 0:44a3005d4f20 122 else
mfwic 0:44a3005d4f20 123 {
mfwic 0:44a3005d4f20 124 sprintf(strbuf,"\n\r%s>",strMenu);
mfwic 0:44a3005d4f20 125 sendSerial(strbuf);
mfwic 0:44a3005d4f20 126 // adds a carrot so you know you are talking in terminal
mfwic 0:44a3005d4f20 127 // sendSerial("\n\r>");
mfwic 0:44a3005d4f20 128 }
mfwic 0:44a3005d4f20 129 }
mfwic 0:44a3005d4f20 130
mfwic 1:9f8583ba2431 131 // send buffer to the serial port
mfwic 0:44a3005d4f20 132 void sendSerial(char *buf)
mfwic 0:44a3005d4f20 133 {
mfwic 1:9f8583ba2431 134 //led_usb = 0;
mfwic 2:46faae84b8b0 135 dcm1.printf(buf);
mfwic 1:9f8583ba2431 136 //led_usb = 1;
mfwic 0:44a3005d4f20 137 }
mfwic 0:44a3005d4f20 138
mfwic 1:9f8583ba2431 139 /************************************************************
mfwic 1:9f8583ba2431 140 * Routine: showRangeError
mfwic 1:9f8583ba2431 141 * Input: error -- 0 = in range, 1 = out of range
mfwic 1:9f8583ba2431 142 * Output: none
mfwic 1:9f8583ba2431 143 * Description:
mfwic 1:9f8583ba2431 144 * Sends a floating point number (value) over the serial port
mfwic 1:9f8583ba2431 145 * if it is being retrieved (GET)
mfwic 1:9f8583ba2431 146 *
mfwic 1:9f8583ba2431 147 **************************************************************/
mfwic 1:9f8583ba2431 148 void showRangeError(int intValue, int iBadValue, float fBadValue)
mfwic 1:9f8583ba2431 149 {
mfwic 1:9f8583ba2431 150 if (intValue) sprintf(strbuf, "Out of Range: %d", iBadValue);
mfwic 1:9f8583ba2431 151 else sprintf(strbuf, "Out of Range: %0.3f", fBadValue);
mfwic 1:9f8583ba2431 152
mfwic 1:9f8583ba2431 153 sendSerial(strbuf);
mfwic 1:9f8583ba2431 154 }
mfwic 0:44a3005d4f20 155