/[H7]/branches/linux-serial/H7Serial.cpp
ViewVC logotype

Contents of /branches/linux-serial/H7Serial.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 54 - (show annotations) (download)
Mon Feb 5 10:10:18 2007 UTC (17 years, 3 months ago) by torben
File size: 1836 byte(s)
Added a cross-platform specification of desired baud-rate.

1
2 #include "stdafx.h"
3
4 #include "H7Serial.h"
5 #include <stdexcept>
6 #include <iostream>
7
8 CH7Serial::CH7Serial(void)
9 : CSlipSerial()
10 {
11 }
12
13 CH7Serial::CH7Serial(char* port, Baudrate bitrate)
14 : CSlipSerial(port, bitrate)
15 {
16 }
17
18 CH7Serial::~CH7Serial(void)
19 {
20 }
21
22 short CH7Serial::readTarget(unsigned char target)
23 {
24 using namespace std;
25 cout << "read start" << endl;
26 short retval;
27 unsigned char frame[1];
28 unsigned char hi_target = (target & 0x0F) << 4;
29 frame[0] = hi_target | 0x00;
30
31 writeFrame(frame,1);
32 cout << "read mid" << endl;
33 Sleep(50); //be nice and wait a little
34 std::vector<unsigned char> answer = readFrame();
35 cout << "read done" << endl;
36
37 if (answer.size() == 0)
38 throw std::runtime_error("No reply");
39
40 if ( (answer[0] & 0x0F) != 0x02) // tjek for ACK
41 throw std::runtime_error("Request not acknowledged");
42
43 if ( (answer[0] & 0xF0) != hi_target)
44 throw std::runtime_error("Incorrect reply");
45
46 if (answer.size() == 2)
47 retval = answer[1];
48 else if (answer.size() == 3)
49 retval = (answer[1]<<8) | answer[2];
50 else
51 retval = -1;
52
53 return retval;
54 }
55
56 void CH7Serial::writeTarget(unsigned char target, unsigned char data)
57 {
58 using namespace std;
59 unsigned char frame[2];
60 unsigned char hi_target = (target & 0x0F) << 4;
61 frame[0] = hi_target | 0x01;
62 frame[1] = data;
63 cout << "write start" << endl;
64
65 writeFrame(frame,2);
66 cout << "write mid" << endl;
67 Sleep(50); //be nice and wait a little
68 std::vector<unsigned char> answer = readFrame();
69
70 cout << "write stop" << endl;
71 if (answer.size() == 0)
72 throw std::runtime_error("No reply");
73
74 if ( (answer[0] & 0x0F) != 0x02) // tjek for ACK
75 throw std::runtime_error("Request not acknowledged");
76
77 if ( (answer[0] & 0xF0) != hi_target)
78 throw std::runtime_error("Incorrect reply");
79 }
80
81

  ViewVC Help
Powered by ViewVC 1.1.20