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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 56 - (hide annotations) (download)
Mon Feb 5 10:24:24 2007 UTC (17 years, 4 months ago) by torben
File size: 1647 byte(s)
Cleanup ....


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

  ViewVC Help
Powered by ViewVC 1.1.20