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