16+
Четверг
15 ноября
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Средства и методы разработки

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
IBAH  (27.09.2018 12:42) , в ответ на Значит, так: если не использован флаг FILE_FLAG_OVERLAPPED, то ReadFile или WriteFile блокируются до исполнения запроса или таймаута и вызывать их нужно без дискриптора OVERLAPPED со значением указателя NULL. Если флаг используется, то они автор: Хитрый Китаец
Тут читать, тут не читать, тут рыбу заворачивали... В конце концов, методом научного тыка, так и сделал, кажись не ошибся  
HANDLE           handle;
COMMTIMEOUTS     CommTimeOuts;
DCB              dcb;
COMSTAT          ComState;
OVERLAPPED       Overlap;


// открытие порта
// возвращает TRUE если порт открылся нормально
boolean ComPortOpen(char* port, DWORD BaudRate, BYTE ByteSize,
                                                   BYTE Parity, BYTE StopBits)
  {
  //открываем порт
  handle = CreateFile
                    (
                     port,// имя файла
                     GENERIC_READ | GENERIC_WRITE, // режим доступа
                     0, // совместный доступ
                     NULL,  //SD (дескр. защиты)
                     OPEN_EXISTING, //как действовать
                     NULL,//FILE_FLAG_OVERLAPPED, // атрибуты файла
                     NULL //дескр.шаблона файла
                    );
  if(handle == INVALID_HANDLE_VALUE) {return FALSE; }
  //размер буфера обмена
  if(!SetupComm(handle, SizeBuffer, SizeBuffer)) {return FALSE; }
  //инициализируем структуру настроек порта
  if(!GetCommState(handle, &dcb)) {return FALSE; }
  //заполняем структуру настроек порта
  dcb.BaudRate           = BaudRate;
  dcb.fBinary            = TRUE;
  dcb.fOutxCtsFlow       = FALSE;
  dcb.fOutxDsrFlow       = FALSE;
  dcb.fDtrControl        = DTR_CONTROL_DISABLE;
  dcb.fDsrSensitivity    = FALSE;
  dcb.fNull              = FALSE;
  dcb.fRtsControl        = RTS_CONTROL_DISABLE;
  dcb.fAbortOnError      = FALSE;
  dcb.ByteSize           = ByteSize;
  dcb.Parity	           = Parity;
  dcb.StopBits           = StopBits;
  //настройка параметров порта
  if(!SetCommState(handle, &dcb)){return FALSE; }
  //инициализируем структуру таймаутов порта
  if(!GetCommTimeouts(handle, &CommTimeOuts)) {return FALSE; }
  //заполняем структуру таймаутов порта
  CommTimeOuts.ReadIntervalTimeout         = 0;
  CommTimeOuts.ReadTotalTimeoutMultiplier  = 0;
  CommTimeOuts.ReadTotalTimeoutConstant    = 0;
  CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
  CommTimeOuts.WriteTotalTimeoutConstant   = 0;
  //настройка таймаутов порта
  if(!SetCommTimeouts(handle, &CommTimeOuts)) {return FALSE; }
  //Очистка буфера приема
  ComPortResetRB();
  //очистка буфера передачи
  ComPortResetWB();

  //The End
  return TRUE;
  }

//закрытие порта
void ComPortClose(void)
  {
  CloseHandle(handle);
  }

// очистка буфера приема
void ComPortResetRB(void)
  {
  PurgeComm(handle, PURGE_RXCLEAR);
  }

// очистка буфера передачи
void ComPortResetWB(void)
  {
  PurgeComm(handle, PURGE_TXCLEAR);
  }

// считать число принятых символов в буфере приема
// (еще не считанных функцией Read)
unsigned short ComPortGetWBSize(void)
  {
  unsigned long temp;
  ClearCommError(handle, &temp, &ComState);
  return (unsigned short)ComState.cbOutQue;
  }

// считать число еще не переданных символов в буфере передачи
unsigned short ComPortGetRBSize(void)
  {
  unsigned long temp;
  ClearCommError(handle, &temp, &ComState);
  return (unsigned short)ComState.cbInQue;
  }

//прочитать символ из порта без ожидания
unsigned char ComPortInKey(void)
  {
  unsigned char tmp;
  unsigned long tmp2;
  ClearCommError(handle, &tmp2, &ComState);
  if(ComPortGetRBSize()==0)return 0;
  ReadFile(handle,&tmp, 1, &tmp2, NULL);
  return tmp;
  }

//записать символ в порт
void ComPortPut(unsigned char a)
  {
  unsigned long tmp2;
  ClearCommError(handle, &tmp2, &ComState);
  WriteFile(handle, &a, 1, &tmp2, NULL);
  }
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7527 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVIII