test code for our MBED board

Dependencies:   mbed lwip

Committer:
lolpcc
Date:
Wed May 04 08:30:52 2011 +0000
Revision:
1:6877bb99aa17

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }