Fix errors reading the last sector of SD card.
[SCSI2SD.git] / software / SCSI2SD / SCSI2SD.cydsn / disk.h
1 //      Copyright (C) 2013 Michael McMaster <michael@codesrc.com>
2 //
3 //      This file is part of SCSI2SD.
4 //
5 //      SCSI2SD is free software: you can redistribute it and/or modify
6 //      it under the terms of the GNU General Public License as published by
7 //      the Free Software Foundation, either version 3 of the License, or
8 //      (at your option) any later version.
9 //
10 //      SCSI2SD is distributed in the hope that it will be useful,
11 //      but WITHOUT ANY WARRANTY; without even the implied warranty of
12 //      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 //      GNU General Public License for more details.
14 //
15 //      You should have received a copy of the GNU General Public License
16 //      along with SCSI2SD.  If not, see <http://www.gnu.org/licenses/>.
17 #ifndef DISK_H
18 #define DISK_H
19
20 typedef enum
21 {
22         DISK_STARTED = 1,     // Controlled via START STOP UNIT
23         DISK_PRESENT = 2,     // SD card is physically present
24         DISK_INITIALISED = 4, // SD card responded to init sequence
25         DISK_WP = 8           // Write-protect.
26 } DISK_STATE;
27
28 typedef enum
29 {
30         TRANSFER_READ,
31         TRANSFER_WRITE
32 } TRANSFER_DIR;
33
34 typedef struct
35 {
36         uint32 bs; // Block size.
37         uint32 capacity; // In blocks.
38
39         int state;
40 } BlockDevice;
41
42 typedef struct
43 {
44         int dir;
45         int multiBlock; // True if we're using a multi-block SPI transfer.
46         uint32 lba;
47         uint32 blocks;
48
49         uint32 currentBlock;
50 } Transfer;
51
52 extern BlockDevice blockDev;
53 extern Transfer transfer;
54
55 void scsiDiskInit(void);
56 void scsiDiskReset(void);
57 void scsiDiskPoll(void);
58 int scsiDiskCommand(void);
59
60 #endif