vc6.0 提取*.lst文件,中函数地址,数据地址,应用实例 红色部分显示

来源:互联网 发布:攻击根域名服务器 编辑:程序博客网 时间:2024/06/05 03:38
// tdebugDlg.cpp : implementation file
//


#include "stdafx.h"
#include "tdebug.h"
#include "tdebugDlg.h"
#include "usbprt.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/////////////global pointer to a file/////////////
FILE *pf; 






struct g_variables_functions{
int cnt;
unsigned  longaddr[2000];
unsigned  long  len[2000];
char  name[2000][100];
unsigned  value[2000];


} g_v,g_f;


union type_change{
unsigned char byte[8];
unsigned char us_char;
char s_char;
unsigned __int16 us_short;
__int16 s_short;
unsigned __int32 us_long;
__int32 s_long;
unsigned __int64 us_long_long;
__int64 s_long_long;
float s_float;


} g_type;


/////////////////////////////////////////////////////////////////////////////
// CTdebugDlg dialog


CTdebugDlg::CTdebugDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTdebugDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTdebugDlg)
m_auto_detect = FALSE;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}


void CTdebugDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTdebugDlg)
DDX_Control(pDX, IDC_BUTTON10, m_btn_step);
DDX_Control(pDX, IDC_BUTTON9, m_btn_docmd);
DDX_Control(pDX, IDC_EDIT4, m_edit_tcdbcmd);
DDX_Control(pDX, IDC_COMBO3, m_comb_device);
DDX_Control(pDX, IDC_COMBO2, m_comb_type);
DDX_Control(pDX, IDC_COMBO1, m_comb_bus);
DDX_Control(pDX, IDC_CHECK2, m_check2);
DDX_Control(pDX, IDC_USB, m_btn_usb);
DDX_Control(pDX, IDC_BUTTON8, m_btn_clrbk);
DDX_Control(pDX, IDC_BUTTON7, m_btn_clr);
DDX_Control(pDX, IDC_CHECK4, m_check_tcpc);
DDX_Control(pDX, IDC_CHECK3, m_bk_check);
DDX_Control(pDX, IDC_STATIC_CFG, m_bd_cfg);
DDX_Control(pDX, IDC_CHECK1, m_check1);
DDX_Control(pDX, IDC_BUTTON5, m_btn_stop);
DDX_Control(pDX, IDC_BUTTON6, m_btn_run);
DDX_Control(pDX, IDC_BUTTON3, m_btn_rst);
DDX_Control(pDX, IDC_STATIC_INF, m_info);
DDX_Control(pDX, IDC_BUTTON4, m_btn_mode);
DDX_Control(pDX, IDC_BUTTON1, m_btn_update);
DDX_Control(pDX, IDC_STATIC3, m_static_data);
DDX_Control(pDX, IDC_STATIC2, m_static_addr);
DDX_Control(pDX, IDC_STATIC1, m_board1);
DDX_Control(pDX, IDC_EDIT3, m_edit3);
DDX_Control(pDX, IDC_EDIT2, m_edit2);
DDX_Control(pDX, IDC_EDIT1, m_edit1);
DDX_Check(pDX, IDC_CHECK2, m_auto_detect);
DDX_Control(pDX,IDC_CUSTOM1,m_grid);
//}}AFX_DATA_MAP
//DDX_Control(pDX,IDC_CUSTOM1,m_grid);
}


BEGIN_MESSAGE_MAP(CTdebugDlg, CDialog)
//{{AFX_MSG_MAP(CTdebugDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_EN_SETFOCUS(IDC_EDIT3, OnSetfocusEdit3)
ON_EN_KILLFOCUS(IDC_EDIT2, OnKillfocusEdit2)
ON_WM_CTLCOLOR()
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
ON_BN_CLICKED(IDC_CHECK3, OnCheck3)
ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
ON_BN_CLICKED(IDC_BUTTON8, OnButton8)
ON_BN_CLICKED(IDC_USB, OnUsb)
ON_BN_CLICKED(IDC_CHECK2, OnCheck2)
ON_BN_CLICKED(IDC_BUTTON9, OnButton9)
ON_BN_CLICKED(IDC_BUTTON10, OnButton10)
//}}AFX_MSG_MAP
ON_NOTIFY(NM_CLICK, IDC_CUSTOM1, OnGridClick)
ON_NOTIFY(GVN_ENDLABELEDIT, IDC_CUSTOM1, OnGridEndEdit)
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CTdebugDlg message handlers


BOOL CTdebugDlg::OnInitDialog()
{


    if(__argc >=2)
{
m_usb_id = strtol(__argv[1],NULL,16);


}
else
{
        m_usb_id = 0xffff;
}




CDialog::OnInitDialog();


nFullWidth=GetSystemMetrics(SM_CXSCREEN); 
nFullHeight=GetSystemMetrics(SM_CYSCREEN);


// Set the icon for this dialog.  The framework does this automatically
//  when the application's main window is not a dialog
CFont a; 
a.CreateFont( 24, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, _T( "宋体" ) ); 
m_info.SetFont(&a);
m_info.GetDC()->SetTextColor(RGB(255,0,0));

m_info.SetWindowText("device ok");




////////////////set the grid /////////////////////////////////////////
m_ImageList.Create(MAKEINTRESOURCE(IDB_BITMAP1), 16, 2, RGB(255,255,255));
m_grid.SetImageList(&m_ImageList);  //绑定grid控件和 图片列表
// m_grid.SetEditable(true);


m_grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0)); //黄色背景
m_grid.SetTextColor(RGB(0x00, 0x00, 0xff));
//m_grid.SetFixedTextColor(RGB(0xff, 0x00, 0x00)); //表头的字体颜色


OnUsb();


    unsigned char test_buf[8];
ReadMem(m_usb_handle,0x0000,test_buf,4,1);
ReadMem(m_usb_handle,0x0000,test_buf,4,4);


m_nTextLen = 0x100000;
m_edit1.SetLimitText(m_nTextLen);


return TRUE;  // return TRUE  unless you set the focus to a control
}


// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.


void CTdebugDlg::OnPaint() 
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting


SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);


// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;


// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{

CDialog::OnPaint();
}
}


// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CTdebugDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}


void CTdebugDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
int i,j;
unsigned long addr_start,addr_end,addr_now;
unsigned char buf[1024*32];
unsigned char *pt;
CString str;

// unsigned char buf[32];
if(grid_mode == 0)
{


// addr_start = g_v.addr[0];//get the start of the ".bss" section
// addr_end = g_v.addr[g_v.cnt-1] + g_v.len[g_v.cnt - 1]; // the end of the ".bss" section



if(m_usb_handle == NULL)
{
//MessageBox("no usb device!!");
debug_print("no usb device!");
}
else if(bss_end < bss_end)
{
//MessageBox("start addr is bigger than end addr!");
debug_print("start addr is bigger than end addr!");
}
else
{


ReadMem(m_usb_handle,bss_start,buf,bss_end-bss_start,device_type);
/*
addr_now = addr_start;
pt = buf; 
i = 0;

do
{
if(addr_now == g_v.addr[i])
{
for(j=0;j<8;j++){
g_type.byte[j] = pt[j];

}

pt = pt + g_v.len[i];
addr_now = addr_now + g_v.len[i];

if(g_v.len[i] == 1)
str.Format("0x%02x",g_type.us_char);
else if(g_v.len[i] == 2)
str.Format("0x%04x",g_type.us_short);
else if(g_v.len[i] == 4)
str.Format("0x%08x",g_type.us_long);
else if(g_v.len[i] > 4)
{
//str.Format("click to get value");
str.Format("");
m_grid.SetItemImage(i+1,3,5);
}
//str.Format("0x%02x%02x%02x%02x",g_type.byte[3],g_type.byte[2],g_type.byte[1],g_type.byte[0]);

//////////////set the m_grid///////////////////
m_grid.SetItemText(i+1,3,str);

//////////////end of m_grid ///////////////////
i++;
}
else
{
pt++;
addr_now++;
}*/


for(i =0;i<g_v.cnt;i++)
{
for(j=0;j<8;j++){
addr_start = g_v.addr[i] - bss_start;
g_type.byte[j] = buf[j+addr_start];
}
if(g_v.len[i] == 1)
str.Format("0x%02x",g_type.us_char);
else if(g_v.len[i] == 2)
str.Format("0x%04x",g_type.us_short);
else if(g_v.len[i] == 4)
str.Format("0x%08x",g_type.us_long);
else if(g_v.len[i] > 4)
{
//str.Format("click to get value");
str.Format("");
m_grid.SetItemImage(i+1,3,5);
}
//str.Format("0x%02x%02x%02x%02x",g_type.byte[3],g_type.byte[2],g_type.byte[1],g_type.byte[0]);

//////////////set the m_grid///////////////////
if(g_v.len[i] != 0)
m_grid.SetItemText(i+1,3,str);
else
{
m_grid.SetItemText(i+1,3,"len=0");
m_grid.SetItemImage(i+1,3,7);
}
//////////////end of m_grid ///////////////////








//m_grid.AutoSize();
}
m_grid.Refresh();
}
}
else
{
//MessageBox("must set variables mode");
debug_print("must set variable mode");


}

}
// write the memory.
void CTdebugDlg::OnButton2() 
{
// TODO: Add your control notification handler code here
CWnd *pwnd=GetDlgItem(IDC_EDIT4);
if(GetFocus()==pwnd)
{
// MessageBox("test");
OnButton9();
}
else
{
CString str;
CString tcdb_str;

unsigned char buf[4];
long addr;
unsigned long  value;
int     i;
int     byte_length;
CString  str_device;


if(m_comb_type.GetCurSel() == 0)
{
byte_length=1;
}
else if(m_comb_type.GetCurSel() == 1)
{
byte_length=2;
}
else
{
byte_length=4;
}


//if(m_comb_device.GetCurSel()==0)
if(device_type == 4)
{
str_device="";
}
else
{
str_device="-u";
}


m_edit2.GetWindowText(str);
addr = strtol(str,NULL,16);

m_edit3.GetWindowText(str);
value = strtol(str,NULL,16);




if(strcmp(str,"") != 0)
{
//buf[0] = value;
switch(m_comb_bus.GetCurSel())
{
case 0:
for(i=0;i<byte_length;i++)
{
buf[i] = value&0xff;
value=value>>8;
}
WriteMem(m_usb_handle,addr,buf,byte_length,device_type);
break;
/* case 1:
str.Format("wa %04x %04x %s",addr,value,str_device);
tcdb_cmd(str);
break;*/
case 1:
str.Format("wf %04x %04x %s",addr,value,str_device);
tcdb_cmd(str);
break;
default:
break;
}
}




str.Format("## write %04x",addr);
debug_print(str);

}

}




void CTdebugDlg::debug_print(CString   str)
{
#if 0
CString str_text;
int cnt,i;
char cstr[1000];
//char    temp_buff[64*1024];
int nLength;



/*
m_edit1.GetWindowText(str_text);

nLength = m_edit1.GetWindowTextLength();
cnt = m_edit1.GetLineCount();
if(cnt >= 180)
{
m_edit1.GetLine(cnt-180,cstr,1000);
str_text =  str_text.Right(str_text.GetLength() - strlen(cstr));
}
m_edit1.SetSel(nLength, 0);
m_edit1.ReplaceSel(str_text);  */

m_edit1.GetWindowText(str_text);


str_text += str;
//str_text += "\r\n";  

m_edit1.SetWindowText(str_text);
//nLength = m_edit1.GetWindowTextLength();
//m_edit1.SetSel(nLength, nLength);
//m_edit1.ReplaceSel(str_text); 




for(i=0;i<100;i++)
cstr[i]=0;


// m_edit1.GetWindowText(str_text);
// str_text=str_text+"\r\n"+str;






// m_edit1.SetWindowText(str_text);






cnt = m_edit1.GetLineCount();
if(cnt >= 180)
{

//memcpy(buf,0,100);
m_edit1.GetLine(cnt-180,cstr,1000);
// cc = strlen(buf);
m_edit1.SetSel(0,strlen(cstr)+1);
m_edit1.ReplaceSel("");
}

int index = m_edit1.GetLineCount();
m_edit1.LineScroll(index); 
#endif
int len = m_edit1.GetWindowTextLength();
int nstep = m_nTextLen  / 8;
if (len >= nstep * 7) {
m_edit1.SetSel (0, nstep*6);
m_edit1.ReplaceSel ("");
len = m_edit1.GetWindowTextLength();
}
m_edit1.SetSel (len, len);
m_edit1.ReplaceSel (str);


}


void CTdebugDlg::debug_printx(unsigned char *buf,unsigned int len)
{
#if 0
CString str_text,str;


int cnt,i;
char cstr[1024*16];


for(i=0;i<100;i++)
cstr[i]=0;


m_edit1.GetWindowText(str_text);
//str_text = str_text + "\r\n";

for(i = 0;i<len;i++)
{
if(i%16 == 8)
{
str_text = str_text + " ";
}
if(i % 16 == 0)
{
str.Format("\r\n%04x:",i);
str_text = str_text + str;
}
str.Format("%02x",buf[i]);
str_text = str_text + " " + str;
}


str_text=str_text+"\r\n";


m_edit1.SetWindowText(str_text);


cnt = m_edit1.GetLineCount();
if(cnt >= 180)
{

//memcpy(buf,0,100);
m_edit1.GetLine(cnt-180,cstr,1024*8);
// cc = strlen(buf);
m_edit1.SetSel(0,strlen(cstr)+1);
m_edit1.ReplaceSel("");
}

int index = m_edit1.GetLineCount();
m_edit1.LineScroll(index);
#endif
#if 1
CString str_text,str;
int cnt,i;
for(i = 0;i<len;i++)
{
if(i%16 == 8)
{
str_text = str_text + " ";
}
if(i % 16 == 0)
{
str.Format("\r\n%04x:",i);
str_text = str_text + str;
}
str.Format("%02x",buf[i]);
str_text = str_text + " " + str;
}


str_text=str_text+"\r\n";
int m_len = m_edit1.GetWindowTextLength();
int nstep = m_nTextLen  / 8;
if (m_len >= nstep * 7) {
m_edit1.SetSel (0, nstep*6);
m_edit1.ReplaceSel ("");
m_len = m_edit1.GetWindowTextLength();
}
m_edit1.SetSel (m_len, m_len);
m_edit1.ReplaceSel (str_text);


#endif


}






void CTdebugDlg::OnGridClick(NMHDR *pNotifyStruct, LRESULT* /*pResult*/)
{
NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;
unsigned char buf[1024*16];
long addr;
int i;
CString str;


if(m_usb_handle != NULL)
{
if(grid_mode == 0)
{

if((pItem->iRow == 0) && (pItem->iColumn == 1))
{
///////////////make the addr to be increase order/////////////////////

int i,j;
unsigned long temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(g_v.addr[j] < g_v.addr[j-1])
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;


temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;


strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);




}
}


this->grid_display();


}
else if((pItem->iRow == 0) && (pItem->iColumn == 0))
{
int i,j;
unsigned long temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_v.name[j],g_v.name[j-1]) < 0)
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;


temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;


strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);




}
}
this->grid_display();
}
else if(m_grid.GetItemImage(pItem->iRow,pItem->iColumn) == 5)
{
addr = g_v.addr[pItem->iRow-1];
i = 0;


str.Format("## Memory read Addr %04x: ",addr);
debug_print(str);





ReadMem(m_usb_handle,addr,buf,g_v.len[pItem->iRow - 1],device_type);


debug_printx(buf,g_v.len[pItem->iRow - 1]);
}
}
else if(grid_mode == 1)
{
if((pItem->iRow == 0) && (pItem->iColumn == 3))
{
for(i=0;i<g_f.cnt;i++)
{   g_f.value[i] = 0;
m_grid.SetItemImage(i+1,3,1);
}
bkpoint = 0;
bk_ctl[0] = 0;
bk_ctl[1] = 0;
bk_ctl[2] = 0;
bk_ctl[3] = 0;
buf[0] = 0x00;
WriteMem(m_usb_handle,0x613,buf,1,device_type);
WriteMem(m_usb_handle,0x617,buf,1,device_type);
WriteMem(m_usb_handle,0x61b,buf,1,device_type);
WriteMem(m_usb_handle,0x61f,buf,1,device_type);


m_grid.Refresh();
}
else if(pItem->iColumn == 3)
{
if((g_f.value[pItem->iRow - 1] & 0x0f) == 0)
{/*
m_grid.SetItemImage(pItem->iRow,pItem->iColumn,0);
m_grid.Refresh();


buf[0] = (g_f.addr[pItem->iRow - 1]) & 0xff;
buf[1] = (g_f.addr[pItem->iRow - 1] & 0xff00)>>8;
buf[2] = (g_f.addr[pItem->iRow - 1] & 0xff0000)>>16;


WriteMem(m_usb_handle,0x610,buf,3,1); // mcu run


bkpoint++;*/
if(bkpoint < 4)
{
for(i=0;i<4;i++)
{
if(bk_ctl[i] == 0)
{
bk_ctl[i] = 1;
m_grid.SetItemImage(pItem->iRow,pItem->iColumn,0);
m_grid.Refresh();


buf[0] = (g_f.addr[pItem->iRow - 1]) & 0xff;
buf[1] = (g_f.addr[pItem->iRow - 1] & 0xff00)>>8;
buf[2] = (g_f.addr[pItem->iRow - 1] & 0xff0000)>>16;
buf[3] = 0x01;


WriteMem(m_usb_handle,4*i+0x610,buf,4,device_type); // mcu run


bkpoint++;


g_f.value[pItem->iRow - 1] = (0x02) | (i<<4);



break;


}
}

}
else
{
//MessageBox("break point can't more than 4");
debug_print("break point can't more than 4");
}
}
else if((g_f.value[pItem->iRow - 1] & 0x0f)== 1)
{
if(g_f.len[pItem->iRow - 1] >= 0x18)
{


i = g_f.value[pItem->iRow - 1] >> 4;


m_grid.SetItemImage(pItem->iRow,pItem->iColumn,6);
m_grid.Refresh();






buf[0] = (g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]- 0x18) & 0xff;
buf[1] = ((g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]- 0x18) & 0xff00)>>8;
buf[2] = ((g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]- 0x18)& 0xff0000)>>16;
buf[3] = 0x01;




WriteMem(m_usb_handle,4*i+0x610,buf,4,device_type); // mcu run






g_f.value[pItem->iRow - 1] = (0x02) | (i<<4);
}
else
{
i = g_f.value[pItem->iRow - 1] >> 4;
//MessageBox("the function length is not more than 0x18");
debug_print("the function length is not more than 0x18");
m_grid.SetItemImage(pItem->iRow,pItem->iColumn,1);
m_grid.Refresh();
g_f.value[pItem->iRow - 1] = 0x00;
bk_ctl[i] = 0;

buf[0] = 0x00;




WriteMem(m_usb_handle,4*i+0x613,buf,1,device_type); // mcu run


bkpoint--;

}


//bkpoint--;
}
else if((g_f.value[pItem->iRow - 1] & 0x0f) == 2)
{
i = g_f.value[pItem->iRow - 1] >> 4;
bk_ctl[i] = 0;


// buf[0] = (g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]-0x10) & 0xff;
// buf[1] = ((g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]-0x10) & 0xff00)>>8;
// buf[2] = ((g_f.addr[pItem->iRow - 1]+g_f.len[pItem->iRow - 1]-0x10)& 0xff0000)>>16;
buf[0] = 0x00;
WriteMem(m_usb_handle,4*i+0x613,buf,1,device_type); // mcu run


m_grid.SetItemImage(pItem->iRow,pItem->iColumn,1);
m_grid.Refresh();

g_f.value[pItem->iRow - 1] = 0x00;
bkpoint--;
}
//g_f.value[pItem->iRow - 1] = (((g_f.value[pItem->iRow - 1] & 0x0f) + 1)%3) | (g_f.value[pItem->iRow - 1] & 0xf0);
}
}

}
else
{


//MessageBox("no usb device");
debug_print("no usb device");
}
}




void CTdebugDlg::grid_display(void)
{
////////////////set the grid /////////////////////////////////////////
{
int i;
CString str;

if(grid_mode == 0)
{
m_grid.SetEditable(true);
m_grid.SetRowCount(g_v.cnt+1); //初始为n行 
m_grid.SetColumnCount(4); //初始化为n列            
m_grid.SetFixedRowCount(1); //表头为一行  
m_grid.SetFixedColumnCount(1); //表头为一列 
m_grid.SetItemText(0,0,"variable name:");
m_grid.SetItemImage(0,0,8);
m_grid.SetItemText(0,1," addr ");
m_grid.SetItemImage(0,1,8);


m_grid.SetItemText(0,2," len ");
m_grid.SetItemImage(0,2,8);
m_grid.SetItemText(0,3,"   value  ");
m_grid.SetItemImage(0,3,8);
for(i=0;i<g_v.cnt;i++)
{
m_grid.SetItemText(i+1,0,g_v.name[i]);
str.Format("0x%02x",g_v.len[i]);
m_grid.SetItemText(i+1,2,str);


str.Format("0x%04x",g_v.addr[i]);
m_grid.SetItemText(i+1,1,str);
m_grid.SetItemImage(i+1,0,3);
m_grid.SetItemImage(i+1,3,9);



}


}
else if(grid_mode == 1)
{
m_grid.SetEditable(false);
m_grid.SetRowCount(g_f.cnt+1);
m_grid.SetColumnCount(4); //初始化为n列            
m_grid.SetFixedRowCount(1); //表头为一行  
m_grid.SetFixedColumnCount(1); //表头为一列 
m_grid.SetItemText(0,0,"function name:");
m_grid.SetItemImage(0,0,8);
m_grid.SetItemText(0,1," addr ");
m_grid.SetItemImage(0,1,8);
m_grid.SetItemText(0,2," len ");
m_grid.SetItemImage(0,2,8);
m_grid.SetItemText(0,3,"break point");
m_grid.SetItemImage(0,3,8);


for(i=0;i<g_f.cnt;i++)
{
m_grid.SetItemText(i+1,0,g_f.name[i]);
str.Format("0x%04x",g_f.addr[i]);
m_grid.SetItemText(i+1,1,str);

str.Format("0x%02x",g_f.len[i]);
m_grid.SetItemText(i+1,2,str);


m_grid.SetItemImage(i+1,0,2);
m_grid.SetItemText(i+1,3,"");
if((g_f.value[i] & 0x0f ) == 0)
m_grid.SetItemImage(i+1,3,1);
else if((g_f.value[i] & 0x0f )== 1)
m_grid.SetItemImage(i+1,3,0);
else if((g_f.value[i] & 0x0f )== 2)
m_grid.SetItemImage(i+1,3,6);


}


}


m_grid.SetItemText(1,3,"0x123456789a");
m_grid.AutoSize(); 
m_grid.SetItemText(1,3,"");
}



/////////change the size of m_grid///////////////
{
CRect  rect;
int t1,t2;
unsigned char grid_cnt;
unsigned char cnt;





grid_cnt = m_grid.GetColumnCount();
t1 = 0;
for(cnt = 0; cnt<grid_cnt;cnt++)
{
m_grid.GetCellRect(0,cnt,rect);
t1+=rect.Width();


}

this->GetClientRect(rect);
t2 = nFullHeight*0.9;
//t2 = 540;
m_grid.MoveWindow(0,0,t1+32,t2-40,TRUE);

//nFullWidth 


t1 = t1 + 32;
t2 = t2;
m_btn_mode.MoveWindow(t1+8,8,100,32,TRUE);
m_btn_update.MoveWindow(t1+115,8,100,32,TRUE);
m_btn_rst.MoveWindow(t1 + 222,8,100,32,TRUE);
m_btn_clr.MoveWindow(t1 + 329,8,100,32,TRUE);
m_btn_clrbk.MoveWindow(t1 + 436,8,100,32,TRUE);
m_btn_usb.MoveWindow(t1+543,8,100,32,TRUE);




m_btn_run.MoveWindow(t1+275,44,35,32,TRUE);
m_btn_stop.MoveWindow(t1+314,44,35,32,TRUE);
m_btn_step.MoveWindow(t1+354,44,35,32,TRUE);


// the memory read and write board
m_board1.MoveWindow(t1+8,44,260,96,TRUE);
m_static_addr.MoveWindow(t1+16,104,30,20,TRUE);
m_edit2.MoveWindow(t1+50,100,80,20,TRUE);
m_static_data.MoveWindow(t1+136,104,30,20,TRUE);
m_edit3.MoveWindow(t1+170,100,80,20,TRUE);
//m_comb_device.MoveWindow(t1+16,64,80,20,TRUE);
m_comb_bus.MoveWindow(t1+50,64,80,20,TRUE);
m_comb_type.MoveWindow(t1+170,64,80,20,TRUE);


m_edit2.SetWindowText("00");
m_comb_device.SetCurSel(0);
m_comb_bus.SetCurSel(0);
m_comb_type.SetCurSel(0);

        // the config board
m_bd_cfg.MoveWindow(t1+275,80,360,60,TRUE);
m_check1.MoveWindow(t1+281,100,50,20,TRUE);
m_check_tcpc.MoveWindow(t1+340,100,90,20,TRUE);
m_bk_check.MoveWindow(t1+430,100,90,20,TRUE);
m_check2.MoveWindow(t1+530,100,90,20,TRUE);
//m_info.MoveWindow(t1+200,64,20,60.TRUE);
m_info.MoveWindow(t1+314+90,50,180,30,TRUE);



m_edit_tcdbcmd.MoveWindow(t1+8,150,550,22);
m_btn_docmd.MoveWindow(t1+562,145,96,32);
m_edit1.MoveWindow(t1+8,150+36,650,t2 - 150 - 40 -36);
this->GetWindowRect(rect);
this->MoveWindow(rect.left,rect.top,t1 + 670,t2,TRUE);


}



this->Invalidate();
////////////////////////////////////////////////////////////////////////




}


void CTdebugDlg::OnButton4() 
{
// TODO: Add your control notification handler code here
grid_mode = (grid_mode + 1)%2;
grid_display();


if(grid_mode == 0)
{
m_btn_mode.SetWindowText("SeeFunctions");
}
else
{
m_btn_mode.SetWindowText("SeeVariables");
}
}


void CTdebugDlg::OnSetfocusEdit3() 
{
// TODO: Add your control notification handler code here
/* CString str;

unsigned char buf[4];
long addr;




if(m_usb_handle != NULL)
{



m_edit2.GetWindowText(str);
addr = strtol(str,NULL,16);


str.Format("## read %04x",addr);
this->debug_print(str);


ReadMem(m_usb_handle,addr,buf,1,1);
str.Format("%02x",buf[0]);




m_edit3.SetWindowText(str);


m_edit3.SetSel(0,-1);
}
else
{


MessageBox(" no usb device!");
}*/



}


void CTdebugDlg::OnKillfocusEdit2() 
{
// TODO: Add your control notification handler code here
CString str;

unsigned char buf[4];
long addr;
int     byte_length;
CString  str_device;


if(m_comb_type.GetCurSel() == 0)
{
byte_length=1;
}
else if(m_comb_type.GetCurSel() == 1)
{
byte_length=2;
}
else
{
byte_length=4;
}


//if(m_comb_device.GetCurSel()==0)
if(device_type == 4)
{
str_device="";
}
else
{
str_device="-u";
}



if(m_usb_handle != NULL)
{



m_edit2.GetWindowText(str);
addr = strtol(str,NULL,16);
m_edit3.SetWindowText("");



switch(m_comb_bus.GetCurSel())
{
//CString  str;
case 0:   // read core
str.Format("## read %04x",addr);
this->debug_print(str);
ReadMem(m_usb_handle,addr,buf,byte_length,device_type);
str.Format("%02x",buf[0]);
//m_edit3.SetWindowText(str);
//this->debug_print(str);
this->debug_printx(buf,byte_length);
//this->debug_print("");
m_edit3.SetSel(0,-1);
break;
/*case 1:  //read analog
str.Format("ra %04x -s %d %s",addr,byte_length,str_device);
tcdb_cmd(str);
break;*/
case 1:  // read flash
str.Format("rf %04x -s %d %s",addr,byte_length,str_device);
tcdb_cmd(str);
break;
default:
break;
}
}
else
{


// MessageBox(" no usb device!");
debug_print("no usb device!");
}




}
SECURITY_ATTRIBUTES g_sa = {sizeof(SECURITY_ATTRIBUTES),NULL,TRUE};  


void CTdebugDlg::tcdb_cmd(CString str) 
{
// TODO: Add your control notification handler code here

DWORD dwWritten = 0;
/* char cmdLine[2048];
//sprintf (cmdLine, "\"%s\"", m_AppName);


CString cCmd = m_dir + "\\tcdb.exe";
//+ " set prj " + m_mPrj + " " + m_mLib;
sprintf (cmdLine, "\"%s  %s ",cCmd, str);
sprintf (cmdLine, "\"%s  rf 0 -s 10",cCmd, str); */

HANDLE hWritePipe, hReadPipe;  
    if ( !CreatePipe( &hReadPipe, &hWritePipe, &g_sa, 2048*10 ) )  
    {  
        return;  
    }  
CString str_tmp;
//CString cCmd = m_dir + "\\tcdb.exe";
CString cCmd = this->m_exe_dir + "\\tcdb.exe";
    CString strCmdLine;  
strCmdLine.Format("%s %s",cCmd,str);
    // create an environment for the CGI process....   
    DWORD dwCreateFlags = 0;  
  
    PROCESS_INFORMATION pi;  
    STARTUPINFO si = {0};  
    si.cb = sizeof(si);  
    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;  
    si.wShowWindow = SW_HIDE;  
    si.hStdInput = hReadPipe;  
    si.hStdOutput = hWritePipe;  
    si.hStdError = hWritePipe;  
    BOOL bOk = CreateProcess( NULL, strCmdLine.GetBuffer(1),  
        NULL, NULL, TRUE,  
        dwCreateFlags, NULL,  
        "c:\\", &si, &pi );  
     



//Sleep(1000);
    // if created....   
    if ( bOk )  
    {  
      
        while(1)
{
DWORD ExitCode;
GetExitCodeProcess(pi.hProcess,&ExitCode);
Sleep(300);
if(ExitCode==STILL_ACTIVE)
{

 
char buffer[1028]={0};
buffer[1024]=0;
ReadFile(hReadPipe, buffer,1024,&dwWritten, NULL );  
       
str_tmp.Format("%s",buffer);
this->debug_print(str_tmp);  
//The process is still running
}
else
{
break;
}
//The prcoces has terminated,the ExitCode is its exitcode 


}
        // wait for either cancel or process done....   
        //WaitForSingleObject(pi.hProcess,INFINITE);  
        // release our hold on the thread....   


Sleep(1000);
        CloseHandle( pi.hThread );  
        // send the body of the post to the stdin....

         

//
    // we're at the end of the file 
//while(0) 
while(dwWritten==1024)
{  
// DWORD dwWritten = 0; 
char buffer[1028]={0};
buffer[1024]=0;
//Sleep(500);
ReadFile(hReadPipe, buffer,1024,&dwWritten, NULL );  
        //m_msg = buffer; 

str_tmp.Format("%s",buffer);
this->debug_print(str_tmp);
// }
if (dwWritten < 1024) 
{
break;
}

    //  AfxMessageBox(m_msg);   
        //UpdateData(FALSE);  
        // close our hold on it....   
        //CloseHandle( pi.hProcess );  
    }  
else
{
debug_print("tcdb.exe not find!\r\n");
}
//strCmdLine.ReleaseBuffer(); 
}






HBRUSH CTdebugDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// TODO: Change any attributes of the DC here
if(pWnd->GetDlgCtrlID()==IDC_STATIC_INF)
{
pDC->SetTextColor(RGB(0,0,255));

// TODO: Return a different brush if the default is not desired
return hbr;
}


void CTdebugDlg::OnTimer(UINT nIDEvent) 
{




// TODO: Add your message handler code here and/or call default
unsigned char  buf[10];
CString  str;
int  rt;



if(m_check2.GetCheck())
{
// rt = ReadMem(m_usb_handle,0x602,buf,1,device_type); // read mcu ctl reg
rt = ReadMem(m_usb_handle,0x602,buf,1,1); // read mcu ctl reg
}




if(nIDEvent == 1)//////////////////////timer 1//////////////////////////////////////////////
{
if(m_check2.GetCheck())
{
if(device_type == 4)
{
if(rt == 0)
{
m_info.SetWindowText("no swire slave device");
rt = ReadMem(m_usb_handle,0x602,buf,1,1); // read mcu ctl reg
if(rt == 0)
{
m_info.SetWindowText("no Evk and swire slave device");
}
//this->debug_print(" ## Error:  NO  usb device!!!  ##\r\n## please restart the porgram!");
//this->Invalidate();
}


}
else
{
if(rt == 0)
{
m_info.SetWindowText("no usb device");
//this->debug_print(" ## Error:  NO  usb device!!!  ##\r\n## please restart the porgram!");
//this->Invalidate();
}
}
}

if(m_check1.GetCheck())
{
debug_print("auto read register..");
OnButton1();
}

//if((this->m_bk_check.GetCheck()) && (mcu_status == MCU_ST_RUN))




}


// check break point
if((mcu_status == MCU_ST_RUN))
{
int i;
unsigned long pc_now;
ReadMem(m_usb_handle,0x613,buf,1,device_type);
if((buf[0] & 0x80) != 0)
{ debug_print("##break point:");


ReadMem(m_usb_handle,0x6bc,buf,4,device_type); // read mcu ctl reg
g_type.byte[0] = buf[0];
g_type.byte[1] = buf[1];
g_type.byte[2] = buf[2];
g_type.byte[3] = buf[3];


pc_now = (g_type.us_long) & 0xffffff;


str.Format(" pc now is : % 08x",pc_now);
debug_print(str);


for(i = 0; i< g_f.cnt;i++)
{
if((pc_now >= g_f.addr[i]) && (pc_now < g_f.addr[i] + g_f.len[i]))
{
if(pc_now == g_f.addr[i])
{
str.Format(" stop at function::  %s()\n",g_f.name[i]);
}
else
{
str.Format(" stop at end(end - 0x18) of function::  %s()",g_f.name[i]);
}
debug_print(str);
break;


}
}
//debug_print("##break point:");
mcu_status = MCU_ST_BREAK;


//OnButton5();
this->m_btn_run.EnableWindow(true);
this->m_btn_stop.EnableWindow(false);


}


}
//else if(nIDEvent == 2) //////////////////////////timer 2 ////////////////////////////////////
{
if(m_check_tcpc.GetCheck())
{ int i;
unsigned long pc_now;
//ReadMem(m_usb_handle,0x613,buf,1,1); // read mcu ctl reg
ReadMem(m_usb_handle,0x6bc,buf,4,device_type); // read mcu ctl reg
g_type.byte[0] = buf[0];
g_type.byte[1] = buf[1];
g_type.byte[2] = buf[2];
g_type.byte[3] = buf[3];


pc_now = (g_type.us_long) & 0xffffff;


str.Format("auto pc read is : %08x\r\n",pc_now);
debug_print(str);


for(i = 0; i< g_f.cnt;i++)
{
if((pc_now >= g_f.addr[i]) && (pc_now < g_f.addr[i] + g_f.len[i]))
{
str.Format("mcu now in:  %s()\r\n",g_f.name[i]);
debug_print(str);
break;


}
}


}
}


// CDialog::OnTimer(nIDEvent);






CDialog::OnTimer(nIDEvent);
MSG msg;
while(::PeekMessage(&msg, m_hWnd, WM_TIMER, WM_TIMER, PM_REMOVE));
}


void CTdebugDlg::OnButton3() 
{
// TODO: Add your control notification handler code here
unsigned char  buf[10];
int i;


//str.Format("## mcu restart --");
debug_print("## mcu restart --\n");


/* this->bk_ctl[0] = 0;
this->bk_ctl[1] = 0;
this->bk_ctl[2] = 0;
this->bk_ctl[3] = 0;


buf[0] = 0x00;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu run
WriteMem(m_usb_handle,0x617,buf,1,device_type); // mcu run
WriteMem(m_usb_handle,0x61b,buf,1,device_type); // mcu run
WriteMem(m_usb_handle,0x61f,buf,1,device_type); // mcu run


buf[0] = 0x80;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu dereset */


// OnButton6();
///////////////////////enable all break point //////////////////////
/*
buf[0] = 0x89;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu reset


if(this->m_bk_check.GetCheck())
{
buf[0] = 0x01;
for(i=0;i<g_f.cnt;i++)
{
if((g_f.value[i]>>4) != 0)
{
bk_ctl[g_f.value[i]>>4]= 1;
WriteMem(m_usb_handle,(g_f.value[i]>>2)+0x613,buf,1,device_type); // mcu run
}


}
buf[0] = 0x81;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu run


}
*/
    ///////////////////////////////////////////////////////////////////////////
buf[0] = 0x84;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu dereset
/* ReadMem(m_usb_handle,0x613,buf,1,device_type);
buf[0] = buf[0] | 80;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu break run
buf[0] = 0x05;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu dereset
buf[0] = 0x88;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu dereset */




/* if(mcu_status == MCU_ST_RUN)
{
m_btn_run.EnableWindow(false);
m_btn_stop.EnableWindow(true);
m_info.SetWindowText(" run..");
}
else 
{
m_btn_run.EnableWindow(true);
m_btn_stop.EnableWindow(false);
m_info.SetWindowText(" stop..");
} */


mcu_status = MCU_ST_RUN;



}


void CTdebugDlg::OnButton5() 
{
// TODO: Add your control notification handler code here


unsigned char  buf[10];
int i;
unsigned long pc_now;
CString  str;




ReadMem(m_usb_handle,0x602,buf,1,device_type); // read mcu ctl reg


buf[0] = buf[0] | 0x02;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu stall


m_btn_run.EnableWindow(true);
m_btn_stop.EnableWindow(false);


m_info.SetWindowText("mcu stop!");


if(mcu_status == MCU_ST_RUN)
{
ReadMem(m_usb_handle,0x6bc,buf,4,device_type); // read mcu ctl reg
g_type.byte[0] = buf[0];
g_type.byte[1] = buf[1];
g_type.byte[2] = buf[2];
g_type.byte[3] = buf[3];


pc_now = (g_type.us_long) & 0xffffff;


str.Format("pc is : %08x",pc_now);
debug_print(str);


for(i = 0; i< g_f.cnt;i++)
{
if((pc_now >= g_f.addr[i]) && (pc_now < g_f.addr[i] + g_f.len[i]))
{
str.Format("## mcu stop in:  %s()",g_f.name[i]);
debug_print(str);
break;


}
}
}
mcu_status = MCU_ST_STOP;


}


void CTdebugDlg::OnButton6() 
{
// TODO: Add your control notification handler code here
unsigned char  buf[10];

{
ReadMem(m_usb_handle,0x613,buf,1,device_type);
buf[0] = buf[0] | 80;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu break run


}


ReadMem(m_usb_handle,0x602,buf,1,device_type); // read mcu ctl reg


buf[0] = buf[0] & 0xfd;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu run



//if(mcu_status == MCU_ST_BREAK)



m_btn_run.EnableWindow(false);
m_btn_stop.EnableWindow(true);


mcu_status = MCU_ST_RUN;




m_info.SetWindowText("mcu run..");
}


void CTdebugDlg::OnCheck3() 
{
// TODO: Add your control notification handler code here
unsigned char buf[10];
int i;


if(bk_en == false)
{
bk_en = true;

}
else 
{
bk_en = false;



}
}


void CTdebugDlg::OnButton7() 
{
// TODO: Add your control notification handler code here
m_edit1.SetSel(0,-1);
m_edit1.ReplaceSel("");
m_edit1.SetWindowText("## print window  clear ");
}


void CTdebugDlg::OnButton8() 
{
// TODO: Add your control notification handler code here
int i;
unsigned char buf[10];


for(i=0;i<g_f.cnt;i++)
{   g_f.value[i] = 0;
m_grid.SetItemImage(i+1,3,1);
}
bkpoint = 0;
bk_ctl[0] = 0;
bk_ctl[1] = 0;
bk_ctl[2] = 0;
bk_ctl[3] = 0;
buf[0] = 0x00;
WriteMem(m_usb_handle,0x613,buf,1,device_type);
WriteMem(m_usb_handle,0x617,buf,1,device_type);
WriteMem(m_usb_handle,0x61b,buf,1,device_type);
WriteMem(m_usb_handle,0x61f,buf,1,device_type);


m_grid.Refresh();

}


void CTdebugDlg::swireusb(void)
{
unsigned char buf[4];
buf[0] = 0x80;
WriteMem(m_usb_handle,0x61,buf,1,1);
Sleep(1);


buf[0] = 0x00;
WriteMem(m_usb_handle,0x61,buf,1,1);
Sleep(1);


buf[0] = 0x20;
WriteMem(m_usb_handle,0x588,buf,1,1);
Sleep(1);


buf[0] = 0x20;
WriteMem(m_usb_handle,0x58c,buf,1,1);
Sleep(1);


buf[0] = 0x20;
WriteMem(m_usb_handle,0x584,buf,1,1);
Sleep(80);

buf[0] = 0x00;
WriteMem(m_usb_handle,0x584,buf,1,1);
Sleep(40);


buf[0] = 0x20;
WriteMem(m_usb_handle,0x584,buf,1,1);
Sleep(20);


buf[0] = 0x00;
WriteMem(m_usb_handle,0x58c,buf,1,1);
Sleep(1);






}


void CTdebugDlg::OnUsb() 
{
// TODO: Add your control notification handler code here
///////////open usb device ///////////////////////////////////////////
m_usb_handle = GetPrintDeviceHandle(m_usb_id);   // get usb printdevice.
if(m_usb_handle == NULL)
{
//MessageBox("no usb device!!");
debug_print("no usb device!!");
//str_info.Format("NO usb device");
m_info.SetWindowText("NO usb device");
}
else
{
if(IsEVKDevice(m_usb_handle))
{ m_info.SetWindowText("Evk device ok");
device_type = 4;
swireusb();


}
else
{ m_info.SetWindowText("usb device ok");
device_type = 1;
}

}
//////////////////////////////////////////////////////////////////////


////////////////open file ////////////////////////////////////////
{
char line[1024];
int cnt,para_cnt;
char *para[10];
unsigned char  f_st;


/* CString str;

str.Format("cp  -f *.lst  \"boot-.llst\" ");   // create a folder.
//system(str);
WinExec(str,SW_HIDE);
Sleep(200);
pf = fopen("boot-.llst","r");  */
// find the latest list file .
{


char* strTemp;
CString str;
CString final_filename;
HANDLE hDir;
FILETIME lpCreationTime; // 文件夹的创建时间
FILETIME lpLastAccessTime; // 对文件夹的最近访问时间
FILETIME lpLastWriteTime; // 文件夹的最近修改时间
FILETIME ftime_latest;
strTemp = new char[MAX_PATH];
GetCurrentDirectory(MAX_PATH, strTemp);//(strTemp为D:/Practice)

//m_cur_dir.Format("%s",strTemp);


WIN32_FIND_DATA ffd;
HANDLE hFind = INVALID_HANDLE_VALUE;
m_dir.Format("%s\\",strTemp);
this->get_exe_cur();
//m_dir = ".//";
CString strDir = m_dir+"*.lst";

hFind = FindFirstFile(strDir, &ffd);
if (hFind != INVALID_HANDLE_VALUE) {
      
//((CComboBox *) GetDlgItem (IDC_COMBO_BIN))->ResetContent();
ftime_latest.dwHighDateTime = 0;
ftime_latest.dwLowDateTime = 0;
final_filename = "nofile";
do {
if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ){
//((CComboBox *) GetDlgItem (IDC_COMBO_BIN))->AddString (ffd.cFileName);
str = m_dir + ffd.cFileName;
hDir = CreateFile(str, GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_DELETE,NULL, OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS, NULL);
if (GetFileTime(hDir, &lpCreationTime, &lpLastAccessTime, &lpLastWriteTime)){
FILETIME ftime;
SYSTEMTIME stime;
CString  tstr;
FileTimeToLocalFileTime(&lpLastWriteTime, &ftime);// 转换成本地时间
FileTimeToSystemTime(&ftime, &stime);// 转换成系统时间格式
//tstr.Format("the h %x l %x",ftime.dwHighDateTime,ftime.dwLowDateTime);
//tstr.Format("the file wtime:year%d,month%d,data%d,h%d,m%d,s%d",stime.wYear,stime.wMonth,stime.wDay,stime.wHour,stime.wMinute,stime.wSecond);
//MessageBox(tstr);
if(ftime.dwHighDateTime > ftime_latest.dwHighDateTime)
{
 final_filename = str;
 ftime_latest.dwHighDateTime = ftime.dwHighDateTime;
 ftime_latest.dwLowDateTime = ftime.dwLowDateTime;
}
else if(ftime.dwHighDateTime == ftime_latest.dwHighDateTime)
{
if(ftime.dwLowDateTime > ftime_latest.dwLowDateTime)
{
 final_filename = str; 
 ftime_latest.dwHighDateTime = ftime.dwHighDateTime;
 ftime_latest.dwLowDateTime = ftime.dwLowDateTime;
}
}

}
CloseHandle(hDir); // 关闭打开过的文件夹
}
}while (FindNextFile(hFind, &ffd) != 0);
//((CComboBox *) GetDlgItem (IDC_COMBO_BIN))->SetCurSel(0);
FindClose(hFind);
}



pf = fopen(final_filename,"r");


}


// end of list file find.

this->debug_print("##telink-semiconductor: tdebug tools:\r\n");
if(pf == NULL)
{
//MessageBox("no default init file find!!");
debug_print("no default init file find!!\r\n");
m_info.SetWindowText("no init file");
}
else
{ this->debug_print("tables update completed!\r\n");
f_st = 0;
memset(line,0,1024);
while( fgets( line, 1024, pf ) != NULL)   // get every line int the file
{
cnt = 0;
para[cnt] = strtok(line," \t");
do
{
para[++cnt] = strtok(NULL," \t");
} while ((cnt < 10) && (para[cnt] != NULL));
para_cnt = cnt;


if(strcmp(para[0],"SYMBOL") == 0)
{
f_st = 1;
g_v.cnt = 0;
g_f.cnt = 0;
}


if(strcmp(para[0],"00809208")==0)
{
int bug;
bug = 0x55;
}


if((f_st == 1) && (para_cnt== 6))
{
if((strcmp(para[1],"g") == 0) || (strcmp(para[1],"l") == 0))  //  if it is global variables or functions 
{
if(((strcmp(para[3],".bss") == 0) || (strcmp(para[3],".data") == 0)) && (strcmp(para[2],"O") == 0))
{
g_v.addr[g_v.cnt] = strtol(para[0],NULL,16); // get the adress
//g_v.addr[g_v.cnt] = (g_v.addr[g_v.cnt]&0xffff)|0x8000; // we need only the variable. /// ----> mj
g_v.addr[g_v.cnt] = (g_v.addr[g_v.cnt]&0xfffff); /// ----> mj
g_v.len[g_v.cnt] = strtol(para[4],NULL,16);
strcpy(g_v.name[g_v.cnt],para[5]);
g_v.cnt++;



}
else if((strcmp(para[3],".text") == 0) && (strcmp(para[2],"F") == 0))
{
g_f.addr[g_f.cnt] = strtol(para[0],NULL,16);
g_f.len[g_f.cnt] = strtol(para[4],NULL,16);
g_f.value[g_f.cnt] = 0;
strcpy(g_f.name[g_f.cnt],para[5]);
g_f.cnt++;

}


}
}










}

fclose(pf);
}






}
/////////////file read end ///////////////////////////////////////////


///////////////make the addr to be increase order/////////////////////
{
int i,j;
unsigned long temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(g_v.addr[j] < g_v.addr[j-1])
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;


temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;


strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);




}
}


}


