реклама на сайте
подробности

 
 
> Не могу произвести запись в драйвер atm6124.sys из BasicUSB, at91sam7s.
Bulat
сообщение Sep 17 2008, 03:46
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241



Прошивка контролера на основе BasicUSB, с драйвером atm6124ser работает все нормально, но мне не хватает скорости. Пытаюсь открыть драйвер atm6124.sys, CreateFile выполняется нормально, но далее при попытке произвести запись WriteFile возвращает ошибку!
Так я открываю драйвер в VC++ 8:
Код
HDEVINFO hDevInfo;
// {A5DCBF10-6530-11D2-901F-00C04FB951ED}
GUID Nguid =
{ 0xA5DCBF10, 0x6530, 0x11d2, { 0x90, 0x1f, 0x00, 0xc0, 0x4f, 0xb9, 0x51, 0xed } };
GUID *guid = &Nguid;        
        
hDevInfo = SetupDiGetClassDevs (guid, NULL, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE); /*Мы попросили вернуть нам описатель для устройств, предоставляющих интерфейс с guid и присутствующих в данный момент в системе получаем краткую информацию для интерфейсов (в данном случае, для первого интерфейса в списке с подходящим guid)*/

PSP_DEVICE_INTERFACE_DATA devInfoData = (PSP_DEVICE_INTERFACE_DATA)malloc(sizeof(SP_DEVICE_INTERFACE_DATA));
devInfoData->cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
SetupDiEnumDeviceInterfaces(hDevInfo, NULL, guid, 0, devInfoData);
        
//Определим необходимую для хранения символического имени устройства длину буфера
unsigned long requiredlength;
SetupDiGetDeviceInterfaceDetail(hDevInfo, devInfoData, NULL, 0, &requiredlength, NULL);

//Узнаем символическое имя для устройства с заданным интерфейсом
PSP_DEVICE_INTERFACE_DETAIL_DATA DevInfoDetail = (PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredlength);
DevInfoDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);         
SetupDiGetInterfaceDeviceDetail (hDevInfo, devInfoData, DevInfoDetail, requiredlength, &requiredlength, NULL);        
        
//открытие порта
HANDLE port = CreateFile(DevInfoDetail->DevicePath,
                    GENERIC_READ | GENERIC_WRITE,
                    0,
                    NULL,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    NULL);
//проверка результата открытия порта
if (port == INVALID_HANDLE_VALUE) {pDoc->StringData1 = "failed opening";}
    else {pDoc->StringData1 = "cool opening";}

BOOLEAN Success;
unsigned char com_buf[28];//буфер ком. слов и слова режима
//заполнение буфера com_buf
            
com_buf[0]=0x30; //команда для командного процессора девайса: запрос подтверждения приема данных
com_buf[1]=mTMode[0];
com_buf[2]=mTMode[1];
for(int i=3;i<27;i++)
{
    com_buf[i]=mCWord[i-3];
}
com_buf[27]=0x0;
                
//Запись в файл                
ULONG nBytes=28;
Success = WriteFile(port, &com_buf, 28, &nBytes, NULL);//Запись слова режима, ком. слова            
//ожидание окончания записи в файл
if(!Success ) //|| ( nBytes != sizeof(VENDORPACKET) ) )
{
    pDoc->StringData1 += " failed to write";
} else
    {
        pDoc->StringData1 += " write successful";
    }

Код возвращат " failed to write".
Кто-нибудь сталкивался с такой проблемой?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
prottoss
сообщение Sep 17 2008, 04:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Bulat @ Sep 17 2008, 11:46) *
Пытаюсь открыть драйвер atm6124.sys, CreateFile выполняется нормально, но далее при попытке произвести запись WriteFile возвращает ошибку!
какую конкретно ошибку возвращает WriteFile? Если FILE_IO_PENDING (точное название не помню), то ничего страшного. Нужно просто дождаться конца операции записи. Читайте WinAPI32.


--------------------
Go to the top of the page
 
+Quote Post
zhevak
сообщение Sep 17 2008, 04:53
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065



Цитата(prottoss @ Sep 17 2008, 10:02) *
какую конкретно ошибку возвращает WriteFile? Если FILE_IO_PENDING (точное название не помню), то ничего страшного. Нужно просто дождаться конца операции записи. Читайте WinAPI32.

