#include "StdAfx.h" #include "H7Serial.h" #include #include CH7Serial::CH7Serial(void) : CSlipSerial() { } CH7Serial::CH7Serial(char* port, int bitrate) : CSlipSerial(port, bitrate) { } CH7Serial::~CH7Serial(void) { } short CH7Serial::readTarget(unsigned char target) { using namespace std; cout << "read start" << endl; short retval; unsigned char frame[1]; unsigned char hi_target = (target & 0x0F) << 4; frame[0] = hi_target | 0x00; writeFrame(frame,1); cout << "read mid" << endl; Sleep(50); //be nice and wait a little std::vector answer = readFrame(); cout << "read done" << endl; if (answer.size() == 0) throw std::runtime_error("No reply"); if ( (answer[0] & 0x0F) != 0x02) // tjek for ACK throw std::runtime_error("Request not acknowledged"); if ( (answer[0] & 0xF0) != hi_target) throw std::runtime_error("Incorrect reply"); if (answer.size() == 2) retval = answer[1]; else if (answer.size() == 3) retval = (answer[1]<<8) | answer[2]; else retval = -1; return retval; } void CH7Serial::writeTarget(unsigned char target, unsigned char data) { using namespace std; unsigned char frame[2]; unsigned char hi_target = (target & 0x0F) << 4; frame[0] = hi_target | 0x01; frame[1] = data; cout << "write start" << endl; writeFrame(frame,2); cout << "write mid" << endl; Sleep(50); //be nice and wait a little std::vector answer = readFrame(); cout << "write stop" << endl; if (answer.size() == 0) throw std::runtime_error("No reply"); if ( (answer[0] & 0x0F) != 0x02) // tjek for ACK throw std::runtime_error("Request not acknowledged"); if ( (answer[0] & 0xF0) != hi_target) throw std::runtime_error("Incorrect reply"); }