📄 smcgui.c
字号:
#include <ansi_c.h>
#include <utility.h>
#include <cvirte.h> /* Needed if linking in external compiler; harmless otherwise */
#include <userint.h>
#include "SMCanalyzer.h"
#include "hwcfg.h"
#include "common.h"
#include "HwAccess.h"
// Variable definition
static int panelHandle;
unsigned char page_data[528],write_data[528],spare_data[16];
unsigned int page_add;
unsigned char Card_State,pagedata_string[4000];
int main (int argc, char *argv[])
{
if (InitCVIRTE (0, argv, 0) == 0) /* Needed if linking in external compiler; harmless otherwise */
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "SMCanalyzer.uir", PANEL)) < 0)
return -1;
if (GetCurrentPlatform() == 3) // Is WINNT?
{
if (CVILowLevelSupportDriverLoaded() == 0) // Lowlevel Driver had loaded at startup?
{
MessagePopup ("Error","WINNT didn't load the low level driver");
QuitUserInterface (0);
}
}
HwInitial();
Hw_VccOff();
DisplayPanel (panelHandle);
RunUserInterface ();
return 0;
}
int CVICALLBACK Timer_5ms_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
unsigned char status;
int dimmed_state;
switch (event)
{
case EVENT_TIMER_TICK:
/* Check Reader */
if (CheckReader())
{
SetCtrlVal (PANEL,PANEL_READER,1);
SetCtrlAttribute (panelHandle, PANEL_ALERT_PIC,ATTR_VISIBLE,0);
SetCtrlAttribute (panelHandle, PANEL_ALERT_TEXT,ATTR_VISIBLE,0);
/* Check SmartMedia Card status */
Card_State = Hw_ChkCardIn();
SetCtrlVal (PANEL,PANEL_CARDDET_LED,Card_State);
SetCtrlVal (PANEL,PANEL_BUSY_LED,Hw_ChkBusy());
if (Card_State) dimmed_state = 0;
else dimmed_state = 1;
SetCtrlAttribute (panelHandle, PANEL_READ_PRAMETER, ATTR_DIMMED, dimmed_state);
SetCtrlAttribute (panelHandle, PANEL_FORMAT, ATTR_DIMMED, dimmed_state);
SetCtrlAttribute (panelHandle, PANEL_ERASEALL, ATTR_DIMMED, dimmed_state);
SetCtrlAttribute (panelHandle, PANEL_ERASEBLOCK, ATTR_DIMMED, dimmed_state);
SetCtrlAttribute (panelHandle, PANEL_READ_PHYSICAL_BLOCK, ATTR_DIMMED, dimmed_state);
SetCtrlAttribute (panelHandle, PANEL_READ_PHYSICAL_ALL, ATTR_DIMMED, dimmed_state);
SetCtrlAttribute (panelHandle, PANEL_WRITE_PHYSICAL_BLOCK, ATTR_DIMMED, dimmed_state);
}
else
{
ResetTextBox (panelHandle, PANEL_SMC_PHY_DATA, " ");
SetCtrlAttribute (panelHandle, PANEL_ALERT_PIC,ATTR_VISIBLE,1);
SetCtrlAttribute (panelHandle, PANEL_ALERT_TEXT,ATTR_VISIBLE,1);
SetCtrlVal (PANEL,PANEL_READER,0);
SetCtrlVal (PANEL,PANEL_CARDDET_LED,0);
SetCtrlVal (PANEL,PANEL_BUSY_LED,0);
SetCtrlAttribute (panelHandle, PANEL_READ_PRAMETER, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_FORMAT, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_ERASEALL, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_ERASEBLOCK, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_READ_PHYSICAL_BLOCK, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_READ_PHYSICAL_ALL, ATTR_DIMMED, 1);
SetCtrlAttribute (panelHandle, PANEL_WRITE_PHYSICAL_BLOCK, ATTR_DIMMED, 1);
}
break;
}
return 0;
}
int CVICALLBACK Quit_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0);
break;
}
return 0;
}
int CVICALLBACK About_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
MessagePopup ("About me","This is a Smart-Media Card Reader with parallel port interface(EPP mode).\n\nDesigned by Janeslee\n\nAll Right Reserved");
break;
}
return 0;
}
int CVICALLBACK Erase_Block_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
unsigned int i,j,addstring,start_address;
short int block_number;
unsigned char page_number,*pagedata_pnt;
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(PANEL,PANEL_PHYSICAL_BLOCK_NUMBER,&block_number);
GetCtrlVal(PANEL,PANEL_PHYSICAL_PAGE_NUMBER,&page_number);
start_address = block_number * 0x4000 + page_number * 0x200;
Hw_VccOn();
SetCtrlVal (PANEL,PANEL_POWER_LED,1);
Delay(0.2); // Delay 100ms
ReadID();
Delay(0.02);
if (BlockErase(start_address) != PASS) printf("Erase failure");
SetCtrlVal (PANEL,PANEL_POWER_LED,0);
Hw_VccOff();
break;
}
return 0;
}
int CVICALLBACK Erase_All_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
unsigned int page_add,max_page_add,i;
switch (event)
{
case EVENT_COMMIT:
Hw_VccOn();
SetCtrlVal (PANEL,PANEL_POWER_LED,1);
Delay(0.2);
ReadID();
max_page_add = (unsigned int)(info_flash[3]*info_flash[2]);
Delay(0.01);
for(page_add=0;page_add<max_page_add; )
{
if (BlockErase(page_add<<9) != PASS) printf("Erase failure at %x",(page_add<<8));
page_add +=0x20;
}
SetCtrlVal (PANEL,PANEL_POWER_LED,0);
Hw_VccOff();
break;
}
return 0;
}
int CVICALLBACK Dos_Format_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
}
return 0;
}
int CVICALLBACK Read_Prameter_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
unsigned char parameter_string[20],line_index;
unsigned int i;
switch (event)
{
case EVENT_COMMIT:
Hw_VccOn();
SetCtrlVal (PANEL,PANEL_POWER_LED,1);
Delay(0.2);
ReadID();
SetCtrlVal (PANEL,PANEL_POWER_LED,0);
Hw_VccOff();
for (line_index = 0;line_index < 10;line_index++)
{
if (line_index == 0)
{
switch ( info_flash[0] )
{
case 0xec: sprintf(parameter_string," 0x%x -- SAMSUNG",info_flash[line_index]);break;
case 0x98: sprintf(parameter_string," 0x%x -- TOSHIBA",info_flash[line_index]);break;
default: sprintf(parameter_string," 0x%x -- UNKNOWN",info_flash[line_index]);break;
}
}
else if (line_index == 1) sprintf(parameter_string," %d MB NAND FLASH",info_flash[line_index]);
else sprintf(parameter_string," %d",info_flash[line_index]);
ReplaceTextBoxLine (PANEL,PANEL_SMC_PARAMETER,(line_index*2+1),parameter_string);
}
break;
}
return 0;
}
int CVICALLBACK Read_Physical_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
unsigned int i,j,addstring,start_address;
short int block_number;
unsigned char page_number,*pagedata_pnt;
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(PANEL,PANEL_PHYSICAL_BLOCK_NUMBER,&block_number);
GetCtrlVal(PANEL,PANEL_PHYSICAL_PAGE_NUMBER,&page_number);
start_address = block_number * 0x4000 + page_number * 0x200;
Hw_VccOn();
SetCtrlVal (PANEL,PANEL_POWER_LED,1);
Delay(0.2);
ReadID();
Delay(0.01);
PageRead(page_data,start_address);
SetCtrlVal (PANEL,PANEL_POWER_LED,0);
Hw_VccOff();
pagedata_pnt = pagedata_string;
for (i=0;i < (info_flash[4]/16);i++) // 528 / 16 Line
{
if (i == (info_flash[4]/16 - 1)) sprintf (pagedata_pnt," SPARE : ");
else
{
addstring = (start_address & 0xfffffe00) + (i<<4);
sprintf (pagedata_pnt," %.8X : ",addstring);
}
pagedata_pnt += 18;
for (j=0;j<16;j++)
{
sprintf (pagedata_pnt,"%.2X ",page_data[i*16+j]);
pagedata_pnt +=3;
}
sprintf (pagedata_pnt,"\n");
pagedata_pnt++;
}
ResetTextBox (PANEL,PANEL_SMC_PHY_DATA,pagedata_string);
SetCtrlAttribute (panelHandle, PANEL_MDY_PHYSICAL_PAGE, ATTR_DIMMED, 0);
break;
}
return 0;
}
int CVICALLBACK Read_Physical_AllBlock_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
unsigned int address,i,j,addstring;
short int block_number;
unsigned char page_number,pagedata_string[4000],*pagedata_pnt;
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(PANEL,PANEL_PHYSICAL_BLOCK_NUMBER,&block_number);
Hw_VccOn();
SetCtrlVal (PANEL,PANEL_POWER_LED,1);
Delay(0.2);
ResetTextBox (PANEL,PANEL_SMC_PHY_DATA,"");
ReadID();
Delay(0.01);
//info_flash[2]*info_flash[3]*info_flash[5]
for (address=block_number*0x4000;address < ((block_number+1)*0x4000);address += info_flash[5] )
{
PageRead(page_data,address);
pagedata_pnt = pagedata_string;
for (i=0;i < (info_flash[4]/16);i++)
{
if (i == (info_flash[4]/16 - 1)) sprintf (pagedata_pnt," SPARE : ");
else
{
addstring = (address & 0xfffffe00) + (i<<4);
sprintf (pagedata_pnt," %.8X : ",addstring);
}
pagedata_pnt += 18;
for (j=0;j<16;j++)
{
sprintf (pagedata_pnt,"%.2X ",page_data[i*16+j]);
pagedata_pnt +=3;
}
sprintf (pagedata_pnt,"\n");
pagedata_pnt++;
}
SetCtrlVal (PANEL,PANEL_SMC_PHY_DATA,pagedata_string);
}
SetCtrlVal (PANEL,PANEL_POWER_LED,0);
Hw_VccOff();
break;
}
return 0;
}
int CVICALLBACK Read_Logical_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
break;
}
return 0;
}
int CVICALLBACK Write_Physical_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
unsigned int i,j,addstring,start_address;
short int block_number;
unsigned char page_number,pagedata_string[4000],*pagedata_pnt;
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(PANEL,PANEL_PHYSICAL_BLOCK_NUMBER,&block_number);
GetCtrlVal(PANEL,PANEL_PHYSICAL_PAGE_NUMBER,&page_number);
start_address = block_number * 0x4000 + page_number * 0x200;
Hw_VccOn();
SetCtrlVal (PANEL,PANEL_POWER_LED,1);
Delay(0.2);
for(i=0;i<528;i++) pagedata_string[i]=(unsigned char)i;
PageWrite(pagedata_string,start_address);
Delay(0.1);
Hw_VccOff();
SetCtrlVal (PANEL,PANEL_POWER_LED,0);
break;
}
return 0;
}
int CVICALLBACK Modify_Physical_Callback (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
unsigned char modify_data[528],data_buff[100],modify_byte1,modify_byte2,page_number;
short int block_number;
unsigned int i,row,linep,bytep,start_address,err;
switch (event)
{
case EVENT_COMMIT:
GetCtrlVal(PANEL,PANEL_PHYSICAL_BLOCK_NUMBER,&block_number);
GetCtrlVal(PANEL,PANEL_PHYSICAL_PAGE_NUMBER,&page_number);
start_address = block_number * 0x4000 + page_number * 0x200;
Hw_VccOn();
SetCtrlVal (PANEL,PANEL_POWER_LED,1);
Delay(0.2);
/* Transform ASCII data to HEX data */
err = bytep = 0;
for(row=0;row<(info_flash[4]/16);row++)
{
GetTextBoxLine (panelHandle,PANEL_SMC_PHY_DATA,row,data_buff); // Get text from current line
for(i=0;i<16;i++)
{
modify_byte1 = data_buff[18 + i*3];
if (0x2F < modify_byte1 && modify_byte1 < 0x3A) modify_byte1 -= 0x30;
else if (0x40 < modify_byte1 && modify_byte1 < 0x47) modify_byte1 -= 0x37;
else { printf("Character error"); err = 0xFF; break; }
modify_byte2 = data_buff[18 + i*3 + 1];
if (0x2F < modify_byte2 && modify_byte2 < 0x3A) modify_byte2 -= 0x30;
else if (0x40 < modify_byte2 && modify_byte2 < 0x47) modify_byte2 -= 0x37;
else { printf("Character error"); err = 0xFF; break; }
modify_data[bytep++] = modify_byte1 * 16 + modify_byte2;
}
if (err) break;
}
if (err) break;
PageWrite(modify_data,start_address);
Delay(0.1);
Hw_VccOff();
SetCtrlVal (PANEL,PANEL_POWER_LED,0);
SetCtrlAttribute (panelHandle, PANEL_MDY_PHYSICAL_PAGE, ATTR_DIMMED, 1);
break;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -