mirror of
https://github.com/rvtr/twl_wrapsdk.git
synced 2025-06-18 14:25:43 -04:00
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:
parent
4c2a377724
commit
116d434b87
@ -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)
|
||||
|
@ -31,6 +31,7 @@ SUBDIRS += \
|
||||
fatfs \
|
||||
dsp \
|
||||
spi \
|
||||
el \
|
||||
|
||||
endif # TWL_PLATFORM != DSTEG
|
||||
|
||||
|
@ -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
|
||||
|
@ -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) {};
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
3
build/tests/fatfs/fatfs_sd/readme.txt
Normal file
3
build/tests/fatfs/fatfs_sd/readme.txt
Normal file
@ -0,0 +1,3 @@
|
||||
|
||||
nand_formatter_kmc によってフォーマットされたSDのテスト。
|
||||
RAWパーティションが必要。
|
@ -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
|
||||
|
@ -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) {};
|
||||
|
@ -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
|
||||
|
@ -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
BIN
tools/makelst/makelst.exe
Normal file
Binary file not shown.
BIN
tools/stripdebug/stripdebug.exe
Normal file
BIN
tools/stripdebug/stripdebug.exe
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user