void slowInit(unsigned char address) {
unsigned long len = 128;
// The K-Line must be high for at least 300ms
DeviceIoControl(comport, IOCTL_SERIAL_SET_BREAK_OFF, NULL, 0, NULL, 0, &len, NULL);
Sleep(300);
DeviceIoControl(comport, IOCTL_SERIAL_SET_BREAK_ON, NULL, 0, NULL, 0, &len, NULL); // Start bit (low)
Sleep(200);
for (UINT i = 0; i < 8; i++) {
if (((0x01 << i) & address) > 0) {
DeviceIoControl(comport, IOCTL_SERIAL_SET_BREAK_OFF, NULL, 0, NULL, 0, &len, NULL); // 1
} else {
DeviceIoControl(comport, IOCTL_SERIAL_SET_BREAK_ON, NULL, 0, NULL, 0, &len, NULL); // 0
}
Sleep(200);
}
DeviceIoControl(comport, IOCTL_SERIAL_SET_BREAK_OFF, NULL, 0, NULL, 0, &len, NULL);
}
void KWP2000Init(unsigned char address) {
slowInit(address);
while (readByte() != 0x8F) {}
Sleep(25);
writeByte(0x70);
while (readByte() != 0xFF - address) {}
}
KWP2000Init(0x11);
cout << "KWP2000 Init complete.\n";
StartDiagnosticSession(DEVELOPMENT_SESSION, BAUD_56000);