firstvald 14 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба Ковыряю работу виртуального порта в проце Nuvoton 487. Не понимаю как управлять сигналами квитирования со стороны процессора. Если в примерах в одном месте была одна корявая закомментированная строчка , позволяющая понять как принять от компьютера DTR RTS, то как передать не понятно. void VCOM_ClassRequest(void) { if (gUsbCmd.bmRequestType & 0x80) /* request data transfer direction */ { // Device to host switch (gUsbCmd.bRequest) { case GET_LINE_CODE: { if ((gUsbCmd.wIndex & 0xff) == 0){ /* VCOM-1 */ HSUSBD_PrepareCtrlIn((uint8_t *)&gLineCoding, 7); HSUSBD_CLR_CEP_INT_FLAG(HSUSBD_CEPINTSTS_INTKIF_Msk); HSUSBD_ENABLE_CEP_INT(HSUSBD_CEPINTEN_INTKIEN_Msk); break; } /* VCOM-1 */ } default: { /* Setup error, stall the device */ HSUSBD_SET_CEP_STATE(HSUSBD_CEPCTL_STALLEN_Msk); break; } } }//if (gUsbCmd.bmRequestType & 0x80) /* request data transfer direction */ else { // Host to device switch (gUsbCmd.bRequest) { case SET_CONTROL_LINE_STATE: { if ((gUsbCmd.wIndex & 0xff) == 0) /* VCOM-1 */ { gCtrlSignal = gUsbCmd.wValue; // !!!!!!!!!!!!!!!!!!!!! тут от компьютера //printf("RTS=%d DTR=%d\n", (gCtrlSignal0 >> 1) & 1, gCtrlSignal0 & 1); } // DATA IN for end of setup /* Status stage */ HSUSBD_CLR_CEP_INT_FLAG(HSUSBD_CEPINTSTS_STSDONEIF_Msk); HSUSBD_SET_CEP_STATE(HSUSBD_CEPCTL_NAKCLR); HSUSBD_ENABLE_CEP_INT(HSUSBD_CEPINTEN_STSDONEIEN_Msk); break; } case SET_LINE_CODE: { if ((gUsbCmd.wIndex & 0xff) == 0) /* VCOM-1 */ HSUSBD_CtrlOut((uint8_t *)&gLineCoding, 7); /* Status stage */ HSUSBD_CLR_CEP_INT_FLAG(HSUSBD_CEPINTSTS_STSDONEIF_Msk); HSUSBD_SET_CEP_STATE(HSUSBD_CEPCTL_NAKCLR); HSUSBD_ENABLE_CEP_INT(HSUSBD_CEPINTEN_STSDONEIEN_Msk); /* UART setting */ if ((gUsbCmd.wIndex & 0xff) == 0) /* VCOM-1 */ // тут меняются настройки порта VCOM_LineCoding(0); // параметры обмена беруться из gLineCoding break; } default: { /* Setup error, stall the device */ HSUSBD_SET_CEP_STATE(HSUSBD_CEPCTL_STALLEN_Msk); break; } } } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба Устройство отдает состояние этих линий в ответ на запрос SerialState. И если я правильно понимаю, чтобы компьютер послал этот запрос устройство должно послать ему что-то определенное через interrupt endpoint. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 14 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба Так. буду смотреть. спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 29 июня, 2023 Опубликовано 29 июня, 2023 · Жалоба Про CTS нашел только это: Цитата The connection between the adapter and the USB host uses NAK/ACK for flow control. From Serial Port Complete 2nd Edition: The model doesn’t define a way for the host to read the state of RS-232’s CTS status signal. Device firmware can still read CTS on a local asynchronous port and take appropriate action. For example, if a virtual COM-port device has data to send to a remote device that hasn’t asserted CTS, the virtual COM-port device can store the data in a buffer and wait to transmit. If the buffer is full, the virtual COM-port device can NAK attempts by the USB host to send data. When the remote device asserts CTS, the virtual COM-port device can send the buffered data and begin accepting new data from the host. To use CTS in this way, the USB host doesn’t need to know the signal’s state. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 14 30 июня, 2023 Опубликовано 30 июня, 2023 · Жалоба я уже задумался. а может в рамках драйвера порта винды вообще не реализована передача этих сигналов. а pl, ch, ftdi, cp сами под себя в своем драйвере заводят отдельную конечную точку под это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 30 июня, 2023 Опубликовано 30 июня, 2023 · Жалоба Все может быть. Но я читал, что в десятке драйвер наконец-то сделали вполне рабочим. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sayya_78 3 1 июля, 2023 Опубликовано 1 июля, 2023 (изменено) · Жалоба 16 hours ago, firstvald said: я уже задумался. а может в рамках драйвера порта винды вообще не реализована передача этих сигналов. а pl, ch, ftdi, cp сами под себя в своем драйвере заводят отдельную конечную точку под это. На чем пишете? В Visual Studio класс Serial.IO поддерживает в том числе и хардварный контроль обмена вот пример на С#: Serial Comms in C# for Beginners - CodeProject А это собственно дока: SerialPinChange Перечисление (System.IO.Ports) | Microsoft Learn Изменено 1 июля, 2023 пользователем sayya_78 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться