@@ -86,34 +86,49 @@ void CANKvaser::ReadLoop(
86
86
CANMessage msg;
87
87
CANStatus stat;
88
88
while (loopOn) {
89
- stat = canReadWait (handle, &msg.id , msg.msg , &msg.length , &msg.type ,
90
- &msg.timestamp , interval);
91
- unsigned int type = (unsigned int )CANMSGType::STANDARD;
92
- if (msg.type & canMSG_EXT) {
93
- type |= (unsigned int )CANMSGType::EXTENDED;
94
- msg.type &= ~canMSG_EXT;
89
+ long id;
90
+ unsigned int length;
91
+ unsigned int flag;
92
+ unsigned long time ;
93
+ stat = canReadWait (handle, &id, msg.msg , &length, &flag, &time ,
94
+ interval);
95
+ msg.id = (unsigned long )id;
96
+ msg.length = length;
97
+ msg.timestamp = time ;
98
+ uint32_t type = (uint32_t )CANMSGType::STANDARD;
99
+ if (flag & canMSG_EXT) {
100
+ type |= (uint32_t )CANMSGType::EXTENDED;
101
+ flag &= ~canMSG_EXT;
95
102
}
96
- if (msg. type & canMSG_RTR) {
97
- type |= (unsigned int )CANMSGType::RTR;
98
- msg. type &= ~canMSG_RTR;
103
+ if (flag & canMSG_RTR) {
104
+ type |= (uint32_t )CANMSGType::RTR;
105
+ flag &= ~canMSG_RTR;
99
106
}
100
- if (msg. type & canMSG_ERROR_FRAME) {
101
- type |= (unsigned int )CANMSGType::ERRFRAME;
102
- msg. type &= ~canMSG_ERROR_FRAME;
107
+ if (flag & canMSG_ERROR_FRAME) {
108
+ type |= (uint32_t )CANMSGType::ERRFRAME;
109
+ flag &= ~canMSG_ERROR_FRAME;
103
110
}
104
- if (msg. type & canFDMSG_FDF) {
105
- type |= (unsigned int )CANMSGType::FD;
106
- msg. type &= ~canFDMSG_FDF;
111
+ if (flag & canFDMSG_FDF) {
112
+ type |= (uint32_t )CANMSGType::FD;
113
+ flag &= ~canFDMSG_FDF;
107
114
}
108
- if (msg. type & canFDMSG_BRS) {
109
- type |= (unsigned int )CANMSGType::BRS;
110
- msg. type &= ~canFDMSG_BRS;
115
+ if (flag & canFDMSG_BRS) {
116
+ type |= (uint32_t )CANMSGType::BRS;
117
+ flag &= ~canFDMSG_BRS;
111
118
}
112
- if (msg.type & canFDMSG_ESI) {
113
- type |= (unsigned int )CANMSGType::ESI;
114
- msg.type &= ~canFDMSG_ESI;
119
+ if (flag & canFDMSG_ESI) {
120
+ type |= (uint32_t )CANMSGType::ESI;
121
+ flag &= ~canFDMSG_ESI;
122
+ }
123
+ if (flag & canMSG_STD) {
124
+ flag &= ~canMSG_STD;
125
+ }
126
+ if (flag) {
127
+ msg.type =
128
+ ((uint32_t )CANMSGType::HARDWAREDEF) | ((uint32_t )flag);
129
+ } else {
130
+ msg.type = type;
115
131
}
116
- msg.type = type;
117
132
callback (&msg, stat);
118
133
}
119
134
});
@@ -126,58 +141,78 @@ void CANKvaser::EndReadLoop() {
126
141
}
127
142
128
143
CANStatus CANKvaser::ReadOnce (CANMessage& msg, uint64_t timeout) {
129
- auto && status = canReadWait (handle, &msg.id , msg.msg , &msg.length ,
130
- &msg.type , &msg.timestamp , timeout);
131
- unsigned int type = (unsigned int )CANMSGType::STANDARD;
132
- if (msg.type & canMSG_EXT) {
133
- type |= (unsigned int )CANMSGType::EXTENDED;
134
- msg.type &= ~canMSG_EXT;
135
- }
136
- if (msg.type & canMSG_RTR) {
137
- type |= (unsigned int )CANMSGType::RTR;
138
- msg.type &= ~canMSG_RTR;
139
- }
140
- if (msg.type & canMSG_ERROR_FRAME) {
141
- type |= (unsigned int )CANMSGType::ERRFRAME;
142
- msg.type &= ~canMSG_ERROR_FRAME;
143
- }
144
- if (msg.type & canFDMSG_FDF) {
145
- type |= (unsigned int )CANMSGType::FD;
146
- msg.type &= ~canFDMSG_FDF;
147
- }
148
- if (msg.type & canFDMSG_BRS) {
149
- type |= (unsigned int )CANMSGType::BRS;
150
- msg.type &= ~canFDMSG_BRS;
151
- }
152
- if (msg.type & canFDMSG_ESI) {
153
- type |= (unsigned int )CANMSGType::ESI;
154
- msg.type &= ~canFDMSG_ESI;
155
- }
156
- msg.type = type;
144
+ long id;
145
+ unsigned int length;
146
+ unsigned int flag;
147
+ unsigned long time ;
148
+ auto && status =
149
+ canReadWait (handle, &id, msg.msg , &length, &flag, &time , timeout);
150
+ msg.id = (unsigned long )id;
151
+ msg.length = length;
152
+ msg.timestamp = time ;
153
+ uint32_t type = (uint32_t )CANMSGType::STANDARD;
154
+ if (flag & canMSG_EXT) {
155
+ type |= (uint32_t )CANMSGType::EXTENDED;
156
+ flag &= ~canMSG_EXT;
157
+ }
158
+ if (flag & canMSG_RTR) {
159
+ type |= (uint32_t )CANMSGType::RTR;
160
+ flag &= ~canMSG_RTR;
161
+ }
162
+ if (flag & canMSG_ERROR_FRAME) {
163
+ type |= (uint32_t )CANMSGType::ERRFRAME;
164
+ flag &= ~canMSG_ERROR_FRAME;
165
+ }
166
+ if (flag & canFDMSG_FDF) {
167
+ type |= (uint32_t )CANMSGType::FD;
168
+ flag &= ~canFDMSG_FDF;
169
+ }
170
+ if (flag & canFDMSG_BRS) {
171
+ type |= (uint32_t )CANMSGType::BRS;
172
+ flag &= ~canFDMSG_BRS;
173
+ }
174
+ if (flag & canFDMSG_ESI) {
175
+ type |= (uint32_t )CANMSGType::ESI;
176
+ flag &= ~canFDMSG_ESI;
177
+ }
178
+ if (flag & canMSG_STD) {
179
+ flag &= ~canMSG_STD;
180
+ }
181
+ if (flag) {
182
+ msg.type = ((uint32_t )CANMSGType::HARDWAREDEF) | ((uint32_t )flag);
183
+ } else {
184
+ msg.type = type;
185
+ }
157
186
return status;
158
187
}
159
188
160
189
CANStatus CANKvaser::Write (const CANMessage& msg) {
161
- unsigned int flag = (unsigned int )CANMSGType::STANDARD;
162
- if (msg.type & (unsigned int )CANMSGType::EXTENDED) {
163
- flag |= canMSG_EXT;
164
- }
165
- if (msg.type & (unsigned int )CANMSGType::RTR) {
166
- flag |= canMSG_RTR;
167
- }
168
- if (msg.type & (unsigned int )CANMSGType::ERRFRAME) {
169
- flag |= canMSG_ERROR_FRAME;
170
- }
171
- if (msg.type & (unsigned int )CANMSGType::FD) {
172
- flag |= canFDMSG_FDF;
173
- }
174
- if (msg.type & (unsigned int )CANMSGType::BRS) {
175
- flag |= canFDMSG_BRS;
176
- }
177
- if (msg.type & (unsigned int )CANMSGType::ESI) {
178
- flag |= canFDMSG_ESI;
190
+ uint32_t flag = canMSG_STD;
191
+ if (msg.type & (uint32_t )CANMSGType::HARDWAREDEF) {
192
+ flag = msg.type & (~(uint32_t )CANMSGType::HARDWAREDEF);
193
+ } else {
194
+ if ((uint32_t )msg.type & (uint32_t )CANMSGType::EXTENDED) {
195
+ flag |= canMSG_EXT;
196
+ flag &= ~canMSG_STD;
197
+ }
198
+ if ((uint32_t )msg.type & (uint32_t )CANMSGType::RTR) {
199
+ flag |= canMSG_RTR;
200
+ }
201
+ if ((uint32_t )msg.type & (uint32_t )CANMSGType::ERRFRAME) {
202
+ flag |= canMSG_ERROR_FRAME;
203
+ }
204
+ if ((uint32_t )msg.type & (uint32_t )CANMSGType::FD) {
205
+ flag |= canFDMSG_FDF;
206
+ }
207
+ if ((uint32_t )msg.type & (uint32_t )CANMSGType::BRS) {
208
+ flag |= canFDMSG_BRS;
209
+ }
210
+ if ((uint32_t )msg.type & (uint32_t )CANMSGType::ESI) {
211
+ flag |= canFDMSG_ESI;
212
+ }
179
213
}
180
- return canWriteWait (handle, msg.id , (void *)msg.msg , msg.length , flag, 0xFF );
214
+ return canWriteWait (handle, (int32_t )msg.id , (void *)msg.msg , msg.length ,
215
+ flag, 0xFF );
181
216
};
182
217
183
218
CANStatus CANKvaser::Write (CANMessage* msg, int count) {
0 commit comments