1 /*---------------------------------------------------------------------------* 2 Project: Dolphin Memory Card API 3 File: card.h 4 5 Copyright 2000-2004 Nintendo. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Log: card.h,v $ 14 Revision 1.2 2006/02/04 11:56:44 hashida 15 (none) 16 17 Revision 1.1.1.1 2005/12/29 06:53:27 hiratsu 18 Initial import. 19 20 Revision 1.1.1.1 2005/05/12 02:41:06 yasuh-to 21 Ported from dolphin source tree. 22 23 24 39 2004/03/08 19:50 Shiki 25 Added CARDGetCurrentMode(). 26 27 38 2004/01/06 11:27 Shiki 28 Added CARDGetFastMode() and CARDSetFastMode(). 29 30 37 2003/02/12 16:26 Shiki 31 Defined CARD_ATTR_GLOBAL and CARD_ATTR_COMPANY. 32 33 36 2002/08/12 15:30 Shiki 34 Added __padding field to CARDFileInfo{} and CARDStat{}. 35 36 35 2002/08/05 15:49 Shiki 37 Added const keywords to relevant function prototypes. 38 39 34 2001/11/26 11:52 Shiki 40 Added CARD_XFER_SETATTRIBUTES and CARD_XFER_WRITE. 41 42 33 2001/10/18 14:16 Shiki 43 Added CARDGetAttributes(),CARDGetSerialNo(),CARDSetAttributes[Async](). 44 45 32 2001/07/19 22:09 Shiki 46 Added CARDCheckEx[Async]. 47 48 31 2001/06/19 11:55a Dante 49 Added CARDSetIconAddress & CARDSetCommentAddress 50 51 30 2001/06/18 10:16p Dante 52 Added CARDSetIconAnim() & CARDSetBannerFormat() 53 54 29 2001/05/18 4:03p Shiki 55 Added CARDProbeEx(). 56 57 28 2001/05/18 1:49p Shiki 58 Added CARD_XFER_*. 59 60 27 2001/05/18 1:16p Shiki 61 Added CARDGetXferredBytes(). 62 63 26 2001/05/10 11:07a Shiki 64 Modified CARD_ENCODE_* to sync with OS_FONT_ENCODE_*. 65 66 25 2001/04/23 15:28 Shiki 67 Fixed CARDGetIcon*() macros. 68 69 24 2001/04/23 14:45 Shiki 70 Removed CARDStat.gameVersion. 71 72 23 2001/04/19 9:10 Shiki 73 Added CARD_COMMENT_SIZE. 74 75 22 2001/02/27 16:46 Shiki 76 Added CARDCancel(). 77 78 21 2001/02/22 15:54 Shiki 79 Added CARDGetIconAnim(). 80 81 20 2001/02/22 11:48 Shiki 82 Changed the type of fileName from u8[] to char[]. 83 84 19 2001/02/22 9:37 Shiki 85 Added support for multiple sector sizes. 86 87 18 2001/01/23 9:30 Shiki 88 Fixed typo. 89 90 17 2000/12/14 7:17p Shiki 91 Added CARDGetMemSize(). 92 93 16 2000/12/11 11:05p Shiki 94 Added icon stuff. 95 96 15 2000/10/25 11:50p Shiki 97 Added CARDCheckAsync(). 98 99 14 2000/09/07 6:53p Shiki 100 Added CARD_FILENAME_MAX. 101 102 13 2000/09/05 2:46p Shiki 103 Fixed to be C++ ready. 104 105 12 2000/09/01 5:28p Shiki 106 Added CARDRename() and CARDRenameAsync(). 107 108 11 2000/08/25 6:46p Shiki 109 Revised CARD_ENCODE_*. 110 111 10 2000/08/25 3:54p Shiki 112 Added CARD_RESULT_ENCODING. 113 114 9 2000/08/24 6:32p Shiki 115 Added CARDGetEncoding(). 116 117 8 2000/08/24 4:16p Shiki 118 Added CARDProbe(). 119 120 7 2000/08/10 4:39p Shiki 121 Modified CARDStat.length from u8 to u32. 122 123 6 2000/08/10 4:27p Shiki 124 Added CARD_BLOCK_SIZE. 125 126 5 2000/08/09 6:19p Shiki 127 Cleanup. 128 129 4 2000/08/09 5:10p Shiki 130 Added CARD_RESULT_NAMETOOLONG. 131 132 3 2000/08/08 7:51p Shiki 133 Added CARD_RESULT_LIMIT. 134 135 2 2000/07/19 7:44p Shiki 136 Added CARD_RESULT_NOPERM. 137 138 1 2000/07/14 3:58p Shiki 139 Initial check-in. 140 $NoKeywords: $ 141 *---------------------------------------------------------------------------*/ 142 143 #ifndef __CARD_H__ 144 #define __CARD_H__ 145 146 #include <revolution/types.h> 147 #include <revolution/os/OSFont.h> 148 149 #ifdef __cplusplus 150 extern "C" { 151 #endif 152 153 #define CARD_WORKAREA_SIZE (5 * 8 * 1024) 154 #define CARD_READ_SIZE 512 155 #define CARD_MAX_FILE 127 156 #define CARD_COMMENT_SIZE 64 157 158 // internal API command xfer bytes 159 #define CARD_XFER_CREATE (2 * 8 * 1024) // CARDCreate[Async] 160 #define CARD_XFER_DELETE (2 * 8 * 1024) // CARD[Fast]Delete[Async] 161 #define CARD_XFER_MOUNT (5 * 8 * 1024) // CARDMount[Async] 162 #define CARD_XFER_FORMAT (5 * 8 * 1024) // CARDFormat[Async] 163 #define CARD_XFER_RENAME (1 * 8 * 1024) // CARDRename[Async] 164 #define CARD_XFER_SETSTATUS (1 * 8 * 1024) // CARDSetStatus[Async] 165 #define CARD_XFER_SETATTRIBUTES (1 * 8 * 1024) // CARDSetAttributes[Async] 166 #define CARD_XFER_WRITE (1 * 8 * 1024) // CARDWrite[Async] 167 168 #define CARD_ENCODE_ANSI OS_FONT_ENCODE_ANSI 169 #define CARD_ENCODE_SJIS OS_FONT_ENCODE_SJIS 170 171 // longest file name string excluding terminating zero 172 #define CARD_FILENAME_MAX 32 173 174 #define CARD_ICON_MAX 8 175 #define CARD_ICON_WIDTH 32 176 #define CARD_ICON_HEIGHT 32 177 #define CARD_BANNER_WIDTH 96 178 #define CARD_BANNER_HEIGHT 32 179 180 #define CARD_MODE_NORMAL 0 181 #define CARD_MODE_FAST 1 182 183 typedef struct CARDFileInfo 184 { 185 s32 chan; 186 s32 fileNo; 187 188 s32 offset; 189 s32 length; 190 u16 iBlock; 191 u16 __padding; 192 } CARDFileInfo; 193 194 typedef struct CARDStat 195 { 196 // read-only (Set by CARDGetStatus) 197 char fileName[CARD_FILENAME_MAX]; 198 u32 length; 199 u32 time; // seconds since 2000/01/01 midnight 200 u8 gameName[4]; 201 u8 company[2]; 202 203 // read/write (Set by CARDGetStatus/CARDSetStatus) 204 u8 bannerFormat; 205 u8 __padding; 206 u32 iconAddr; // offset to the banner, bannerTlut, icon, iconTlut data set. 207 u16 iconFormat; 208 u16 iconSpeed; 209 u32 commentAddr; // offset to the pair of 32 byte character strings. 210 211 // read-only (Set by CARDGetStatus) 212 u32 offsetBanner; 213 u32 offsetBannerTlut; 214 u32 offsetIcon[CARD_ICON_MAX]; 215 u32 offsetIconTlut; 216 u32 offsetData; 217 } CARDStat; 218 219 #define CARDGetBannerFormat(stat) (((stat)->bannerFormat) & CARD_STAT_BANNER_MASK) 220 #define CARDGetIconAnim(stat) (((stat)->bannerFormat) & CARD_STAT_ANIM_MASK) 221 #define CARDGetIconFormat(stat, n) (((stat)->iconFormat >> (2 * (n))) & CARD_STAT_ICON_MASK) 222 #define CARDGetIconSpeed(stat, n) (((stat)->iconSpeed >> (2 * (n))) & CARD_STAT_SPEED_MASK) 223 #define CARDSetBannerFormat(stat, f) ((stat)->bannerFormat = (u8) (((stat)->bannerFormat & ~CARD_STAT_BANNER_MASK)|(f))) 224 #define CARDSetIconAnim(stat, f) ((stat)->bannerFormat = (u8) (((stat)->bannerFormat & ~CARD_STAT_ANIM_MASK )|(f))) 225 #define CARDSetIconFormat(stat, n, f) ((stat)->iconFormat = (u16) (((stat)->iconFormat & ~(CARD_STAT_ICON_MASK << (2 * (n)))) | ((f) << (2 * (n))))) 226 #define CARDSetIconSpeed(stat, n, f) ((stat)->iconSpeed = (u16) (((stat)->iconSpeed & ~(CARD_STAT_SPEED_MASK << (2 * (n)))) | ((f) << (2 * (n))))) 227 #define CARDSetIconAddress(stat, addr) ((stat)->iconAddr = (u32)(addr)) 228 #define CARDSetCommentAddress(stat, addr) ((stat)->commentAddr = (u32)(addr)) 229 230 #define CARD_STAT_ICON_NONE 0 231 #define CARD_STAT_ICON_C8 1 232 #define CARD_STAT_ICON_RGB5A3 2 233 #define CARD_STAT_ICON_MASK 3 234 235 #define CARD_STAT_BANNER_NONE 0 236 #define CARD_STAT_BANNER_C8 1 237 #define CARD_STAT_BANNER_RGB5A3 2 238 #define CARD_STAT_BANNER_MASK 3 239 240 #define CARD_STAT_ANIM_LOOP 0x00 241 #define CARD_STAT_ANIM_BOUNCE 0x04 242 #define CARD_STAT_ANIM_MASK 0x04 243 244 #define CARD_STAT_SPEED_END 0 245 #define CARD_STAT_SPEED_FAST 1 246 #define CARD_STAT_SPEED_MIDDLE 2 247 #define CARD_STAT_SPEED_SLOW 3 248 #define CARD_STAT_SPEED_MASK 3 249 250 #define CARD_ATTR_RESERVED_0 0x01u 251 #define CARD_ATTR_RESERVED_1 0x02u 252 #define CARD_ATTR_PUBLIC 0x04u 253 #define CARD_ATTR_NO_COPY 0x08u 254 #define CARD_ATTR_NO_MOVE 0x10u 255 #define CARD_ATTR_GLOBAL 0x20u 256 #define CARD_ATTR_COMPANY 0x40u 257 #define CARD_ATTR_RESERVED_7 0x80u 258 259 // For backward compatibility only... 260 #define CARD_ATTR_RESERVED_5 0x20u 261 #define CARD_ATTR_RESERVED_6 0x40u 262 263 typedef void (*CARDCallback)( s32 chan, s32 result ); 264 265 void CARDInit ( void ); 266 BOOL CARDGetFastMode ( void ); 267 BOOL CARDSetFastMode ( BOOL enable ); 268 269 s32 CARDCheck ( s32 chan ); 270 s32 CARDCheckAsync ( s32 chan, CARDCallback callback ); 271 s32 CARDCheckEx ( s32 chan, s32* xferBytes ); 272 s32 CARDCheckExAsync ( s32 chan, s32* xferBytes, CARDCallback callback ); 273 s32 CARDCreate ( s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo ); 274 s32 CARDCreateAsync ( s32 chan, const char* fileName, u32 size, CARDFileInfo* fileInfo, CARDCallback callback ); 275 s32 CARDDelete ( s32 chan, const char* fileName ); 276 s32 CARDDeleteAsync ( s32 chan, const char* fileName, CARDCallback callback ); 277 s32 CARDFastDelete ( s32 chan, s32 fileNo ); 278 s32 CARDFastDeleteAsync ( s32 chan, s32 fileNo, CARDCallback callback ); 279 s32 CARDFastOpen ( s32 chan, s32 fileNo, CARDFileInfo* fileInfo ); 280 s32 CARDFormat ( s32 chan ); 281 s32 CARDFormatAsync ( s32 chan, CARDCallback callback ); 282 s32 CARDFreeBlocks ( s32 chan, s32* byteNotUsed, s32* filesNotUsed ); 283 s32 CARDGetAttributes ( s32 chan, s32 fileNo, u8* attr ); 284 s32 CARDGetEncoding ( s32 chan, u16* encode ); 285 s32 CARDGetMemSize ( s32 chan, u16* size ); 286 s32 CARDGetResultCode ( s32 chan ); 287 s32 CARDGetSectorSize ( s32 chan, u32* size ); 288 s32 CARDGetSerialNo ( s32 chan, u64* serialNo ); 289 s32 CARDGetStatus ( s32 chan, s32 fileNo, CARDStat* stat ); 290 s32 CARDGetXferredBytes ( s32 chan ); 291 s32 CARDMount ( s32 chan, void* workArea, CARDCallback detachCallback ); 292 s32 CARDMountAsync ( s32 chan, void* workArea, CARDCallback detachCallback, CARDCallback attachCallback ); 293 s32 CARDOpen ( s32 chan, const char* fileName, CARDFileInfo* fileInfo ); 294 BOOL CARDProbe ( s32 chan ); 295 s32 CARDProbeEx ( s32 chan, s32* memSize, s32* sectorSize ); 296 s32 CARDRename ( s32 chan, const char* oldName, const char* newName ); 297 s32 CARDRenameAsync ( s32 chan, const char* oldName, const char* newName, CARDCallback callback ); 298 s32 CARDSetAttributesAsync( s32 chan, s32 fileNo, u8 attr, CARDCallback callback); 299 s32 CARDSetAttributes ( s32 chan, s32 fileNo, u8 attr ); 300 s32 CARDSetStatus ( s32 chan, s32 fileNo, CARDStat* stat ); 301 s32 CARDSetStatusAsync ( s32 chan, s32 fileNo, CARDStat* stat, CARDCallback callback ); 302 s32 CARDUnmount ( s32 chan ); 303 s32 CARDGetCurrentMode ( s32 chan, u32* mode ); 304 305 s32 CARDCancel ( CARDFileInfo* fileInfo ); 306 s32 CARDClose ( CARDFileInfo* fileInfo ); 307 s32 CARDRead ( CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset ); 308 s32 CARDReadAsync ( CARDFileInfo* fileInfo, void* addr, s32 length, s32 offset, CARDCallback callback ); 309 s32 CARDWrite ( CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset ); 310 s32 CARDWriteAsync ( CARDFileInfo* fileInfo, const void* addr, s32 length, s32 offset, CARDCallback callback ); 311 312 #define CARDGetFileNo(fileInfo) ((fileInfo)->fileNo) 313 314 #define CARD_RESULT_UNLOCKED 1 315 #define CARD_RESULT_READY 0 316 #define CARD_RESULT_BUSY -1 317 #define CARD_RESULT_WRONGDEVICE -2 318 #define CARD_RESULT_NOCARD -3 319 #define CARD_RESULT_NOFILE -4 320 #define CARD_RESULT_IOERROR -5 321 #define CARD_RESULT_BROKEN -6 322 #define CARD_RESULT_EXIST -7 323 #define CARD_RESULT_NOENT -8 324 #define CARD_RESULT_INSSPACE -9 325 #define CARD_RESULT_NOPERM -10 326 #define CARD_RESULT_LIMIT -11 327 #define CARD_RESULT_NAMETOOLONG -12 328 #define CARD_RESULT_ENCODING -13 329 #define CARD_RESULT_CANCELED -14 330 #define CARD_RESULT_FATAL_ERROR -128 331 332 #ifdef __cplusplus 333 } 334 #endif 335 336 #endif // __CARD_H__ 337