bss_start = g_v.addr[0];
bss_end = g_v.addr[g_v.cnt-1] + g_v.len[g_v.cnt - 1];
////////////////////////////////// order by name /////////////////////////////////


{
int i,j;
unsigned long temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_v.name[j],g_v.name[j-1]) < 0)
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;


temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;


strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);




}
}


}


{
int i,j;
unsigned long temp;
char temp_str[100];
for(i=1;i<g_f.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_f.name[j],g_f.name[j-1]) < 0)
{
temp = g_f.addr[j];
g_f.addr[j] = g_f.addr[j-1];
g_f.addr[j-1] = temp;


temp = g_f.len[j];
g_f.len[j] = g_f.len[j-1];
g_f.len[j-1] = temp;


strcpy(temp_str,g_f.name[j]);
strcpy(g_f.name[j],g_f.name[j-1]);
strcpy(g_f.name[j-1],temp_str);




}
}


}




////////////////////order end ////////////////////////////////////////

////////////////set the grid /////////////////////////////////////////
// m_ImageList.Create(MAKEINTRESOURCE(IDB_BITMAP1), 16, 2, RGB(255,255,255));
// m_grid.SetImageList(&m_ImageList);  //绑定grid控件和 图片列表
// m_grid.SetEditable(true);


m_grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0)); //黄色背景
m_grid.SetTextColor(RGB(0x00, 0x00, 0xff));
//m_grid.SetFixedTextColor(RGB(0xff, 0x00, 0x00)); //表头的字体颜色

////////////set global config //////////////////
grid_mode = 0;
bkpoint = 0;
bk_en = false;


bk_ctl[0] = 0;
bk_ctl[1] = 0;
bk_ctl[2] = 0;
bk_ctl[3] = 0;

mcu_status = MCU_ST_RUN;


    /////////////////////////////////////////////////


grid_display();


////////set edit box///////////////////
//m_edit1.SetWindowText("print window:");
//m_edit2.SetWindowText("0000");


//set  timer /////////////
SetTimer(1,10,NULL); 
SetTimer(2,5,NULL);


m_btn_run.EnableWindow(false);
m_btn_stop.EnableWindow(true);
////////////edit box end //////////////


SetIcon(m_hIcon, TRUE);// Set big icon
SetIcon(m_hIcon, FALSE);// Set small icon

// TODO: Add extra initialization here

if(grid_mode == 0)
{
m_btn_mode.SetWindowText("SeeFunctions");
}
else
{
m_btn_mode.SetWindowText("SeeVariables");
}










}












void CTdebugDlg::OnGridEndEdit(NMHDR *pNotifyStruct, LRESULT* pResult)
{
    NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;
//    Trace(_T("End Edit on row %d, col %d\n"), pItem->iRow, pItem->iColumn);
CString  str;
int      index;
__int64   tv;
index = pItem->iRow - 1;
unsigned char buf[8];
unsigned char i;


//*pResult = (m_bRejectEditChanges)? -1 : 0;
if((this->grid_mode == 0) && (g_v.len[index] <= 8) && (pItem->iColumn == 3))
{
str = m_grid.GetItemText(pItem->iRow, pItem->iColumn);

tv = strtol(str,NULL,16);
str.Format("End Edit %x", tv);

for(i=0;i< g_v.len[index] ;i++)
{
buf[i] = tv & 0x00ff;
tv = tv >> 8;
}


WriteMem(m_usb_handle,g_v.addr[index],buf,g_v.len[index],device_type); // mcu run
this->debug_print(" write complete!");
//grid_display();
}
}








void CTdebugDlg::OnCheck2() 
{
// TODO: Add your control notification handler code here



/* if(m_check2.GetCheck())
MessageBox("true");
else
MessageBox("false"); */


}


