![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Template for LPC1768
Dependencies: Gimbal MLX90620 Socket lwip-eth lwip-sys lwip mbed-rtos mbed
Fork of EkkoEye by
CSerial.cpp@53:72f350a6d09c, 2016-04-14 (annotated)
- Committer:
- Mike
- Date:
- Thu Apr 14 13:45:38 2016 +0100
- Revision:
- 53:72f350a6d09c
DCW
Who changed what in which revision?
User | Revision | Line number | New 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 | } |