www.pudn.com > LPT_I2C_ADuC.rar > I2C_BASEFUNTION.c


#include  
#include  
#include  
#include "LPT_I2C_ADuC.h" 
#include "I2C_DEVICE.h" 
#include "I2C_PROTOCOL.h" 
#include "I2C_LPT.h"  
 
int CVICALLBACK on_LPT_I2C_CONFIG (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{int RIN_I2C_CHECK; 
	switch (event) 
		{ 
		case EVENT_COMMIT: 
		GetCtrlVal (panel, PANEL_RIN_I2C_CHECK, &RIN_I2C_CHECK);  
		if (RIN_I2C_CHECK>=0) I2C_position = RIN_I2C_CHECK; 
		 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK on_I2C_CHECK (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{ unsigned char HOST_SDA_IN, HOST_SDA_IN_error; 
 int error, CONNECTION_OK, i; 
  
	switch (event) 
		{ 
		case EVENT_COMMIT: 
 
			SetCtrlVal (panel, PANEL_LED_I2C_CHECK_OK, 0); //灯灭 
			 
			Init_LPT();//初始化并口 
			 
			//try I2C_position=0;  
			I2C_position=0;//I2C_position=0; 
			SetCtrlVal (panel, PANEL_RIN_I2C_CHECK, I2C_position); 
			I2C_STOP(); 
			HOST_SDA_IN_error=0; 
			SetSDA(0); 
			HOST_SDA_IN=GetSDA(); 
			if (HOST_SDA_IN != 0) {HOST_SDA_IN_error++;} 
			SetSDA(1); 
			HOST_SDA_IN=GetSDA(); 
			if (HOST_SDA_IN != 1) {HOST_SDA_IN_error++;} 
			if (HOST_SDA_IN_error == 0)//成功 
			{ 
				CONNECTION_OK = ! (HOST_SDA_IN_error); 
				SetCtrlVal (panel, PANEL_LED_I2C_CHECK_OK, CONNECTION_OK); 
				I2C_STOP(); 
				break; 
			} 
 
			//try I2C_position=1; 
			I2C_position=1;//I2C_position=1; 
			SetCtrlVal (panel, PANEL_RIN_I2C_CHECK, I2C_position); 
			I2C_STOP(); 
			HOST_SDA_IN_error=0; 
			SetSDA(0); 
			HOST_SDA_IN=GetSDA(); 
			if (HOST_SDA_IN != 0) {HOST_SDA_IN_error++;} 
			SetSDA(1); 
			HOST_SDA_IN=GetSDA(); 
			if (HOST_SDA_IN != 1) {HOST_SDA_IN_error++;} 
			if (HOST_SDA_IN_error == 0)//成功 
			{ 
				CONNECTION_OK = ! (HOST_SDA_IN_error); 
				SetCtrlVal (panel, PANEL_LED_I2C_CHECK_OK, CONNECTION_OK); 
				I2C_STOP(); 
				break; 
			} 
 
			//try failed 
			I2C_position = -1; 
			SetCtrlVal (panel, PANEL_LED_I2C_CHECK_OK, 0); 
			SetCtrlVal (panel, PANEL_RIN_I2C_CHECK, -1); 
			 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK on_PW_ACTIVATION (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{int error; 
 
	switch (event) 
		{ 
		case EVENT_COMMIT: 
			error = I2C_FourBYTE_WRITE(0xA0, 124, 0, 1, 2, 3); 
			if (error<0) { MessagePopup ("ERROR", "NO Acknowledge form target !"); return -1; } 
			//error=I2C_BYTE_WRITE(0xB2, 95, 1);//set flag to tell MCU to erase page0 
			//if (error<0) {MessagePopup ("ERROR", "NO Acknowledge from target !"); return -1;} 
 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK on_SEARCH_I2C_ADD (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{ int No; 
  int device_addr; 
  char str[50]; 
   
	switch (event) 
		{ 
		case EVENT_COMMIT: 
			SetWaitCursor (1); 
			ClearListCtrl (panel, PANEL_LISTBOX_I2C_ADD); 
			GetCtrlVal (panel, PANEL_RIN_I2C_CHECK, &I2C_position); 
 
			No=0; 
 
		  for (device_addr=0x00; device_addr<256; device_addr+=2) 
			{ 
			  // START 
			  I2C_START(); 
			  //device address code sda will be "str_device_addr+0" 
			  I2C_WRITE_DEVICE_ADDR(device_addr,0); 
			  //get acknowledge 
			  if (I2C_GET_ACK()) //error with no ack signal from target 
			  { //STOP 
			    I2C_STOP(); 
			  } 
			  else 
			  { //STOP 
			    I2C_STOP(); 
			    No++; 
			    sprintf (str, "Device %2d: 0x%02X", No,device_addr); 
				InsertListItem (panel, PANEL_LISTBOX_I2C_ADD, No-1, str, No-1); 
				ProcessDrawEvents (); 
 			  } 
		 	} 
 
			 
			SetWaitCursor (0); 
 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK on_LISTBOX_I2C_ADD (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{char str[50],temp_char; 
 int rom_addr, I2CSLAADD; 
 int  item_index; 
  
	switch (event) 
		{ 
		case EVENT_COMMIT: 
			GetCtrlIndex (panel, PANEL_LISTBOX_I2C_ADD, &item_index); 
		 
			GetLabelFromIndex (panel, PANEL_LISTBOX_I2C_ADD, item_index, str); 
 
			sscanf (str, "Device %02d : 0x%02X", &item_index,&I2CSLAADD); 
 
			SetCtrlVal (panel, PANEL_NUM_EEPROM_SLAVE_ADD, I2CSLAADD);  
 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK on_list (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{char rom_value_str[25],temp_char; 
 int rom_addr, rom_value; 
 int  item_index; 
  
	switch (event) 
		{ 
		case EVENT_COMMIT: 
			GetCtrlIndex (panel, PANEL_LISTBOX_I2CPAGEREAD, &item_index); 
		 
			GetLabelFromIndex (panel, PANEL_LISTBOX_I2CPAGEREAD, item_index, rom_value_str); 
 
			sscanf (rom_value_str, "0x%02X %03d : 0x%02x : %c", &rom_addr, &rom_addr, &rom_value,&temp_char); 
 
			SetCtrlVal (panel, PANEL_NUM_I2CWORD_ADD, rom_addr);  
			SetCtrlVal (panel, PANEL_NUM_I2CREADBYTE, rom_value);  
 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK on_READI2C (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{char rom_value_str[25],temp_char; 
 int  item_index,error; 
 BYTE device_addr=0xA0,rom_addr,rom_value; 
	switch (event) 
		{ 
		case EVENT_COMMIT: 
 
			//GetCtrlIndex (panel, PANEL_LISTBOX_I2CPAGEREAD, &item_index); 
			 
			GetCtrlVal (panel, PANEL_NUM_EEPROM_SLAVE_ADD, &device_addr);  
			GetCtrlVal (panel, PANEL_NUM_I2CWORD_ADD_2, &rom_addr);  
 
													  
			error = I2C_BYTE_READ(device_addr, rom_addr); 
			if (error<0) { MessagePopup ("ERROR", "NO Acknowledge form target !"); return -1; } 
			rom_value = error; 
			SetCtrlVal (panel, PANEL_NUM_I2CREADBYTE_2, rom_value); 			 
 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK on_UPDATE (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{char rom_value_str[25],temp_char; 
 int  item_index,error; 
 BYTE device_addr=0xA0,rom_addr,rom_value; 
	switch (event) 
		{ 
		case EVENT_COMMIT: 
 
			//GetCtrlIndex (panel, PANEL_LISTBOX_I2CPAGEREAD, &item_index); 
			 
			GetCtrlVal (panel, PANEL_NUM_EEPROM_SLAVE_ADD, &device_addr);  
			GetCtrlVal (panel, PANEL_NUM_I2CWORD_ADD, &rom_addr);  
			GetCtrlVal (panel, PANEL_NUM_I2CREADBYTE, &rom_value); 			 
 
													  
			error = I2C_BYTE_WRITE(device_addr, rom_addr, rom_value); 
			if (error<0) { MessagePopup ("ERROR", "NO Acknowledge form target !"); } 
			else 
			{	sprintf(rom_value_str,"0x%02X %03d: 0x%02x : %c", rom_addr,rom_addr,rom_value,rom_value); 
				ReplaceListItem (panel, PANEL_LISTBOX_I2CPAGEREAD, rom_addr, 
								 rom_value_str, rom_addr); 
			 } 
 
			break; 
		} 
	return 0; 
} 
 
int CVICALLBACK on_I2C_PAGE_READ (int panel, int control, int event, 
		void *callbackData, int eventData1, int eventData2) 
{ unsigned char  device_addr=0xA0,rom_value,rom_value_arr[256]; 
  int error,rom_addr; 
  char rom_value_str[25]; 
 
	switch (event) 
		{ 
		case EVENT_COMMIT: 
			 
			SetWaitCursor (1); 
			 
			GetCtrlVal (panel, PANEL_NUM_EEPROM_SLAVE_ADD, &device_addr); 
			error = I2C_PAGE_READ(device_addr, rom_value_arr);  
			//error = I2C_BYTEs_READ(device_addr, 0, 256, rom_value_arr); 
			if (error<0) {MessagePopup ("ERROR", "NO Acknowledge form target !"); } 
			else  
			{ 
			ClearListCtrl (panel, PANEL_LISTBOX_I2CPAGEREAD); 
 		//	sprintf(rom_value_str,"Hello World"); 
		//	InsertListItem (panel, PANEL_LISTBOX_I2CPAGEREAD, -1, rom_value_str, 256); 
			 for (rom_addr=0; rom_addr<=0xff;rom_addr++) 
			 {  rom_value=rom_value_arr[rom_addr]; 
				sprintf(rom_value_str,"0x%02X %03d: 0x%02x : %c", rom_addr,rom_addr,rom_value,rom_value); 
 
				InsertListItem (panel, PANEL_LISTBOX_I2CPAGEREAD, rom_addr, rom_value_str, 
									rom_addr); 
				ProcessDrawEvents (); 
			 } 
			} 
		SetWaitCursor (0); 
		break; 
		} 
	return 0; 
}