/** * @sn int SendData(char *data, int data_len) * @brief the data is formated to transmition protocol STR + DATA LENGTH(2 bytes) + DATA(LLVAR) + ETX + LRC(STR...ETX) * end sent at the end. * @param data : the data to be transmited * @param data_len : the length of the data to be transmited * @return @li FAIL * @li SUCC * @sa */ int SendData(char *data, int data_len) { char buffer[PACK_BUF_LEN]; if((data_len < 0) || (data_len > (PACK_BUF_LEN - 5))) { return FAIL; } memset(buffer, 0, sizeof(buffer)); //pack the data phase //add buffer[0] = TLVP_STX; // Add data length buffer[1] = ByteToBcd(data_len/100); buffer[2] = ByteToBcd(data_len%100); //Add data memcpy(&buffer[3], data, data_len); //Add ETC buffer[3 + data_len] = TLVP_ETX; //Add LRC buffer[4 + data_len] = LRC(buffer, 4 + data_len); if(portwrite(AUX1, 5 + data_len, buffer) != SUCC) { return FAIL; } return SUCC; }
int Board_Txn(char* pszData, int* pnDataLen, char cCommandReq, char cCommandResp) { char szData[BOARD_MAX_SIZE]; int nDataLen = 0; int nRet = 0; int nLen = 0; // static char cFlag = 0; STCOMMPARAM stPubCommParam; memset(szData, 0, sizeof(szData)); memcpy(szData, pszData, *pnDataLen); Board_Pack(cCommandReq, szData, pnDataLen); #if 0 if (!cFlag) { nRet = initaux(BOARD_PORT, BPS115200, DB8|STOP1|NP); if (nRet != 0) { PubMsgDlg("初始化串口", "初始化串口失败", 3, 10); return APP_FAIL; } cFlag = 1; } #endif memset(&stPubCommParam, 0, sizeof(stPubCommParam)); stPubCommParam.cCommType = COMMTYPE_PORT; stPubCommParam.ConnInfo.stPortParam.nAux = BOARD_PORT; strcpy(stPubCommParam.ConnInfo.stPortParam.szAttr, "115200"); stPubCommParam.cPreDialFlag = 0; stPubCommParam.nTimeOut = 10; stPubCommParam.cIsSupportQuitRecv = 1; // 1接收的时候可退出 nRet = PubCommInit(&stPubCommParam); if (nRet != APP_SUCC) { return APP_FAIL; } SetControlCommInit();/**<要求需要初始化通讯模块*/ #if 0 clrportbuf(BOARD_PORT, 0); clrportbuf(BOARD_PORT, 1); nRet = portwrite(BOARD_PORT, *pnDataLen, szData); if (nRet < 0) { return APP_FAIL; } #endif PubCommConnect(); if(PubCommWrite(szData, *pnDataLen) == APP_FAIL) { PubMsgDlg(NULL, "串口数据发送失败", 3, 60); PubCommHangUp(); return APP_FAIL; } memset(szData, 0, sizeof(szData)); while(1) { szData[0] = 0; nRet = PubCommRead((char *)szData, 1, &nLen); if (APP_QUIT == nRet) { PubCommHangUp(); return APP_TIMEOUT; } if (nRet == APP_FAIL) { PubCommHangUp(); return APP_QUIT; } if (nLen != 1) { break; } if (szData[0] == STX) { break; } } if (szData[0] == STX) { nRet = PubCommRead((char *)szData+1, 2, &nLen); if (APP_SUCC != nRet) { PubCommHangUp(); return APP_QUIT; } if (nLen != 2) { PubMsgDlg("接收", "接收失败1", 3, 10); PubCommHangUp(); return APP_FAIL; } nDataLen = 2; PubC2ToInt((unsigned int *)&nDataLen, (unsigned char *)szData + 1); { int nOff=0; int nTmpLen = 0; nTmpLen = nDataLen + 1; while(1) { if(nLen <= MAX_RECV) { nRet = PubCommRead((char *)szData+3+nOff,nTmpLen, &nLen); if (APP_SUCC != nRet) { PubCommHangUp(); return APP_QUIT; } if (nLen != nTmpLen) { PubCommHangUp(); return APP_FAIL; } break; } else { nRet = PubCommRead((char *)szData+3+nOff,MAX_RECV, &nLen); if (APP_SUCC != nRet) { PubCommHangUp(); return APP_QUIT; } if (nLen != MAX_RECV) { PubCommHangUp(); return APP_FAIL; } nLen -= MAX_RECV; nOff += MAX_RECV; } } } /* nRet = portread(BOARD_PORT, nDataLen+1, (char *)szData+3, nTimeOut); if (nRet == QUIT) { return APP_QUIT; } if (nRet != nDataLen+1) { return APP_FAIL; } */ } else { PubMsgDlg("接收", "接收失败3", 3, 10); PubCommHangUp(); return APP_FAIL; } *pnDataLen = nDataLen+4; { // char szTemp[BOARD_MAX_SIZE*2]; // PubHexToAsc((unsigned char*)szData, (*pnDataLen)*2, 0, (unsigned char*)szTemp); } Board_UnPack(szData, (unsigned int *)pnDataLen); { // char szTemp[BOARD_MAX_SIZE*2]; // PubHexToAsc((unsigned char*)szData, (*pnDataLen)*2, 0, (unsigned char*)szTemp); } PubCommHangUp(); if((cCommandReq == 0xA2) && szData[0] == 0xC2) { return APP_QUIT; } else if(szData[0] != cCommandResp) { return APP_FAIL; } (*pnDataLen)--; memcpy(pszData, &szData[1], *pnDataLen); return APP_SUCC; }