UTL-015サンプルアプリケーションの プログラム一部抜粋です

  1. const BYTE PORT_SCLK = 0x01;  
  2. const BYTE PORT_DO = 0x02;  
  3. const BYTE PORT_DI = 0x04;  
  4. const BYTE PORT_ALERT = 0x20;   //ADBUS5  
  5. const BYTE PORT_THERM = 0x80;   //ADBUS7  
  6. const BYTE MSB_FALLING_EDGE_CLOCK_BYTE_OUT = 0x11;  
  7. const BYTE MSB_RISING_EDGE_CLOCK_BIT_IN = 0x22;  
  8. const BYTE MSB_RISING_EDGE_CLOCK_BYTE_IN = 0x20;  
  9. const BYTE SET_DATA_BITS_LOW_BYTE = 0x80;  
  10. const BYTE READ_DATA_BITS_LOW_BYTE = 0x81;  
  11. const bool TEMP_MODE_LOCAL = false;  
  12. const bool TEMP_MODE_REMOTE = true;  
  13.   
  14. //---------------------------------------------------------------------------  
  15. int __fastcall TForm2::FTDI_DeviceDetect(void)  
  16. {  
  17.     FT_DEVICE_LIST_INFO_NODE *devInfo;  
  18.     FT_STATUS ftStatus;  
  19.     DWORD numDevs;  
  20.     String str;  
  21.     int ret;  
  22.   
  23.     ret = -1;  
  24.   
  25.     ComboBox_ComPort->Clear();  
  26.     ComboBox_ComPort->Text = "Select FT2232H Port...";  
  27.   
  28.     // create the device information list  
  29.     ftStatus = FT_CreateDeviceInfoList(&numDevs);  
  30.   
  31.     if(ftStatus == FT_OK){  
  32.         AddReport(str.sprintf("Number of channels: %d",numDevs));  
  33.   
  34.         if(numDevs > 0){  
  35.             devInfo = new FT_DEVICE_LIST_INFO_NODE[numDevs];  
  36.             ftStatus = FT_GetDeviceInfoList(devInfo,&numDevs);  
  37.   
  38.             if (ftStatus == FT_OK){  
  39.   
  40.                 ret = 0;  
  41.   
  42.                 for (int i=0; i<(int)numDevs; i++){  
  43.                     AddReport(str.sprintf("No.%d:",i));  
  44.                     AddReport(str.sprintf("  Flags: 0x%x",devInfo[i].Flags));  
  45.                     AddReport(str.sprintf("  Type: 0x%x",devInfo[i].Type));  
  46.                     AddReport(str.sprintf("  ID: 0x%x",devInfo[i].ID));  
  47.                     AddReport(str.sprintf("  LocId: 0x%x",devInfo[i].LocId));  
  48.                     AddReport(str.sprintf("  SerialNumber: %s",devInfo[i].SerialNumber));  
  49.                     AddReport(str.sprintf("  Description: %s",devInfo[i].Description));  
  50.                     AddReport(str.sprintf("  Handle: 0x%x",devInfo[i].ftHandle));  
  51.   
  52.                     ComboBox_ComPort->Items->Add(devInfo[i].Description);  
  53.                 }  
  54.             }  
  55.   
  56.             delete []devInfo;  
  57.         }  
  58.     }else{  
  59.         ComboBox_ComPort->Items->Add("No Device detected");  
  60.     }  
  61.   
  62.     return ret;  
  63. }  
  64. //---------------------------------------------------------------------------  
  65. int __fastcall TForm2::FTDI_PortOpen(void)  
  66. {  
  67.     String portName;  
  68.     FT_STATUS ftStatus;  
  69.     int ret;  
  70.   
  71.     ret = -1;  
  72.   
  73.     portName = ComboBox_ComPort->Text;  
  74.     ftStatus = FT_OpenEx(portName.c_str(), FT_OPEN_BY_DESCRIPTION, &ftHandle);  
  75.   
  76.     if(ftStatus == FT_OK)  
  77.     {  
  78.         for(ftStatus = (!FT_OK);;){  
  79.             if(FT_ResetDevice(ftHandle) != FT_OK ) break;  
  80.             Sleep(100);     //Wair fot reset process  
  81.             if(FT_Purge(ftHandle, FT_PURGE_RX | FT_PURGE_TX) != FT_OK) break;  
  82.             if(FT_SetUSBParameters(ftHandle, 65536, 65535) != FT_OK) break;  
  83.             if(FT_SetChars(ftHandle, FALSE, 0, FALSE, 0) != FT_OK) break;  
  84.             if(FT_SetTimeouts(ftHandle, 0, 5000) != FT_OK) break;  
  85.             if(FT_SetLatencyTimer(ftHandle, 2) != FT_OK) break;  
  86.             if(FT_SetFlowControl(ftHandle, FT_FLOW_NONE, 0, 0) != FT_OK) break;  
  87.             //Mode Reset  
  88.             if( FT_SetBitMode(ftHandle, (UCHAR)0x00, (UCHAR)0x00) != FT_OK ) break;  
  89.             Sleep(100);     //Wair fot reset process  
  90.             if( FT_SetBitMode(ftHandle, (UCHAR)0x00, (UCHAR)0x02) != FT_OK ) break;  
  91.   
  92.             //All function returned FT_OK  
  93.             ftStatus = FT_OK;  
  94.             break;  
  95.         }  
  96.   
  97.         if(ftStatus != FT_OK){  
  98.             AddReport("PORT OPEN ERROR, FT_STATUS ERROR");  
  99.             ret = -1;  
  100.         }else{  
  101.             AddReport("PORT OPEN OK");  
  102.             ret = 0;  
  103.         }  
  104.     }  
  105.   
  106.     return ret;  
  107. }  
  108. //---------------------------------------------------------------------------  
  109. void __fastcall TForm2::FTDI_MPSSESetup(void)  
  110. {  
  111.     DWORD dwByteWritten;  
  112.     BYTE outBuffer[] = {  
  113.         0x85,               //Disconnect TDI to TDO LoopBack  
  114.         0x97,               //Turn off Adaptive clocking  
  115.         0x8C,               //Enable 3 Phase Data Clocking  
  116.         0x86, 0x13, 0x00,   //Set TCK Divisor  
  117.     };  
  118.   
  119.     FT_Write(ftHandle, (BYTE*)outBuffer, sizeof(outBuffer), &dwByteWritten);  
  120.   
  121.     return;  
  122. }  
  123. //---------------------------------------------------------------------------  
  124. void __fastcall TForm2::FTDI_I2CStart(void)  
  125. {  
  126.     DWORD dwByteWritten;  
  127.     BYTE outBuffer[] = {  
  128.     //Keep CLK=H, DO=H  
  129.         SET_DATA_BITS_LOW_BYTE, PORT_DO|PORT_SCLK, 0x03,  
  130.     //Make DO down edge while CLK=H  
  131.         SET_DATA_BITS_LOW_BYTE, PORT_SCLK, 0x03,  
  132.     //Set to Initial condition  
  133.         SET_DATA_BITS_LOW_BYTE, 0x00, 0x03,  
  134.     };  
  135.   
  136.     FT_Write(ftHandle, (BYTE*)outBuffer, sizeof(outBuffer), &dwByteWritten);  
  137.   
  138.     return;  
  139. }  
  140. //---------------------------------------------------------------------------  
  141. void __fastcall TForm2::FTDI_I2CStop(void)  
  142. {  
  143.     DWORD dwByteWritten;  
  144.     BYTE outBuffer[] = {  
  145.     //Keep CLK=H, DO=H  
  146.         SET_DATA_BITS_LOW_BYTE, PORT_DO|PORT_SCLK, 0x03,  
  147.     //Make DO down edge while CLK=H  
  148.         SET_DATA_BITS_LOW_BYTE, PORT_SCLK, 0x03,  
  149.     };  
  150.   
  151.     FT_Write(ftHandle, outBuffer, sizeof(outBuffer), &dwByteWritten);  
  152.   
  153.     return;  
  154. }  
  155. //---------------------------------------------------------------------------  
  156. BYTE __fastcall TForm2::FTDI_SendByteAndCheckACK(BYTE data)  
  157. {  
  158.     BYTE ret;  
  159.     DWORD dwByteWritten;  
  160.     DWORD dwByteRead;  
  161.   
  162.     BYTE outBuffer[] = {  
  163.     //Data  
  164.         MSB_FALLING_EDGE_CLOCK_BYTE_OUT, 0x00, 0x00, data,  
  165.     //Get Ack  
  166.         SET_DATA_BITS_LOW_BYTE, 0x00, 0x01, //SCLK:out, DO:in, DI:in  
  167.         MSB_RISING_EDGE_CLOCK_BIT_IN, 0x00,  
  168.         0x87,                               //Send Immediate  
  169.         SET_DATA_BITS_LOW_BYTE, 0x00, 0x03, //SCLK:out, DO:out, DI:in  
  170.     };  
  171.   
  172.     FT_Write(ftHandle, outBuffer, sizeof(outBuffer), &dwByteWritten);  
  173.     FT_Read(ftHandle, &ret, 1, &dwByteRead);  
  174.   
  175.     ret &= 0x01;  
  176.   
  177.     return ret;  
  178. }  
  179. //---------------------------------------------------------------------------  
  180. BYTE __fastcall TForm2::FTDI_ReadByteAndSendACK(void)  
  181. {  
  182.     DWORD dwByteWritten, dwByteRead;  
  183.     BYTE ret;  
  184.     BYTE outBuffer[] = {  
  185.         //InDirection  
  186.         SET_DATA_BITS_LOW_BYTE, 0x00, 0x01,  
  187.         MSB_RISING_EDGE_CLOCK_BYTE_IN, 0x00, 0x00,  
  188.         //Send Ack  
  189.         SET_DATA_BITS_LOW_BYTE, 0x00, 0x03,  
  190.         SET_DATA_BITS_LOW_BYTE, PORT_SCLK, 0x03,  
  191.         //Out Direction  
  192.         SET_DATA_BITS_LOW_BYTE, 0x00, 0x03,  
  193.     };  
  194.   
  195.     FT_Write(ftHandle, (BYTE*)&outBuffer, sizeof(outBuffer), &dwByteWritten);  
  196.     FT_Read(ftHandle, &ret, 1, &dwByteRead);  
  197.   
  198.     return ret;  
  199. }  
  200. //---------------------------------------------------------------------------  
  201. BYTE __fastcall TForm2::FTDI_GPIOCheck(void)  
  202. {  
  203.     DWORD dwByteWritten, dwByteRead;  
  204.     BYTE ret;  
  205.     BYTE outBuffer[] = {  
  206.         //Set Direction  
  207.             SET_DATA_BITS_LOW_BYTE, 0x00, 0x01,   //SCLK:out, DO:in, DI:in  
  208.         //Get 1Byte from DI  
  209.             READ_DATA_BITS_LOW_BYTE,  
  210.             0x87,   //Send Immediate  
  211.     };  
  212.   
  213.     FT_Write(ftHandle, outBuffer, sizeof(outBuffer), &dwByteWritten);  
  214.     FT_Read(ftHandle, &ret, 1, &dwByteRead);  
  215.   
  216.     return ret;  
  217. }