UINT mThreadDown2(LPVOID pParam) //端点2下传线程 { ULONG dlen,datalen; UCHAR mBuf[mCH375_PACKET_LENGTH*8];
CCH372UpDownDlg *pDlg = (CCH372UpDownDlg *)pParam; pDlg->m_btndown2.EnableWindow(FALSE); if(pDlg->m_open && pDlg->m_trddown2) { /**************在线程中用CreateFile打开设备,因为每个句柄同一时候只能执行一个API**************************/ if ( pDlg->T2DHandle != INVALID_HANDLE_VALUE ) { datalen = strlen(pDlg->m_downdata2); if((LONG)datalen/2 > pDlg->m_downlen2) //取数据长度与输入长度中偏小值 datalen = pDlg->m_downlen2; else{ datalen = datalen/2; pDlg->m_downlen2 = datalen; }
memcpy(mBuf,pDlg->m_downdata2,datalen*2); pDlg->mStrtoVal(&mBuf[0],datalen*2); dlen = datalen; if(!CH375WriteData((ULONG)pDlg->T2DHandle,&mBuf[0],&dlen)) { if ( !pDlg->m_close ) MessageBox(NULL,"端点2下传失败!如果设备断开过那么请先关闭本程序","USB实验调试软件",MB_OK|MB_ICONSTOP); } else{//更新长度显示 char tem[50]=""; DownCount=DownCount+dlen; sprintf(tem,"Down: %d",DownCount); SetDlgItemText(pDlg->m_hWnd,IDC_DownCount,tem); } } } pDlg->m_trddown2 = FALSE; pDlg->m_btndown2.EnableWindow(TRUE); //ExitThread(0); return 0; }
这个是官方给的CH372updown调试软件中 端2点的下传线程
PUCHAR CCH372UpDownDlg::mStrtoVal(PUCHAR str, ULONG strlen) { ULONG i,j; ULONG len; UCHAR strRev[mMAX_BUFFER_LENGTH]; if( strlen % 2 != 0 ) { str[strlen] = 0; strlen += 1; } len = strlen / 2; for(i=0,j=0;i { strRev[j] = (UCHAR)((mCharToBcd(str[i])<<4) + mCharToBcd(str[i+1])); i++; } strRev[j]='\0'; memcpy( str,strRev,len); return str; }
UCHAR CCH372UpDownDlg::mCharToBcd(UCHAR iChar) { UCHAR mBCD; if ( iChar >= '0' && iChar <= '9' ) mBCD = iChar -'0'; else if ( iChar >= 'A' && iChar <= 'F' ) mBCD = iChar - 'A' + 0x0a; else if ( iChar >= 'a' && iChar <= 'f' ) mBCD = iChar - 'a' + 0x0a; // else mBCD = 0xff; else mBCD = 0; return( mBCD ); }
通过mStrtoVal函数还有mCharToBcd函数把输入的数据改变成什么了 8位的BCD码?
可是最后进行写操作的不是还是 CH375WriteData((ULONG)pDlg->T2DHandle,&mBuf[0],&dlen); 这不是就是直接把输入对话框端点2下传的数据 直接通过API CH375WriteData函数 下传的芯片上。。。
那这mStrtoVal和mCharToBcd两个函数作用什么啊。
还有看mCharToBcd函数 似乎输入对话框的数据只可以是0-9 A-F a-f
麻烦高手指点下。。。
唉 悲剧 不知道为什么 硬件连接可以 就是不可以传数据
大神 99俺
[font=新宋体]文字[/font][font=宋体]文字[/font]