Peter Cooper
/
diags
test code for our MBED board
main.cpp@1:6877bb99aa17, 2011-05-04 (annotated)
- Committer:
- lolpcc
- Date:
- Wed May 04 08:30:52 2011 +0000
- Revision:
- 1:6877bb99aa17
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lolpcc | 1:6877bb99aa17 | 1 | #include "mbed.h" |
lolpcc | 1:6877bb99aa17 | 2 | #include "main.h" |
lolpcc | 1:6877bb99aa17 | 3 | #include "serial.h" |
lolpcc | 1:6877bb99aa17 | 4 | #include "scripting.h" |
lolpcc | 1:6877bb99aa17 | 5 | #include "local_defines.h" |
lolpcc | 1:6877bb99aa17 | 6 | #include "useful.h" |
lolpcc | 1:6877bb99aa17 | 7 | #include "can.h" |
lolpcc | 1:6877bb99aa17 | 8 | #include "led.h" |
lolpcc | 1:6877bb99aa17 | 9 | #include "network.h" |
lolpcc | 1:6877bb99aa17 | 10 | #include "cmd.h" |
lolpcc | 1:6877bb99aa17 | 11 | |
lolpcc | 1:6877bb99aa17 | 12 | /* This file looks after the USB serial code */ |
lolpcc | 1:6877bb99aa17 | 13 | Serial pc(USBTX, USBRX); // tx, rx |
lolpcc | 1:6877bb99aa17 | 14 | |
lolpcc | 1:6877bb99aa17 | 15 | int sys_state = 0; |
lolpcc | 1:6877bb99aa17 | 16 | int net_state = 0; |
lolpcc | 1:6877bb99aa17 | 17 | int set_baud_rate = 0; |
lolpcc | 1:6877bb99aa17 | 18 | int var[MAX_VAR]; |
lolpcc | 1:6877bb99aa17 | 19 | char pwd[0x20]; |
lolpcc | 1:6877bb99aa17 | 20 | char station_id = 0; |
lolpcc | 1:6877bb99aa17 | 21 | |
lolpcc | 1:6877bb99aa17 | 22 | /* This should act as a 'Hard Crash' catcher to the error lights :-) */ |
lolpcc | 1:6877bb99aa17 | 23 | /* See http://mbed.org/forum/helloworld/topic/624/?page=1#comment-3153 */ |
lolpcc | 1:6877bb99aa17 | 24 | extern "C" void HardFault_Handler() { error("Hard Fault!\n"); } |
lolpcc | 1:6877bb99aa17 | 25 | |
lolpcc | 1:6877bb99aa17 | 26 | /* Local Definitions */ |
lolpcc | 1:6877bb99aa17 | 27 | #define WELCOME "Diags for the Mbed System" |
lolpcc | 1:6877bb99aa17 | 28 | |
lolpcc | 1:6877bb99aa17 | 29 | /* Main Code */ |
lolpcc | 1:6877bb99aa17 | 30 | int main() { |
lolpcc | 1:6877bb99aa17 | 31 | char buf[80]; /* Input Buffer */ |
lolpcc | 1:6877bb99aa17 | 32 | int r,l = 0; |
lolpcc | 1:6877bb99aa17 | 33 | |
lolpcc | 1:6877bb99aa17 | 34 | sys_state = TO_USB; |
lolpcc | 1:6877bb99aa17 | 35 | sprintf(pwd,"/local/"); /* set the current directory for the disk functions */ |
lolpcc | 1:6877bb99aa17 | 36 | clear_var(); |
lolpcc | 1:6877bb99aa17 | 37 | exec_profile(); |
lolpcc | 1:6877bb99aa17 | 38 | |
lolpcc | 1:6877bb99aa17 | 39 | // Start RTC |
lolpcc | 1:6877bb99aa17 | 40 | time_t seconds = time(NULL); |
lolpcc | 1:6877bb99aa17 | 41 | if (seconds == (unsigned)-1 || seconds == 0) { |
lolpcc | 1:6877bb99aa17 | 42 | seconds = 1265904000; /* http://www.onlineconversion.com/unix_time.htm */ |
lolpcc | 1:6877bb99aa17 | 43 | set_time(seconds); |
lolpcc | 1:6877bb99aa17 | 44 | lprintf("RTC initialized, start time %d seconds\r\n", seconds); |
lolpcc | 1:6877bb99aa17 | 45 | } |
lolpcc | 1:6877bb99aa17 | 46 | |
lolpcc | 1:6877bb99aa17 | 47 | sys_state = TO_RS232; |
lolpcc | 1:6877bb99aa17 | 48 | |
lolpcc | 1:6877bb99aa17 | 49 | lprintf("\n%s\n\n",WELCOME); |
lolpcc | 1:6877bb99aa17 | 50 | lprintf("CMD >"); |
lolpcc | 1:6877bb99aa17 | 51 | sys_state = TO_USB; |
lolpcc | 1:6877bb99aa17 | 52 | lprintf("\n%s\n\n",WELCOME); |
lolpcc | 1:6877bb99aa17 | 53 | lprintf("CMD >"); |
lolpcc | 1:6877bb99aa17 | 54 | |
lolpcc | 1:6877bb99aa17 | 55 | can_init(); /* Setup the can bus ready for use */ |
lolpcc | 1:6877bb99aa17 | 56 | |
lolpcc | 1:6877bb99aa17 | 57 | // sys_state = TO_RS232; |
lolpcc | 1:6877bb99aa17 | 58 | sys_state = TO_USB; |
lolpcc | 1:6877bb99aa17 | 59 | |
lolpcc | 1:6877bb99aa17 | 60 | while (1) { |
lolpcc | 1:6877bb99aa17 | 61 | r = 0; |
lolpcc | 1:6877bb99aa17 | 62 | while(r==0){ |
lolpcc | 1:6877bb99aa17 | 63 | if(pc.readable()){ |
lolpcc | 1:6877bb99aa17 | 64 | sys_state = TO_USB; |
lolpcc | 1:6877bb99aa17 | 65 | l = usb_gets(buf,sizeof(buf)); |
lolpcc | 1:6877bb99aa17 | 66 | r = 1; |
lolpcc | 1:6877bb99aa17 | 67 | } else if(rs232_readable()){ |
lolpcc | 1:6877bb99aa17 | 68 | sys_state = TO_RS232; |
lolpcc | 1:6877bb99aa17 | 69 | l = rs232_gets(buf,sizeof(buf)); |
lolpcc | 1:6877bb99aa17 | 70 | r = 2; |
lolpcc | 1:6877bb99aa17 | 71 | } |
lolpcc | 1:6877bb99aa17 | 72 | can_receive(); /* Check for CAN messages */ |
lolpcc | 1:6877bb99aa17 | 73 | if(net_state){ |
lolpcc | 1:6877bb99aa17 | 74 | network_test(); /* Check the network */ |
lolpcc | 1:6877bb99aa17 | 75 | } |
lolpcc | 1:6877bb99aa17 | 76 | } |
lolpcc | 1:6877bb99aa17 | 77 | if(l>2){ |
lolpcc | 1:6877bb99aa17 | 78 | find_cmd(buf); |
lolpcc | 1:6877bb99aa17 | 79 | } |
lolpcc | 1:6877bb99aa17 | 80 | |
lolpcc | 1:6877bb99aa17 | 81 | if (sys_state & TO_USB) |
lolpcc | 1:6877bb99aa17 | 82 | pc_output_string("\n\rCMD > "); |
lolpcc | 1:6877bb99aa17 | 83 | if (sys_state & TO_RS232) |
lolpcc | 1:6877bb99aa17 | 84 | rs232_output_string("\n\rCMD > "); |
lolpcc | 1:6877bb99aa17 | 85 | sys_state = TO_USB; |
lolpcc | 1:6877bb99aa17 | 86 | } |
lolpcc | 1:6877bb99aa17 | 87 | } |
lolpcc | 1:6877bb99aa17 | 88 | /* Local Sub Routines */ |
lolpcc | 1:6877bb99aa17 | 89 | int usb_gets(char *s,int len) |
lolpcc | 1:6877bb99aa17 | 90 | { |
lolpcc | 1:6877bb99aa17 | 91 | char c; |
lolpcc | 1:6877bb99aa17 | 92 | int cnt=0; |
lolpcc | 1:6877bb99aa17 | 93 | |
lolpcc | 1:6877bb99aa17 | 94 | while ((c = pc.getc()) != 0) { |
lolpcc | 1:6877bb99aa17 | 95 | if ((c == 0x0a) || (c==0x0d)) { |
lolpcc | 1:6877bb99aa17 | 96 | pc.putc('\n'); |
lolpcc | 1:6877bb99aa17 | 97 | pc.putc('\r'); |
lolpcc | 1:6877bb99aa17 | 98 | *s++ = '\0'; |
lolpcc | 1:6877bb99aa17 | 99 | return(cnt); /* Return length */ |
lolpcc | 1:6877bb99aa17 | 100 | } else if (c==0x7f) { /* Delete */ |
lolpcc | 1:6877bb99aa17 | 101 | pc.putc(0x08); |
lolpcc | 1:6877bb99aa17 | 102 | pc.putc(0x20); |
lolpcc | 1:6877bb99aa17 | 103 | pc.putc(0x08); |
lolpcc | 1:6877bb99aa17 | 104 | cnt--; |
lolpcc | 1:6877bb99aa17 | 105 | *s--; |
lolpcc | 1:6877bb99aa17 | 106 | } else if (c==0x08) { /* BS */ |
lolpcc | 1:6877bb99aa17 | 107 | pc.putc(0x08); |
lolpcc | 1:6877bb99aa17 | 108 | pc.putc(0x20); |
lolpcc | 1:6877bb99aa17 | 109 | pc.putc(0x08); |
lolpcc | 1:6877bb99aa17 | 110 | cnt--; |
lolpcc | 1:6877bb99aa17 | 111 | *s--; |
lolpcc | 1:6877bb99aa17 | 112 | } else if (c==025) { /* CTRL-U */ |
lolpcc | 1:6877bb99aa17 | 113 | while (cnt!=0) { |
lolpcc | 1:6877bb99aa17 | 114 | pc.putc(0x08); |
lolpcc | 1:6877bb99aa17 | 115 | pc.putc(0x20); |
lolpcc | 1:6877bb99aa17 | 116 | pc.putc(0x08); |
lolpcc | 1:6877bb99aa17 | 117 | cnt--; |
lolpcc | 1:6877bb99aa17 | 118 | *s--; |
lolpcc | 1:6877bb99aa17 | 119 | } |
lolpcc | 1:6877bb99aa17 | 120 | } else { |
lolpcc | 1:6877bb99aa17 | 121 | *s++ = c; |
lolpcc | 1:6877bb99aa17 | 122 | pc.putc(c); |
lolpcc | 1:6877bb99aa17 | 123 | cnt++; |
lolpcc | 1:6877bb99aa17 | 124 | } |
lolpcc | 1:6877bb99aa17 | 125 | } |
lolpcc | 1:6877bb99aa17 | 126 | return(cnt); |
lolpcc | 1:6877bb99aa17 | 127 | } |
lolpcc | 1:6877bb99aa17 | 128 | |
lolpcc | 1:6877bb99aa17 | 129 | void pc_output_string(char *buf) |
lolpcc | 1:6877bb99aa17 | 130 | { |
lolpcc | 1:6877bb99aa17 | 131 | int a = 0; |
lolpcc | 1:6877bb99aa17 | 132 | while(a != strlen(buf)){ |
lolpcc | 1:6877bb99aa17 | 133 | pc.putc(buf[a]); |
lolpcc | 1:6877bb99aa17 | 134 | if(buf[a]=='\n') |
lolpcc | 1:6877bb99aa17 | 135 | pc.putc('\r'); |
lolpcc | 1:6877bb99aa17 | 136 | a++; |
lolpcc | 1:6877bb99aa17 | 137 | } |
lolpcc | 1:6877bb99aa17 | 138 | } |
lolpcc | 1:6877bb99aa17 | 139 | void exec_profile(void) |
lolpcc | 1:6877bb99aa17 | 140 | { |
lolpcc | 1:6877bb99aa17 | 141 | char *a[2] = {"exec","profile.cmd"}; |
lolpcc | 1:6877bb99aa17 | 142 | exec_file(2,a); |
lolpcc | 1:6877bb99aa17 | 143 | } |