计算机COM口数据测试

打印 上一主题 下一主题

主题 850|帖子 850|积分 2550

计算机COM口数据测试
一、基本使用流程
程序需要以管理员身份运行,COM口回路测试需短接2,3pin,测试时候使用控制台,配置测试相关路径,并在测试完成后
1.测试配置路径D:\bigdata\INI\FWCOM.ini
2.测试完成后需要在路径D:\bigdata\LOG\生成测试FWCOM.log文件
程序运行结果示意图

运行完成后的日志文件示意图

 二、软件设计
源码分为三个部分,common.cpp基本基本信息配置,function.cpp完成功能实现,最后通过main.cpp运行整个程序
common.cpp
 
配置函数代码
  1. #undef UNICODE
  2. #include "common.h"
  3. #include "Config.h"
  4. void TextColor(int color)
  5. {
  6.         HANDLE stdH = GetStdHandle(STD_OUTPUT_HANDLE);
  7.         SetConsoleTextAttribute(stdH, color);
  8. }
  9. void PASS()
  10. {
  11.         printf("The test is: ");
  12.         TextColor(GREEN);
  13.         printf("passed");
  14.         printf("\n");
  15.         printf("\n");
  16.         TextColor(WHITE);
  17. }
  18. void FAIL()
  19. {
  20.         printf("The test is: ");
  21.         TextColor(RED);
  22.         printf("failed");
  23.         printf("\n");
  24.         printf("\n");
  25.         TextColor(WHITE);
  26. }
  27. DWORD SubSystemID(MBTYPE mb[])
  28. {
  29.         DWORD decSubSystemID = 0;
  30.         DWORD aimSubSystemID = 0;
  31.         //        BYTE bus = pciSelect[0], dev = pciSelect[1], func = pciSelect[2], offset = 0x2c;
  32.         BYTE bus = 0;
  33.         BYTE dev = 0;
  34.         BYTE func = 0;
  35.         BYTE offset = 0;
  36.         DWORD address = 0;
  37.         for (int i = 0; i < sizeof(mb); i++)
  38.         {
  39.                 //                printf("i = %d\n", i);
  40.                 if (mb[i].subSystemId != 0)
  41.                 {
  42.                         bus = mb[i].bus;
  43.                         dev = mb[i].dev;
  44.                         func = mb[i].fun;
  45.                         offset = mb[i].subSystemIdOffset;
  46.                         aimSubSystemID = mb[i].subSystemId;
  47.                         address = MAKE_CONFIG_ADDRESS(bus, dev, func, offset);
  48.                         FoxLib_SetPortVal(PCI_CONFIG_ADDRESS, address, 4);
  49.                         FoxLib_GetPortVal(PCI_CONFIG_DATA, &decSubSystemID, 4);
  50. #ifdef DEBUG
  51.                         printf("aimSubSystemID = "%x", decSubSystemID = "%x"\n", aimSubSystemID, decSubSystemID);
  52. #endif
  53.                         if (aimSubSystemID == decSubSystemID)
  54.                         {
  55.                                 return 0;
  56.                         }
  57.                 }
  58.         }
  59.         printf("Not support MB!\n");
  60.         return 1;
  61. }
  62. void GetGlobalData(char* name)
  63. {
  64.         int i = 0;
  65.         int index = 0;
  66.         int toolSelect = 0;
  67.         if (strstr(name, "hwm") != NULL)
  68.         {
  69.                 index = 1;
  70.                 for (i = 0; i < cTINumberMax; i++)
  71.                 {
  72.                         if (cFanName[i][0] != '\0')
  73.                         {
  74.                                 iFanIndex[index] = i;
  75.                                 index++;
  76.                                 iAllFanNum++;
  77.                         }
  78.                 }
  79.                 index = 1;
  80.                 for (i = 0; i < cTINumberMax; i++)
  81.                 {
  82.                         if (cTempName[i][0] != '\0')
  83.                         {
  84.                                 iTempIndex[index] = i;
  85.                                 index++;
  86.                                 iAllTempNum++;
  87.                         }
  88.                 }
  89. #ifdef DEBUG
  90.                 printf("iAllFanNum = %d, iAllTempNum = %d\n", iAllFanNum, iAllTempNum);
  91. #endif
  92.         }
  93.         else if (strstr(name, "idchk") != NULL)
  94.         {
  95.                 index = 1;
  96.                 for (i = 0; i < cTINumberMax; i++)
  97.                 {
  98.                         if (cIdChkName[i][0] != '\0')
  99.                         {
  100.                                 iIdChkIndex[index] = i;
  101.                                 index++;
  102.                                 iAllIdChkNum++;
  103.                         }
  104.                 }
  105. #ifdef DEBUG
  106.                 printf("iAllIdChkNum = %d\n", iAllIdChkNum);
  107. #endif
  108.         }
  109.         else if (strstr(name, "pcie") != NULL)
  110.         {
  111.                 index = 1;
  112.                 for (i = 0; i < cTINumberMax; i++)
  113.                 {
  114.                         if (cPcieName[i][0] != '\0')
  115.                         {
  116.                                 iPcieIndex[index] = i;
  117.                                 index++;
  118.                                 iAllPcieNum++;
  119.                         }
  120.                 }
  121. #ifdef DEBUG
  122.                 printf("iAllPcieNum = %d\n", iAllPcieNum);
  123. #endif
  124.         }
  125.         else if (strstr(name, "sata") != NULL)
  126.         {
  127.                 index = 1;
  128.                 for (i = 0; i < cTINumberMax; i++)
  129.                 {
  130.                         if (cSataSpdName[i][0] != '\0')
  131.                         {
  132.                                 iSataSpdIndex[index] = i;
  133.                                 index++;
  134.                                 iAllSataSpdNum++;
  135.                         }
  136.                 }
  137. #ifdef DEBUG
  138.                 printf("iAllSataSpdNum = %d\n", iAllSataSpdNum);
  139. #endif
  140.         }
  141.         else if (strstr(name, "fntpnl") != NULL)
  142.         {
  143.                 index = 1;
  144.                 for (i = 0; i < cTINumberMax; i++)
  145.                 {
  146.                         if (cFntpnlName[i][0] != '\0')
  147.                         {
  148.                                 iFntpnlIndex[index] = i;
  149.                                 index++;
  150.                                 iAllFntpnlNum++;
  151.                         }
  152.                 }
  153. #ifdef DEBUG
  154.                 printf("iAllFntpnlNum = %d\n", iAllFntpnlNum);
  155. #endif
  156.         }
  157.         else if (strstr(name, "jumper") != NULL)
  158.         {
  159.                 index = 1;
  160.                 for (i = 0; i < cTINumberMax; i++)
  161.                 {
  162.                         if (cJumperName[i][0] != '\0')
  163.                         {
  164.                                 iJumperIndex[index] = i;
  165.                                 index++;
  166.                                 iAllJumperNum++;
  167.                         }
  168.                 }
  169. #ifdef DEBUG
  170.                 printf("iAllJumperNum = %d\n", iAllJumperNum);
  171. #endif
  172.         }
  173. }
  174. int GetDataFromConfig(char* fileName, char* dataConfigAppName, char configItemKey[CONFIGNUM][CONFIGDATALENGTH], char dataArray[CONFIGNUM][CONFIGDATALENGTH])
  175. {
  176.         int ret = 0;
  177.         LPTSTR lpReturnedString = NULL;
  178.         LPCTSTR lpFileName = NULL;
  179.         lpReturnedString = (char*)malloc(MAX_PATH);
  180.         memset(lpReturnedString, 0, MAX_PATH);
  181.         int itemNum = 0;
  182.         int itemOffset = 0;
  183.         while (1)
  184.         {
  185.                 GetPrivateProfileString(dataConfigAppName, configItemKey[itemNum], NULL, lpReturnedString, MAX_PATH, fileName);
  186.                 if (*lpReturnedString == '\0')
  187.                 {
  188. #ifdef DEBUG
  189.                         printf("Input data error\n");
  190.                         printf("-- dataConfigAppName = %s, itemKey = %s, lpReturnedString = %s, fileName = %s\n", dataConfigAppName, configItemKey[itemNum], lpReturnedString, fileName);
  191. #endif               
  192.                         ret = 1;
  193.                         break;
  194.                 }
  195.                 else
  196.                 {
  197.                         itemOffset = 0;
  198.                         while (lpReturnedString)
  199.                         {
  200.                                 if (*lpReturnedString == '\0')
  201.                                 {
  202.                                         break;
  203.                                 }
  204.                                 dataArray[itemNum][itemOffset] = *lpReturnedString;
  205.                                 itemOffset++;
  206.                                 lpReturnedString++;
  207.                         }
  208.                         lpReturnedString -= itemOffset;
  209. #ifdef DEBUG
  210.                         printf("dataConfigAppName = %s, itemKey = %s, lpReturnedString = %s, fileName = %s\n", dataConfigAppName, configItemKey[itemNum], lpReturnedString, fileName);
  211. #endif
  212.                         itemNum++;
  213.                 }
  214.                 memset(lpReturnedString, 0, strlen((char*)lpReturnedString));
  215.         }
  216.         return ret;
  217. }
  218. int LogName(char* logName, char* configName)
  219. {
  220.         int lengthConName = strlen(configName);
  221.         int i = 0;
  222.         for (i = 0; i < (lengthConName - 4); i++)
  223.         {
  224.                 *logName = *configName;
  225.                 logName++;
  226.                 configName++;
  227.         }
  228.         logName -= i;
  229.         sprintf(logName, "%s.TXT", logName);
  230. #ifdef DEBUG
  231.         printf("*logName = "%s"\n", logName);
  232. #endif
  233.         FILE* fd = NULL;
  234.         fd = fopen(lpLogFileName, "a+");
  235.         if (fd == NULL)
  236.         {
  237.                 printf("Create the log file %s failed\n", lpLogFileName);
  238.                 return 1;
  239.         }
  240.         return 0;
  241. }
复制代码
functonc.cpp
功能函数代码
  1. #include "function.h"
  2. #include "..\Common\ExConfig.h"
  3. #define BASSADDRONE 0x3F8
  4. HANDLE hCom;
  5. DCB dcb = { sizeof(DCB) };
  6. char com[5];
  7. int Baudrate[3] = { 0 };
  8. DWORD send_data = 'E';
  9. DWORD resv_data = 'A';
  10. /*
  11. 函数功能:设置串口(com)基本配置信息
  12. 参数:        baudrate        波特率
  13.                 cts        (clear to send)清除发送
  14.                 dtr        (data set ready)数据终端准备好
  15.                 rts        (request to send)请求数据发送
  16.                 dsr        (data set ready)数据准备好
  17.                 errorcode  错误代码
  18.                 支持硬控件流的UART
  19. */
  20. int SerialSetting(int baudrate, int cts, int dtr, int rts, char errorCode[])
  21. {
  22.         dcb.fDtrControl = DTR_CONTROL_DISABLE;
  23.         dcb.fRtsControl = RTS_CONTROL_DISABLE;
  24.         if (hCom != INVALID_HANDLE_VALUE)
  25.         {
  26.                 CloseHandle(hCom);
  27.         }
  28.         hCom = CreateFile(com, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
  29.         if (hCom == INVALID_HANDLE_VALUE) {
  30.                 strcpy_s(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  31.                 strcpy_s(itemLog[iItemLogNum].TM_FAILINFO, "DEVICE NO FOUND");
  32.                 strcpy_s(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  33.                 TextColor(RED);
  34.                 printf("%s NO FOUND\n\n", com);
  35.                 TextColor(WHITE);
  36.                 iItemLogNum++;
  37.                 return 1;
  38.         }
  39.         system("pause");
  40.         GetCommState(hCom, &dcb);
  41.         dcb.BaudRate = baudrate;
  42.         dcb.ByteSize = 8;
  43.         dcb.Parity = NOPARITY;
  44.         dcb.StopBits = ONESTOPBIT;
  45.         dcb.fOutxCtsFlow = cts;
  46.         dcb.fDtrControl = dtr;
  47.         dcb.fRtsControl = rts;
  48.         int fSuccess = SetCommState(hCom, &dcb);
  49.         if (!fSuccess)        return 1;
  50.         int maskstatus = SetCommMask(hCom, EV_RXCHAR);
  51.         if (maskstatus == 0)        return 1;
  52.         int setupstatus = SetupComm(hCom, 4096, 4096);
  53.         if (setupstatus == 0)        return 1;
  54.         int purgestatus = PurgeComm(hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
  55.         if (purgestatus == 0)        return 1;
  56.         COMMTIMEOUTS CommTimeouts;
  57.         CommTimeouts.ReadIntervalTimeout = MAXDWORD;
  58.         CommTimeouts.ReadTotalTimeoutConstant = 1000;
  59.         CommTimeouts.ReadTotalTimeoutMultiplier = 0;
  60.         CommTimeouts.WriteTotalTimeoutConstant = 1000;
  61.         CommTimeouts.WriteTotalTimeoutMultiplier = 0;
  62.         BOOL bTimeOutResult = SetCommTimeouts(hCom, &CommTimeouts);
  63.         if (bTimeOutResult == 0)        return 1;
  64.         return 0;
  65. }
  66. //串口初始化
  67. int InitCOMOne()
  68. {
  69.         int Status = 0;        //状态(成功或失败)
  70.         DWORD sataStatus = 0x0;        //读写地址数据
  71.         Status = FoxLib_SetPortVal(BASSADDRONE + 1, 0, 1);
  72.         if (Status != 0x0)
  73.                 return Status;
  74.         Status = FoxLib_SetPortVal(BASSADDRONE + 3, 0x80, 1);
  75.         if (Status != 0x0)
  76.                 return Status;
  77.         FoxLib_GetPortVal(BASSADDRONE + 0, &sataStatus, 1);
  78.         Status = FoxLib_SetPortVal(BASSADDRONE + 0, 0x0C, 1);
  79.         if (Status != 0x0)
  80.                 return Status;
  81.         Status = FoxLib_SetPortVal(BASSADDRONE + 1, 0x00, 1);
  82.         if (Status != 0x0)
  83.                 return Status;
  84.         Status = FoxLib_SetPortVal(BASSADDRONE + 3, 0x03, 1);
  85.         if (Status != 0x0)
  86.                 return Status;
  87.         return 0x0;
  88. }
  89. //串口发送数据
  90. int Send_COMOne(DWORD my_date)
  91. {
  92.         int Status = 0;        //状态(成功或失败)
  93.         DWORD sataStatus = 0x0;        //读写地址数据
  94.         UINT32 count = 10000;
  95.         FoxLib_GetPortVal(BASSADDRONE + 5, &sataStatus, 1);
  96.         while (!(sataStatus & 0x20) && (count > 0))
  97.         {
  98.                 count--;
  99.                 FoxLib_GetPortVal(BASSADDRONE + 5, &sataStatus, 1);
  100.         }
  101.         if (count > 0)
  102.         {
  103.                 printf("Count:%d\n", count);
  104.                 Status = FoxLib_SetPortVal(BASSADDRONE + 0, my_date, 1);
  105.                 if (Status != 0x0)
  106.                 {
  107.                         return Status;
  108.                 }
  109.                 printf("Send_COM data %c ", my_date);  //发送数据打印
  110.                 TextColor(GREEN);
  111.                 printf("Success!\n");
  112.                 TextColor(WHITE);
  113.                 return 0x0;
  114.         }
  115.         else
  116.         {
  117.                 printf("Send_COM data %c ", my_date);
  118.                 TextColor(RED);
  119.                 printf("Failed!\n\n");
  120.                 TextColor(WHITE);
  121.                 return 0x01;
  122.         }
  123. }
  124. //串口接收数据
  125. int Recv_COMOne(DWORD* my_date)
  126. {
  127.         DWORD sataStatus = 0;        //读写地址数据
  128.         UINT8 cn = 0;
  129.         while (cn < 100)
  130.         {
  131.                 FoxLib_GetPortVal(BASSADDRONE + 5, &sataStatus, 1);
  132.                 if (sataStatus & 0x01)
  133.                         break;
  134.                 else
  135.                 {
  136.                         Sleep(100);
  137.                         cn++;
  138.                 }
  139.         }
  140.         FoxLib_GetPortVal(BASSADDRONE + 5, &sataStatus, 1);
  141.         if (sataStatus & 0x01)
  142.         {
  143.                 FoxLib_GetPortVal(BASSADDRONE + 0, my_date, 1);
  144.                 printf("Recv_COM data  %c ", *my_date);
  145.                 TextColor(GREEN);
  146.                 printf("Success!\n");
  147.                 TextColor(WHITE);
  148.                 return 0x0;
  149.         }
  150.         else
  151.         {
  152.                 printf("Received data ");
  153.                 TextColor(RED);
  154.                 printf("Failed!\n\n");
  155.                 TextColor(WHITE);
  156.                 return 0x01;
  157.         }
  158. }
  159. int IDCheckMain(char* fileName, char dataConfigAppName[cTINumberMax][cTINameMax], BYTE Num)
  160. {
  161.         int ret = 0;
  162.         WORD venID = 0, devID = 0, revID = 0;
  163.         char dataConfigArray[CONFIGNUM][CONFIGDATALENGTH];
  164.         memset(dataConfigArray, 0, CONFIGNUM * CONFIGDATALENGTH);
  165.         char aimTestLocation[30] = { '\0' };
  166.         char aimTestErrorcode[30] = { '\0' };
  167.         strcpy(headLog.T_DEVICE, "IdCheck");
  168.         int iNum = 0;
  169. #ifdef DEBUG
  170.         printf("Num = %d, iIdChkCurrentNum = %d, iAllIdChkNum + 1 = %d\n", Num, iIdChkCurrentNum, iAllIdChkNum + 1);
  171. #endif
  172.         if (iIdChkCurrentNum == (iAllIdChkNum + 1))
  173.         {
  174.                 strcpy(headLog.T_CAPTION, "All");
  175.                 for (iNum = 1; iNum < iIdChkCurrentNum; iNum++)
  176.                 {
  177.                         GetDataFromConfig(fileName, dataConfigAppName[iIdChkIndex[iNum]], configItemKeyIDchk, dataConfigArray);
  178.                         venID = AtoX(dataConfigArray[0]);
  179.                         memset(dataConfigArray[0], 0, strlen((char*)dataConfigArray[0]));
  180.                         devID = AtoX(dataConfigArray[1]);
  181.                         memset(dataConfigArray[1], 0, strlen((char*)dataConfigArray[1]));
  182.                         revID = AtoX(dataConfigArray[2]);
  183.                         memset(dataConfigArray[2], 0, strlen((char*)dataConfigArray[2]));
  184.                         strcpy(aimTestLocation, dataConfigArray[3]);
  185.                         memset(dataConfigArray[3], 0, strlen((char*)dataConfigArray[3]));
  186.                         strcpy(aimTestErrorcode, dataConfigArray[4]);
  187.                         memset(dataConfigArray[4], 0, strlen((char*)dataConfigArray[4]));
  188. #ifdef DEBUG
  189.                         printf("**iFanNum = %d, venID = %X, devID = %X, revID = %X\n", iNum, venID, devID, revID);
  190.                         printf("**aimTestLocation = %s\n", aimTestLocation);
  191.                         printf("**aimTestErrorcode = %s\n", aimTestErrorcode);
  192. #endif
  193.                         ret += IDCheck(cIdChkName[iIdChkIndex[iNum]], venID, devID, revID, aimTestLocation, aimTestErrorcode);
  194.                         memset(aimTestLocation, 0, strlen(aimTestLocation));
  195.                         memset(aimTestErrorcode, 0, strlen(aimTestErrorcode));
  196.                 }
  197.         }
  198.         else
  199.         {
  200.                 GetDataFromConfig(fileName, dataConfigAppName[iIdChkIndex[Num]], configItemKeyIDchk, dataConfigArray);
  201.                 venID = AtoX(dataConfigArray[0]);
  202.                 memset(dataConfigArray[0], 0, strlen((char*)dataConfigArray[0]));
  203.                 devID = AtoX(dataConfigArray[1]);
  204.                 memset(dataConfigArray[1], 0, strlen((char*)dataConfigArray[1]));
  205.                 revID = AtoX(dataConfigArray[2]);
  206.                 memset(dataConfigArray[2], 0, strlen((char*)dataConfigArray[2]));
  207.                 strcpy(aimTestLocation, dataConfigArray[3]);
  208.                 memset(dataConfigArray[3], 0, strlen((char*)dataConfigArray[3]));
  209.                 strcpy(aimTestErrorcode, dataConfigArray[4]);
  210.                 memset(dataConfigArray[4], 0, strlen((char*)dataConfigArray[4]));
  211. #ifdef DEBUG
  212.                 printf("*venID = %X, devID = %X, revID = %X\n", venID, devID, revID);
  213.                 printf("**aimTestLocation = %s\n", aimTestLocation);
  214.                 printf("**aimTestErrorcode = %s\n", aimTestErrorcode);
  215. #endif
  216.                 strcpy(headLog.T_CAPTION, cIdChkName[Num]);
  217.                 strcpy(headLog.T_LOCATION, aimTestLocation);
  218.                 ret = IDCheck(cIdChkName[Num], venID, devID, revID, aimTestLocation, aimTestErrorcode);
  219.                 memset(aimTestLocation, 0, strlen(aimTestLocation));
  220.                 memset(aimTestErrorcode, 0, strlen(aimTestErrorcode));
  221.         }
  222.         tEndTime = getEndTime(endTime);
  223.         time(&tEndTime);
  224.         strcpy(headLog.T_ENDTIME, endTime);
  225.         memset(durTime, 0, LENGTHA);
  226.         sprintf(durTime, "%d", int(difftime(tEndTime, tStartTime)));
  227.         //getDURTime(tEndTime, tStartTime, durTime);
  228.         strcpy(headLog.T_DURATION, durTime);
  229.         if (ret == 0)
  230.         {
  231.                 strcpy(headLog.T_STATUS, "PASS");
  232.         }
  233.         else
  234.         {
  235.                 strcpy(headLog.T_STATUS, "FAIL");
  236.         }
  237.         HeadLogRecord(headLog);
  238.         for (int i = 0; i < iItemLogNum; i++)
  239.         {
  240.                 ItemLogRecord(itemLog[i]);
  241.         }
  242.         WriteLogRecord(lpLogFileName);
  243.         return ret;
  244. }
  245. DWORD getBusDevFun(DWORD code)
  246. {
  247.         int iRet = 0;
  248.         BYTE offset = 0;
  249.         DWORD dwAddr = 0, dwData = 0, ClassCode = 0;
  250.         for (BYTE i = 0; i < 255; i++)
  251.         {
  252.                 BYTE bus = i;
  253.                 for (BYTE j = 0; j < 32; j++)
  254.                 {
  255.                         BYTE dev = j;
  256.                         for (BYTE k = 0; k < 8; k++)
  257.                         {
  258.                                 BYTE func = k;
  259.                                 //check the invalid vendor ID
  260.                                 offset = 0x00;
  261.                                 dwAddr = MAKE_CONFIG_ADDRESS(bus, dev, func, offset);
  262.                                 FoxLib_SetPortVal(PCI_CONFIG_ADDRESS, dwAddr, 4);
  263.                                 FoxLib_GetPortVal(PCI_CONFIG_DATA, &dwData, 4);
  264.                                 //        dwData = 0xffffffff;
  265.                                 DWORD IDCode = dwData;
  266.                                 if (code == IDCode)
  267.                                 {
  268.                                         return (bus << 16) + (dev << 8) + func;
  269.                                 }
  270.                         }
  271.                 }
  272.         }
  273.         return 0;
  274. }
  275. //保留idcheck内容,但是这里不使用
  276. int IDCheck(char para[], WORD inVenID, WORD inDevID, WORD inRevID, char subLocation[], char errorCode[])
  277. {
  278.         int result = 1;
  279.         WORD venID = 0, devID = 0, revID = 0;
  280.         WORD devIdTemp1 = 0, devIdTemp2 = 0, devIdTemp3 = 0;
  281.         WORD devIdTemp = 0;
  282.         WORD devIDH = 0, devIDL = 0;
  283.         int bus = 0, dev = 0, func = 0;
  284.         DWORD dwAddr = 0, dwData = 0, classCode = 0;
  285.         BYTE indexPort = 0x2e, dataPort = 0x2f;
  286.         //        BYTE byteData;
  287.         BYTE offset = 0;
  288.         BOOL flag = TRUE;
  289.         BOOL bLanOK = TRUE;
  290.         WORD ecAddr = 0, ecAddrH = 0, ecAddrL = 0;
  291.         WORD ecData = 0;
  292.         //for creat log .txt
  293.         if (strcmpi(para, "sio") == 0)
  294.         {
  295.                 //ITE test should add next 4 lines to enter PNP mode
  296.                 FoxLib_SetPortVal(indexPort, 0x87, 1);
  297.                 FoxLib_SetPortVal(indexPort, 0x01, 1);
  298.                 FoxLib_SetPortVal(indexPort, 0x55, 1);
  299.                 FoxLib_SetPortVal(indexPort, 0x55, 1);
  300.                 //get the vendor (NUVOTON)
  301.                 FoxLib_SetPortVal(0x2e, 0x20, 1);
  302.                 FoxLib_GetPortVal(0x2f, (PDWORD)&devIdTemp1, 1);
  303.                 FoxLib_SetPortVal(0x2e, 0x21, 1);
  304.                 FoxLib_GetPortVal(0x2f, (PDWORD)&devIdTemp2, 1);
  305.                 FoxLib_SetPortVal(0x2e, 0x22, 1);
  306.                 FoxLib_GetPortVal(0x2f, (PDWORD)&devIdTemp3, 1);
  307.                 venID = 0;
  308.                 devID = (devIdTemp1 << 8) + devIdTemp2;
  309.                 revID = devIdTemp3;
  310.                 strcpy(itemLog[iItemLogNum].TM_SUBLOCATION, "DeviceID");
  311.                 strcpy(itemLog[iItemLogNum].TM_TESTITEM, para);
  312.                 sprintf(itemLog[iItemLogNum].TM_EXPVALUE1, "%04X", inDevID);
  313.                 sprintf(itemLog[iItemLogNum].TM_ACTVALUE1, "%04X", devID);
  314.                 if (inDevID != devID)
  315.                 {
  316.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "expValue not equal actValue_");
  317.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "fail");
  318.                         strcpy(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  319.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  320.                 }
  321.                 else {
  322.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "PASS");
  323.                 }
  324.                 iItemLogNum++;
  325.                 strcpy(itemLog[iItemLogNum].TM_SUBLOCATION, "RevisionID");
  326.                 strcpy(itemLog[iItemLogNum].TM_TESTITEM, para);
  327.                 sprintf(itemLog[iItemLogNum].TM_EXPVALUE1, "%04X", inRevID);
  328.                 sprintf(itemLog[iItemLogNum].TM_ACTVALUE1, "%04X", revID);
  329.                 if (inRevID != revID)
  330.                 {
  331.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "expValue not equal actValue_");
  332.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "fail");
  333.                         strcpy(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  334.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  335.                 }
  336.                 else {
  337.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "PASS");
  338.                 }
  339.                 iItemLogNum++;
  340.         }
  341.         else
  342.         {
  343.                 if (strcmpi(para, "pch") == 0)
  344.                 {
  345. #ifdef DEBUG
  346.                         printf("\n*********\n");
  347. #endif
  348.                         // bus 00 dev 1f func 00
  349.                         /*int BusDevFun = getBusDevFun(0X06848086);
  350.                         bus = (BusDevFun >> 16)&0xff;
  351.                         dev = (BusDevFun >> 8)&0xff;
  352.                         func = BusDevFun & 0Xff;*/
  353.                         bus = 0x00;
  354.                         dev = 0x1F;
  355.                         func = 0x00;
  356.                 }
  357.                 else if (strcmpi(para, "audio") == 0)
  358.                 {
  359.                         // bus 00 dev 1f func 03
  360.                         /*int BusDevFun = getBusDevFun(0X06C88086);
  361.                         bus = (BusDevFun >> 16) & 0xff;
  362.                         dev = (BusDevFun >> 8) & 0xff;
  363.                         func = BusDevFun & 0Xff;*/
  364.                         bus = 0x00;
  365.                         dev = 0x1F;
  366.                         func = 0x03;
  367.                 }
  368.                 else if (strcmpi(para, "lan") == 0)
  369.                 {
  370.                         int BusDevFun = getBusDevFun(0X816810EC);
  371.                         bus = (BusDevFun >> 16) & 0xff;
  372.                         dev = (BusDevFun >> 8) & 0xff;
  373.                         func = BusDevFun & 0Xff;
  374.                 }
  375.                 if (bLanOK == TRUE)
  376.                 {
  377.                         dwAddr = MAKE_CONFIG_ADDRESS(bus, dev, func, 0x00);
  378.                         FoxLib_SetPortVal(PCI_CONFIG_ADDRESS, dwAddr, 4);
  379.                         FoxLib_GetPortVal(PCI_CONFIG_DATA, &dwData, 4);
  380.                         venID = (WORD)dwData;
  381.                         devID = (WORD)(dwData >> 16);
  382.                         dwAddr = MAKE_CONFIG_ADDRESS(bus, dev, func, 0x08);
  383.                         FoxLib_SetPortVal(PCI_CONFIG_ADDRESS, dwAddr, 4);
  384.                         FoxLib_GetPortVal(PCI_CONFIG_DATA, &dwData, 4);
  385.                         revID = (BYTE)dwData;
  386.                 }
  387.                 strcpy(itemLog[iItemLogNum].TM_SUBLOCATION, "VendorID");
  388.                 strcpy(itemLog[iItemLogNum].TM_TESTITEM, para);
  389.                 sprintf(itemLog[iItemLogNum].TM_EXPVALUE1, "%04X", inVenID);
  390.                 sprintf(itemLog[iItemLogNum].TM_ACTVALUE1, "%04X", venID);
  391.                 if (inVenID != venID)
  392.                 {
  393.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "expValue not equal actValue_");
  394.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "fail");
  395.                         strcpy(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  396.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  397.                 }
  398.                 else {
  399.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "PASS");
  400.                 }
  401.                 iItemLogNum++;
  402.                 strcpy(itemLog[iItemLogNum].TM_SUBLOCATION, "DeviceID");
  403.                 strcpy(itemLog[iItemLogNum].TM_TESTITEM, para);
  404.                 sprintf(itemLog[iItemLogNum].TM_EXPVALUE1, "%04X", inDevID);
  405.                 sprintf(itemLog[iItemLogNum].TM_ACTVALUE1, "%04X", devID);
  406.                 if (inDevID != devID)
  407.                 {
  408.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "expValue not equal actValue_");
  409.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "fail");
  410.                         strcpy(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  411.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  412.                 }
  413.                 else {
  414.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "PASS");
  415.                 }
  416.                 iItemLogNum++;
  417.                 strcpy(itemLog[iItemLogNum].TM_SUBLOCATION, "RevisionID");
  418.                 strcpy(itemLog[iItemLogNum].TM_TESTITEM, para);
  419.                 sprintf(itemLog[iItemLogNum].TM_EXPVALUE1, "%04X", inRevID);
  420.                 sprintf(itemLog[iItemLogNum].TM_ACTVALUE1, "%04X", revID);
  421.                 if (inRevID != revID)
  422.                 {
  423.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "expValue not equal actValue_");
  424.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "fail");
  425.                         strcpy(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  426.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  427.                 }
  428.                 else {
  429.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "PASS");
  430.                 }
  431.                 iItemLogNum++;
  432.         }
  433.         if (venID == inVenID && devID == inDevID && revID == inRevID)
  434.         {
  435.                 printf("aimvenid: %04X\t aimdevid: %04X\t aimrevid: %04X\n", inVenID, inDevID, inRevID);
  436.                 printf("actvenid: %04X\t actdevid: %04X\t actrevid: %04X\n", venID, devID, revID);
  437.                 printf("%s ID test is: ", para);
  438.                 TextColor(GREEN);
  439.                 printf("passed!\n");
  440.                 TextColor(WHITE);
  441.                 result = 0;
  442.         }
  443.         else
  444.         {
  445.                 printf("aimvenid: %04X\t aimdevid: %04X\t aimrevid: %04X\n", inVenID, inDevID, inRevID);
  446.                 printf("actvenid: %04X\t actdevid: %04X\t actrevid: %04X\n", venID, devID, revID);
  447.                 printf("%s ID test is: ", para);
  448.                 TextColor(RED);
  449.                 printf("failed!\n");
  450.                 TextColor(WHITE);
  451.                 result = 1;
  452.         }
  453.         return result;
  454. }
  455. int FwComMain(char* fileName, char dataConfigAppName[cTINumberMax][cTINameMax], BYTE Num)
  456. {
  457.         int nRetCode = 0;
  458.         int iNum = 0;
  459.         char dataConfigArray[CONFIGNUM][CONFIGDATALENGTH];
  460.         memset(dataConfigArray, 0, CONFIGNUM * CONFIGDATALENGTH);
  461.         char aimTestLocation[30] = { '\0' };
  462.         char aimTestErrorcode[30] = { '\0' };
  463.         strcpy(headLog.T_DEVICE, "Serial Port");
  464. #ifdef DEBUG
  465.         printf("Num = %d, iFCOMCurrentNum = %d, iAllFCOMNum + 1 = %d\n", Num, iFCOMCurrentNum, iAllFCOMNum + 1);
  466. #endif
  467.         if (iFCOMCurrentNum == (iAllFCOMNum + 1))
  468.         {
  469.                 for (iNum = 1; iNum < iFCOMCurrentNum; iNum++)
  470.                 {
  471.                         GetDataFromConfig(fileName, cFCOMName[iFCOMIndex[iNum]], configItemKeyFCOM, dataConfigArray);
  472.                         strcpy(aimTestLocation, dataConfigArray[1]);
  473.                         memset(dataConfigArray[1], 0, strlen((char*)dataConfigArray[1]));
  474.                         strcpy(aimTestErrorcode, dataConfigArray[3]);
  475.                         memset(dataConfigArray[3], 0, strlen((char*)dataConfigArray[3]));
  476.                         Baudrate[0] = atoi(dataConfigArray[4]);
  477.                         memset(dataConfigArray[4], 0, strlen((char*)dataConfigArray[4]));
  478.                         Baudrate[1] = atoi(dataConfigArray[5]);
  479.                         memset(dataConfigArray[5], 0, strlen((char*)dataConfigArray[5]));
  480.                         Baudrate[2] = atoi(dataConfigArray[6]);
  481.                         memset(dataConfigArray[6], 0, strlen((char*)dataConfigArray[6]));
  482. #ifdef DEBUG
  483.                         printf("**iFanNum = %d, Baudrate[0] = %d, Baudrate[1] = %d, Baudrate[2] = %d\n", iNum, Baudrate[0], Baudrate[1], Baudrate[2]);
  484.                         printf("**aimTestLocation = %s\n", aimTestLocation);
  485.                         printf("**aimTestErrorcode = %s\n", aimTestErrorcode);
  486. #endif
  487.                         strcpy(headLog.T_CAPTION, aimTestLocation);
  488.                         strcpy(headLog.T_LOCATION, aimTestLocation);
  489.                         nRetCode += FwCom(cFCOMName[iFCOMIndex[iNum]], aimTestLocation, aimTestErrorcode, Baudrate);
  490.                         memset(aimTestLocation, 0, strlen(aimTestLocation));
  491.                         memset(aimTestErrorcode, 0, strlen(aimTestErrorcode));
  492.                 }
  493.         }
  494.         else
  495.         {
  496.                 GetDataFromConfig(fileName, cFCOMName[Num], configItemKeyFCOM, dataConfigArray);
  497.                 strcpy(aimTestLocation, dataConfigArray[1]);
  498.                 memset(dataConfigArray[1], 0, strlen((char*)dataConfigArray[1]));
  499.                 strcpy(aimTestErrorcode, dataConfigArray[3]);
  500.                 memset(dataConfigArray[3], 0, strlen((char*)dataConfigArray[3]));
  501.                 Baudrate[0] = atoi(dataConfigArray[4]);
  502.                 memset(dataConfigArray[4], 0, strlen((char*)dataConfigArray[4]));
  503.                 Baudrate[1] = atoi(dataConfigArray[5]);
  504.                 memset(dataConfigArray[5], 0, strlen((char*)dataConfigArray[5]));
  505.                 Baudrate[2] = atoi(dataConfigArray[6]);
  506.                 memset(dataConfigArray[6], 0, strlen((char*)dataConfigArray[6]));
  507. #ifdef DEBUG
  508.                 printf("*Baudrate[0] = %d, Baudrate[1] = %d, Baudrate[2] = %d\n", Baudrate[0], Baudrate[1], Baudrate[2]);
  509.                 printf("**aimTestLocation = %s\n", aimTestLocation);
  510.                 printf("**aimTestErrorcode = %s\n", aimTestErrorcode);
  511. #endif
  512.                 strcpy(headLog.T_CAPTION, aimTestLocation);
  513.                 strcpy(headLog.T_LOCATION, aimTestLocation);
  514.                 nRetCode = FwCom(cFCOMName[Num], aimTestLocation, aimTestErrorcode, Baudrate);
  515.                 memset(aimTestLocation, 0, strlen(aimTestLocation));
  516.                 memset(aimTestErrorcode, 0, strlen(aimTestErrorcode));
  517.         }
  518.         tEndTime = getEndTime(endTime);
  519.         time(&tEndTime);
  520.         strcpy(headLog.T_ENDTIME, endTime);
  521.         memset(durTime, 0, LENGTHA);
  522.         sprintf(durTime, "%d", int(difftime(tEndTime, tStartTime)));
  523.         strcpy(headLog.T_DURATION, durTime);
  524.         if (nRetCode == 0)
  525.         {
  526.                 strcpy(headLog.T_STATUS, "PASS");
  527.         }
  528.         else
  529.         {
  530.                 strcpy(headLog.T_STATUS, "FAIL");
  531.         }
  532.         HeadLogRecord(headLog);
  533.         for (int i = 0; i < iItemLogNum; i++)
  534.         {
  535.                 ItemLogRecord(itemLog[i]);
  536.         }
  537.         WriteLogRecord(lpLogFileName);
  538.         return nRetCode;
  539. }
  540. int FwCom(char para[], char subLocation[], char errorCode[], int baudrate[])
  541. {
  542.         int result = 1;
  543.         //for creat log .txt
  544.         strcpy(com, para);
  545.         strcpy(itemLog[iItemLogNum].TM_TESTITEM, para);
  546.         strcpy(itemLog[iItemLogNum].TM_SUBLOCATION, subLocation);
  547.         for (int i = 0; i < 3; i++)
  548.         {
  549.                 if (SerialSetting(Baudrate[i], FALSE, DTR_CONTROL_HANDSHAKE, RTS_CONTROL_TOGGLE, errorCode)) return 1;
  550.                 printf("%s initing.......\n", para);
  551.                 result = InitCOMOne();
  552.                 if (result != 0x0)
  553.                 {
  554.                         printf("COM initing ");
  555.                         TextColor(RED);
  556.                         printf("Failed!\n\n");
  557.                         TextColor(WHITE);
  558.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  559.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "COM initing Fail!!!");
  560.                         strcpy(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  561.                         iItemLogNum++;
  562.                         return result;
  563.                 }
  564.                 result = Send_COMOne(send_data);
  565.                 if (result != 0x0)
  566.                 {
  567.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  568.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "Send_COM Fail!!!");
  569.                         strcpy(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  570.                         iItemLogNum++;
  571.                         return result;
  572.                 }
  573.                 Sleep(0x100);
  574.                 result = Recv_COMOne(&resv_data); //接收Recv_COMOne()函数的返回值
  575.                 //接收失败,提示
  576.                 if (result != 0x0)
  577.                 {
  578.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  579.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "Recv_COM Fail!!!");
  580.                         strcpy(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  581.                         iItemLogNum++;
  582.                         return result;
  583.                 }
  584.                 if (resv_data == send_data)
  585.                 {
  586.                         printf("COM Send&Receive Test ");
  587.                         TextColor(GREEN);
  588.                         printf("Passed!\n\n");
  589.                         TextColor(WHITE);
  590.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "PASS");
  591.                         iItemLogNum++;
  592.                         return result;
  593.                 }
  594.                 else
  595.                 {
  596.                         printf("COM One Send&Receive Test Fail ");
  597.                         TextColor(RED);
  598.                         printf("Failed!\n\n");
  599.                         TextColor(WHITE);
  600.                         strcpy(itemLog[iItemLogNum].TM_STATUS, "FAIL");
  601.                         strcat(itemLog[iItemLogNum].TM_FAILINFO, "COM Send&Receive Test Fail!!!");
  602.                         strcpy(itemLog[iItemLogNum].TM_ERRORCODE, errorCode);
  603.                         iItemLogNum++;
  604.                         return 0x01;
  605.                 }
  606.         }
  607.         return result;
  608. }
