Changes

Jump to navigation Jump to search
4,377 bytes removed ,  10:04, 25 September 2008
cleaning out the codedump and adding some real facts
Line 7: Line 7:  
* For Linux : [http://www.intra2net.com/de/produkte/opensource/ftdi/ API] [http://www.intra2net.com/de/produkte/opensource/ftdi/documentation/group__libftdi.html DOC]
 
* For Linux : [http://www.intra2net.com/de/produkte/opensource/ftdi/ API] [http://www.intra2net.com/de/produkte/opensource/ftdi/documentation/group__libftdi.html DOC]
   −
 
+
==Hardware==
I have started a Linux application, all seems ok, except the ftdi_read_data that always return 0 :/
+
The usb gecko is a two step converter to convert EXI<->serial<->usb. It is a fancy serial port. All the fun is provided by software. No, the EXI interrupt is not possible to trigger from the PC.
For those who interested this page can be a base to make a usable application.
  −
 
  −
<source lang="c">
  −
#include <stdio.h>
  −
#include <sys/types.h>
  −
#include <ftdi.h>
  −
  −
//--------------------------  Globals ----------------------------------
  −
int32_t status;
  −
int ret;
  −
int32_t TxSent;
  −
int32_t RxSent;
  −
  −
struct ftdi_context ftdic;
  −
  −
int cmd_readmem = 0x04;
  −
//--------------------------  Function Prototypes ----------------------------------
  −
void gecko_opendevice();
  −
  −
  −
  −
  −
int main(int argc, char **argv)
  −
{
  −
void* plop;
  −
unsigned char responseback = 0;
  −
  −
ftdi_init(&ftdic);
  −
  −
  −
printf("-----------------------------------\n");
  −
printf("- NoNameNo's UsbGecko Linux Tools -\n");
  −
printf("-----------------------------------\n\n");
  −
  −
gecko_opendevice();
  −
printf("Connecting to Wii.\n");
  −
printf("%x\n",gecko_writebyte(&cmd_readmem,1));
  −
printf("%x\n",gecko_readbyte(&responseback, 1));
  −
ftdi_usb_close(&ftdic);
  −
ftdi_deinit(&ftdic);
  −
  −
return EXIT_SUCCESS;
  −
}
  −
//----------------------------------------------------------------------------------------------------
  −
//----------------------------------------------------------------------------------------------------
  −
//----------------------------------------------------------------------------------------------------
  −
int gecko_readbyte(unsigned char* lpBuffer, int dwBytesToRead)
  −
{
  −
status = ftdi_read_data(&ftdic, lpBuffer, dwBytesToRead);
  −
  −
if (status > 0){
  −
if(status != dwBytesToRead){
  −
return 2;
  −
}
  −
}
  −
else{
  −
printf("[Error] UsbGecko Reading Device\n");
  −
//ftdi_usb_close(&ftdic);
  −
//ftdi_deinit(&ftdic);
  −
return status;
  −
}
  −
  −
return 1;
  −
}
  −
  −
//----------------------------------------------------------------------------------------------------
  −
//----------------------------------------------------------------------------------------------------
  −
//----------------------------------------------------------------------------------------------------
  −
int gecko_writebyte(unsigned char* lpBuffer, int dwBytesToWrite)
  −
{
  −
status = ftdi_write_data(&ftdic, lpBuffer, dwBytesToWrite);
  −
  −
if (status > 0){
  −
if(status != dwBytesToWrite){
  −
return 2;
  −
}
  −
}
  −
else{
  −
printf("[Error] UsbGecko Writing Device\n");
  −
ftdi_usb_close(&ftdic);
  −
ftdi_deinit(&ftdic);
  −
return 0;
  −
}
  −
  −
return 1;
  −
}
  −
 
  −
  −
  −
//----------------------------------------------------------------------------------------------------
  −
//----------------------------------------------------------------------------------------------------
  −
//----------------------------------------------------------------------------------------------------
  −
void gecko_opendevice()
  −
{
  −
//---------------------------open device --------------------------------------
  −
if((ret = ftdi_usb_open(&ftdic, 0x0403, 0x6001)) < 0) {
  −
printf("[Error] UsbGecko NOT Detected\n");
  −
exit(0);
  −
}
  −
else{ 
  −
printf("[OK] UsbGecko Detected\n");
  −
}
  −
  −
  −
//---------------------------Reset device --------------------------------------
  −
if((ret = ftdi_usb_reset(&ftdic)) < 0) {
  −
printf("[Error] UsbGecko Reseting Device \n");
  −
ftdi_usb_close(&ftdic);
  −
ftdi_deinit(&ftdic);
  −
exit(0);
  −
}
  −
else{ 
  −
printf("[OK] UsbGecko Reseted\n");
  −
}
  −
  −
  −
//---------------------------SetTimeOut to 2000 --------------------------------------
  −
ftdic.usb_read_timeout=2000;
  −
ftdic.usb_write_timeout=2000;
  −
printf("[OK] UsbGecko Setted 2 sec timout\n");
  −
  −
//---------------------------Purging RX/TX buffers --------------------------------------
  −
if((ret = ftdi_usb_purge_buffers(&ftdic)) < 0) {
  −
printf("[Error] UsbGecko Purging Buffer \n");
  −
ftdi_usb_close(&ftdic);
  −
ftdi_deinit(&ftdic);
  −
exit(0);
  −
}
  −
else{ 
  −
printf("[OK] UsbGecko Purged RX/TX buffers\n");
  −
}
  −
  −
  −
  −
//--------------------------- Set RX/TX size buffer --------------------------------------
  −
if((ret = ftdi_read_data_set_chunksize(&ftdic,65536)) < 0) {
  −
printf("[Error] UsbGecko Setting RX buffer size\n");
  −
ftdi_usb_close(&ftdic);
  −
ftdi_deinit(&ftdic);
  −
exit(0);
  −
}
  −
else{ 
  −
printf("[OK] UsbGecko Setted RX Buffer Size\n");
  −
}
  −
if((ret = ftdi_write_data_set_chunksize(&ftdic,65536)) < 0) {
  −
printf("[Error] UsbGecko Setting TX Buffer size\n");
  −
ftdi_usb_close(&ftdic);
  −
ftdi_deinit(&ftdic);
  −
exit(0);
  −
}
  −
else{ 
  −
printf("[OK] UsbGecko Setted TX Buffer Size\n");
  −
}
  −
  −
  −
//---------------------------Required ???  --------------------------------------
  −
sleep(1);
  −
  −
}
  −
</source>
  −
[[Category:Homebrew]]
 
351

edits

Navigation menu