Я не уверен.

У Bulat открытие проиcходит без перекрытия, т.е. предполагаются синхронные операции с файлом.

Для открытие асинихронных операций нужно указывать флаг -- FILE_FLAG_OVERLAPPED. А в тексте проги стоит FILE_ATTRIBUTE_NORMAL. Поэтому операции с хендлом будут синхронные, значит функция WriteFile не вернет управление до тех пор, пока не закончит запись.

При асинхронных операциях WriteFile не дожидаясь окончания записи, действительно, возвращает управление с кодом возврата ERROR_IO_PENDING, что говорит -- "все ОК, процесс пошел. Результат будет чуть позже, а Вы пока займитесь еще чем-нибудь."


--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 17 2008, 05:19
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(zhevak @ Sep 17 2008, 12:53) *
Я не уверен.
. Возможно.
2 Bulat - какой код ошибки возвращает WriteFile?


--------------------
Go to the top of the page
 
+Quote Post
Bulat
сообщение Sep 18 2008, 07:24
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241



Цитата(prottoss @ Sep 17 2008, 11:19) *
. Возможно.
2 Bulat - какой код ошибки возвращает WriteFile?

WriteFile выдает следующую ошибку: "Параметр задан неверно". И далее 2 знака похожие на "Ъ".
О каком параметре идет речь?
Go to the top of the page
 
+Quote Post
SergeiCh
сообщение Sep 18 2008, 07:34
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 22-03-07
Из: Novosibirsk
Пользователь №: 26 415



Цитата(Bulat @ Sep 18 2008, 14:24) *
О каком параметре идет речь?

Видимо, о том, который возвращает GetLastError().
Go to the top of the page
 
+Quote Post
Bulat
сообщение Sep 18 2008, 08:10
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 206
Регистрация: 12-10-06
Из: ufa
Пользователь №: 21 241



Цитата(SergeiCh @ Sep 18 2008, 13:34) *
Видимо, о том, который возвращает GetLastError().

А я думал, что это WriteFile возвращает такую ошибку!
Go to the top of the page
 
+Quote Post
SergeiCh
сообщение Sep 18 2008, 08:36
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 99
Регистрация: 22-03-07
Из: Novosibirsk
Пользователь №: 26 415



Цитата(Bulat @ Sep 18 2008, 15:10) *
А я думал, что это WriteFile возвращает такую ошибку!
WriteFile возвращает ноль (FALSE) или не ноль (TRUE). Причину, по которой был ноль, можно узнать по коду, который возвращает GetLastError. Рекомендую перед использованием глянуть описание в доках по Win32 API. Там же есть FormatMessage для перевода кода на человеческий язык smile.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Bulat   Не могу произвести запись в драйвер atm6124.sys из BasicUSB   Sep 17 2008, 03:46
|- - Bulat   Цитата(Bulat @ Sep 18 2008, 14:10) А я ду...   Sep 18 2008, 08:50
|- - SergeiCh   Цитата(Bulat @ Sep 18 2008, 15:50) Поэтом...   Sep 18 2008, 09:59
- - Aurochs   Драйвер at6124 хитро скроен. Для него нужно открыв...   Sep 19 2008, 23:28
- - Bulat   Цитата(Aurochs @ Sep 20 2008, 05:28) Драй...   Sep 22 2008, 07:51
- - Aurochs   Цитата(Bulat @ Sep 22 2008, 10:51) После ...   Sep 22 2008, 11:19
- - Bulat   Цитата(Aurochs @ Sep 22 2008, 17:19) Похо...   Sep 23 2008, 02:48
- - Bulat   Да и еще вопрос!) Я похоже неправильно приписы...   Sep 23 2008, 05:15
- - Aurochs   Цитата(Bulat @ Sep 23 2008, 08:15) Да и е...   Sep 23 2008, 07:21
- - Bulat   Цитата(Aurochs @ Sep 23 2008, 13:21) Ну, ...   Sep 23 2008, 17:01
- - Bulat   Извиняюсь, что опять поднял тему, но у меня пробле...   Sep 24 2008, 17:27
- - Aurochs   Цитата(Bulat @ Sep 24 2008, 20:27) Так во...   Sep 24 2008, 21:13


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 20:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01451 секунд с 7
ELECTRONIX ©2004-2016