Господа, есть пару вопросов.
Пишу PC-шную часть программы по общению AVR с PC.
Использую C++ Builder и FTDI драйвер (точнее .lib библиотеку)
Определение подклчюенных устройств и чтение служебной информации происходит на ура.
А вот дальше траблы...
Подключаемого устройства пока не имею. Для проверки использую USB Программатор Petka, который имеет свойство отправлять автоматический ответ на посылаемую пустую строку с символом конца строки. Байты у меня отправляются, а вот прием не идет. ПРинимается 0 байт.
Вот код:
Код
void __fastcall TForm1::AdvGlowButton1Click(TObject *Sender)
{
DWORD dw;
unsigned char *source;
unsigned char *dest;
DWORD len;
int i;
source="";
dest="";
len=1;
char S[] = "USB AVR";
char TxBuffer[128];
ftStatus = FT_OpenEx(S,FT_OPEN_BY_DESCRIPTION,&ftHandle1);
if (ftStatus == FT_OK) {
// success - device with device description "USB Serial Converter" is open
Image1->Visible=true;
Image2->Visible=false;
// ftStatus = FT_Close(ftHandle1);
}
else {
// failure
Image1->Visible=false;
Image2->Visible=true;
}
FT_SetBaudRate(ftHandle1,FT_BAUD_115200);
FT_SetDataCharacteristics(ftHandle1,FT_BITS_8,FT_STOP_BITS_1,FT_PARITY_NONE);
FT_SetTimeouts(ftHandle1,300,300);
FT_ResetDevice(ftHandle1);
FT_Purge(ftHandle1,FT_PURGE_TX);
// запись данных в устройство
for(i=0;i<1;i++)
{
TxBuffer[i]=0x00;
}
FT_Write(ftHandle1,TxBuffer,1,&dw);
// FT_Purge(ftHandle1,FT_PURGE_RX);
// отображаем количество переданных байт
AdvMemo1->Lines->Add(AnsiString("Передано байт : "+ AnsiString(dw)));
ftStatus=FT_Write(ftHandle1,source,len,&dw);
AdvMemo1->Lines->Add(AnsiString("Передано байт: "+ AnsiString(dw)));
ftStatus=FT_Write(ftHandle1,source,len,&dw);
AdvMemo1->Lines->Add(AnsiString("Передано байт: "+ AnsiString(dw)));
ftStatus=FT_Write(ftHandle1,source,len,&dw);
AdvMemo1->Lines->Add(AnsiString("Передано байт 1: "+ AnsiString(dw)));
ftStatus=FT_Read(ftHandle1,dest,len,&dw);
AdvMemo1->Lines->Add(AnsiString(ftStatus));
AdvMemo1->Lines->Add(AnsiString("Принято байт: ")+ AnsiString(dw));
// FT_GetModemStatus(ftHandle1,&dw);
// AdvMemo1->Lines->Add(AnsiString("Статус модема ")+ AnsiString(dw));
if ( FT_GetModemStatus(ftHandle1,&dw)){
if (dw & MS_CTS_ON)
AdvMemo1->Lines->Add(AnsiString("MS_CTS on ")); // CTS is on
if (dw & MS_DSR_ON)
AdvMemo1->Lines->Add(AnsiString("MS_DSR on ")); // CTS is on
if (dw & MS_RING_ON)
AdvMemo1->Lines->Add(AnsiString("MS_RI on ")); // CTS is on
if (dw & MS_RLSD_ON)
AdvMemo1->Lines->Add(AnsiString("MS_RLSD on ")); // CTS is on
}
else
AdvMemo1->Lines->Add(AnsiString("Ошибка")); // FT_W32_GetCommModemStatus failed
}
Где ошибка?