support unicode on fatfs

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@210 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
shirait 2007-07-24 09:51:05 +00:00
parent 4c2a377724
commit 116d434b87
13 changed files with 78 additions and 28 deletions

View File

@ -21,31 +21,45 @@ static u8 *jis_increment(u8 *p);
void CS_Sjis2Unicode( void* uni_str, void* jis_str)
/*---------------------------------------------------------------------------*
Name: CS_Sjis2Unicode
Description:
Arguments:
Returns: < 0 : success( return string length)
> 0 : error code
*---------------------------------------------------------------------------*/
int CS_Sjis2Unicode( void* uni_str, void* jis_str)
{
int i;
int len;
len = jis_strlen( jis_str);
if( len > 255) {
return -1;
}
for( i=0; i<len; i++) {
jis_to_unicode( uni_str, jis_str);
jis_str = jis_increment( jis_str);
(u8*)uni_str+=2;
}
return len;
}
/* return number of jis chars in a string */
static int jis_strlen(u8 * string) /*__fn__*/
{
int len=0;
while (*string)
{
string = jis_increment(string);
len++;
}
PRINTDEBUG( "len:%d\n", len);
return len;
int len=0;
while (*string)
{
string = jis_increment(string);
len++;
}
PRINTDEBUG( "len:%d\n", len);
return len;
}
/* Return the length of a JIS character, 1 or 2 */
static int jis_char_length(u8 *p)

View File

@ -31,6 +31,7 @@ SUBDIRS += \
fatfs \
dsp \
spi \
el \
endif # TWL_PLATFORM != DSTEG

View File

@ -38,6 +38,7 @@ LLIBRARY_DIRS = $(TWLSDK_ROOT)/lib/ARM-BB/Release
LLIBRARIES = libfatfs_sp.twl.a \
libsd_sp.twl.a \
libel_sp.twl.a \
libcs_sp.twl.a \
#SRCDIR = # using default
#LCFILE = # using default

View File

