blob: 5cfb12f416722599965c59de46ebd6ded4104cff [file] [log] [blame]
Dave Chapmane17043e2007-03-15 22:55:36 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
Dave Chapman4a812912007-03-15 23:02:37 +00008 * $Id$
Dave Chapmane17043e2007-03-15 22:55:36 +00009 *
10 * Copyright (C) 2006-2007 Dave Chapman
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#ifndef __SANSAIO_H
21#define __SANSAIO_H
22
23#include <stdint.h>
24#include <unistd.h>
25
26#ifdef __WIN32__
27#include <windows.h>
28#define loff_t int64_t
29#else
30#define HANDLE int
31#define O_BINARY 0
32
33/* Only Linux seems to need lseek64 and loff_t */
Dave Chapmance5383e2007-03-16 09:37:04 +000034#if !defined(linux) && !defined (__linux)
Dave Chapmane17043e2007-03-15 22:55:36 +000035#define loff_t off_t
36#define lseek64 lseek
37#endif
38
39#endif
40
Dominik Wengerdde262b2007-05-03 20:07:57 +000041struct sansa_partinfo_t {
Dave Chapmane17043e2007-03-15 22:55:36 +000042 unsigned long start; /* first sector (LBA) */
43 unsigned long size; /* number of sectors */
44 int type;
45};
46
47struct mi4header_t {
48 uint32_t version;
49 uint32_t length;
50 uint32_t crc32;
51 uint32_t enctype;
52 uint32_t mi4size;
53 uint32_t plaintext;
54};
55
56struct sansa_t {
57 HANDLE dh;
58 char diskname[4096];
59 int sector_size;
Dominik Wengerdde262b2007-05-03 20:07:57 +000060 struct sansa_partinfo_t pinfo[4];
Dave Chapmane17043e2007-03-15 22:55:36 +000061 int hasoldbootloader;
Dave Chapman8d145a52007-09-19 18:46:54 +000062 char* targetname; /* "e200" or "c200" */
Dave Chapmane17043e2007-03-15 22:55:36 +000063 loff_t start; /* Offset in bytes of firmware partition from start of disk */
64};
65
66void print_error(char* msg);
67int sansa_open(struct sansa_t* sansa, int silent);
68int sansa_reopen_rw(struct sansa_t* sansa);
69int sansa_close(struct sansa_t* sansa);
70int sansa_seek(struct sansa_t* sansa, loff_t pos);
71int sansa_read(struct sansa_t* sansa, unsigned char* buf, int nbytes);
72int sansa_write(struct sansa_t* sansa, unsigned char* buf, int nbytes);
73int sansa_alloc_buffer(unsigned char** sectorbuf, int bufsize);
74
75#endif