Difference between revisions of "Talk:Libmii"

From WiiBrew
Jump to navigation Jump to search
Line 49: Line 49:
 
</source>
 
</source>
 
--[[User:Crayon|Crayon]] 03:52, 23 March 2009 (UTC)
 
--[[User:Crayon|Crayon]] 03:52, 23 March 2009 (UTC)
 +
 +
== Problem with Mii's name ==
 +
 +
First of all, you declare it like that:<BR>
 +
char name[MII_NAME_LENGTH];<BR>
 +
There is two mistake here, the first one is that characters are two bytes (addr: 0x02 through 0x15) so it should be:<BR>
 +
char name[MII_NAME_LENGTH * 2];<BR>
 +
The second one is there should always a place for the NULL character at the end, so it should be like this:<BR>
 +
char name[MII_NAME_LENGTH * 2 + 1];<BR>
 +
Now to accept UTF8 chars:
 +
<source lang="c">
 +
int c, d;
 +
char tempChar;
 +
for (c=0, d=0;d<MII_NAME_LENGTH;c++, d++){
 +
        tempChar = data[start + 0x02 + d * 2 + 1];
 +
        if(tempChar < 0x80)
 +
            mii.name[c] = tempChar;
 +
        else{
 +
            mii.name[c] = (((tempChar) >>  6) & 0x1F) | 0xC0;
 +
            c++;
 +
            mii.name[c] = ((tempChar) & 0x3F) | 0x80;
 +
        }
 +
}
 +
mii.name[MII_NAME_LENGTH*2] = '\0';
 +
</source>
 +
The code has been tested just a bit with freetype in C++ with some Latin chars. So it needs more test, right now I'm too tired to continue ;)<BR>
 +
The same problem applies to the creator name.

Revision as of 08:31, 23 March 2009

Great idea, maybe a problem in the birthday data, the ones I got are not the ones stored in my wii. - Treps 15:43, 22 March 2009 (UTC)

Yeah right now the only thing you can rely on is the Name and creator. I think the month part of the birthday works usually. --Mjbauer95 17:00, 22 March 2009 (UTC)

Great Work

Great work, I've been looking for something like this for a long time. I wish you would've spread the link around wiibrew a little. I only found this by watching the recent changes page. Never fear, I'm placing this link everywhere I can on WiiBrew.--Arikado 15:51, 22 March 2009 (UTC)

Does the Month-birthday work for you?

It seems work usually but sometimes it seem to encounter problems --Mjbauer95 17:03, 22 March 2009 (UTC)

Error in example 0.1

I tried running the example, but it says: isfs://shared2/menu/FaceLib/RFL_DB.dat does not exist When I run FTPii I could see the file and it's 762KB. In my Mii Channel I have 35 Mii's, so I don't understand? --Crayon 19:02, 22 March 2009 (UTC)

And the file in FTPii is called "RFL_DB.dat"? It's hard for me to help you without having the same problem occur. --Mjbauer95 22:03, 22 March 2009 (UTC)
I have the same issue.. isfs://shared2/menu/FaceLib/RFL_DB.dat does not exist :( --Manny2008 23:34, 22 March 2009 (UTC)
I found the solution just delete the line ISFS_SU(); and it will work. I checked the example and I did not see this line: http://code.google.com/p/ftpii/source/browse/isfs/trunk/isfs_example/isfs_example.c I added some extra validation, so here it is:
void loadMiis_Wii(){
	if (ISFS_Initialize() == 0){
        if(ISFS_Mount()){
            char * data;
            data = read(FACELIB_Wii);
            if (data!=NULL) loadMiis(data);

            ISFS_Unmount();
        }
    }
}
--Crayon 05:14, 23 March 2009 (UTC)

Not working in C++

I was having problem compiling the code in C++, so I added those lines in mii.h:

#ifndef MII_H
#define MII_H

#ifdef __cplusplus
   extern "C" {
#endif /* __cplusplus */

/* ..................... */

#ifdef __cplusplus
   }
#endif /* __cplusplus */

#endif

--Crayon 03:52, 23 March 2009 (UTC)

Problem with Mii's name

First of all, you declare it like that:
char name[MII_NAME_LENGTH];
There is two mistake here, the first one is that characters are two bytes (addr: 0x02 through 0x15) so it should be:
char name[MII_NAME_LENGTH * 2];
The second one is there should always a place for the NULL character at the end, so it should be like this:
char name[MII_NAME_LENGTH * 2 + 1];
Now to accept UTF8 chars:

	int c, d;
	char tempChar;
	for (c=0, d=0;d<MII_NAME_LENGTH;c++, d++){
        tempChar = data[start + 0x02 + d * 2 + 1];
        if(tempChar < 0x80)
            mii.name[c] = tempChar;
        else{
            mii.name[c] = (((tempChar) >>  6) & 0x1F) | 0xC0;
            c++;
            mii.name[c] = ((tempChar) & 0x3F) | 0x80;
        }
	}
	mii.name[MII_NAME_LENGTH*2] = '\0';

The code has been tested just a bit with freetype in C++ with some Latin chars. So it needs more test, right now I'm too tired to continue ;)
The same problem applies to the creator name.