Use TopfieldUSBEcode for received values too.
[MacTF.git] / TFDataFormat.h
blob942df77b9f3573a3e306ef6bd5450a8969059040
1 //
2 // TFDataFormat.h
3 // MacTF
4 //
5 // Created by Kalle Olavi Niemitalo on 2007-10-23, based on:
6 // TFUSBController.h
7 // MacTF
8 // Created by Nathan Oates on Sun Aug 01 2004.
9 // Copyright (c) 2004-7 Nathan Oates. All rights reserved.
10 // May also include parts of:
11 // uproar 0.1
12 // Copyright (c) 2001 Kasima Tharnpipitchai <me@kasima.org>
14 // This source code is free software; you can redistribute it and/or
15 // modify it under the terms of the GNU Public License as published
16 // by the Free Software Foundation; either version 2 of the License,
17 // or (at your option) any later version.
19 // This source code is distributed in the hope that it will be useful,
20 // but WITHOUT ANY WARRANTY; without even the implied warranty of
21 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 // Please refer to the GNU Public License for more details.
24 // You should have received a copy of the GNU Public License along with
25 // this source code; if not, write to:
26 // Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28 typedef enum TopfieldUSBCmd {
29 USB_CmdNone = 0x00000000,
31 USB_Fail = 0x00000001,
32 USB_Success = 0x00000002,
33 USB_Cancel = 0x00000003,
35 USB_CmdReady = 0x00000100,
36 USB_CmdReset = 0x00000101,
37 USB_CmdTurbo = 0x00000102,
39 // Hdd Cmd
40 USB_CmdHddSize = 0x00001000,
41 USB_DataHddSize = 0x00001001,
43 USB_CmdHddDir = 0x00001002,
44 USB_DataHddDir = 0x00001003,
45 USB_DataHddDirEnd = 0x00001004,
47 USB_CmdHddDel = 0x00001005,
48 USB_CmdHddRename = 0x00001006,
49 USB_CmdHddCreateDir = 0x00001007,
51 USB_CmdHddFileSend = 0x00001008,
52 USB_DataHddFileStart = 0x00001009,
53 USB_DataHddFileData = 0x0000100A,
54 USB_DataHddFileEnd = 0x0000100B,
56 // Ensure that random 32-bit values received from the PVR can
57 // be converted to enum TopfieldUSBCmd without losing bits.
58 TopfieldUSBCmd_pad = 0xFFFFFFFF
59 } TopfieldUSBCmd;
61 // -----------------------------------------------------------------------------
62 // Usb Error Code
63 typedef enum TopfieldUSBEcode {
64 USB_OK = 0x00000000,
65 USB_Err_Crc = 0x00000001,
66 USB_Err_UnknownCmd = 0x00000002,
67 USB_Err_InvalidCmd = 0x00000003,
68 USB_Err_Unknown = 0x00000004,
69 USB_Err_Size = 0x00000005,
70 USB_Err_RunFail = 0x00000006,
71 USB_Err_Memory = 0x00000007,
73 // Ensure that random 32-bit values received from the PVR can
74 // be converted to enum TopfieldUSBCmd without losing bits.
75 TopfieldUSBEcode_pad = 0xFFFFFFFF
76 } TopfieldUSBEcode;
78 // -----------------------------------------------------------------------------
79 // File send direct
80 #define USB_FileToDevice 0x00
81 #define USB_FileToHost 0x01
83 // -----------------------------------------------------------------------------
84 // File Attribute
85 #define USB_FileTypeFolder 0x01
86 #define USB_FileTypeNormal 0x02
88 // -----------------------------------------------------------------------------
89 #define USB_FileTypeSize 114
90 #define USB_FileNameSize 95
92 @interface TFDataFormat : NSObject
94 #pragma mark Framing of communication blocks
95 - (UInt16) findCRC:(const UInt8*)p length:(size_t)n;
96 - (NSMutableData*) swap:(NSData*)inData;
97 - (NSData*) prepareCommand:(TopfieldUSBCmd)cmd withData:(NSData*)inData;
98 - (BOOL) isCommunicationBlockValid:(NSData*)block
99 error:(NSError**)errorOut ecode:(TopfieldUSBEcode*)ecodeOut;
100 - (TopfieldUSBCmd) cmdFromCommunicationBlock:(NSData*)block;
102 #pragma mark Common ingredients
103 - (BOOL) appendToData:(NSMutableData*)data fname:(NSString*)fname;
104 - (BOOL) appendToData:(NSMutableData*)data sizeAndFname:(NSString*)fname;
105 - (NSString*) fnameForFile:(NSString*)file atPath:(NSString*)path;
106 - (NSString*) nameOfCmd:(TopfieldUSBCmd)cmd;
107 - (NSString*) nameOfEcode:(TopfieldUSBEcode)ecode;
109 #pragma mark Communication blocks for various commands
110 - (NSData*) prepareFailWithECode:(TopfieldUSBEcode)ecode;
111 - (TopfieldUSBEcode) ecodeFromFail:(NSData*)block;
112 - (NSData*) prepareSuccess;
113 - (NSData*) prepareCancel;
114 - (NSData*) prepareCmdHddDirWithPath:(NSString*)path;
115 - (NSData*) prepareCmdHddFileSendWithDirection:(UInt8)direction
116 fname:(NSString*)fname offset:(UInt64)offset;
117 - (SInt64) offsetFromDataHddFileData:(NSData*)block;
118 - (NSData*) prepareDataHddFileEnd;
119 - (NSData*) prepareCmdTurboWithMode:(SInt32)mode;
120 - (NSData*) prepareCmdHddDelWithFname:(NSString*)fname;
121 - (NSData*) prepareCmdHddRenameFromFname:(NSString*)oldFname
122 toFname:(NSString*)newFname;
123 - (NSData*) prepareCmdHddCreateDirWithFname:(NSString*)fname;
125 @end