Template for LPC1768

Dependencies:   Gimbal MLX90620 Socket lwip-eth lwip-sys lwip mbed-rtos mbed

Fork of EkkoEye by EkkoSense

Committer:
gardnmc
Date:
Thu Apr 14 13:02:29 2016 +0000
Revision:
54:aaf6b5ceedd8
Parent:
53:72f350a6d09c
libs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mike 53:72f350a6d09c 1 /*
Mike 53:72f350a6d09c 2 * CSerial.cpp
Mike 53:72f350a6d09c 3 *
Mike 53:72f350a6d09c 4 * Created on: 18 Mar 2016
Mike 53:72f350a6d09c 5 * Author: mike
Mike 53:72f350a6d09c 6 */
Mike 53:72f350a6d09c 7
Mike 53:72f350a6d09c 8 #include "mbed.h"
Mike 53:72f350a6d09c 9 #include "base.h"
Mike 53:72f350a6d09c 10
Mike 53:72f350a6d09c 11 #define MAX_STRLEN 64
Mike 53:72f350a6d09c 12
Mike 53:72f350a6d09c 13 static time_t seconds;
Mike 53:72f350a6d09c 14 extern Serial pc;
Mike 53:72f350a6d09c 15 extern ROTATION rotn;
Mike 53:72f350a6d09c 16
Mike 53:72f350a6d09c 17 /*
Mike 53:72f350a6d09c 18 * Handles the interface to the user via Virtual Comm Port uart class (pc)
Mike 53:72f350a6d09c 19 */
Mike 53:72f350a6d09c 20 char handleSerial(void)
Mike 53:72f350a6d09c 21 {
Mike 53:72f350a6d09c 22 char buffer[MAX_STRLEN];
Mike 53:72f350a6d09c 23 char cmd = '@';
Mike 53:72f350a6d09c 24
Mike 53:72f350a6d09c 25 if (pc.readable()) // Uncomment if using USBSerial class
Mike 53:72f350a6d09c 26 {
Mike 53:72f350a6d09c 27
Mike 53:72f350a6d09c 28 cmd = pc.getc();
Mike 53:72f350a6d09c 29 if (cmd == '.')
Mike 53:72f350a6d09c 30 {
Mike 53:72f350a6d09c 31 pc.printf("Enter your command: ");
Mike 53:72f350a6d09c 32 cmd = pc.getc();
Mike 53:72f350a6d09c 33 pc.printf("%c\r\n", cmd);
Mike 53:72f350a6d09c 34
Mike 53:72f350a6d09c 35 // Between A and z
Mike 53:72f350a6d09c 36 if ((cmd >= '0') && (cmd <= 'z'))
Mike 53:72f350a6d09c 37 {
Mike 53:72f350a6d09c 38
Mike 53:72f350a6d09c 39 switch(cmd)
Mike 53:72f350a6d09c 40 {
Mike 53:72f350a6d09c 41
Mike 53:72f350a6d09c 42 case 'd' : // Get the current time
Mike 53:72f350a6d09c 43 case 'D' :
Mike 53:72f350a6d09c 44 seconds = time(NULL);
Mike 53:72f350a6d09c 45 strftime(buffer, MAX_STRLEN, "%A %d %B:%Y %H:%M:%S\r\n", localtime(&seconds));
Mike 53:72f350a6d09c 46 pc.printf("Time %s", buffer);
Mike 53:72f350a6d09c 47 break;
Mike 53:72f350a6d09c 48
Mike 53:72f350a6d09c 49 case 'G' : // Go (hand control over to the remote server
Mike 53:72f350a6d09c 50 case 'g' :
Mike 53:72f350a6d09c 51 pc.printf("Handing control over to the Server\r\n");
Mike 53:72f350a6d09c 52 break;
Mike 53:72f350a6d09c 53
Mike 53:72f350a6d09c 54 case 'r' : // Initial Set up
Mike 53:72f350a6d09c 55 case 'R' :
Mike 53:72f350a6d09c 56 RotateCmd(&rotn);
Mike 53:72f350a6d09c 57 break;
Mike 53:72f350a6d09c 58
Mike 53:72f350a6d09c 59 case 'S' : // Initial Set up
Mike 53:72f350a6d09c 60 case 's' :
Mike 53:72f350a6d09c 61 setMcTime();
Mike 53:72f350a6d09c 62 break;
Mike 53:72f350a6d09c 63
Mike 53:72f350a6d09c 64 }
Mike 53:72f350a6d09c 65 }
Mike 53:72f350a6d09c 66 }
Mike 53:72f350a6d09c 67 else
Mike 53:72f350a6d09c 68 pc.printf("\r\nType . to enter Command Mode\r\n");
Mike 53:72f350a6d09c 69 pc.printf("\r\n");
Mike 53:72f350a6d09c 70 }
Mike 53:72f350a6d09c 71
Mike 53:72f350a6d09c 72
Mike 53:72f350a6d09c 73 return(cmd);
Mike 53:72f350a6d09c 74 }
Mike 53:72f350a6d09c 75
Mike 53:72f350a6d09c 76
Mike 53:72f350a6d09c 77 int echogets(char* str)
Mike 53:72f350a6d09c 78 {
Mike 53:72f350a6d09c 79 char c=0;
Mike 53:72f350a6d09c 80 int i = 0;
Mike 53:72f350a6d09c 81
Mike 53:72f350a6d09c 82 while ((c != 0x0d) && (c != 0x0a))
Mike 53:72f350a6d09c 83 {
Mike 53:72f350a6d09c 84 c = pc.getc();
Mike 53:72f350a6d09c 85 pc.putc(c); // Echo for user
Mike 53:72f350a6d09c 86 if (i < MAX_STRLEN) // Max string length
Mike 53:72f350a6d09c 87 {
Mike 53:72f350a6d09c 88 str[i++] = c;
Mike 53:72f350a6d09c 89 }
Mike 53:72f350a6d09c 90 }
Mike 53:72f350a6d09c 91 return (i); // Return number of chars read
Mike 53:72f350a6d09c 92
Mike 53:72f350a6d09c 93 }
Mike 53:72f350a6d09c 94
Mike 53:72f350a6d09c 95
Mike 53:72f350a6d09c 96 time_t setMcTime(void)
Mike 53:72f350a6d09c 97 {
Mike 53:72f350a6d09c 98 char buffer[MAX_STRLEN];
Mike 53:72f350a6d09c 99 struct tm *t = {0};
Mike 53:72f350a6d09c 100 time_t systime;
Mike 53:72f350a6d09c 101 int bytecount;
Mike 53:72f350a6d09c 102
Mike 53:72f350a6d09c 103 systime = time(NULL);
Mike 53:72f350a6d09c 104 t = localtime(&systime);
Mike 53:72f350a6d09c 105
Mike 53:72f350a6d09c 106 pc.printf("\r\nSetting the system time...\r\n");
Mike 53:72f350a6d09c 107 pc.printf("Enter the current year (2 digits) [%d]: ", t->tm_year -100 );
Mike 53:72f350a6d09c 108 bytecount=echogets(buffer);
Mike 53:72f350a6d09c 109 if (bytecount > 1)
Mike 53:72f350a6d09c 110 t->tm_year = strtol(buffer, NULL, 10) + 100;
Mike 53:72f350a6d09c 111
Mike 53:72f350a6d09c 112 pc.printf("\r\nEnter the current month (1 to 12) [%d]: ", t->tm_mon +1);
Mike 53:72f350a6d09c 113 bytecount=echogets(buffer);
Mike 53:72f350a6d09c 114 if (bytecount > 1)
Mike 53:72f350a6d09c 115 t->tm_mon = strtol(buffer, NULL, 10) -1;
Mike 53:72f350a6d09c 116
Mike 53:72f350a6d09c 117 pc.printf("\r\nEnter the day of month (1 to 31) [%d]: ", t->tm_mday);
Mike 53:72f350a6d09c 118 bytecount=echogets(buffer);
Mike 53:72f350a6d09c 119 if (bytecount > 1)
Mike 53:72f350a6d09c 120 t->tm_mday = strtol(buffer, NULL, 10);
Mike 53:72f350a6d09c 121
Mike 53:72f350a6d09c 122 pc.printf("\r\nEnter the current hour (00 to 23) [%d]: ", t->tm_hour);
Mike 53:72f350a6d09c 123 bytecount=echogets(buffer);
Mike 53:72f350a6d09c 124 if (bytecount > 1)
Mike 53:72f350a6d09c 125 t->tm_hour = strtol(buffer, NULL, 10);
Mike 53:72f350a6d09c 126
Mike 53:72f350a6d09c 127 pc.printf("\r\nEnter the current minute (0 to 59) [%d]: ", t->tm_min);
Mike 53:72f350a6d09c 128 bytecount=echogets(buffer);
Mike 53:72f350a6d09c 129 if (bytecount > 1)
Mike 53:72f350a6d09c 130 t->tm_min = strtol(buffer, NULL, 10);
Mike 53:72f350a6d09c 131
Mike 53:72f350a6d09c 132 systime = mktime(t);
Mike 53:72f350a6d09c 133
Mike 53:72f350a6d09c 134 if (systime >=0)
Mike 53:72f350a6d09c 135 {
Mike 53:72f350a6d09c 136 strftime(buffer, MAX_STRLEN, "%A %d %B:%Y %H:%M:%S\r\n", localtime(&systime));
Mike 53:72f350a6d09c 137 pc.printf("\r\nSystem Time set to %s\r\n", buffer);
Mike 53:72f350a6d09c 138 set_time(systime);
Mike 53:72f350a6d09c 139 }
Mike 53:72f350a6d09c 140 else
Mike 53:72f350a6d09c 141 pc.printf("Not a valid date and time, system time has NOT been updated\r\n");
Mike 53:72f350a6d09c 142
Mike 53:72f350a6d09c 143 return (systime);
Mike 53:72f350a6d09c 144
Mike 53:72f350a6d09c 145 }
Mike 53:72f350a6d09c 146
Mike 53:72f350a6d09c 147
Mike 53:72f350a6d09c 148 void RotateCmd(ROTATION * protn)
Mike 53:72f350a6d09c 149 {
Mike 53:72f350a6d09c 150 char buffer[MAX_STRLEN];
Mike 53:72f350a6d09c 151 int bytecount;
Mike 53:72f350a6d09c 152
Mike 53:72f350a6d09c 153 pc.printf("Enter the X Angle: ");
Mike 53:72f350a6d09c 154 bytecount=echogets(buffer);
Mike 53:72f350a6d09c 155 if (bytecount > 1)
Mike 53:72f350a6d09c 156 protn->xAngle = strtol(buffer, NULL, 10);
Mike 53:72f350a6d09c 157
Mike 53:72f350a6d09c 158 pc.printf("\r\nEnter the Y Angle: ");
Mike 53:72f350a6d09c 159 bytecount=echogets(buffer);
Mike 53:72f350a6d09c 160 if (bytecount > 1)
Mike 53:72f350a6d09c 161 protn->yAngle = strtol(buffer, NULL, 10);
Mike 53:72f350a6d09c 162 pc.printf("\r\n(X,Y) = %3.1f,%3.1f\r\n", rotn.xAngle, rotn.yAngle);
Mike 53:72f350a6d09c 163 }