main.c 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. /******************************************************************************
  2. efsl Demo-Application for Philips LPC2138 ARM7TDMI-S
  3. Copyright (c) 2005
  4. Martin Thomas, Kaiserslautern, Germany <mthomas@rhrk.uni-kl.de>
  5. *****************************************************************************/
  6. #include <string.h>
  7. #include "lpc214x.h"
  8. #include "lpc_config.h"
  9. #include "uart.h"
  10. #include "startup.h"
  11. #include "efs.h"
  12. #include "ls.h"
  13. #include "mkfs.h"
  14. #include "types.h"
  15. #include "debug.h"
  16. #include "interfaces/efsl_dbg_printf_arm.h"
  17. #define rprintf efsl_debug_printf_arm
  18. #define BAUD 115200
  19. #define BIT(x) ((unsigned long)1<<x)
  20. #define LED1PIN 10
  21. #define LED1BIT BIT(LED1PIN)
  22. #define LEDDIR IODIR0
  23. #define LEDSET IOSET0
  24. #define LEDCLR IOCLR0
  25. static char rom_filename[] = "SPRITE.SMC";
  26. static void gpioInit(void)
  27. {
  28. LEDSET = BIT(LED1PIN); // set Bit = LED off (active low)
  29. LEDDIR |= BIT(LED1PIN); // define LED-Pin as output
  30. } static void ledToggle(void)
  31. {
  32. static unsigned char state = 0;
  33. state = !state;
  34. if (state)
  35. LEDCLR = BIT(LED1PIN); // set Bit = LED on
  36. else
  37. LEDSET = BIT(LED1PIN); // set Bit = LED off (active low)
  38. }
  39. EmbeddedFileSystem efs;
  40. EmbeddedFile filer, filew;
  41. DirList list;
  42. unsigned short e;
  43. unsigned char buf[513];
  44. void cleanup_name(uint8_t * filename,uint8_t *sfn){
  45. while(*filename != '\0');
  46. }
  47. void list_roms(){
  48. uint8_t cnt = 0;
  49. rprintf("Directory of 'root':\n");
  50. ls_openDir(&list, &(efs.myFs), "/");
  51. while (ls_getNext(&list) == 0) {
  52. cnt++;
  53. list.currentEntry.FileName[LIST_MAXLENFILENAME - 1] = '\0';
  54. rprintf("[%li] %s ( %li bytes )\n",cnt, list.currentEntry.FileName, list.currentEntry.FileSize);
  55. }
  56. }
  57. uint8_t * get_filename(uint8_t idx){
  58. uint8_t cnt = 0;
  59. if (idx<1 || idx>9)
  60. return NULL;
  61. ls_openDir(&list, &(efs.myFs), "/");
  62. while (ls_getNext(&list) == 0) {
  63. cnt++;
  64. //list.currentEntry.FileName[LIST_MAXLENFILENAME - 1] = '\0';
  65. if (cnt==idx)
  66. return list.currentEntry.FileName;
  67. }
  68. return NULL;
  69. }
  70. void dump_packet(uint32_t addr,uint32_t len,uint8_t *packet){
  71. uint16_t i,j;
  72. uint16_t sum =0;
  73. for (i=0;i<len;i+=16) {
  74. sum = 0;
  75. for (j=0;j<16;j++) {
  76. sum +=packet[i+j];
  77. }
  78. if (!sum)
  79. continue;
  80. DBG((TXT("%08x:"), addr + i));
  81. for (j=0;j<16;j++) {
  82. DBG((TXT(" %02x"), packet[i+j]));
  83. }
  84. DBG((TXT(" |")));
  85. for (j=0;j<16;j++) {
  86. if (packet[i+j]>=33 && packet[i+j]<=126 )
  87. DBG((TXT("%c"), packet[i+j]));
  88. else
  89. DBG((TXT(".")));
  90. }
  91. DBG((TXT("|\n")));
  92. }
  93. }
  94. void dump_filename(uint8_t * filename){
  95. uint32_t cnt = 0;
  96. if (file_fopen(&filer, &efs.myFs, filename, 'r') == 0) {
  97. rprintf("File %s open. Content:\n", filename);
  98. while ((e = file_read(&filer, 512, buf)) != 0) {
  99. dump_packet(cnt,e,buf);
  100. cnt+=e;
  101. }
  102. DBG((TXT("Len %08x(%li)\n"), cnt,cnt));
  103. rprintf("\n");
  104. file_fclose(&filer);
  105. } else {
  106. rprintf("Failed to open %s\n",filename);
  107. }
  108. }
  109. int main(void)
  110. {
  111. int ch;
  112. int8_t res;
  113. uint8_t * filename;
  114. uint8_t fatfilename[12];
  115. Initialize();
  116. gpioInit();
  117. uart0Init(UART_BAUD(BAUD), UART_8N1, UART_FIFO_8); // setup the UART
  118. uart0Puts("\r\nMMC/SD Card Filesystem Test (P:LPC2148 L:EFSL)\r\n");
  119. /* init efsl debug-output */
  120. efsl_debug_devopen_arm(uart0Putch);
  121. ledToggle();
  122. rprintf("CARD init...");
  123. if ((res = efs_init(&efs, 0)) != 0) {
  124. rprintf("failed with %i\n", res);
  125. }
  126. list_roms(&efs);
  127. rprintf("Select File:\n");
  128. while (1) {
  129. if ((ch = uart0Getch()) >= 0) {
  130. uart0Puts("You pressed : ");
  131. uart0Putch(ch);
  132. uart0Puts("\r\n");
  133. if (ch >='1' && ch <='9'){
  134. filename = get_filename(ch - 48);
  135. file_normalToFatName(filename,fatfilename);
  136. rprintf("Filename: '%s'\n",filename);
  137. dump_filename(filename);
  138. rprintf("Fatfilename: '%s'\n",fatfilename);
  139. dump_filename(fatfilename);
  140. file_normalToFatName("sprite.smc",fatfilename);
  141. rprintf("Fatfilename: '%s'\n",fatfilename);
  142. dump_filename(fatfilename);
  143. file_normalToFatName("sprite .smc",fatfilename);
  144. rprintf("Fatfilename: '%s'\n",fatfilename);
  145. dump_filename(fatfilename);
  146. dump_filename(rom_filename);
  147. }
  148. ledToggle();
  149. }
  150. }
  151. return 0; /* never reached */
  152. }