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 "useful.h"
lolpcc 1:6877bb99aa17 3
lolpcc 1:6877bb99aa17 4 #include "led.h" /* Basic On-Board LED driver functions */
lolpcc 1:6877bb99aa17 5 #include "digital.h" /* Test the basic digital I/O of the MBED board */
lolpcc 1:6877bb99aa17 6 #include "analog.h" /* code to do things to the a2d sub system */
lolpcc 1:6877bb99aa17 7 #include "i2c.h" /* basic I2C Functions */
lolpcc 1:6877bb99aa17 8 #include "can.h" /* Basic CAN bus test functions */
lolpcc 1:6877bb99aa17 9 #include "ticker.h" /* Ticker look, flash a led et. al. */
lolpcc 1:6877bb99aa17 10 #include "serial.h" /* Talk to the RS232 line */
lolpcc 1:6877bb99aa17 11 #include "network.h" /* Test code for the TCP/IP network */
lolpcc 1:6877bb99aa17 12 #include "main.h" /* routines in this file */
lolpcc 1:6877bb99aa17 13 #include "breakup.h" /* breakup a string to its bits */
lolpcc 1:6877bb99aa17 14 #include "local_defines.h"
lolpcc 1:6877bb99aa17 15 #include "pca9685_reg.h" /* Needed for the led driver init */
lolpcc 1:6877bb99aa17 16 #include "scripting.h" /* Lets see if we can get a simple scripting system going */
lolpcc 1:6877bb99aa17 17 #include "SNTPClient.h" /* Time handling code */
lolpcc 1:6877bb99aa17 18 #include "SDFileSystem.h" /* Look at the SD card */
lolpcc 1:6877bb99aa17 19 #include "sound.h" /* Test code for the sound I/I system */
lolpcc 1:6877bb99aa17 20
lolpcc 1:6877bb99aa17 21 #include "help_data.h" /* a text file for the command help data */
lolpcc 1:6877bb99aa17 22
lolpcc 1:6877bb99aa17 23 #include "cmd.h"
lolpcc 1:6877bb99aa17 24
lolpcc 1:6877bb99aa17 25
lolpcc 1:6877bb99aa17 26 SDFileSystem sd(p5, p6, p7, p27, "sd");
lolpcc 1:6877bb99aa17 27
lolpcc 1:6877bb99aa17 28 LocalFileSystem local("local");
lolpcc 1:6877bb99aa17 29
lolpcc 1:6877bb99aa17 30 FILE *exec_fp;
lolpcc 1:6877bb99aa17 31
lolpcc 1:6877bb99aa17 32 extern char station_id;
lolpcc 1:6877bb99aa17 33 extern char pwd[0x20];
lolpcc 1:6877bb99aa17 34 extern int set_baud_rate;
lolpcc 1:6877bb99aa17 35 extern int sys_state;
lolpcc 1:6877bb99aa17 36 extern int var[MAX_VAR];
lolpcc 1:6877bb99aa17 37 extern int jmp[MAX_JMP];
lolpcc 1:6877bb99aa17 38
lolpcc 1:6877bb99aa17 39
lolpcc 1:6877bb99aa17 40 /******************************************/
lolpcc 1:6877bb99aa17 41 /* */
lolpcc 1:6877bb99aa17 42 /* Exec commands, for the Diags Code */
lolpcc 1:6877bb99aa17 43 /* */
lolpcc 1:6877bb99aa17 44 /******************************************/
lolpcc 1:6877bb99aa17 45
lolpcc 1:6877bb99aa17 46 struct cmd_callback {
lolpcc 1:6877bb99aa17 47 char *label; /* command */
lolpcc 1:6877bb99aa17 48 int cmd; /* switch value */
lolpcc 1:6877bb99aa17 49 int args; /* Number of args for this command, 0 let sub-routine handle */
lolpcc 1:6877bb99aa17 50 void (*cmd_routine)(int,char **); /* call */
lolpcc 1:6877bb99aa17 51 };
lolpcc 1:6877bb99aa17 52 struct cmd_callback cmd_cb[] ={
lolpcc 1:6877bb99aa17 53 /* General commands for the command interpriter */
lolpcc 1:6877bb99aa17 54 { "exec", 0, 0, exec_file}, /* Run a script file from the local file store */
lolpcc 1:6877bb99aa17 55 { "cat", 0, 2, cat_file}, /* Cat a file on the file system to the current output device */
lolpcc 1:6877bb99aa17 56 { "cp", 0, 3, cp_file}, /* copy file from to */
lolpcc 1:6877bb99aa17 57 { "dir", 0, 1, dir_file}, /* Get a directory listing from the local file store */
lolpcc 1:6877bb99aa17 58 { "cd", 0, 0, cd_file}, /* Change directory */
lolpcc 1:6877bb99aa17 59 { "pwd", 0, 0, pwd_file}, /* show the user the current directory */
lolpcc 1:6877bb99aa17 60 { "wait", 0, 2, wait_control}, /* wait for X tenths of a second */
lolpcc 1:6877bb99aa17 61 { "baud", 0, 2, baud_rate}, /* Set the baudrate of the serial I/O */
lolpcc 1:6877bb99aa17 62 { "print", 0, 0, print_string}, /* Print a string to current output device */
lolpcc 1:6877bb99aa17 63 { "help", 0, 1, help_display}, /* Show the user some help data */
lolpcc 1:6877bb99aa17 64 { "state", 0, 0, show_state}, /* Show the current setup state of the SBC */
lolpcc 1:6877bb99aa17 65 { "date", 0, 1, date_cmd}, /* tell the user the data from the RTC */
lolpcc 1:6877bb99aa17 66 { "dateset", 0, 2, date_set}, /*Set the RTC to a new time */
lolpcc 1:6877bb99aa17 67 { "station", 0, 2, station_set}, /* Set the CAN bus station ID */
lolpcc 1:6877bb99aa17 68 { "netinit", 0, 1, netinit}, /* DHCP the network */
lolpcc 1:6877bb99aa17 69 { "set", 0, 0, set_var}, /* Set the variable to a value */
lolpcc 1:6877bb99aa17 70 { "sum", 0, 0, sum_var}, /* Add some basic maths */
lolpcc 1:6877bb99aa17 71 { "point", 0, 0, point_var}, /* Set out loop point */
lolpcc 1:6877bb99aa17 72 { "tst", 0, 0, tst_var}, /* test the value of a var */
lolpcc 1:6877bb99aa17 73 { "clr", 0, 0, clr_var}, /* Clear the var's to zero */
lolpcc 1:6877bb99aa17 74 /* Commands for the Diags */
lolpcc 1:6877bb99aa17 75 { "list", 0, 1, list}, /* List I2C Devices to user */
lolpcc 1:6877bb99aa17 76 { "i2cw", 0, 3, i2cw}, /* Write a value to the I2C bus */
lolpcc 1:6877bb99aa17 77 { "i2cr", 0, 2, i2cr}, /* Read a value from the I2C bus */
lolpcc 1:6877bb99aa17 78 { "led", 0, 0, led_test}, /* Simple test of the MBED LED's */
lolpcc 1:6877bb99aa17 79 { "sseg", 0, 0, sseg_test}, /* Simple test of the Seven Seg displays*/
lolpcc 1:6877bb99aa17 80 { "rs232", 0, 2, rs232_test_code}, /* Some test code for the RS232 interface */
lolpcc 1:6877bb99aa17 81 { "a2d", 0, 2, a2d_test}, /* Simple test of the A2D system */
lolpcc 1:6877bb99aa17 82 { "snd", 0, 1, snd_test}, /* Sound test code */
lolpcc 1:6877bb99aa17 83 { "digital", 0, 2, dig_test}, /* Simple test of the Digital I/O */
lolpcc 1:6877bb99aa17 84 { "lcd", 0, 2, lcd_test}, /* Test the attached LCD display */
lolpcc 1:6877bb99aa17 85 { "lcdprt", 0, 0, lcd_print}, /* print a string on the Batron LCD */
lolpcc 1:6877bb99aa17 86 { "lcdclr", 0, 0, lcd_clear}, /* Clear the Batron screen */
lolpcc 1:6877bb99aa17 87 { "kbd", 0, 2, kbd_test}, /* Test the attached keyboard */
lolpcc 1:6877bb99aa17 88 { "canrx", 0, 1, canrx}, /* Make this box a CAN Reciever */
lolpcc 1:6877bb99aa17 89 { "cantx", 0, 0, cantx}, /* Transmit a CAN message */
lolpcc 1:6877bb99aa17 90 { "cancmd", 0, 3, can_cmd}, /* send a command out on the can bus */
lolpcc 1:6877bb99aa17 91 { "ticker", 0, 1, ticker_test}, /* Test the ticker calls */
lolpcc 1:6877bb99aa17 92 /* End of command table marker */
lolpcc 1:6877bb99aa17 93 { "test", 0, 2, cmd_test}, /* We need somewhere to test commands first :-) */
lolpcc 1:6877bb99aa17 94 { "END", -1, -1, error_handler}
lolpcc 1:6877bb99aa17 95 };
lolpcc 1:6877bb99aa17 96
lolpcc 1:6877bb99aa17 97
lolpcc 1:6877bb99aa17 98 /* Scan down tags, to find the match, else return -1 */
lolpcc 1:6877bb99aa17 99 int find_cmd(char *tag)
lolpcc 1:6877bb99aa17 100 {
lolpcc 1:6877bb99aa17 101 int cnt=0,c;
lolpcc 1:6877bb99aa17 102 int length=strlen(tag);
lolpcc 1:6877bb99aa17 103 char *elements[0x10];
lolpcc 1:6877bb99aa17 104
lolpcc 1:6877bb99aa17 105 if(tag[0]=='#') /* See is we have a command or a comment */
lolpcc 1:6877bb99aa17 106 return(0);
lolpcc 1:6877bb99aa17 107
lolpcc 1:6877bb99aa17 108 c = breakup(tag,elements,' ');
lolpcc 1:6877bb99aa17 109 while(1){
lolpcc 1:6877bb99aa17 110 if((strcmp(cmd_cb[cnt].label,"END"))==0){
lolpcc 1:6877bb99aa17 111 if(length>1)
lolpcc 1:6877bb99aa17 112 cmd_cb[cnt].cmd_routine(c,elements); /* this will call the error routine */
lolpcc 1:6877bb99aa17 113 return(cmd_cb[cnt].cmd);
lolpcc 1:6877bb99aa17 114 } else if((strcmp(cmd_cb[cnt].label,tag))==0){
lolpcc 1:6877bb99aa17 115 if((cmd_cb[cnt].args==c) || (cmd_cb[cnt].args==0)){ /* if arg count set to zero, can be anything */
lolpcc 1:6877bb99aa17 116 cmd_cb[cnt].cmd_routine(c,elements); /* Call the function with args */
lolpcc 1:6877bb99aa17 117 return(cnt);
lolpcc 1:6877bb99aa17 118 } else {
lolpcc 1:6877bb99aa17 119 lprintf("\n\rWrong number of args passed to %s\n\r",cmd_cb[cnt].label);
lolpcc 1:6877bb99aa17 120 return(-1);
lolpcc 1:6877bb99aa17 121 }
lolpcc 1:6877bb99aa17 122 }
lolpcc 1:6877bb99aa17 123 cnt++;
lolpcc 1:6877bb99aa17 124 }
lolpcc 1:6877bb99aa17 125 }
lolpcc 1:6877bb99aa17 126
lolpcc 1:6877bb99aa17 127
lolpcc 1:6877bb99aa17 128 void error_handler(int c, char **a)
lolpcc 1:6877bb99aa17 129 {
lolpcc 1:6877bb99aa17 130 int cnt=0;
lolpcc 1:6877bb99aa17 131 lprintf("\n\rCommands available are ");
lolpcc 1:6877bb99aa17 132 while(1){
lolpcc 1:6877bb99aa17 133 if((strcmp(cmd_cb[cnt].label,"END"))==0){
lolpcc 1:6877bb99aa17 134 lprintf("\n\r");
lolpcc 1:6877bb99aa17 135 return;
lolpcc 1:6877bb99aa17 136 } else
lolpcc 1:6877bb99aa17 137 lprintf("%s, ",cmd_cb[cnt].label);
lolpcc 1:6877bb99aa17 138 cnt++;
lolpcc 1:6877bb99aa17 139 }
lolpcc 1:6877bb99aa17 140 }
lolpcc 1:6877bb99aa17 141
lolpcc 1:6877bb99aa17 142 /******************************************/
lolpcc 1:6877bb99aa17 143 /* */
lolpcc 1:6877bb99aa17 144 /* Command stubs are here */
lolpcc 1:6877bb99aa17 145 /* */
lolpcc 1:6877bb99aa17 146 /******************************************/
lolpcc 1:6877bb99aa17 147
lolpcc 1:6877bb99aa17 148 void exec_file(int c, char **a)
lolpcc 1:6877bb99aa17 149 {
lolpcc 1:6877bb99aa17 150 /* File on a[1] */
lolpcc 1:6877bb99aa17 151
lolpcc 1:6877bb99aa17 152 char buf[0x60];
lolpcc 1:6877bb99aa17 153 char cmd[0x60];
lolpcc 1:6877bb99aa17 154 int cnt=0;
lolpcc 1:6877bb99aa17 155
lolpcc 1:6877bb99aa17 156 sprintf(buf,"%s%s",pwd,a[1]);
lolpcc 1:6877bb99aa17 157
lolpcc 1:6877bb99aa17 158 if((exec_fp = fopen(buf,"r"))==NULL){
lolpcc 1:6877bb99aa17 159 lprintf("Unable to open %s\n\r",buf);
lolpcc 1:6877bb99aa17 160 return;
lolpcc 1:6877bb99aa17 161 }
lolpcc 1:6877bb99aa17 162 sys_state = sys_state | EXEC_CALLED;
lolpcc 1:6877bb99aa17 163 while(!feof(exec_fp)){
lolpcc 1:6877bb99aa17 164 fgets(buf,sizeof(buf),exec_fp);
lolpcc 1:6877bb99aa17 165 cnt++;
lolpcc 1:6877bb99aa17 166 if(c==3)
lolpcc 1:6877bb99aa17 167 lprintf("exec line (%d) is :%s\n",cnt,buf);
lolpcc 1:6877bb99aa17 168 if(strlen(buf) > 2){
lolpcc 1:6877bb99aa17 169 sprintf(cmd,"%s\n",buf);
lolpcc 1:6877bb99aa17 170 find_cmd(cmd);
lolpcc 1:6877bb99aa17 171 }
lolpcc 1:6877bb99aa17 172 buf[0]='\0';
lolpcc 1:6877bb99aa17 173 buf[1]='\0';
lolpcc 1:6877bb99aa17 174 }
lolpcc 1:6877bb99aa17 175 fclose(exec_fp);
lolpcc 1:6877bb99aa17 176 sys_state = TO_USB;
lolpcc 1:6877bb99aa17 177 }
lolpcc 1:6877bb99aa17 178 void cat_file(int c, char **a)
lolpcc 1:6877bb99aa17 179 {
lolpcc 1:6877bb99aa17 180 /* File on a[1] */
lolpcc 1:6877bb99aa17 181
lolpcc 1:6877bb99aa17 182 FILE *fp;
lolpcc 1:6877bb99aa17 183 char buf[0x60];
lolpcc 1:6877bb99aa17 184
lolpcc 1:6877bb99aa17 185 sprintf(buf,"%s%s",pwd,a[1]);
lolpcc 1:6877bb99aa17 186
lolpcc 1:6877bb99aa17 187 if((fp = fopen(buf,"r"))==NULL){
lolpcc 1:6877bb99aa17 188 lprintf("Unable to open %s\n\r",buf);
lolpcc 1:6877bb99aa17 189 return;
lolpcc 1:6877bb99aa17 190 }
lolpcc 1:6877bb99aa17 191
lolpcc 1:6877bb99aa17 192 while(!feof(fp)){
lolpcc 1:6877bb99aa17 193 fgets(buf,sizeof(buf),fp);
lolpcc 1:6877bb99aa17 194 if(strlen(buf) > 2){
lolpcc 1:6877bb99aa17 195 lprintf(buf);
lolpcc 1:6877bb99aa17 196 }
lolpcc 1:6877bb99aa17 197 buf[0]='\0';
lolpcc 1:6877bb99aa17 198 buf[1]='\0';
lolpcc 1:6877bb99aa17 199 }
lolpcc 1:6877bb99aa17 200 fclose(fp);
lolpcc 1:6877bb99aa17 201 }
lolpcc 1:6877bb99aa17 202
lolpcc 1:6877bb99aa17 203 void cp_file(int c, char **a)
lolpcc 1:6877bb99aa17 204 {
lolpcc 1:6877bb99aa17 205 /* from File on a[1] to file on a[2], full paths supplied */
lolpcc 1:6877bb99aa17 206
lolpcc 1:6877bb99aa17 207 FILE *fi,*fo;
lolpcc 1:6877bb99aa17 208 char buf[0x60];
lolpcc 1:6877bb99aa17 209
lolpcc 1:6877bb99aa17 210 if((fi = fopen(a[1],"r"))==NULL){
lolpcc 1:6877bb99aa17 211 lprintf("Unable to open %s to read\n",a[1]);
lolpcc 1:6877bb99aa17 212 return;
lolpcc 1:6877bb99aa17 213 }
lolpcc 1:6877bb99aa17 214 if((fo = fopen(a[2],"w"))==NULL){
lolpcc 1:6877bb99aa17 215 lprintf("Unable to open %s to write\n",a[2]);
lolpcc 1:6877bb99aa17 216 fclose(fi);
lolpcc 1:6877bb99aa17 217 return;
lolpcc 1:6877bb99aa17 218 }
lolpcc 1:6877bb99aa17 219 while(!feof(fi)){
lolpcc 1:6877bb99aa17 220 fgets(buf,sizeof(buf),fi);
lolpcc 1:6877bb99aa17 221 if(strlen(buf) > 2){
lolpcc 1:6877bb99aa17 222 fprintf(fo,buf);
lolpcc 1:6877bb99aa17 223 }
lolpcc 1:6877bb99aa17 224 buf[0]='\0';
lolpcc 1:6877bb99aa17 225 buf[1]='\0';
lolpcc 1:6877bb99aa17 226 }
lolpcc 1:6877bb99aa17 227 fclose(fi);
lolpcc 1:6877bb99aa17 228 fclose(fo);
lolpcc 1:6877bb99aa17 229 }
lolpcc 1:6877bb99aa17 230
lolpcc 1:6877bb99aa17 231 void dir_file(int c, char **a)
lolpcc 1:6877bb99aa17 232 {
lolpcc 1:6877bb99aa17 233 DIR *d;
lolpcc 1:6877bb99aa17 234 struct dirent *p;
lolpcc 1:6877bb99aa17 235 char buf[0x60];
lolpcc 1:6877bb99aa17 236
lolpcc 1:6877bb99aa17 237 sprintf(buf,"%s%s",pwd,a[1]);
lolpcc 1:6877bb99aa17 238 d = opendir(buf);
lolpcc 1:6877bb99aa17 239 if(d != NULL) {
lolpcc 1:6877bb99aa17 240 while((p = readdir(d)) != NULL) {
lolpcc 1:6877bb99aa17 241 lprintf("- %s\n\r", p->d_name);
lolpcc 1:6877bb99aa17 242 }
lolpcc 1:6877bb99aa17 243 } else {
lolpcc 1:6877bb99aa17 244 error("Could not open directory!");
lolpcc 1:6877bb99aa17 245 }
lolpcc 1:6877bb99aa17 246 closedir(d);
lolpcc 1:6877bb99aa17 247 }
lolpcc 1:6877bb99aa17 248 void cd_file(int c, char **a)
lolpcc 1:6877bb99aa17 249 {
lolpcc 1:6877bb99aa17 250 int x;
lolpcc 1:6877bb99aa17 251 char y;
lolpcc 1:6877bb99aa17 252
lolpcc 1:6877bb99aa17 253 y = a[1][strlen(a[1])];
lolpcc 1:6877bb99aa17 254
lolpcc 1:6877bb99aa17 255 if(a[1][0]=='/'){
lolpcc 1:6877bb99aa17 256 if(y!='/')
lolpcc 1:6877bb99aa17 257 sprintf(pwd,"%s/",a[1]);
lolpcc 1:6877bb99aa17 258 else
lolpcc 1:6877bb99aa17 259 sprintf(pwd,a[1]);
lolpcc 1:6877bb99aa17 260 } else
lolpcc 1:6877bb99aa17 261 lprintf("File Path like /local/\nCurrently you are in %s\n",pwd);
lolpcc 1:6877bb99aa17 262 x = 0;
lolpcc 1:6877bb99aa17 263 if((strcmp(pwd,"/sd/"))==0)
lolpcc 1:6877bb99aa17 264 x = 1;
lolpcc 1:6877bb99aa17 265 else if((strcmp(pwd,"/local/"))==0)
lolpcc 1:6877bb99aa17 266 x = 1;
lolpcc 1:6877bb99aa17 267 if(!x){
lolpcc 1:6877bb99aa17 268 lprintf("Only directories are /local/ or /sd/ (If the SD card is in slot, resetting to /local/\n");
lolpcc 1:6877bb99aa17 269 sprintf(pwd,"/local/");
lolpcc 1:6877bb99aa17 270 }
lolpcc 1:6877bb99aa17 271 }
lolpcc 1:6877bb99aa17 272 void pwd_file(int c, char **a)
lolpcc 1:6877bb99aa17 273 {
lolpcc 1:6877bb99aa17 274 lprintf("%s\n",pwd);
lolpcc 1:6877bb99aa17 275 }
lolpcc 1:6877bb99aa17 276 void wait_control(int c, char **a)
lolpcc 1:6877bb99aa17 277 {
lolpcc 1:6877bb99aa17 278 wait(htoi(a[1])/10);
lolpcc 1:6877bb99aa17 279 }
lolpcc 1:6877bb99aa17 280
lolpcc 1:6877bb99aa17 281 void print_string(int c, char **a)
lolpcc 1:6877bb99aa17 282 {
lolpcc 1:6877bb99aa17 283 int cnt = 1;
lolpcc 1:6877bb99aa17 284 int len;
lolpcc 1:6877bb99aa17 285 while(cnt <= c){
lolpcc 1:6877bb99aa17 286 if(a[cnt][0]=='v' || a[cnt][0]=='V'){
lolpcc 1:6877bb99aa17 287 len = strlen(a[cnt]);
lolpcc 1:6877bb99aa17 288 if(len == 2){
lolpcc 1:6877bb99aa17 289 lprintf(" %04x",htoi(a[cnt]));
lolpcc 1:6877bb99aa17 290 } else {
lolpcc 1:6877bb99aa17 291 lprintf("%s",a[cnt]);
lolpcc 1:6877bb99aa17 292 }
lolpcc 1:6877bb99aa17 293 } else
lolpcc 1:6877bb99aa17 294 lprintf("%s",a[cnt]);
lolpcc 1:6877bb99aa17 295 cnt++;
lolpcc 1:6877bb99aa17 296 }
lolpcc 1:6877bb99aa17 297 lprintf("\n");
lolpcc 1:6877bb99aa17 298 }
lolpcc 1:6877bb99aa17 299
lolpcc 1:6877bb99aa17 300 void help_display(int c, char **a)
lolpcc 1:6877bb99aa17 301 {
lolpcc 1:6877bb99aa17 302 lprintf("%s",HELP_STRING);
lolpcc 1:6877bb99aa17 303 lprintf("%s",HELP_STRING2);
lolpcc 1:6877bb99aa17 304 lprintf("%s",HELP_STRING3);
lolpcc 1:6877bb99aa17 305 lprintf("%s",HELP_SCRIPT1);
lolpcc 1:6877bb99aa17 306 }
lolpcc 1:6877bb99aa17 307
lolpcc 1:6877bb99aa17 308 /******************************************/
lolpcc 1:6877bb99aa17 309 /* */
lolpcc 1:6877bb99aa17 310 /* Diag Command stubs are here */
lolpcc 1:6877bb99aa17 311 /* */
lolpcc 1:6877bb99aa17 312 /******************************************/
lolpcc 1:6877bb99aa17 313
lolpcc 1:6877bb99aa17 314 void list(int c, char **a)
lolpcc 1:6877bb99aa17 315 {
lolpcc 1:6877bb99aa17 316 i2c_probe();
lolpcc 1:6877bb99aa17 317 }
lolpcc 1:6877bb99aa17 318
lolpcc 1:6877bb99aa17 319 void i2cw(int c, char **a)
lolpcc 1:6877bb99aa17 320 {
lolpcc 1:6877bb99aa17 321 pio_write(htoi(a[1]),htoi(a[2]));
lolpcc 1:6877bb99aa17 322 }
lolpcc 1:6877bb99aa17 323
lolpcc 1:6877bb99aa17 324 void i2cr(int c, char **a)
lolpcc 1:6877bb99aa17 325 {
lolpcc 1:6877bb99aa17 326 pio_read(htoi(a[1]));
lolpcc 1:6877bb99aa17 327 }
lolpcc 1:6877bb99aa17 328
lolpcc 1:6877bb99aa17 329 void led_test(int c, char **a)
lolpcc 1:6877bb99aa17 330 {
lolpcc 1:6877bb99aa17 331 if(c==2){
lolpcc 1:6877bb99aa17 332 test_leds(htoi(a[1]));
lolpcc 1:6877bb99aa17 333 } else if(c==3){
lolpcc 1:6877bb99aa17 334 if((strcmp(a[1],"on"))==0){
lolpcc 1:6877bb99aa17 335 if((strcmp(a[2],"all"))==0)
lolpcc 1:6877bb99aa17 336 led_on(htoi(0));
lolpcc 1:6877bb99aa17 337 else
lolpcc 1:6877bb99aa17 338 led_on(htoi(a[2]));
lolpcc 1:6877bb99aa17 339 } else if((strcmp(a[1],"off"))==0){
lolpcc 1:6877bb99aa17 340 if((strcmp(a[2],"all"))==0)
lolpcc 1:6877bb99aa17 341 led_off(htoi(0));
lolpcc 1:6877bb99aa17 342 else
lolpcc 1:6877bb99aa17 343 led_off(htoi(a[2]));
lolpcc 1:6877bb99aa17 344 } else
lolpcc 1:6877bb99aa17 345 lprintf("LED Control Error: led on/off <led>\n");
lolpcc 1:6877bb99aa17 346
lolpcc 1:6877bb99aa17 347 } else {
lolpcc 1:6877bb99aa17 348 lprintf("led <num> - simple led test, go round loop num times\n");
lolpcc 1:6877bb99aa17 349 lprintf("led <on/off> <num> - Turn <led num> <on/off>\n");
lolpcc 1:6877bb99aa17 350 }
lolpcc 1:6877bb99aa17 351 }
lolpcc 1:6877bb99aa17 352
lolpcc 1:6877bb99aa17 353 void sseg_test(int c, char **a)
lolpcc 1:6877bb99aa17 354 {
lolpcc 1:6877bb99aa17 355 if(c==2){
lolpcc 1:6877bb99aa17 356 lprintf("Testing the Seven Segment Display, will go roung the test loop %d times\n",htoi(a[1]));
lolpcc 1:6877bb99aa17 357 test_seven_seg(htoi(a[1]));
lolpcc 1:6877bb99aa17 358 } else if (c==3 & (strcmp(a[1],"val"))==0){
lolpcc 1:6877bb99aa17 359 sseg_four_digits(htoi(a[2]));
lolpcc 1:6877bb99aa17 360 } else {
lolpcc 1:6877bb99aa17 361 lprintf("sseg <num> - basic test of sseg, loop num times\n");
lolpcc 1:6877bb99aa17 362 lprintf("sseg val <num> - display number on the sseg display\n");
lolpcc 1:6877bb99aa17 363 }
lolpcc 1:6877bb99aa17 364 }
lolpcc 1:6877bb99aa17 365
lolpcc 1:6877bb99aa17 366 void a2d_test(int c, char **a)
lolpcc 1:6877bb99aa17 367 {
lolpcc 1:6877bb99aa17 368 show_a2d();
lolpcc 1:6877bb99aa17 369 }
lolpcc 1:6877bb99aa17 370
lolpcc 1:6877bb99aa17 371 void snd_test(int c, char **a)
lolpcc 1:6877bb99aa17 372 {
lolpcc 1:6877bb99aa17 373 sound();
lolpcc 1:6877bb99aa17 374 }
lolpcc 1:6877bb99aa17 375
lolpcc 1:6877bb99aa17 376 void dig_test(int c, char **a)
lolpcc 1:6877bb99aa17 377 {
lolpcc 1:6877bb99aa17 378 lprintf("Testing the Digital I/O, will go roung the test loop %d times\n",htoi(a[1]));
lolpcc 1:6877bb99aa17 379 digital_test(htoi(a[1]));
lolpcc 1:6877bb99aa17 380 }
lolpcc 1:6877bb99aa17 381
lolpcc 1:6877bb99aa17 382 /******************************************/
lolpcc 1:6877bb99aa17 383 /* */
lolpcc 1:6877bb99aa17 384 /* Test routines for the Keyboard and LCD */
lolpcc 1:6877bb99aa17 385 /* at the mo we need to know what type of */
lolpcc 1:6877bb99aa17 386 /* keyboard and LCD we have, carried on */
lolpcc 1:6877bb99aa17 387 /* the supplied argument */
lolpcc 1:6877bb99aa17 388 /* */
lolpcc 1:6877bb99aa17 389 /******************************************/
lolpcc 1:6877bb99aa17 390 void lcd_test(int c, char **a)
lolpcc 1:6877bb99aa17 391 {
lolpcc 1:6877bb99aa17 392 switch(htoi(a[1])){
lolpcc 1:6877bb99aa17 393 case 1 : /* Robot Electronics I2C LCD interface */
lolpcc 1:6877bb99aa17 394 init_lcd(); /* Setup the LCD */
lolpcc 1:6877bb99aa17 395 clear_lcd(); /* Clear the screen */
lolpcc 1:6877bb99aa17 396 write_lcd("Hello"); /* Send it some text */
lolpcc 1:6877bb99aa17 397 break;
lolpcc 1:6877bb99aa17 398 case 2 : /* Batron I2C LCD interface */
lolpcc 1:6877bb99aa17 399 batron_lcd_init();
lolpcc 1:6877bb99aa17 400 batron("Hello World");
lolpcc 1:6877bb99aa17 401 break;
lolpcc 1:6877bb99aa17 402 default :
lolpcc 1:6877bb99aa17 403 lprintf("Unknown LCD type %d\n",htoi(a[1]));
lolpcc 1:6877bb99aa17 404 }
lolpcc 1:6877bb99aa17 405 }
lolpcc 1:6877bb99aa17 406
lolpcc 1:6877bb99aa17 407 void lcd_print(int c, char **a)
lolpcc 1:6877bb99aa17 408 {
lolpcc 1:6877bb99aa17 409 batron_lcd_init();
lolpcc 1:6877bb99aa17 410 batron(a[1]);
lolpcc 1:6877bb99aa17 411 }
lolpcc 1:6877bb99aa17 412 void lcd_clear(int c, char **a)
lolpcc 1:6877bb99aa17 413 {
lolpcc 1:6877bb99aa17 414 batron_clear();
lolpcc 1:6877bb99aa17 415 }
lolpcc 1:6877bb99aa17 416
lolpcc 1:6877bb99aa17 417 void kbd_test(int c, char **a)
lolpcc 1:6877bb99aa17 418 {
lolpcc 1:6877bb99aa17 419 char r;
lolpcc 1:6877bb99aa17 420 switch(htoi(a[1])){
lolpcc 1:6877bb99aa17 421 case 3 : /* Robot Electronics I2C LCD interface */
lolpcc 1:6877bb99aa17 422 lprintf("Will take 4 key presses of the Robot Electronics key pad\n");
lolpcc 1:6877bb99aa17 423 lprintf("Displaying the results to the user\n");
lolpcc 1:6877bb99aa17 424 r = blocking_read_keyboard();
lolpcc 1:6877bb99aa17 425 lprintf("Key 1 %d, or 0x%x, or %c\n",r,r,r);
lolpcc 1:6877bb99aa17 426 r = blocking_read_keyboard();
lolpcc 1:6877bb99aa17 427 lprintf("Key 2 %d, or 0x%x, or %c\n",r,r,r);
lolpcc 1:6877bb99aa17 428 r = blocking_read_keyboard();
lolpcc 1:6877bb99aa17 429 lprintf("Key 3 %d, or 0x%x, or %c\n",r,r,r);
lolpcc 1:6877bb99aa17 430 r = blocking_read_keyboard();
lolpcc 1:6877bb99aa17 431 lprintf("Key 4 %d, or 0x%x, or %c\n",r,r,r);
lolpcc 1:6877bb99aa17 432 break;
lolpcc 1:6877bb99aa17 433 case 4 : /* Work around, with PCF8574 when with Batron I2C LCD */
lolpcc 1:6877bb99aa17 434 lprintf("Will take 4 key presses of thePCF8574s key pad\n");
lolpcc 1:6877bb99aa17 435 lprintf("Displaying the results to the user\n");
lolpcc 1:6877bb99aa17 436 r = pcf8574_kbd(1);
lolpcc 1:6877bb99aa17 437 lprintf("Key 1 %d, or 0x%x, or %c\n",r,r,r);
lolpcc 1:6877bb99aa17 438 r = pcf8574_kbd(1);
lolpcc 1:6877bb99aa17 439 lprintf("Key 2 %d, or 0x%x, or %c\n",r,r,r);
lolpcc 1:6877bb99aa17 440 r = pcf8574_kbd(1);
lolpcc 1:6877bb99aa17 441 lprintf("Key 3 %d, or 0x%x, or %c\n",r,r,r);
lolpcc 1:6877bb99aa17 442 r = pcf8574_kbd(1);
lolpcc 1:6877bb99aa17 443 lprintf("Key 4 %d, or 0x%x, or %c\n",r,r,r);
lolpcc 1:6877bb99aa17 444 break;
lolpcc 1:6877bb99aa17 445 default :
lolpcc 1:6877bb99aa17 446 lprintf("Unknown KBD type %d\n",htoi(a[1]));
lolpcc 1:6877bb99aa17 447 }
lolpcc 1:6877bb99aa17 448
lolpcc 1:6877bb99aa17 449 }
lolpcc 1:6877bb99aa17 450 /******************************************/
lolpcc 1:6877bb99aa17 451 /* */
lolpcc 1:6877bb99aa17 452 /* CAN Bus tests, run from here */
lolpcc 1:6877bb99aa17 453 /* */
lolpcc 1:6877bb99aa17 454 /******************************************/
lolpcc 1:6877bb99aa17 455 void canrx(int c, char **a)
lolpcc 1:6877bb99aa17 456 {
lolpcc 1:6877bb99aa17 457 lprintf("Locking into the CAN message feed, till RESET is pressed\n");
lolpcc 1:6877bb99aa17 458 while(1){
lolpcc 1:6877bb99aa17 459 can_receive();
lolpcc 1:6877bb99aa17 460 }
lolpcc 1:6877bb99aa17 461 }
lolpcc 1:6877bb99aa17 462 void cantx(int c, char **a)
lolpcc 1:6877bb99aa17 463 {
lolpcc 1:6877bb99aa17 464 if(c== 2 | c==4){
lolpcc 1:6877bb99aa17 465 if((strcmp(a[1],"prt"))==0){
lolpcc 1:6877bb99aa17 466 can_send_string(htoi(a[2]),a[3]);
lolpcc 1:6877bb99aa17 467 } else if((strcmp(a[1],"raw"))==0){
lolpcc 1:6877bb99aa17 468 can_send_raw(htoi(a[2]),a[3]);
lolpcc 1:6877bb99aa17 469 } else if((strcmp(a[1],"sync"))==0){
lolpcc 1:6877bb99aa17 470 can_send_sync();
lolpcc 1:6877bb99aa17 471 } else if((strcmp(a[1],"int"))==0){
lolpcc 1:6877bb99aa17 472 can_send_int(htoi(a[2]),htoi(a[3]),0);
lolpcc 1:6877bb99aa17 473 } else if((strcmp(a[1],"time"))==0){
lolpcc 1:6877bb99aa17 474 can_send_int(htoi(a[2]),htoi(a[3]),1);
lolpcc 1:6877bb99aa17 475 } else if((strcmp(a[1],"who"))==0){
lolpcc 1:6877bb99aa17 476 can_send_who();
lolpcc 1:6877bb99aa17 477 } else
lolpcc 1:6877bb99aa17 478 lprintf("cantx commnads are, sync, int, raw, who, prt\n");
lolpcc 1:6877bb99aa17 479 } else {
lolpcc 1:6877bb99aa17 480 lprintf("cantx <prt/raw> <remote station> <message>\n");
lolpcc 1:6877bb99aa17 481 lprintf("cantx int <remote station> <value>\n");
lolpcc 1:6877bb99aa17 482 lprintf("cantx time <remote station> <value>\n");
lolpcc 1:6877bb99aa17 483 lprintf("cantx sync\n");
lolpcc 1:6877bb99aa17 484 lprintf("cantx who\n");
lolpcc 1:6877bb99aa17 485 }
lolpcc 1:6877bb99aa17 486 }
lolpcc 1:6877bb99aa17 487 void can_cmd(int c, char **a)
lolpcc 1:6877bb99aa17 488 {
lolpcc 1:6877bb99aa17 489 can_send_string(htoi(a[1]),a[2]);
lolpcc 1:6877bb99aa17 490 }
lolpcc 1:6877bb99aa17 491 /******************************************/
lolpcc 1:6877bb99aa17 492 /* */
lolpcc 1:6877bb99aa17 493 /* TCP/IP Networking test tool box */
lolpcc 1:6877bb99aa17 494 /* */
lolpcc 1:6877bb99aa17 495 /******************************************/
lolpcc 1:6877bb99aa17 496 void netinit(int c, char **a)
lolpcc 1:6877bb99aa17 497 {
lolpcc 1:6877bb99aa17 498 network_init();
lolpcc 1:6877bb99aa17 499 lprintf("Starting SNTP\n");
lolpcc 1:6877bb99aa17 500 SNTPReadIniFile("/local/sntp.ini");
lolpcc 1:6877bb99aa17 501 // SNTPWriteIniFile(stdout);
lolpcc 1:6877bb99aa17 502 SNTPClientInit();
lolpcc 1:6877bb99aa17 503 }
lolpcc 1:6877bb99aa17 504
lolpcc 1:6877bb99aa17 505 /******************************************/
lolpcc 1:6877bb99aa17 506 /* */
lolpcc 1:6877bb99aa17 507 /* Test the Ticker system */
lolpcc 1:6877bb99aa17 508 /* */
lolpcc 1:6877bb99aa17 509 /******************************************/
lolpcc 1:6877bb99aa17 510 void ticker_test(int c, char **a)
lolpcc 1:6877bb99aa17 511 {
lolpcc 1:6877bb99aa17 512 setup_ticker();
lolpcc 1:6877bb99aa17 513 }
lolpcc 1:6877bb99aa17 514
lolpcc 1:6877bb99aa17 515 /******************************************/
lolpcc 1:6877bb99aa17 516 /* */
lolpcc 1:6877bb99aa17 517 /* Set the station ID for the CAN bus */
lolpcc 1:6877bb99aa17 518 /* */
lolpcc 1:6877bb99aa17 519 /******************************************/
lolpcc 1:6877bb99aa17 520 void station_set(int c, char **a)
lolpcc 1:6877bb99aa17 521 {
lolpcc 1:6877bb99aa17 522 station_id = htoi(a[1]);
lolpcc 1:6877bb99aa17 523 }
lolpcc 1:6877bb99aa17 524
lolpcc 1:6877bb99aa17 525 /******************************************/
lolpcc 1:6877bb99aa17 526 /* */
lolpcc 1:6877bb99aa17 527 /* Display the system time to the user */
lolpcc 1:6877bb99aa17 528 /* */
lolpcc 1:6877bb99aa17 529 /******************************************/
lolpcc 1:6877bb99aa17 530 void date_cmd(int c, char **a)
lolpcc 1:6877bb99aa17 531 {
lolpcc 1:6877bb99aa17 532 time_t seconds = time(NULL);
lolpcc 1:6877bb99aa17 533 lprintf("mbed RTC time(%d): %s\n",seconds,ctime(&seconds));
lolpcc 1:6877bb99aa17 534 }
lolpcc 1:6877bb99aa17 535 void date_set(int c, char **a)
lolpcc 1:6877bb99aa17 536 {
lolpcc 1:6877bb99aa17 537 time_t seconds;
lolpcc 1:6877bb99aa17 538 seconds = atoi(a[1]); /* http://www.onlineconversion.com/unix_time.htm */
lolpcc 1:6877bb99aa17 539 set_time(seconds);
lolpcc 1:6877bb99aa17 540 }
lolpcc 1:6877bb99aa17 541 /******************************************/
lolpcc 1:6877bb99aa17 542 /* */
lolpcc 1:6877bb99aa17 543 /* Display the system state to the user */
lolpcc 1:6877bb99aa17 544 /* */
lolpcc 1:6877bb99aa17 545 /******************************************/
lolpcc 1:6877bb99aa17 546 #define STATE_VAR 0x0001
lolpcc 1:6877bb99aa17 547 #define STATE_I2C 0x0002
lolpcc 1:6877bb99aa17 548 #define STATE_BRD 0x0004
lolpcc 1:6877bb99aa17 549 #define STATE_JMP 0x0008
lolpcc 1:6877bb99aa17 550
lolpcc 1:6877bb99aa17 551 void show_state(int c, char **a)
lolpcc 1:6877bb99aa17 552 {
lolpcc 1:6877bb99aa17 553 int cnt = 0;
lolpcc 1:6877bb99aa17 554 int show=0;
lolpcc 1:6877bb99aa17 555
lolpcc 1:6877bb99aa17 556 if(c!=1){
lolpcc 1:6877bb99aa17 557 if((strcmp(a[1],"var"))==0)
lolpcc 1:6877bb99aa17 558 show = STATE_VAR;
lolpcc 1:6877bb99aa17 559 else if((strcmp(a[1],"i2c"))==0)
lolpcc 1:6877bb99aa17 560 show = STATE_I2C;
lolpcc 1:6877bb99aa17 561 else if((strcmp(a[1],"board"))==0)
lolpcc 1:6877bb99aa17 562 show = STATE_BRD;
lolpcc 1:6877bb99aa17 563 else if((strcmp(a[1],"jmp"))==0)
lolpcc 1:6877bb99aa17 564 show = STATE_JMP;
lolpcc 1:6877bb99aa17 565 else
lolpcc 1:6877bb99aa17 566 lprintf("Unknown state %s, should be var, jmp, i2c, board\n",a[1]);
lolpcc 1:6877bb99aa17 567 } else {
lolpcc 1:6877bb99aa17 568 show = STATE_VAR | STATE_I2C | STATE_BRD | STATE_JMP;
lolpcc 1:6877bb99aa17 569 }
lolpcc 1:6877bb99aa17 570
lolpcc 1:6877bb99aa17 571 if(show & STATE_BRD){
lolpcc 1:6877bb99aa17 572 time_t seconds = time(NULL);
lolpcc 1:6877bb99aa17 573 lprintf("mbed RTC time(%d): %s",seconds,ctime(&seconds));
lolpcc 1:6877bb99aa17 574 lprintf("Baudrate Setting is %d\n",set_baud_rate);
lolpcc 1:6877bb99aa17 575 lprintf("Station CAN ID is %d\n",station_id);
lolpcc 1:6877bb99aa17 576 lprintf("Sysem State is %08x\nVariables, ",sys_state);
lolpcc 1:6877bb99aa17 577 }
lolpcc 1:6877bb99aa17 578 if(show & STATE_VAR){
lolpcc 1:6877bb99aa17 579 lprintf("System Variables\n");
lolpcc 1:6877bb99aa17 580 while(cnt != MAX_VAR){
lolpcc 1:6877bb99aa17 581 lprintf("%04x, ",var[cnt]);
lolpcc 1:6877bb99aa17 582 cnt++;
lolpcc 1:6877bb99aa17 583 }
lolpcc 1:6877bb99aa17 584 lprintf("\n");
lolpcc 1:6877bb99aa17 585 }
lolpcc 1:6877bb99aa17 586 if(show & STATE_JMP){
lolpcc 1:6877bb99aa17 587 lprintf("System Jump Table\n");
lolpcc 1:6877bb99aa17 588 while(cnt != MAX_JMP){
lolpcc 1:6877bb99aa17 589 lprintf("%04x, ",jmp[cnt]);
lolpcc 1:6877bb99aa17 590 cnt++;
lolpcc 1:6877bb99aa17 591 }
lolpcc 1:6877bb99aa17 592 lprintf("\n");
lolpcc 1:6877bb99aa17 593 }
lolpcc 1:6877bb99aa17 594 if(show & STATE_I2C){
lolpcc 1:6877bb99aa17 595 lprintf("Attached I2C devices \n");
lolpcc 1:6877bb99aa17 596 i2c_probe();
lolpcc 1:6877bb99aa17 597 }
lolpcc 1:6877bb99aa17 598 }
lolpcc 1:6877bb99aa17 599
lolpcc 1:6877bb99aa17 600 /******************************************/
lolpcc 1:6877bb99aa17 601 /* */
lolpcc 1:6877bb99aa17 602 /* SD card file system test */
lolpcc 1:6877bb99aa17 603 /* */
lolpcc 1:6877bb99aa17 604 /******************************************/
lolpcc 1:6877bb99aa17 605 void sdcard_test(int c, char **a)
lolpcc 1:6877bb99aa17 606 {
lolpcc 1:6877bb99aa17 607 sys_state = (sys_state & ~MEMSTICK) | SDCARD;
lolpcc 1:6877bb99aa17 608 lprintf("Set the file system to the SD Card\n");
lolpcc 1:6877bb99aa17 609 }
lolpcc 1:6877bb99aa17 610 /******************************************/
lolpcc 1:6877bb99aa17 611 /* */
lolpcc 1:6877bb99aa17 612 /* Mem Stick file system test */
lolpcc 1:6877bb99aa17 613 /* */
lolpcc 1:6877bb99aa17 614 /******************************************/
lolpcc 1:6877bb99aa17 615 void memstick_test(int c, char **a)
lolpcc 1:6877bb99aa17 616 {
lolpcc 1:6877bb99aa17 617 sys_state = (sys_state & ~SDCARD) | MEMSTICK;
lolpcc 1:6877bb99aa17 618 lprintf("Set the file system to the Memory Stick\n");
lolpcc 1:6877bb99aa17 619 }
lolpcc 1:6877bb99aa17 620 /******************************************/
lolpcc 1:6877bb99aa17 621 /* */
lolpcc 1:6877bb99aa17 622 /* General Test command for the source */
lolpcc 1:6877bb99aa17 623 /* */
lolpcc 1:6877bb99aa17 624 /******************************************/
lolpcc 1:6877bb99aa17 625 void cmd_test(int c, char **a)
lolpcc 1:6877bb99aa17 626 {
lolpcc 1:6877bb99aa17 627 int b=0;
lolpcc 1:6877bb99aa17 628 while(b!=htoi(a[1])){
lolpcc 1:6877bb99aa17 629 sseg_four_digits(b);
lolpcc 1:6877bb99aa17 630 wait(0.1);
lolpcc 1:6877bb99aa17 631 b++;
lolpcc 1:6877bb99aa17 632 }
lolpcc 1:6877bb99aa17 633 }