///////////// for backup ///////////
/*
#if 0
///////////open usb device ///////////////////////////////////////////
m_usb_handle = GetPrintDeviceHandle();   // get usb printdevice.
if(m_usb_handle == NULL)
{
MessageBox("no usb device!!");
//str_info.Format("NO usb device");
m_info.SetWindowText("NO usb device");
}
else
{
if(IsEVKDevice(m_usb_handle))
{ m_info.SetWindowText("Evk device ok");
device_type = 4;
swireusb();
}
else
{ m_info.SetWindowText("usb device ok");
device_type = 1;
}


}


//////////////////////////////////////////////////////////////////////




////////////////open file ////////////////////////////////////////
{
char line[100];
int cnt,para_cnt;
char *para[10];
unsigned char  f_st;
CString str;

str.Format("cp  -f *.lst  \"boot-.llst\" ");   // create a folder.
//system(str);
WinExec(str,SW_HIDE);
Sleep(200);


pf = fopen("boot-.llst","r");
if(pf == NULL)
{
MessageBox("no  list file find!!");
m_info.SetWindowText("no list file");
}
else
{
f_st = 0;
while( fgets( line, 100, pf ) != NULL)   // get every line int the file
{
cnt = 0;
para[cnt] = strtok(line," \t");
do
{
para[++cnt] = strtok(NULL," \t");
} while ((cnt < 10) && (para[cnt] != NULL));
para_cnt = cnt;


if(strcmp(para[0],"SYMBOL") == 0)
{
f_st = 1;
g_v.cnt = 0;
g_f.cnt = 0;
}


if((f_st == 1) && (para_cnt== 6))
{
if((strcmp(para[1],"g") == 0) || (strcmp(para[1],"l") == 0))  //  if it is global variables or functions 
{
if(((strcmp(para[3],".bss") == 0) || (strcmp(para[3],".data") == 0)) && (strcmp(para[2],"O") == 0))
{
g_v.addr[g_v.cnt] = strtol(para[0],NULL,16);
g_v.len[g_v.cnt] = strtol(para[4],NULL,16);
strcpy(g_v.name[g_v.cnt],para[5]);
g_v.cnt++;



}
else if((strcmp(para[3],".text") == 0) && (strcmp(para[2],"F") == 0))
{
g_f.addr[g_f.cnt] = strtol(para[0],NULL,16);
g_f.len[g_f.cnt] = strtol(para[4],NULL,16);
g_f.value[g_f.cnt] = 0;
strcpy(g_f.name[g_f.cnt],para[5]);
g_f.cnt++;

}


}
}









}

fclose(pf);
}






}
/////////////file read end ///////////////////////////////////////////
///////////////make the addr to be increase order/////////////////////
{
int i,j;
unsigned long temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(g_v.addr[j] < g_v.addr[j-1])
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;


temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;


strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);




}
}


}


bss_start = g_v.addr[0];
bss_end = g_v.addr[g_v.cnt-1] + g_v.len[g_v.cnt - 1];
////////////////////////////////// order by name /////////////////////////////////


{
int i,j;
unsigned long temp;
char temp_str[100];
for(i=1;i<g_v.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_v.name[j],g_v.name[j-1]) < 0)
{
temp = g_v.addr[j];
g_v.addr[j] = g_v.addr[j-1];
g_v.addr[j-1] = temp;


temp = g_v.len[j];
g_v.len[j] = g_v.len[j-1];
g_v.len[j-1] = temp;


strcpy(temp_str,g_v.name[j]);
strcpy(g_v.name[j],g_v.name[j-1]);
strcpy(g_v.name[j-1],temp_str);




}
}


}


{
int i,j;
unsigned long temp;
char temp_str[100];
for(i=1;i<g_f.cnt;i++)
for(j=i;j>0;j--)
{
if(strcmp(g_f.name[j],g_f.name[j-1]) < 0)
{
temp = g_f.addr[j];
g_f.addr[j] = g_f.addr[j-1];
g_f.addr[j-1] = temp;


temp = g_f.len[j];
g_f.len[j] = g_f.len[j-1];
g_f.len[j-1] = temp;


strcpy(temp_str,g_f.name[j]);
strcpy(g_f.name[j],g_f.name[j-1]);
strcpy(g_f.name[j-1],temp_str);




}
}


}




////////////////////order end ////////////////////////////////////////

////////////////set the grid /////////////////////////////////////////
m_ImageList.Create(MAKEINTRESOURCE(IDB_BITMAP1), 16, 2, RGB(255,255,255));
m_grid.SetImageList(&m_ImageList);  //绑定grid控件和 图片列表
// m_grid.SetEditable(true);


m_grid.SetTextBkColor(RGB(0xFF, 0xFF, 0xE0)); //黄色背景
m_grid.SetTextColor(RGB(0x00, 0x00, 0xff));
//m_grid.SetFixedTextColor(RGB(0xff, 0x00, 0x00)); //表头的字体颜色

////////////set global config //////////////////
grid_mode = 0;
bkpoint = 0;
bk_en = false;


bk_ctl[0] = 0;
bk_ctl[1] = 0;
bk_ctl[2] = 0;
bk_ctl[3] = 0;

mcu_status = MCU_ST_RUN;


    /////////////////////////////////////////////////


grid_display();


////////set edit box///////////////////
m_edit1.SetWindowText("print window:");
m_edit2.SetWindowText("0000");


//set  timer /////////////
SetTimer(1,1000,NULL); 
SetTimer(2,5,NULL);


m_btn_run.EnableWindow(false);
m_btn_stop.EnableWindow(true);
////////////edit box end //////////////


SetIcon(m_hIcon, TRUE);// Set big icon
SetIcon(m_hIcon, FALSE);// Set small icon

// TODO: Add extra initialization here

if(grid_mode == 0)
{
m_btn_mode.SetWindowText("SeeFunctions");
}
else
{
m_btn_mode.SetWindowText("SeeVariables");
}
#endif






  */
///////////////end of backup/////////


// do tcdb command
void CTdebugDlg::OnButton9() 
{
// TODO: Add your control notification handler code here
CString str;
m_edit_tcdbcmd.GetWindowText(str);
if(strcmp(str,"") != 0)
{
tcdb_cmd(str);
}


}


void CTdebugDlg::get_exe_cur(void) 
{
//CString str;
// TODO: Add your control notification handler code here
//定义程序路径的字符数组
char szEexFullpath[MAX_PATH];
char szExeDir[MAX_PATH];//得到EXE所有目录(包含"\")
//得到程序的模块句柄
HMODULE hMyModule = GetModuleHandle(NULL);
//得到程序的路径
DWORD dwLen = GetModuleFileName(hMyModule,szEexFullpath,MAX_PATH);
//计算程序的路径(倒数查找最后一个"\")
char * pPatch = &szEexFullpath[dwLen]; //szexepatch + dwLen;
while (pPatch!=NULL && *pPatch!='\\')
{
pPatch--;
}
//得到最后一个反斜扛之后再往后加1,并把它设置为0,这样后面的数据对于字符数组就会忽略
pPatch++;
*pPatch=0;
strcpy(szExeDir,szEexFullpath);
m_exe_dir.Format("%s",szExeDir);


}


void CTdebugDlg::OnButton10() 
{
// TODO: Add your control notification handler code here
unsigned char  buf[10];




ReadMem(m_usb_handle,0x602,buf,1,device_type); // read mcu ctl reg


buf[0] = buf[0] | 0x02;
WriteMem(m_usb_handle,0x602,buf,1,device_type); // mcu run stop mcu 





{
ReadMem(m_usb_handle,0x613,buf,1,device_type);
buf[0] = buf[0] | 80;
WriteMem(m_usb_handle,0x613,buf,1,device_type); // mcu break run


}






//if(mcu_status == MCU_ST_BREAK)



m_btn_run.EnableWindow(true);
m_btn_stop.EnableWindow(false);


mcu_status = MCU_ST_STOP;




m_info.SetWindowText("mcu stop..");
}
阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信版本低登录不了怎么办 软件与系统不兼容怎么办 软件与手机系统不兼容怎么办 qq和手机不兼容怎么办 来个软件不兼容怎么办 安卓8.0不兼容app怎么办 两条内存不兼容怎么办 王者荣耀软件不兼容怎么办 冒险岛不兼容win7怎么办 百度网盘手机号换了怎么办 破解版游戏闪退怎么办 安卓手机软件不兼容怎么办 安卓8.0软件闪退怎么办 游戏与手机系统不兼容怎么办 耳机和手机不兼容怎么办 软件和手机不兼容怎么办 小米6开关键失灵怎么办 同步助手下载不了微信旧版本怎么办 闲鱼退货卖家拒收怎么办 闲鱼把联系人删了怎么办 闲鱼付款了卖家不发货怎么办 红米4c卡怎么办 如果买鞋子买到假的怎么办 猎趣永久封号钱怎么办 支付宝换绑定手机后怎么办 为什么回收站的删除键不见了怎么办 微信在异地登录怎么办 支付宝帐号被冻结怎么办 进不了路由器设置页面怎么办 支付宝支付密码忘记了怎么办 淘宝忘记登录密码了怎么办 手机换卡了微信怎么办 淘宝退款成功后收到货怎么办 没收到货退款商家不处理怎么办 没收到货申请退款卖家不处理怎么办 京东已收到货却不处理退款怎么办 货退了卖家不退款怎么办 淘宝退了货卖家不退款怎么办 手机淘宝不显示图片怎么办 京东申请退款卖家不处理怎么办 企业网银冻结了怎么办