ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 апреля
873847 Топик полностью
seryy (27.09.2018 12:58, просмотров: 139) ответил IBAH на Не могу победить WinAPI для Ком-порта! Задача- хочу функции "читай байт" из порта "писать байт в порт", решил начать с писать
unsigned char errorNumber; unsigned char *bufIn; unsigned char *bufOut; DCB *dcb; COMMTIMEOUTS ct; HANDLE port; DWORD bc; void CommPortInit(); void CommPortClose(); unsigned char CommPortRxd(); void CommPortTxd(unsigned char symbol); void CommPortInit() { dcb = (DCB*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DCB)); dcb->DCBlength = sizeof(DCB); switch(Form1->ComboBox2->ItemIndex) { case 0: BuildCommDCB("baud=1200 parity=N data=8 stop=1", dcb); break; case 1: BuildCommDCB("baud=2400 parity=N data=8 stop=1", dcb); break; case 2: BuildCommDCB("baud=4800 parity=N data=8 stop=1", dcb); break; case 3: BuildCommDCB("baud=9600 parity=N data=8 stop=1", dcb); break; case 4: BuildCommDCB("baud=19200 parity=N data=8 stop=1", dcb); break; case 5: BuildCommDCB("baud=38400 parity=N data=8 stop=1", dcb); break; case 6: BuildCommDCB("baud=57600 parity=N data=8 stop=1", dcb); break; case 7: BuildCommDCB("baud=115200 parity=N data=8 stop=1", dcb); break; } dcb->fRtsControl = RTS_CONTROL_DISABLE; dcb->fDtrControl = DTR_CONTROL_DISABLE; ct.ReadIntervalTimeout = 0; ct.ReadTotalTimeoutMultiplier = 0; ct.ReadTotalTimeoutConstant = 4000; ct.WriteTotalTimeoutMultiplier = 0; ct.WriteTotalTimeoutConstant = 0; switch(Form1->ComboBox1->ItemIndex) { case 0: port = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); break; case 1: port = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); break; case 2: port = CreateFile("COM3", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); break; case 3: port = CreateFile("COM4", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); break; } if(port == INVALID_HANDLE_VALUE) errorNumber = 1; else { SetCommState(port, dcb); SetCommTimeouts(port, &ct); PurgeComm(port, PURGE_TXCLEAR|PURGE_RXCLEAR); SetupComm(port, 1, 1); bufIn = (unsigned char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 1); bufOut = (unsigned char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 1); } } void CommPortClose() { HeapFree(GetProcessHeap(), 0, bufIn); HeapFree(GetProcessHeap(), 0, bufOut); HeapFree(GetProcessHeap(), 0, dcb); CloseHandle(port); } unsigned char CommPortRxd() { ReadFile(port, bufIn, 1, &bc, NULL); if(bc == 0) errorNumber = 2; return (bufIn[0]); } void CommPortTxd(unsigned char symbol) { bufOut[0] = symbol; WriteFile(port, bufOut, 1, &bc, NULL); } код немного от билдера и привязан к 4-м портам... думаю, разберётесь...