1
0
Fork 0
forked from len0rd/rockbox

Support for Sansa E200 in rbutil

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13315 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dominik Wenger 2007-05-03 20:07:57 +00:00
parent 39939bb137
commit dde262b58a
15 changed files with 232 additions and 53 deletions

View file

@ -11,8 +11,8 @@
CXX=$(shell $(PREFIX)wx-config --cxx) CXX=$(shell $(PREFIX)wx-config --cxx)
INC = INC =
CFLAGS = -Wall -Wundef CFLAGS = -Wall -Wundef -DRBUTIL
OBJS=rbutil.o rbutilApp.o rbutilFrm.o rbutilCtrls.o install_dialogs.o bootloaders.o installlog.o ipodpatcher/ipodpatcher.o ipodpatcher/ipodio-posix.o irivertools.o md5sum.o OBJS=rbutil.o rbutilApp.o rbutilFrm.o rbutilCtrls.o install_dialogs.o bootloaders.o installlog.o ipodpatcher/ipodpatcher.o ipodpatcher/ipodio-posix.o sansapatcher/sansapatcher.o sansapatcher/sansaio-posix.o irivertools.o md5sum.o
# Install into /usr/local by default # Install into /usr/local by default
ifndef DESTDIR ifndef DESTDIR

View file

@ -25,7 +25,7 @@ LDFLAGS_GUI =
CXX = g++ CXX = g++
CXXFLAGS = -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -Wall -Wundef -Wno-ctor-dtor-privacy -O2 -fno-strict-aliasing -fno-common CXXFLAGS = -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -Wall -Wundef -Wno-ctor-dtor-privacy -O2 -fno-strict-aliasing -fno-common
CPPFLAGS = -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -I${wx_top_builddir}/lib/wx/include/mac-ansi-release-static-2.8 -I${top_srcdir}/include -fpascal-strings -I${top_srcdir}/src/mac/carbon/morefilex -I/Developer/Headers/FlatCarbon CPPFLAGS = -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -I${wx_top_builddir}/lib/wx/include/mac-ansi-release-static-2.8 -I${top_srcdir}/include -fpascal-strings -I${top_srcdir}/src/mac/carbon/morefilex -I/Developer/Headers/FlatCarbon
RBUTIL_CFLAGS = $(CXXFLAGS) -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -I${wx_top_builddir}/lib/wx/include/mac-ansi-release-static-2.8 -I${top_srcdir}/include -fpascal-strings -I${top_srcdir}/src/mac/carbon/morefilex -I/Developer/Headers/FlatCarbon RBUTIL_CFLAGS = $(CXXFLAGS) -DRBUTIL -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -I${wx_top_builddir}/lib/wx/include/mac-ansi-release-static-2.8 -I${top_srcdir}/include -fpascal-strings -I${top_srcdir}/src/mac/carbon/morefilex -I/Developer/Headers/FlatCarbon
LDFLAGS = -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -framework QuickTime -framework IOKit -framework Carbon -framework Cocoa -framework System LDFLAGS = -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -framework QuickTime -framework IOKit -framework Carbon -framework Cocoa -framework System
WX_LIB_FLAVOUR = WX_LIB_FLAVOUR =
TOOLKIT = MAC TOOLKIT = MAC
@ -51,6 +51,7 @@ RBUTIL_OBJECTS = \
$(__rbutil_os2_lib_res) \ $(__rbutil_os2_lib_res) \
rbutil.o rbutilApp.o rbutilFrm.o install_dialogs.o bootloaders.o installlog.o \ rbutil.o rbutilApp.o rbutilFrm.o install_dialogs.o bootloaders.o installlog.o \
rbutilCtrls.o ipodpatcher/ipodpatcher.o ipodpatcher/ipodio-posix.o \ rbutilCtrls.o ipodpatcher/ipodpatcher.o ipodpatcher/ipodio-posix.o \
sansapatcher/sansapatcher.o sansapatcher/sansaio-posix.o \
md5sum.o irivertools.o \ md5sum.o irivertools.o \
$(__rbutil___win32rc) $(__rbutil___win32rc)

View file

@ -26,8 +26,7 @@
#include "installlog.h" #include "installlog.h"
// for ipodpatcher int verbose =0;
int verbose = 0;
// reserves memory for ipodpatcher // reserves memory for ipodpatcher
bool initIpodpatcher() bool initIpodpatcher()
{ {
@ -162,6 +161,108 @@ bool ipodpatcher(int mode,wxString bootloadername)
return true; return true;
} }
// reserves memory for sansapatcher
bool initSansaPatcher()
{
if (sansa_alloc_buffer(&sectorbuf,BUFFER_SIZE) < 0) return true;
else return false;
}
// sansainstallation
bool sansapatcher(int mode,wxString bootloadername)
{
wxString src,dest,buf;
struct sansa_t sansa;
int n = sansa_scan(&sansa);
if (n == 0)
{
ERR_DIALOG(wxT("[ERR] No Sansa found."), wxT("Scanning for Sansa"));
return false;
}
if (n > 1)
{
ERR_DIALOG(wxT("[ERR] to many Sansa found."), wxT("Scanning for Sansa"));
return false;
}
// downloading files
if(mode == BOOTLOADER_ADD)
{
src.Printf(wxT("%s/sandisk-sansa/e200/%s"),gv->bootloader_url.c_str(),bootloadername.c_str());
dest.Printf(wxT("%s" PATH_SEP "download" PATH_SEP "%s"),
gv->stdpaths->GetUserDataDir().c_str(),bootloadername.c_str());
if ( DownloadURL(src, dest) )
{
wxRemoveFile(dest);
buf.Printf(wxT("Unable to download %s"), src.c_str() );
ERR_DIALOG(buf, wxT("Download"));
return false;
}
}
if (sansa_open(&sansa, 0) < 0)
{
ERR_DIALOG(wxT("[ERR] could not open sansa"), wxT("open Sansa"));
return false;
}
if (sansa_read_partinfo(&sansa,0) < 0)
{
ERR_DIALOG(wxT("[ERR] could not read partitiontable"), wxT("reading partitiontable"));
return false;
}
int i = is_e200(&sansa);
if (i < 0) {
ERR_DIALOG(wxT("[ERR] Disk is not an E200 (%d), aborting.\n"), wxT("Checking Disk"));
return false;
}
if (sansa.hasoldbootloader)
{
ERR_DIALOG(wxT("[ERR] ************************************************************************\n"
"[ERR] *** OLD ROCKBOX INSTALLATION DETECTED, ABORTING.\n"
"[ERR] *** You must reinstall the original Sansa firmware before running\n"
"[ERR] *** sansapatcher for the first time.\n"
"[ERR] *** See http://www.rockbox.org/twiki/bin/view/Main/SansaE200Install\n"
"[ERR] ************************************************************************\n"),wxT("Checking Disk"));
return false;
}
if(mode == BOOTLOADER_ADD)
{
if (sansa_reopen_rw(&sansa) < 0) {
ERR_DIALOG(wxT("[ERR] Could not open Sansa in RW mode"), wxT("Bootloader add"));
return false;
}
if (sansa_add_bootloader(&sansa, (char*)dest.c_str(), FILETYPE_MI4)==0) {
} else {
ERR_DIALOG(wxT("[ERR] failed to add Bootloader"), wxT("Bootloader add"));
}
}
else if(mode == BOOTLOADER_REM)
{
if (sansa_reopen_rw(&sansa) < 0) {
ERR_DIALOG(wxT("[ERR] Could not open Sansa in RW mode"), wxT("Bootloader Remove"));
}
if (sansa_delete_bootloader(&sansa)==0) {
} else {
ERR_DIALOG(wxT("[ERR] failed to remove Bootloader"), wxT("Bootloader remove"));
}
}
sansa_close(&sansa);
return true;
}
// gigabeatinstallation // gigabeatinstallation
bool gigabeatf(int mode,wxString bootloadername,wxString deviceDir) bool gigabeatf(int mode,wxString bootloadername,wxString deviceDir)
{ {

View file

@ -28,11 +28,15 @@
extern "C" { extern "C" {
// Ipodpatcher // Ipodpatcher
#include "ipodpatcher/ipodpatcher.h" #include "ipodpatcher/ipodpatcher.h"
// Sansapatcher
#include "sansapatcher/sansapatcher.h"
}; };
bool initIpodpatcher(); bool initIpodpatcher();
bool initSansaPatcher();
bool ipodpatcher(int mode,wxString bootloadername); bool ipodpatcher(int mode,wxString bootloadername);
bool sansapatcher(int mode,wxString bootloadername);
bool gigabeatf(int mode,wxString bootloadername,wxString deviceDir); bool gigabeatf(int mode,wxString bootloadername,wxString deviceDir);
bool iaudiox5(int mode,wxString bootloadername,wxString deviceDir); bool iaudiox5(int mode,wxString bootloadername,wxString deviceDir);
bool fwpatcher(int mode,wxString bootloadername,wxString deviceDir,wxString firmware); bool fwpatcher(int mode,wxString bootloadername,wxString deviceDir,wxString firmware);

View file

@ -22,7 +22,7 @@
#define CREDITS_H_INCLUDED #define CREDITS_H_INCLUDED
#define RBUTIL_FULLNAME "The Rockbox Utility" #define RBUTIL_FULLNAME "The Rockbox Utility"
#define RBUTIL_VERSION "Version 0.3.1.0" #define RBUTIL_VERSION "Version 0.3.2.0"
static const wxString rbutil_developers[] = { static const wxString rbutil_developers[] = {
wxT("Christi Alice Scarborough"), wxT("Christi Alice Scarborough"),

View file

@ -1,8 +1,8 @@
#define RBUTIL 1 #define RBUTIL 1
#include <wx/msw/wx.rc> #include <wx/msw/wx.rc>
RBUTIL VERSIONINFO RBUTIL VERSIONINFO
FILEVERSION 0,3,1,0 FILEVERSION 0,3,2,0
PRODUCTVERSION 0,3,1,0 PRODUCTVERSION 0,3,2,0
FILEOS 0x00000004 FILEOS 0x00000004
FILETYPE 0x00000001 FILETYPE 0x00000001
BEGIN BEGIN
@ -10,8 +10,8 @@ BEGIN
BEGIN BEGIN
BLOCK "FFFF0000" BLOCK "FFFF0000"
BEGIN BEGIN
VALUE "FileVersion", "0.3.1.0\0" VALUE "FileVersion", "0.3.2.0\0"
VALUE "ProductVersion", "0.3.1.0\0" VALUE "ProductVersion", "0.3.2.0\0"
VALUE "CompanyName", "Rockbox Team\0" VALUE "CompanyName", "Rockbox Team\0"
VALUE "FileDescription", "Rockbox Utility\0" VALUE "FileDescription", "Rockbox Utility\0"
VALUE "InternalName", "rbutil\0" VALUE "InternalName", "rbutil\0"

View file

@ -58,6 +58,7 @@
<Add option="-D__GNUWIN32__" /> <Add option="-D__GNUWIN32__" />
<Add option="-D__WXMSW__" /> <Add option="-D__WXMSW__" />
<Add option="-DUSE_PCH" /> <Add option="-DUSE_PCH" />
<Add option="-DRBUTIL" />
<Add directory="$(#WX.include)" /> <Add directory="$(#WX.include)" />
<Add directory="$(#WX.lib)\gcc_lib$(WX_CFG)\msw" /> <Add directory="$(#WX.lib)\gcc_lib$(WX_CFG)\msw" />
<Add directory="$(#WX)\contrib\include" /> <Add directory="$(#WX)\contrib\include" />
@ -130,9 +131,22 @@
<Unit filename="rbutil.iss" /> <Unit filename="rbutil.iss" />
<Unit filename="rbutilApp.cpp" /> <Unit filename="rbutilApp.cpp" />
<Unit filename="rbutilApp.h" /> <Unit filename="rbutilApp.h" />
<Unit filename="rbutilCtrls.cpp" />
<Unit filename="rbutilCtrls.h" />
<Unit filename="rbutilFrm.cpp" /> <Unit filename="rbutilFrm.cpp" />
<Unit filename="rbutilFrm.h" /> <Unit filename="rbutilFrm.h" />
<Unit filename="rbutilFrm_XPM.xpm" /> <Unit filename="rbutilFrm_XPM.xpm" />
<Unit filename="sansapatcher\parttypes.h" />
<Unit filename="sansapatcher\sansaio-win32.c">
<Option compilerVar="CC" />
<Option compiler="gcc" use="1" buildCommand="mingw32-gcc.exe -W -g -pipe -mthreads -Winvalid-pch -D__GNUWIN32__ -D__WXMSW__ -DUSE_PCH -g -I.\ -IC:\Dev-Cpp\include -c $file -o .objs\sansapatcher\sansaio-win32.o" />
</Unit>
<Unit filename="sansapatcher\sansaio.h" />
<Unit filename="sansapatcher\sansapatcher.c">
<Option compilerVar="CC" />
<Option compiler="gcc" use="1" buildCommand="mingw32-gcc.exe -W -g -pipe -mthreads -Winvalid-pch -D__GNUWIN32__ -D__WXMSW__ -DUSE_PCH -g -I.\ -IC:\Dev-Cpp\include -c $file -o .objs\sansapatcher\sansapatcher.o" />
</Unit>
<Unit filename="sansapatcher\sansapatcher.h" />
<Unit filename="themes_3d.xpm" /> <Unit filename="themes_3d.xpm" />
<Unit filename="tools2_3d.xpm" /> <Unit filename="tools2_3d.xpm" />
<Unit filename="uninstall_3d.xpm" /> <Unit filename="uninstall_3d.xpm" />

View file

@ -35,6 +35,7 @@ platform22=iaudiox5
platform23=iaudiom5 platform23=iaudiom5
platform24=iaudiox5v platform24=iaudiox5v
platform25=gigabeatf platform25=gigabeatf
platform26=sansae200
[player] [player]
name=Archos Jukebox Player 6000, Jukebox Studio 5/10/20 name=Archos Jukebox Player 6000, Jukebox Studio 5/10/20
@ -259,3 +260,12 @@ needsbootloader=yes
bootloadermethod=gigabeatf bootloadermethod=gigabeatf
bootloadername=FWIMG01.DAT bootloadername=FWIMG01.DAT
resolution=240x320x16 resolution=240x320x16
[sansae200]
name=Sandisk Sansa E200
platform=sansae200
released=no
needsbootloader=yes
bootloadermethod=sansapatcher
bootloadername=PP5022.mi4
resolution=176x220x16

View file

@ -84,6 +84,8 @@ bool rbutilFrmApp::OnInit()
myFrame->Show(TRUE); myFrame->Show(TRUE);
initIpodpatcher(); // reserve mem for ipodpatcher initIpodpatcher(); // reserve mem for ipodpatcher
initSansaPatcher(); // reserve mem for sansapatcher
wxInitAllImageHandlers(); //init Image handlers wxInitAllImageHandlers(); //init Image handlers
wxLogVerbose(wxT("=== end rbUtilFrmApp::OnInit()")); wxLogVerbose(wxT("=== end rbUtilFrmApp::OnInit()"));

View file

@ -414,23 +414,38 @@ void DeviceSelectorCtrl::OnAutoDetect(wxCommandEvent& event)
if(n == 1) if(n == 1)
{ {
wxString temp(ipod.targetname,wxConvUTF8); wxString temp(ipod.targetname,wxConvUTF8);
int index = gv->plat_bootloadername.Index(temp); int index = gv->plat_bootloadername.Index(temp); // use the bootloader names..
m_deviceCbx->SetValue(gv->plat_name[index]); m_deviceCbx->SetValue(gv->plat_name[index]);
gv->curplat=gv->plat_id[index]; gv->curplat=gv->plat_id[index];
return;
} }
else if (n > 1) else if (n > 1)
{ {
WARN_DIALOG(wxT("More then one device Ipod detected, please connect only One"), WARN_DIALOG(wxT("More then one Ipod device detected, please connect only One"),
wxT("Detecting a Device")); wxT("Detecting a Device"));
return; return;
} }
else
struct sansa_t sansa;
int n2 = sansa_scan(&sansa);
if(n2==1)
{ {
WARN_DIALOG(wxT("No Device detected. (This function currently only works for Ipods)."), int index = gv->plat_id.Index(wxT("sansae200"));
m_deviceCbx->SetValue(gv->plat_name[index]);
gv->curplat=gv->plat_id[index];
return;
}
else if (n2 > 1)
{
WARN_DIALOG(wxT("More then one Sansa device detected, please connect only One"),
wxT("Detecting a Device")); wxT("Detecting a Device"));
return; return;
} }
WARN_DIALOG(wxT("No Device detected. (This function currently only works for Ipods and Sansas)."),
wxT("Detecting a Device"));
return;
} }
///////////////////////////////////////////// /////////////////////////////////////////////

View file

@ -374,6 +374,17 @@ void rbutilFrm::OnBootloaderRemoveBtn(wxCommandEvent& event)
MESG_DIALOG(wxT("The Uninstallation failed.") ); MESG_DIALOG(wxT("The Uninstallation failed.") );
} }
} }
if(bootloadermethod == wxT("sansapatcher"))
{
if(sansapatcher(BOOTLOADER_REM,gv->plat_bootloadername[index]))
{
MESG_DIALOG(wxT("The Bootloader has been uninstalled.") );
}
else
{
MESG_DIALOG(wxT("The Uninstallation failed.") );
}
}
else if(bootloadermethod== wxT("gigabeatf")) else if(bootloadermethod== wxT("gigabeatf"))
{ {
@ -439,6 +450,18 @@ void rbutilFrm::OnBootloaderBtn(wxCommandEvent& event)
MESG_DIALOG(wxT("The installation has failed.") ); MESG_DIALOG(wxT("The installation has failed.") );
} }
} }
if(bootloadermethod == wxT("sansapatcher"))
{
if(sansapatcher(BOOTLOADER_ADD,gv->plat_bootloadername[index]))
{
MESG_DIALOG(wxT("The Bootloader has been installed on your device.") );
}
else
{
MESG_DIALOG(wxT("The installation has failed.") );
}
}
else if(bootloadermethod== wxT("gigabeatf")) else if(bootloadermethod== wxT("gigabeatf"))
{ {

View file

@ -42,10 +42,12 @@
#include "sansaio.h" #include "sansaio.h"
#ifndef RBUTIL
void print_error(char* msg) void print_error(char* msg)
{ {
perror(msg); perror(msg);
} }
#endif
int sansa_open(struct sansa_t* sansa, int silent) int sansa_open(struct sansa_t* sansa, int silent)
{ {

View file

@ -53,6 +53,7 @@ static int unlock_volume(HANDLE hDisk)
&dummy, NULL); &dummy, NULL);
} }
#ifndef RBUTIL
void print_error(char* msg) void print_error(char* msg)
{ {
char* pMsgBuf; char* pMsgBuf;
@ -65,7 +66,7 @@ void print_error(char* msg)
printf(pMsgBuf); printf(pMsgBuf);
LocalFree(pMsgBuf); LocalFree(pMsgBuf);
} }
#endif
int sansa_open(struct sansa_t* sansa, int silent) int sansa_open(struct sansa_t* sansa, int silent)
{ {
DISK_GEOMETRY_EX diskgeometry_ex; DISK_GEOMETRY_EX diskgeometry_ex;

View file

@ -38,7 +38,7 @@
#endif #endif
struct partinfo_t { struct sansa_partinfo_t {
unsigned long start; /* first sector (LBA) */ unsigned long start; /* first sector (LBA) */
unsigned long size; /* number of sectors */ unsigned long size; /* number of sectors */
int type; int type;
@ -57,7 +57,7 @@ struct sansa_t {
HANDLE dh; HANDLE dh;
char diskname[4096]; char diskname[4096];
int sector_size; int sector_size;
struct partinfo_t pinfo[4]; struct sansa_partinfo_t pinfo[4];
int hasoldbootloader; int hasoldbootloader;
loff_t start; /* Offset in bytes of firmware partition from start of disk */ loff_t start; /* Offset in bytes of firmware partition from start of disk */
}; };

View file

@ -28,8 +28,10 @@
#include "sansaio.h" #include "sansaio.h"
#include "sansapatcher.h" #include "sansapatcher.h"
#include "bootimg.h"
#ifndef RBUTIL
#include "bootimg.h"
#endif
/* The offset of the MI4 image header in the firmware partition */ /* The offset of the MI4 image header in the firmware partition */
#define PPMI_OFFSET 0x80000 #define PPMI_OFFSET 0x80000
@ -571,7 +573,9 @@ int sansa_add_bootloader(struct sansa_t* sansa, char* filename, int type)
bl_length = filesize(infile); bl_length = filesize(infile);
} else { } else {
#ifndef RBUTIL
bl_length = LEN_bootimg; bl_length = LEN_bootimg;
#endif
} }
/* Create PPMI header */ /* Create PPMI header */
@ -595,7 +599,9 @@ int sansa_add_bootloader(struct sansa_t* sansa, char* filename, int type)
return -1; return -1;
} }
} else { } else {
#ifndef RBUTIL
memcpy(sectorbuf+0x200,bootimg,LEN_bootimg); memcpy(sectorbuf+0x200,bootimg,LEN_bootimg);
#endif
} }
/* Load original firmware from Sansa to the space after the bootloader */ /* Load original firmware from Sansa to the space after the bootloader */