@ -1,5 +1,6 @@
#include <twl_sp.h>
#include <twl/cs/cs.h>
#include <el/elf_loader.h>
#include <devices/sdmc/ARM7/sdmc.h>
#include <fatfs/ARM7/rtfs.h>
@ -24,6 +25,7 @@
/*---------------------------------------------------------------------------*
staticÏ<EFBFBD>
*---------------------------------------------------------------------------*/
static u16 path_str[512/sizeof(u16)]; //ロングファイル名
static u32 lib_buf[8192];
static u32 obj_buf[8192];
int fd;
@ -120,14 +122,18 @@ void TwlSpMain( void)
PRINTDEBUG( "sdmcRtfsAttach success.\n");
}
if( !rtfs_pc_set_default_drive( (unsigned char*)"E:")) {
CS_Sjis2Unicode( path_str, "E:");
if( !rtfs_pc_set_default_drive( (unsigned char*)path_str)) {
PRINTDEBUG( "pc_set_default_drive (E) failed\n");
while( 1){};
}
/*-----DLLƒtƒ@ƒCƒƒI<C692>[ƒvƒ“ -----*/
fd = po_open( (byte*)"\\libsampledll_sp.twl.nodbg.a", (PO_BINARY|PO_WRONLY), PS_IREAD);
// CS_Sjis2Unicode( path_str, "\\libsampledll_sp.twl.nodbg.a");
// fd = po_open( (byte*)path_str, (PO_BINARY|PO_WRONLY), PS_IREAD);
CS_Sjis2Unicode( path_str, "\\LIBSAM~1.a");
fd = po_open( (byte*)path_str, (PO_BINARY|PO_WRONLY), PS_IREAD);
if( fd < 0) {
PRINTDEBUG( "po_open failed.\n");
while( 1) {};

View File

@ -35,6 +35,7 @@ INCDIR += $(TWLSDK_ROOT)/include/twl \
LLIBRARY_DIRS = $(TWLSDK_ROOT)/lib/ARM-BB/Release
LLIBRARIES = libfatfs_sp.twl.a \
libsd_sp.twl.a \
libcs_sp.twl.a \
#SRCDIR = # using default
#LCFILE = # using default

View File

@ -15,6 +15,7 @@
*---------------------------------------------------------------------------*/
#include <twl_sp.h>
#include <twl/cs/cs.h>
#include <twl/fatfs/ARM7/rtfs.h>
#include <twl/devices/sdmc/ARM7/sdmc.h>
@ -41,6 +42,7 @@ void MY_SdTransferRewind( void);
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
static u16 path_str[512/sizeof(u16)]; //ƒ<>ƒ“ƒOƒtƒ@ƒCƒ¼
u32 BlockBuf[(512*3)/4];
u32 BlockBuf2[(512*3)/4];
u32 LargeBuf[1*1024*1024/4];
@ -252,7 +254,8 @@ void TwlSpMain(void)
for( i=0; i<2; i++) {
if( (i % 2) == 0) {
/*SDからブロックライトリード*/
if( !rtfs_pc_set_default_drive( (unsigned char*)"E:")) {
CS_Sjis2Unicode( path_str, "E:");
if( !rtfs_pc_set_default_drive( (unsigned char*)path_str)) {
PRINTDEBUG( "pc_set_default_drive (E) failed\n");
while( 1){};
}
@ -260,25 +263,27 @@ void TwlSpMain(void)
/**/
PRINTDEBUG( "pc_check_disk start. please wait.\n");
DEBUG_BEGIN();
pc_check_disk( (byte*)"E:", &dstat, 0, 1, 1);
pc_check_disk( (byte*)path_str, &dstat, 0, 1, 1);
DEBUG_END(pc_check_disk);
PRINTDEBUG( "pc_check_disk end.\n");
}else{
/*NANDからブロックライトリード*/
if( !rtfs_pc_set_default_drive( (unsigned char*)"F:")) {
CS_Sjis2Unicode( path_str, "F:");
if( !rtfs_pc_set_default_drive( (unsigned char*)path_str)) {
PRINTDEBUG( "pc_set_default_drive (F) failed\n");
while( 1){};
}
PRINTDEBUG( "pc_set_default_drive (F) success\n");
/**/
PRINTDEBUG( "pc_check_disk start. please wait.\n");
pc_check_disk( (byte*)"F:", &dstat, 0, 1, 1);
pc_check_disk( (byte*)path_str, &dstat, 0, 1, 1);
PRINTDEBUG( "pc_check_disk end.\n");
}
/*----------*/
fd = po_open( (byte*)"\\sdmc_twl_test.bin", (PO_CREAT|PO_BINARY|PO_WRONLY), PS_IWRITE);
CS_Sjis2Unicode( path_str, "\\sdmc_twl_test.bin");
fd = po_open( (byte*)path_str, (PO_CREAT|PO_BINARY|PO_WRONLY), PS_IWRITE);
if( fd < 0) {
PRINTDEBUG( "po_open failed.\n");
while( 1) {};
@ -304,7 +309,8 @@ void TwlSpMain(void)
/*----------*/
DEBUG_BEGIN();
if( pc_regression_test( (u8*)"E:", FALSE) == FALSE) {
CS_Sjis2Unicode( path_str, "E:");
if( pc_regression_test( (u8*)path_str, FALSE) == FALSE) {
PRINTDEBUG( "pc_regression_test failed.\n");
}else{
DEBUG_END(pc_regression_test);

View File

@ -0,0 +1,3 @@
nand_formatter_kmc によってフォーマットされたSDのテスト。
RAWパーティションが必要。

View File

@ -35,6 +35,7 @@ INCDIR += $(TWLSDK_ROOT)/include/twl \
LLIBRARY_DIRS = $(TWLSDK_ROOT)/lib/ARM-BB/Release
LLIBRARIES = libfatfs_sp.twl.a \
libsd_sp.twl.a \
libcs_sp.twl.a \
#SRCDIR = # using default
#LCFILE = # using default

View File

@ -15,6 +15,7 @@
*---------------------------------------------------------------------------*/
#include <twl_sp.h>
#include <twl/cs/cs.h>
#include <twl/vlink.h>
#include <twl/fatfs/ARM7/rtfs.h>
#include <twl/devices/sdmc/ARM7/sdmc.h>
@ -50,9 +51,11 @@ extern void nandSetFormatRequest( u16 partition_num, u32* partition_sectors);
static OSHeapHandle InitializeAllocateSystem(void);
static void VBlankIntr(void);
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
static u16 path_str[512/sizeof(u16)]; //ƒ<>ƒ“ƒOƒtƒ@ƒCƒ¼
static BOOL getchar_yes_no_prompt(void)
@ -324,7 +327,8 @@ NAND_FLASH_FORMAT_START:
}
}
if( !rtfs_pc_set_default_drive( (unsigned char*)"F:")) {
CS_Sjis2Unicode( path_str, "F:");
if( !rtfs_pc_set_default_drive( (unsigned char*)path_str)) {
PRINTDEBUG( "pc_set_default_drive failed\n");
goto NAND_FLASH_FORMAT_END;
}
@ -337,20 +341,20 @@ NAND_FLASH_FORMAT_START:
/*--- MBR書き込み、パーティション0フォーマット ---*/
if( !rtfs_pc_get_media_parms( (byte*)"F:", &geometry)) {
if( !rtfs_pc_get_media_parms( (byte*)path_str, &geometry)) {
PRINTDEBUG( "Invalid parameter. (size over)\n");
goto NAND_FLASH_FORMAT_END;
}
/**/
if( !pc_format_media( (byte*)"F:", &geometry)) {
if( !pc_format_media( (byte*)path_str, &geometry)) {
PRINTDEBUG( "pc_format_media failed\n");
goto NAND_FLASH_FORMAT_END;
}
PRINTDEBUG( "build MBR success.\n");
/*ボリュームフォーマット*/
if( !pc_format_volume( (byte*)"F:", &geometry)) {
if( !pc_format_volume( (byte*)path_str, &geometry)) {
PRINTDEBUG( "pc_format_volume (p0) failed\n");
goto NAND_FLASH_FORMAT_END;
}
@ -379,11 +383,12 @@ NAND_FLASH_FORMAT_START:
/*ボリュームフォーマット*/
for( i=1; i<nand_fat_partition_num; i++) {
VOLUME_LABEL[0] = (byte)(((int)'F') + i);
if( !rtfs_pc_get_media_parms( VOLUME_LABEL, &geometry)) {
CS_Sjis2Unicode( path_str, VOLUME_LABEL);
if( !rtfs_pc_get_media_parms( (byte*)path_str, &geometry)) {
PRINTDEBUG( "pc_get_media_parms failed\n");
goto NAND_FLASH_FORMAT_END;
}
if( !pc_format_volume( VOLUME_LABEL, &geometry)) {
if( !pc_format_volume( (byte*)path_str, &geometry)) {
PRINTDEBUG( "pc_format_volume failed\n");
goto NAND_FLASH_FORMAT_END;
}
@ -395,14 +400,16 @@ NAND_FLASH_FORMAT_START:
#if 0
for( i=0; i<nand_fat_partition_num; i++) {
VOLUME_LABEL[0] = (byte)(((int)'F') + i);
CS_Sjis2Unicode( path_str, VOLUME_LABEL);
/*---------- テストファイル作成 ----------*/
if( !rtfs_pc_set_default_drive( VOLUME_LABEL)) {
if( !rtfs_pc_set_default_drive( (byte*)path_str)) {
PRINTDEBUG( "pc_set_default_drive failed\n");
while( 1){};
}
/*----------*/
TEST_FILENAME[7] = (byte)(((int)'0')+i);
fd = po_open( (byte*)"\\nand_p0_test.bin", (PO_CREAT|PO_BINARY|PO_WRONLY), PS_IWRITE);
CS_Sjis2Unicode( path_str, TEST_FILENAME);
fd = po_open( (byte*)path_str, (PO_CREAT|PO_BINARY|PO_WRONLY), PS_IWRITE);
if( fd < 0) {
PRINTDEBUG( "po_open (p0) failed.\n");
while( 1) {};

View File

@ -10,7 +10,17 @@ extern "C" {
#endif
void CS_Sjis2Unicode( void* uni_str, void* sjis_str);
/*---------------------------------------------------------------------------*
Name: CS_Sjis2Unicode
Description:
Arguments:
Returns: < 0 : success( return string length)
> 0 : error code
*---------------------------------------------------------------------------*/
int CS_Sjis2Unicode( void* uni_str, void* sjis_str);
#ifdef __cplusplus

View File

@ -23,8 +23,8 @@
/* Character set support */
#define INCLUDE_CS_JIS 0 /* Set to 1 to support JIS (kanji) */
#define INCLUDE_CS_ASCII 1 /* Set to 1 to support ASCII only */
#define INCLUDE_CS_UNICODE 0 /* Set to 1 to support unicode characters requires VFAT */
#define INCLUDE_CS_ASCII 0 /* Set to 1 to support ASCII only */
#define INCLUDE_CS_UNICODE 1 /* Set to 1 to support unicode characters requires VFAT */
/* Note: After we implemented VFAT we learned that Microsoft patented
the Win95 VFS implementation. US PATENT # 5,758,352.

BIN
tools/makelst/makelst.exe Normal file

Binary file not shown.

Binary file not shown.