2016/03/29- |
当社の9bit通信対応 USB RS485/422絶縁型変換器(USB-306)対応の制御用DLL(HDL9BITDLL.dll)をC++Bulilderで利用する方法についての参考ページです。![]() |
公開APIのヘッダ(関数定義)/****************************************************************************** * HDL9BITDLL.h * * API for interfacing to USB-306 * ******************************************************************************/ #pragma once #ifndef _HDL9BIT_H #define _HDL9BIT_H #include <Windows.h> #ifndef uint32l_t typedef unsigned long uint32l_t; #endif #ifndef uint16_t typedef unsigned short uint16_t; #endif #ifndef uint8_t typedef unsigned char uint8_t; #endif #ifndef boolean_t typedef BOOL boolean_t; #endif #ifndef H9bHandle_t typedef void* H9bHandle_t; #endif /****************************************************************************** * API Functions ******************************************************************************/ //#define DECLSPECH #ifdef DECLSPEC_EXPORThdl #define DECLSPECH __declspec(dllexport) #else #define DECLSPECH __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif /* * Returns the current USB Serial Number String. * デバイス固有番号取得 */ DECLSPECH int WINAPI HDL9BIT_GetOtpSerialNumberString( __in H9bHandle_t uartDeviceObject, __out uint8_t* stringLength, __out char* serialString ); /* * Returns the number of attached devices with matching IDs. * デバイス総数を取得 */ DECLSPECH int WINAPI HDL9BIT_GetNumUartsA( __in_opt uint16_t productIDFilter, __in_opt uint8_t interfaceIDFilter, __out uint32l_t* numUarts ); /* * Returns the currently configures data rate and character format * 通信条件の読み込み * for a UART channel. */ DECLSPECH int WINAPI HDL9BIT_GetLineCodingA( __in H9bHandle_t uartDeviceObject, __out uint32l_t* dataRate, __out uint8_t* charFormat, __out uint8_t* parityType, __out uint8_t* dataBits, __out uint8_t* flowControl, __out uint8_t* gpioMode0 ); /* * Configures the data rate and character format of a UART channel. * 通信条件設定 */ DECLSPECH int WINAPI HDL9BIT_SetLineCodingA( __in H9bHandle_t uartDeviceObject, __in uint32l_t dataRate, __in uint8_t charFormat, __in uint8_t parityType, __in uint8_t dataBits, __in uint8_t flowControl, __in uint8_t gpioMode0 // addressモード時 flowControl = 0x03 // それ以外は flowControl = 0x01 // gpioMode0は0x39固定 ); /* * Returns the current timeout settings. * 送受信タイムアウト時間読み出し */ DECLSPECH int WINAPI HDL9BIT_GetTimeouts( __in H9bHandle_t uartDeviceObject, __out uint32l_t* writeTimeout, __out uint32l_t* readTimeout ); /* * Sets maximum allowable time for read and write operations. * 送受信タイムアウト時間設定 */ DECLSPECH int WINAPI HDL9BIT_SetTimeouts( __in H9bHandle_t uartDeviceObject, __in uint32l_t writeTimeout, __in uint32l_t readTimeout ); /* * Returns the current setting for the number of bytes in the Rx FIFO * before flow control is asserted to the remote UART. * 受信FIFO動作しきい値読み込み */ DECLSPECH int WINAPI HDL9BIT_GetUartRxFifoThreshold( __in H9bHandle_t uartDeviceObject, __out uint16_t* rxFifoThreshold ); /* * Sets how many bytes will be stored in the local UART's Rx FIFO * before flow control is asserted to the remote UART. * 受信FIFO動作しきい値設定 */ DECLSPECH int WINAPI HDL9BIT_SetUartRxFifoThreshold( __in H9bHandle_t uartDeviceObject, __in uint16_t rxFifoThreshold ); /* * Opens the device specified by the index into the array of available * devices and returns a handle to it. * UARTオープン */ DECLSPECH int WINAPI HDL9BIT_OpenUartA( __in uint32l_t memberIndex, __in_opt uint16_t productIDFilter, __in_opt uint8_t interfaceIDFilter, __out H9bHandle_t* uartDeviceObject ); /* * Close a device handle * UARTクローズ */ DECLSPECH int WINAPI HDL9BIT_CloseUart( __in H9bHandle_t uartDeviceObject ); /* * Returns the currently configured addresses used by the UART when * Address Match Mode is enabled. * AddressModeで使用する設定アドレス取得 */ DECLSPECH int WINAPI HDL9BIT_GetUartAddress( __in H9bHandle_t uartDeviceObject, __out uint8_t* unicastAddress, __out uint8_t* multicastAddress ); /* * Sets the addresses the UART will respond to when Address Match Mode * is enabled. * AddressModeで使用する設定アドレス設定 */ DECLSPECH int WINAPI HDL9BIT_SetUartAddress( __in H9bHandle_t uartDeviceObject, __in uint8_t unicastAddress, __in uint8_t multicastAddress ); /* * Reads data from a UART handle (USB IN transfers). * 受信データ読み込み */ DECLSPECH int WINAPI HDL9BIT_ReadUart( __in H9bHandle_t uartDeviceObject, __in uint32l_t numberOfBytesToRead, __out uint8_t* byteBuffer, __out uint32l_t* numberOfBytesRead ); /* * Writes data to a UART handle (USB OUT transfers). * 送信データ書き込み(送信) */ DECLSPECH int WINAPI HDL9BIT_WriteUart( __in H9bHandle_t uartDeviceObject, __in uint32l_t numberOfBytesToWrite, __in uint8_t* byteBuffer, __out uint32l_t* numberOfBytesWritten ); /* * Indicates whether a UART channel is currently enabled for transmit and receive * 送受信有効・無効設定確認 */ DECLSPECH int WINAPI HDL9BIT_IsEnabled( __in H9bHandle_t uartDeviceObject, __out boolean_t* enabled ); /* * Enables a UART channel for transmit and receive * 送受信有効・無効設定 */ DECLSPECH int WINAPI HDL9BIT_EnableUart( __in H9bHandle_t uartDeviceObject, __in boolean_t enable ); /* * Flushes buffers and FIFOs in transmit, receive, or both directions. * 送受信バッファを空にする */ DECLSPECH int WINAPI HDL9BIT_FlushBuffers( __in H9bHandle_t uartDeviceObject, __in boolean_t flushTransmit, __in boolean_t flushReceive ); /* * Requests a UART to transmit a break signal. * ブレーク信号送信 */ DECLSPECH int WINAPI HDL9BIT_SendBreak( __in H9bHandle_t uartDeviceObject, __in uint8_t breakDuration ); /* * Requests a UART to stop transmitting break. * ブレーク信号停止 */ DECLSPECH int WINAPI HDL9BIT_CancelBreak( __in H9bHandle_t uartDeviceObject ); /* * Returns the current USB Manufacturer String. * 製造メーカ名取得 */ DECLSPECH int WINAPI HDL9BIT_GetOtpManufacturerString( __in H9bHandle_t uartDeviceObject, __out uint8_t* strlen, __out char* manufacturingString ); /* * Returns the current USB Product String. * 製品名称取得 */ DECLSPECH int WINAPI HDL9BIT_GetOtpProductString( __in H9bHandle_t uartDeviceObject, __out uint8_t* stringLength, __out char* productString ); /* * Returns the release version of this API. * ファームウエアバージョン取得 */ DECLSPECH int WINAPI HDL9BIT_GetSoftwareAPIAttributes( __out uint8_t* majorVersion, __out uint8_t* minorVersion, __out boolean_t* isReleaseVersion ); /* * Indicates whether a device handle is still open * オープン状況問い合わせ */ DECLSPECH int WINAPI HDL9BIT_IsOpen( __in H9bHandle_t uartDeviceObject, __out boolean_t* opened ); /* * Causes a UART channel to be re-enumerated on the USB bus. * USBの再エニュメレート */ DECLSPECH int WINAPI HDL9BIT_ReEnumerate( __in H9bHandle_t uartDeviceObject ); #ifdef __cplusplus } #endif /* __cplusplus */ |
公開APIのヘッダ(定数定義)/****************************************************************************** * String Type ******************************************************************************/ #define HDL9BIT_MAX_STRING_LENGTH 260 #define HDL9BIT_MANUFACTURING_STRING_LENGTH 256 #define HDL9BIT_PRODUCT_STRING_LENGTH 256 #define HDL9BIT_SERIAL_STRING_LENGTH 256 typedef char HDL9BIT_DEVICE_STRING[HDL9BIT_MAX_STRING_LENGTH]; typedef char HDL9BIT_MANUFACTURING_STRING[HDL9BIT_MANUFACTURING_STRING_LENGTH]; typedef char HDL9BIT_PRODUCT_STRING[HDL9BIT_PRODUCT_STRING_LENGTH]; typedef char HDL9BIT_SERIAL_STRING[HDL9BIT_SERIAL_STRING_LENGTH]; /****************************************************************************** * API Return Codes ******************************************************************************/ #define HDL9BIT_SUCCESS 0x00 #define HDL9BIT_ERR_DEVICE_NOT_FOUND 0x01 #define HDL9BIT_ERR_INVALID_HANDLE 0x02 #define HDL9BIT_ERR_HANDLE_IS_NOT_A_UART 0x03 #define HDL9BIT_ERR_INVALID_PARAMETER 0x04 #define HDL9BIT_ERR_INVALID_REQUEST_LENGTH 0x05 #define HDL9BIT_ERR_UART_READ_FAIL 0x10 #define HDL9BIT_ERR_UART_WRITE_FAIL 0x11 #define HDL9BIT_ERR_UART_READ_FAIL_TIME_OUT 0x12 #define HDL9BIT_ERR_UART_WRITE_FAIL_TIME_OUT 0x13 #define HDL9BIT_ERR_USB_CTRL_PIPE_FAIL 0x14 #define HDL9BIT_ERR_USB_COMMUNICATION_ERROR 0x15 #define HDL9BIT_ERR_USB_DEVICE_NOT_SUPPORTED 0x16 #define HDL9BIT_ERR_GENERIC_FAIL 0xFF /****************************************************************************** * API Parameter Encodings ******************************************************************************/ /* * stringType definitions for HDL9BIT_GetStringByIndex() * and HDL9BIT_GetStringByHandle() */ #define HDL9BIT_STRING_TYPE_VID 0x01 #define HDL9BIT_STRING_TYPE_PID 0x02 #define HDL9BIT_STRING_TYPE_PATH 0x03 #define HDL9BIT_STRING_TYPE_SERIAL 0x04 #define HDL9BIT_STRING_TYPE_MANUFACTURER 0x05 #define HDL9BIT_STRING_TYPE_PRODUCT 0x06 /* * Error Flags returned by HDL9BIT_GetUartAttributes() */ #define HDL9BIT_ERROR_FLAG_PARITY 0x01 #define HDL9BIT_ERROR_FLAG_OVERFLOW 0x02 /* * Number of data bits. Input to HDL9BIT_SetLineCoding() and * output of HDL9BIT_GetLineCoding() */ #define HDL9BIT_DATA_BITS_FIVE 0x00 #define HDL9BIT_DATA_BITS_SIX 0x01 #define HDL9BIT_DATA_BITS_SEVEN 0x02 #define HDL9BIT_DATA_BITS_EIGHT 0x03 #define HDL9BIT_DATA_BITS_NINE 0x04 /* * Parity types. Input to HDL9BIT_SetLineCoding() and * output of HDL9BIT_GetLineCoding() */ #define HDL9BIT_PARITY_NONE 0x00 #define HDL9BIT_PARITY_ODD 0x01 #define HDL9BIT_PARITY_EVEN 0x02 #define HDL9BIT_PARITY_MARK 0x03 #define HDL9BIT_PARITY_SPACE 0x04 /* * Character formats. Input to HDL9BIT_SetLineCoding() and * output of HDL9BIT_GetLineCoding() */ #define HDL9BIT_CHAR_FORMAT_STOP_SHORT 0x00 #define HDL9BIT_CHAR_FORMAT_STOP_LONG 0x01 /* * Flow control types. Input to HDL9BIT_SetLineCodingA() and * output of HDL9BIT_GetLineCodingA() */ #define HDL9BIT_FLOW_CONTROL_NONE 0x00 #define HDL9BIT_FLOW_CONTROL_HW_RTS_CTS 0x01 #define HDL9BIT_FLOW_CONTROL_ADDRESS_MODE 0x03 #endif /* _HDL9BIT_H */ |
使用例・全ソース公開されている全てのAPIを使っているサンプルソースです。 // --------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit2.h" #include "HDL9BIT\HDL9BITDLL.h" // --------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; boolean_t isOpenUart; H9bHandle_t HDL9BIT_han; // --------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } __fastcall TForm2::memo_ret(String msg, int ret) // HDL9BITDLLの戻り値表示 { String msg1; if (ret == HDL9BIT_SUCCESS) { msg1 = "*" + msg + " OK"; Memo_monit->Lines->Add(msg1); } else { msg1 = "*" + msg + " ---- Error!"; Memo_monit->Lines->Add(msg1); } Memo_monit->Perform(EM_SCROLLCARET, 0, 0); } __fastcall TForm2::memo(String msg) // memo 表示 { Memo_monit->Lines->Add("[" + msg + "]"); Memo_monit->Perform(EM_SCROLLCARET, 0, 0); //キャレット位置までスクロール } // --------------------------------------------------------------------------- void __fastcall TForm2::Button_openClick(TObject *Sender) { int ret; uint8_t strlen8b; uint8_t serialString[512]; uint8_t productString[512]; uint8_t manufacturingString[512]; uint8_t minorVersion; uint8_t majorVersion; boolean_t isReleaseVersion; AnsiString ss1; isOpenUart = false; minorVersion = 0; majorVersion = 0; isReleaseVersion = false; while (true) { // ------------------------------------------------------------------- // Returns the release version of this API. // ファームウエアバージョン取得 ret = HDL9BIT_GetSoftwareAPIAttributes( &majorVersion, // __out uint8_t* majorVersion, &minorVersion, // __out uint8_t* minorVersion, &isReleaseVersion // __out boolean_t* isReleaseVersion ); memo_ret("HDL9BIT_GetSoftwareAPIAttributes", ret); ss1.printf("majorVersion= %d", majorVersion); memo( ss1 ); ss1.printf("minorVersion= %d", minorVersion); memo( ss1 ); // Returns the number of attached devices with matching IDs. // デバイス数取得 uint16_t productIDFilter; uint32l_t numUarts; productIDFilter = 0x4001; ret = HDL9BIT_GetNumUartsA( productIDFilter, // __in_opt uint16_t productIDFilter, (uint8_t)0, // __in_opt uint8_t interfaceIDFilter, &numUarts // __out uint32l_t* numUarts ); memo_ret("HDL9BIT_GetNumUartsA", ret); // ------------------------------------------------------------------- // Opens the device specified by the index into the array of available // devices And returns a handle to it. // UARTオープン ss1.printf("%d", numUarts); label_devn->Caption = "Device =" + ss1; ret = HDL9BIT_OpenUartA( 0, // __in uint32l_t memberIndex, productIDFilter, // __in_opt uint16_t productIDFilter, (uint8_t)0, // __in_opt uint8_t interfaceIDFilter, &HDL9BIT_han // __out H9bHandle_t* uartDeviceObject ); memo_ret("HDL9BIT_OpenUart", ret); if (ret != HDL9BIT_SUCCESS) { break; } // ------------------------------------------------------------------- // Returns the currently configures data rate and character format // 通信条件の読み込み uint32l_t dataRate; // __out uint32l_t* dataRate, uint8_t charFormat; // __out uint8_t* charFormat, uint8_t parityType; // __out uint8_t* parityType, uint8_t dataBits; // __out uint8_t* dataBits, uint8_t flowControl; // __out uint8_t* flowControl, uint8_t gpioMode0; ret = HDL9BIT_GetLineCodingA( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, &dataRate, // __out uint32l_t* dataRate, &charFormat, // __out uint8_t* charFormat, &parityType, // __out uint8_t* parityType, &dataBits, // __out uint8_t* dataBits, &flowControl, // __out uint8_t* flowControl, &gpioMode0 // __out uint8_t* gpioMode0 ); memo_ret("HDL9BIT_GetLineCodingA", ret); // ------------------------------------------------------------------- // Configures the data rate and character format of a UART channel. // 通信条件設定 dataBits = HDL9BIT_DATA_BITS_NINE; // '9bitモード指定 parityType = HDL9BIT_PARITY_NONE; dataRate = 1200000; flowControl = HDL9BIT_FLOW_CONTROL_ADDRESS_MODE; gpioMode0 = 0x39; ret = HDL9BIT_SetLineCodingA( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, dataRate, // __in uint32l_t dataRate, charFormat, // __in uint8_t charFormat, parityType, // __in uint8_t parityType, dataBits, // __in uint8_t dataBits, flowControl, // __in uint8_t flowControl, gpioMode0 // __in uint8_t gpioMode0 // addressモード時 flowControl = 0x03 // それ以外は flowControl = 0x01 // gpioMode0は0x39固定 ); memo_ret("HDL9BIT_SetLineCodingA", ret); ss1.printf("dataRate = %d", dataRate); memo(ss1); // ------------------------------------------------------------------- // Sets maximum allowable time for read and write operations. // 送受信タイムアウト時間読み込み uint32l_t writeTimeout; uint32l_t readTimeout; ret = HDL9BIT_GetTimeouts( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, &writeTimeout, // __in* uint32l_t writeTimeout, &readTimeout // __in* uint32l_t readTimeout ); writeTimeout = 500; readTimeout = 2000; // ------------------------------------------------------------------- // Sets maximum allowable time for read and write operations. ret = HDL9BIT_SetTimeouts( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, writeTimeout, // __in uint32l_t writeTimeout, readTimeout // __in uint32l_t readTimeout ); memo_ret("HDL9BIT_HDL9BIT_GetTimeouts", ret); // ------------------------------------------------------------------- // Returns the currently configured addresses used by the UART when // Address Match Mode is enabled. // AddressModeで使用する設定アドレス取得 uint8_t unicastAddress = 0; // __out uint8_t* unicastAddress, uint8_t multicastAddress = 0; // __out uint8_t* multicastAddress ret = HDL9BIT_GetUartAddress( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, &unicastAddress, // __out uint8_t* unicastAddress, &multicastAddress // __out uint8_t* multicastAddress ); memo_ret("HDL9BIT_GetUartAddress", ret); // ------------------------------------------------------------------- // Sets the addresses the UART will respond to when Address Match Mode // is enabled. // AddressModeで使用する設定アドレス設定 unicastAddress = 0x55; // __out uint8_t* unicastAddress, multicastAddress = 0x80; // __out uint8_t* multicastAddress ret = HDL9BIT_SetUartAddress( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, unicastAddress, // __in uint8_t unicastAddress, multicastAddress // __in uint8_t multicastAddress ); memo_ret("HDL9BIT_SetUartAddress", ret); memo_ret("HDL9BIT_SetUartRxFifoThreshold", ret); ss1.printf("unicastAddress = %02X", unicastAddress); memo(ss1); ss1.printf("multicastAddress = %02X", multicastAddress); memo(ss1); // ------------------------------------------------------------------- // Returns the current setting for the number of bytes in the Rx FIFO // before flow control is asserted to the remote UART. // 受信FIFO動作しきい値読み込み uint16_t rxFifoThreshold; // __out uint16_t* rxFifoThreshold ret = HDL9BIT_GetUartRxFifoThreshold( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, &rxFifoThreshold // __out uint16_t* rxFifoThreshold ); memo_ret("HDL9BIT_GetUartRxFifoThreshold", ret); // ------------------------------------------------------------------- // Sets how many bytes will be stored in the local UART's Rx FIFO // before flow control is asserted to the remote UART. // 受信FIFO動作しきい値設定 rxFifoThreshold = 450; // __out uint16_t* rxFifoThreshold ret = HDL9BIT_SetUartRxFifoThreshold( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, rxFifoThreshold // __in uint16_t rxFifoThreshold ); memo_ret("HDL9BIT_SetUartRxFifoThreshold", ret); ss1.printf("rxFifoThreshold = %d", rxFifoThreshold); memo(ss1); // ------------------------------------------------------------------- // __indicates whether a device handle is still open // オープン状況問い合わせ ret = HDL9BIT_IsOpen( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, &isOpenUart // __out boolean_t* opened ); memo_ret("HDL9BIT_IsOpen", ret); memo(" --Open Uart --"); CheckBox_isOpen->Checked = isOpenUart; // ------------------------------------------------------------------- // Returns the current USB Serial Number String. // デバイス固有番号(シリアル番号)取得 ret = HDL9BIT_GetOtpSerialNumberString( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, &strlen8b, // __out uint8_t* stringLength, serialString // __out char* serialString ); memo_ret("HDL9BIT_GetOtpSerialNumberString", ret); ss1.printf("%s", serialString); memo(ss1); // ------------------------------------------------------------------- // Returns the current USB Product String. // 製品名称取得 ret = HDL9BIT_GetOtpProductString( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, &strlen8b, // __out uint8_t* stringLength, productString // __out char* productString ); memo_ret("HDL9BIT_GetOtpProductString", ret); ss1.printf("%s", productString); memo(ss1); // ------------------------------------------------------------------- // Returns the current USB Manufacturer String. // 製造メーカ名取得 ret = HDL9BIT_GetOtpManufacturerString( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, &strlen8b, // __out uint8_t* strlen, manufacturingString // __out char* manufacturingString ); memo_ret("HDL9BIT_GetOtpManufacturerString", ret); ss1.printf("%s", manufacturingString); memo(ss1); // ------------------------------------------------------------------- // Flushes buffers and FIFOs in transmit, receive, or both directions. // 送受信バッファを空にする boolean_t flushTransmit = true; Boolean flushReceive = true; ret = HDL9BIT_FlushBuffers( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, flushTransmit, // __in boolean_t flushTransmit, flushReceive // __in boolean_t flushReceive ); memo_ret("HDL9BIT_FlushBuffers", ret); // ------------------------------------------------------------------- // __indicates whether a UART channel is currently enabled for transmit and receive // 送受信有効・無効設定確認 boolean_t enabled = false; ret = HDL9BIT_IsEnabled( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, &enabled // __out boolean_t* enabled ); memo_ret("HDL9BIT_IsEnabled", ret); // ------------------------------------------------------------------- // Enables a UART channel for transmit and receive // 送受信有効・無効設定 enabled = true; ret = HDL9BIT_EnableUart( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, enabled // __in boolean_t enable ); memo_ret("HDL9BIT_EnableUart", ret); break; // loop end } } // --------------------------------------------------------------------------- void __fastcall TForm2::Button_BRK_onClick(TObject *Sender) // BREAK ON { if (isOpenUart) { //------------------------------------------------------------------- //Requests a UART to transmit a break signal. //ブレーク信号送信 int ret; ret = HDL9BIT_SendBreak( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, 0 //__in uint8_t breakDuration ); memo_ret("HDL9BIT_SendBreak", ret); } else { memo("Openしてません"); } } //--------------------------------------------------------------------------- void __fastcall TForm2::Button_BRK_offClick(TObject *Sender) // BREAK OFF { if (isOpenUart) { //------------------------------------------------------------------- //Requests a UART to stop transmitting break. //ブレーク信号停止 int ret; ret = HDL9BIT_CancelBreak( HDL9BIT_han // __in H9bHandle_t uartDeviceObject, ); memo_ret("HHDL9BIT_CancelBreak", ret); } else { memo("Openしてません"); } } //--------------------------------------------------------------------------- void __fastcall TForm2::Button_closeClick(TObject *Sender) //クローズ { //------------------------------------------------------------------- //Close a device handle //UARTクローズ int ret; ret = HDL9BIT_CloseUart( HDL9BIT_han // __in H9bHandle_t uartDeviceObject, ); memo_ret("HDL9BIT_CloseUart", ret); isOpenUart = false; CheckBox_isOpen->Checked = isOpenUart; } //--------------------------------------------------------------------------- void __fastcall TForm2::CheckBox_isOpenClick(TObject *Sender) { CheckBox_isOpen->Checked = isOpenUart; } //--------------------------------------------------------------------------- void __fastcall TForm2::Button_sendClick(TObject *Sender) { while (true) { if (!isOpenUart) { break; } int ret; int i; int len; int address16; AnsiString ss1; uint8_t address; uint8_t byteBuffer[1024]; uint32l_t numberOfBytesToWrite; uint32l_t numberOfBytesWritten = 0; numberOfBytesToWrite = 10; // 相手アドレス ss1 = "0x"+ Edit_adrs->Text; address16 = ss1.ToInt(); address = (uint8_t)(address16 & 0xff); //送信テキスト AnsiString s_text = Edit_stext->Text; uint8_t byteBuffertemp[512]; len = s_text.Length(); memcpy( byteBuffertemp, s_text.c_str(), len); i = 0; byteBuffer[i++] = address; byteBuffer[i++] = 0x01; numberOfBytesToWrite = len * 2 + 2; for ( int j= 0; i < len * 2; i+=2, j++) { byteBuffer[i] = byteBuffertemp[j]; byteBuffer[i + 1] = 0; } //------------------------------------------------------------------- //Writes data to a UART handle (USB OUT transfers). //送信データ書き込み(送信) ret = HDL9BIT_WriteUart( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, numberOfBytesToWrite, //__in uint32l_t numberOfBytesToWrite, byteBuffer, // __in uint8_t* byteBuffer, &numberOfBytesWritten //_out uint32l_t* numberOfBytesWritten ); memo_ret("HDL9BIT_WriteUart", ret); if (ret != HDL9BIT_SUCCESS) break; //------------------------------------------------------------------ // 受信 //------------------------------------------------------------------- //Reads data from a UART handle (USB IN transfers). //受信データ読み込み uint32l_t numberOfBytesToRead; uint32l_t numberOfBytesRead; numberOfBytesToRead = 256; numberOfBytesRead = 0; memo(".....wait recieve.."); ret = HDL9BIT_ReadUart( HDL9BIT_han, // __in H9bHandle_t uartDeviceObject, numberOfBytesToRead, //__in uint32l_t numberOfBytesToRead, byteBuffer, //__out uint8_t* byteBuffer, &numberOfBytesRead //__out uint32l_t* numberOfBytesRead ); if ((ret == HDL9BIT_SUCCESS) || (ret == HDL9BIT_ERR_UART_READ_FAIL_TIME_OUT)) { if (numberOfBytesRead != 0) { AnsiString rx_text,ss1; rx_text = ""; for( i = 0; i < numberOfBytesRead; i++ ){ ss1.printf("%02X ", byteBuffer[i]); rx_text = rx_text + ss1; } memo("RXD=" + rx_text); } } else { } memo(".....return"); // loop end break; } } //--------------------------------------------------------------------------- |
弊社ではプログラミングに関数サポートを行う立場ではございませんが、USB-306を操作する上での具体的なご質問があればメールにてお問い合わせをお願いいたします。 |
![]() |