#ifndef USBEXTREME_H #define USBEXTREME_H #ifndef u8 #include typedef uint8_t u8; typedef uint16_t u16; #endif #ifndef size_t #include #endif #define USBEXTREME_NAME_LENGTH 32 #define USBEXTREME_ID_LENGTH 15 #define USBEXTREME_NAME_EXT_LENGTH 10 #define USBEXTREME_MAGIC 0x08 #define USBEXTREME_FILESTAT_NAME_LENGTH USBEXTREME_NAME_LENGTH + USBEXTREME_NAME_EXT_LENGTH #define USBEXTREME_PREFIX "ul." #define USBEXTREME_CRC32_LENGTH 8 #define USBEXTREME_FILENAME_LENGTH USBEXTREME_ID_LENGTH + USBEXTREME_CRC32_LENGTH + 1 #define USBEXTREME_PART_SIZE = 0x40000000 typedef enum { SCECdGDTFUNCFAIL = -1, SCECdNODISC = 0x00, SCECdDETCT, SCECdDETCTCD, SCECdDETCTDVDS, SCECdDETCTDVDD, SCECdUNKNOWN, SCECdPSCD = 0x10, SCECdPSCDDA, SCECdPS2CD, SCECdPS2CDDA, SCECdPS2DVD, SCECdCDDA = 0xFD, SCECdDVDV, SCECdIllegalMediaoffset } SCECdvdMediaType; typedef enum { USB_EXTREME_V0 = 0x00, USB_EXTREME_V1, USB_EXTREME_UNKNOWN } usb_extreme_versions; typedef struct __attribute__((__packed__)) { u8 empty[6 + USBEXTREME_ID_LENGTH + USBEXTREME_NAME_LENGTH]; u8 magic; u8 empty2[10]; } usb_extreme_base; typedef struct __attribute__((__packed__)) { char name[USBEXTREME_NAME_LENGTH]; char id[USBEXTREME_ID_LENGTH]; u8 n_parts; u8 type; u8 empty[4]; u8 magic; u8 empty2[USBEXTREME_NAME_EXT_LENGTH]; } usb_extreme_v0; typedef struct __attribute__((__packed__)) { char name[USBEXTREME_NAME_LENGTH]; char id[USBEXTREME_ID_LENGTH]; u8 n_parts; u8 type; u16 size; u8 video_mode; u8 usb_extreme_version; u8 magic; char name_ext[USBEXTREME_NAME_EXT_LENGTH]; } usb_extreme_v1; typedef struct { size_t offset; char name[USBEXTREME_FILESTAT_NAME_LENGTH]; SCECdvdMediaType type; size_t size; u8 video_mode; usb_extreme_versions usb_extreme_version; char filename[USBEXTREME_FILENAME_LENGTH]; u8 parts; } usb_extreme_filestat; typedef struct { void *first_header; usb_extreme_base *headers; size_t num_headers; size_t headerslen; usb_extreme_versions version; } usb_extreme_headers; #define USBEXTREME_HEADER_SIZE sizeof(usb_extreme_base) /* Global headers functions */ int is_oue(const void *headers, const size_t headerslen); usb_extreme_versions get_version(u8 version); size_t oue_point_headers(usb_extreme_base **headers, void *raw_headers, size_t headerslen); size_t oue_num_headers(size_t *num_headers, const void *headers, size_t headerslen); int oue_version(usb_extreme_versions *version, const void *headers, size_t headerslen); int oue_read_headers(usb_extreme_headers *headers, void *raw_headers, const size_t headerslen); /* Read functions */ size_t oue_read(usb_extreme_filestat *filestats, const usb_extreme_headers headers, const int filestats_nlen); void oue_get_name(char *dest, size_t length, const usb_extreme_headers headers, size_t offset); void oue_filename(char *buffer, size_t length, const usb_extreme_headers headers, size_t offset); size_t oue_part_size(const usb_extreme_headers headers, size_t offset); /* implementation in development * int oue_add(usb_extreme_headers *headers, const usb_extreme_filestat filestat); int oue_edit(usb_extreme_headers *headers, const usb_extreme_filestat filestat); int oue_remove(usb_extreme_headers *headers, const usb_extreme_filestat filestat); */ #endif /* !USBEXTREME_H */