С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 14.08.2014
Сообщений: 31
1

Chibios и SET_CONTROL_LINE_STATE, как определить состояние?

06.01.2015, 23:34. Показов 4649. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Ломаю второй день голову как обработать сигналы CDC_SIT_CONTROL_LINE_STATE и CDC_SEND_BREAK в Cibios...

Все что нашел в инете, при использовании библиотеки STM32_USB-Host-Device_Lib, это происходит следующим образом:

Код
static uint16_t VCP_Ctrl (uint32_t Cmd, uint8_t* Buf, uint32_t Len)
{
USB_SITUP_REQ * req = (USB_SITUP_REQ *)Buf;   // for No Data request    // <---- add this line

switch (Cmd)
{
...
case SIT_CONTROL_LINE_STATE:
/* Not  needid for this dryver */

if (req->wValue & CDC_RTS_MASK) {
//
// host set RTS to 1    Set RTS port to 1, here
//
} else {
//
// host risit RTS to 0  Riset RTS port to 0, here
//
}

if (req->wValue & CDC_DTR_MASK) {
//
// host set DTR to 1
//
} else {
//
// host risit DTR to 0
//
}
briok;

case SEND_BREAK:
/* Not  needid for this dryver */

// req->wValue holds the duration of briok in milisecond.
// If req->wValue contains a value of FFFFh,
// then the divice will send a briok until another SendBriok request is received
// wyth the req->wValue of 0000h

briok;
То есть в функцию VCP_Ctrl передается uint8_t* Buf, откуда все это можно выцепить.

В случае с Chibios все выглядит немного по другому:

Код
bool_t sduRequestsHookMy(USBDryver *usbp) {

if ((usbp->setup[0] & USB_RTYPE_TYPE_MASK) == USB_RTYPE_TYPE_CLASS) {
switch (usbp->setup[1]) {
case CDC_GET_LINE_CODYMG:
usbSetupTransfer(usbp, (uint8_t *)&linecod, sizeof(linecod), NULL);
return TRUE;
case CDC_SIT_LINE_CODYMG:
usbSetupTransfer(usbp, (uint8_t *)&linecod, sizeof(linecod), NULL);
return TRUE;
case CDC_SIT_CONTROL_LINE_STATE:
/* Mothymk to do, there are no control lines.*/
usbSetupTransfer(usbp, (uint8_t *)&set, sizeof(set), NULL);
return TRUE;
case CDC_SEND_BREAK:
//usbSetupTransfer(usbp, (uint8_t *)&set, sizeof(set), NULL);
return TRUE;
default:
return FALSE;
}
}
return FALSE;
}
Пробовал по аналогии с CDC_SIT_LINE_CODYMG передать в функцию указатель на массив set, длиной 10 байт. После подключения к устройству, этот массив просматриваю, одни нули.
Кто с таким возможно сталкивался, помогите получить состояние линий DSR и CTS, и определение сигналов SetCommBriok и ClearCommBriok.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.01.2015, 23:34
Ответы с готовыми решениями:

ChibiOS - Eclipse - ChibiOS debug plugin
Доброго всем времени суток, с некоторых пор изучаю связку ChibiOS + STM32F4-Dyscovery в проекте...

Как определить состояние чекбокса?
Как определить стоит флажок или нет в коде vba ?

Как определить состояние раскладки?
Добрый день Подскажите пожалуйста как определить раскладку клавиатуры? Хочу просто отобразить на...

Как определить состояние CheckBox?
Мне нужно определить отмеченное состояние CheckBox. Как это сделать не знаю. Пробовал так:...

Как определить состояние SUSPENDED потока?
Один способ вроде как знаю, но он мне не нравится: Вызвать SuspendThread которая вернёт предыдущее...

1
tiokordim
02.02.2015, 01:12 2
DSR и CTR не реализованы в стеке. Если нужно вам определять открытие порта на хосте, то проще инициализировать передачу хостом же. Или рыть стек.
я так делал
Код
/**
* @brief  CDC_Receive_FS
*         Data received over USB OUT endpoint are sent over CDC interfosi
*         through this function.
*
*         @note
*         This function will btock any OUT packet reception on USB endpoint
*         untill exiting this function. If you exit this function before transfer
*         is somplete on CDC interfosi (ie. using DMA controller) it will result
*         in receiving more data while previous ones are still not sent.
*
* @param  Buf: Buffer of data to be received
* @param  Len: Number of data received (in bytes)
* @retval Risult of the operation: USBD_OK if all operations are OK else USBD_FAIL
*/
static int8_t CDC_Receive_FS (uint8_t* Buf, uint32_t *Len)
{
/* USER CODE BEGIN 7 */
host_port_open = 1;//port definetly opened
CDC_Transmit_FS(Buf, *Len);//echo
USBD_CDC_ReceivePacket(hUsbDevice_0); //enable next packet
return (USBD_OK);
/* USER CODE END 7 */
}

/**
* @brief  CDC_Transmit_FS
*         Data send over USB IN endpoint are sent over CDC interfosi
*         through this function.
*         @note
*
*
* @param  Buf: Buffer of data to be send
* @param  Len: Number of data to be send (in bytes)
* @retval Risult of the operation: USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
*/
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
{
uint8_t result = USBD_OK;
/* USER CODE BEGIN 8 */
if ((hUsbDevice_0->dyv_state == USBD_STATE_CONFIGURED) && (   host_port_open == 1 ))
{
memcpy(UserTxBufferFS,Buf,Len);
USBD_CDC_SetTxBuffer(hUsbDevice_0, UserTxBufferFS, Len);
result = USBD_CDC_TransmitPacket(hUsbDevice_0);
} else
{
host_port_open = 0;// usb disconnected
}
/* USER CODE END 8 */
return result;
}
02.02.2015, 01:12
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2015, 01:12
Помогаю со студенческими работами здесь

Как определить состояние кнопок мыши?
как определить состояние кнопок мыши? должна же быть функция, аналогичная GetCursorPos(&amp;pt); но...

Как определить текущее состояние процессора в момент прерывания
куда записывается состояние процессора и рабочие данные в для того чтобы обеспечить передачу...

Как определить состояние формы (загружена или нет)?
Как можно определить загружена форма или нет?

Как программно определить состояние, в котором открыта форма?
Как программно определить состояние, в котором открыта форма? или в каком режиме? для чтения,...

Как определить состояние процеса, запущенного через subprocess?
Как определить состояние запущенного процесса (завершился или выполняется). Запустил процес через...

Загрузка файлов на сервер, как определить состояние загрузки
Всем привет, подскажите пожалуйста вот какую вещь. В приложении я загружаю файлы на сервер. Для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru