diff options
Diffstat (limited to 'micromonitor/umon/test.c')
-rw-r--r-- | micromonitor/umon/test.c | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/micromonitor/umon/test.c b/micromonitor/umon/test.c new file mode 100644 index 0000000..4ca13d8 --- /dev/null +++ b/micromonitor/umon/test.c @@ -0,0 +1,161 @@ +/* + * Simple test program -- simplified version of sample test hello. + * + * $Id$ + */ + +#include <bsp.h> + +#include <stdlib.h> +#include <stdio.h> + +#include <assert.h> + +#include <rtems/umon.h> + +/* this code is lifted from the umon demo application */ +int umon_demo(int argc, char **argv) +{ + int i, tfd; + char line[80], *ab, *filename; + + /* If argument count is greater than one, then dump out the + * set of CLI arguments... + */ + if (argc > 1) { + mon_printf("Argument list...\n"); + for(i=0;i<argc;i++) { + mon_printf(" arg[%d]: %s\n",i,argv[i]); + if (strcmp(argv[i],"match") == 0) + mon_printf("got a match!\n"); + } + } + + /* Using the content of the shell variable APPRAMBASE, dump the + * memory starting at that location... + */ + ab = mon_getenv("APPRAMBASE"); + if (ab) { + char *addr = (char *)strtoul(ab,0,0); + + mon_printf("Dumping memory at 0x%lx...\n",addr); + mon_printmem(addr,128,1); + } + + filename = "csbboot"; + + /* If the 'monrc' file exists, the assume it is ASCII and dump it + * line by line... + */ + if (mon_tfsstat(filename)) { + mon_printf("Dumping content of '%s'...\n",filename); + + tfd = mon_tfsopen(filename,TFS_RDONLY,0); + if (tfd >= 0) { + while(mon_tfsgetline(tfd,line,sizeof(line))) + mon_printf("%s",line); + mon_tfsclose(tfd,0); + } + else { + mon_printf("TFS error: %s\n", + (char *)mon_tfsctrl(TFS_ERRMSG,tfd,0)); + } + } + else { + mon_printf("File '%s' not found\n",filename); + } + return 0; +} + +void catFile(const char *name) +{ + int i; + FILE *fp; + char line[128]; + + if (!name) + return; + + printf( "====> Start of file %s\n", name ); + /* Attempt to open and print a file through the + * the TFS based FS... + */ + fp = fopen(name,"r"); + if (!fp) { + printf("fopen() failed\n"); + perror("fopen()"); + return; + } + + for (i=0 ; fgets(line,sizeof(line),fp) ; i++) + printf("LINE %d: %s",i, line); + + printf( "====> End of file %s\n", name ); + fclose(fp); +} + +void tfsFsDemo(void) +{ + char *name; + + /* Initialize the TFS based file system... + */ + puts( "Mounting RTEMS TFS filesystem" ); + if (rtems_initialize_tfs_filesystem( "/JOEL/" ) != 0) { + puts("tfs init failed"); + return; + } + + /* Use uMon's environment to store the name of the file. + * If the shell variable TFSFS_FILENAME is present, then + * assume it contains the name of the file to open and + * print to the console... + * For TFS to run as a file system under RTEMS, all filenames + * that are associated with tfs are preceded with "/TFS/". + */ + name = mon_getenv("TFSFS_FILENAME"); + if (!name) + puts("Shell variable TFSFS_FILENAME not available"); + else + catFile( name ); + catFile( "/JOEL/csbboot" ); + catFile( "/JOEL/boot" ); +} + + +rtems_task Init( + rtems_task_argument ignored +) +{ + puts( "\n\n*** MicroMonitor Demonstration ***" ); + + puts( "calling monConnect ..." ); + rtems_umon_connect(); + + umon_demo(0, NULL); + tfsFsDemo(); + + puts( "*** MicroMonitor Demonstration ***" ); + exit( 0 ); +} + +/* configuration information */ + +/* NOTICE: the clock driver is explicitly disabled */ +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE +#define CONFIGURE_MAXIMUM_TASKS 1 +#define CONFIGURE_MAXIMUM_SEMAPHORES 5 +#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM +#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 4 +#define CONFIGURE_MICROSECONDS_PER_TICK 5000 +#define CONFIGURE_INIT_TASK_STACK_SIZE \ + (CONFIGURE_MINIMUM_TASK_STACK_SIZE * 10) + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> + +/* end of file */ |