In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

USB Gecko

From WiiBrew
Jump to navigation Jump to search

To code computer side usbgecko application you need :


I have started a linux application, all seems ok, except the ftdi_read_data that always return 0 :/ For those who interrested this page can be a base to make a usable application.

#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);
 
 }