复制代码
main.cpp
主函数带代码
  1.  #include "function.h"
  2. #include "..\Common\ExConfig.h"
  3. #ifndef _DEBUG
  4. #define new DEBUG_NEW
  5. #endif
  6. void PromptInformation(char* name)
  7. {
  8.         int i = 0;
  9.         printf("==========================================================================\n");
  10.         printf("*********Diag COM Tool for %s %s*********\n", projectName, FCOM);
  11.         printf("Usage:\n");
  12.         printf("\t%s [number| all] [ConfigFile]\n", name);
  13.         printf("Note:\n");
  14.         printf("\tnumber :\n");
  15.         for (i = 1; i <= iAllFCOMNum; i++)
  16.         {
  17.                 if (i == 1)
  18.                 {
  19.                         printf("\t\t");
  20.                 }
  21.                 printf("%d:"%s" ", i, cFCOMName[iFCOMIndex[i]]);
  22.                 if (i == iAllFCOMNum)
  23.                 {
  24.                         printf("\n");
  25.                         printf("\t\tAll: For all the number test \n");
  26.                 }
  27.         }
  28.         printf("==========================================================================\n");
  29. }
  30. int main(int argc, char* argv[])
  31. {
  32.         int result1 = 2;
  33.         int iArgvNum = 0;
  34.         BYTE Num = 0;
  35.         char* lpFileName = (char*)malloc(MAX_PATH);
  36.         memset(lpFileName, 0, MAX_PATH);
  37.         strlwr(argv[0]);
  38.         GetGlobalData(argv[0]);
  39.         memset((char*)lpLogFileName, 0, MAX_PATH);
  40.         strcpy(headLog.T_NAME, argv[0]);
  41.         memset(startTime, 0, LENGTHA);
  42.         tStartTime = getNowTime(startTime);
  43.         time(&tStartTime);
  44.         strcpy(headLog.T_STARTTIME, startTime);
  45.         if (argc == 3)
  46.         {
  47.                 strlwr(argv[2]);
  48.                 if (strstr(argv[2], ".ini") == NULL)
  49.                 {
  50.                         PromptInformation(argv[0]);
  51.                         return 1;
  52.                 }
  53.                 iArgvNum = 1;
  54.                 if (strcmpi(argv[iArgvNum], "all") == 0)
  55.                 {
  56. #ifdef DEBUG
  57.                         printf("**argv[iArgvNum] = %s\n", argv[iArgvNum]);
  58. #endif
  59.                         iFCOMCurrentNum = iAllFCOMNum + 1;
  60.                 }
  61.                 else
  62.                 {
  63. #ifdef DEBUG
  64.                         printf("*argv[iArgvNum] = %s\n", argv[iArgvNum]);
  65. #endif
  66.                         iFCOMCurrentNum = atoi(argv[iArgvNum]);
  67.                         Num = iFCOMIndex[iFCOMCurrentNum];
  68.                         if (iFCOMCurrentNum < 1 || iFCOMCurrentNum > iAllFCOMNum)
  69.                         {
  70.                                 printf("Parameter number is out of range.\n");
  71.                                 PromptInformation(argv[0]);
  72.                                 return 1;
  73.                         }
  74.                 }
  75.                 iArgvNum = 2;
  76.                 if (LogName(lpLogFileName, argv[iArgvNum]))
  77.                 {
  78.                         return 1;
  79.                 }
  80.                 if ((argv[iArgvNum][0] == '.') || (argv[iArgvNum][1] == ':'))
  81.                 {
  82.                         sprintf((char*)lpFileName, "%s", argv[iArgvNum]);
  83.                 }
  84.                 else
  85.                 {
  86.                         sprintf((char*)lpFileName, ".\\%s", argv[iArgvNum]);
  87.                 }
  88.                 result1 = FwComMain(lpFileName, cFCOMName, Num);
  89.         }
  90.         else
  91.         {
  92.                 PromptInformation(argv[0]);
  93.                 return 1;
  94.         }
  95.         return result1;
  96. }
复制代码
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张国伟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表