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