40 #define MLOGST(LEVEL,THIS) LOG(Log::LEVEL, THIS->logItHandle()) << __FUNCTION__ << " " << " systec bus= " << THIS->getBusName() << " " 44 #define DLLEXPORTFLAG __declspec(dllexport) 62 m_CanScanThreadShutdownFlag(true),
66 m_busStatus(USBCAN_SUCCESSFUL),
70 m_statistics.beginNewRun();
80 tCanMsgStruct readCanMessage;
84 status = UcanReadCanMsgEx(canScanInstancePointer->
m_UcanHandle, (BYTE *)&canScanInstancePointer->
m_channelNumber, &readCanMessage, 0);
85 if (status == USBCAN_SUCCESSFUL) {
86 if (readCanMessage.m_bFF == USBCAN_MSG_FF_RTR)
90 canMsgCopy.
c_id = readCanMessage.m_dwID;
91 canMsgCopy.
c_dlc = readCanMessage.m_bDLC;
92 canMsgCopy.
c_ff = readCanMessage.m_bFF;
93 for (
int i = 0; i < 8; i++)
94 canMsgCopy.
c_data[i] = readCanMessage.m_bData[i];
97 MLOGST(
DBG, canScanInstancePointer) <<
"Received message: [" << hex << (int)canMsgCopy.
c_data[0] << hex <<
99 "], cobID: [" << readCanMessage.m_dwID <<
"], Message Length: [" <<
static_cast<int>(readCanMessage.m_bDLC) <<
"]";
104 if (status == USBCAN_WARN_NODATA) {
122 MLOGST(
DBG,
this) <<
"ST Can Scan component closed successfully";
153 LogItInstance* logItInstance = CCanAccess::getLogItInstance();
156 std::cout << __FILE__ <<
" " << __LINE__ <<
" " << __FUNCTION__
157 <<
" could not set LogIt instance" << std::endl;
160 std::cout << __FILE__ <<
" " << __LINE__ <<
" " << __FUNCTION__
164 MLOGST(
DBG,
this) <<
" name= " <<
name <<
" parameters= " << parameters <<
", configuring CAN board";
167 if (returnCode < 0) {
174 MLOGST(
ERR,
this) <<
"creating the canScanControl thread.";
177 MLOGST(
DBG,
this) <<
" Bus [" <<
name <<
"] created with parameters [" << parameters <<
"]";
183 long baudRate = USBCAN_BAUD_125kBit;
185 vector<string> stringVector;
188 const char *na = stringVector[1].c_str();
195 if (strcmp(parameters.c_str(),
"Unspecified") != 0) {
200 case 50000: baudRate = USBCAN_BAUD_50kBit;
break;
201 case 100000: baudRate = USBCAN_BAUD_100kBit;
break;
202 case 125000: baudRate = USBCAN_BAUD_125kBit;
break;
203 case 250000: baudRate = USBCAN_BAUD_250kBit;
break;
204 case 500000: baudRate = USBCAN_BAUD_500kBit;
break;
205 case 1000000: baudRate = USBCAN_BAUD_1MBit;
break;
209 MLOGST(
ERR,
this) <<
"parsing parameters: this syntax is incorrect: [" << parameters <<
"]";
215 MLOGST(
DBG,
this) <<
"Unspecified parameters, default values will be used.";
219 tUcanInitCanParam initializationParameters;
220 initializationParameters.m_dwSize =
sizeof(initializationParameters);
221 initializationParameters.m_bMode = kUcanModeNormal;
222 initializationParameters.m_bBTR0 = HIBYTE(baudRate);
223 initializationParameters.m_bBTR1 = LOBYTE(baudRate);
224 initializationParameters.m_bOCR = 0x1A;
225 initializationParameters.m_dwAMR = USBCAN_AMR_ALL;
226 initializationParameters.m_dwACR = USBCAN_ACR_ALL;
227 initializationParameters.m_dwBaudrate = USBCAN_BAUDEX_USE_BTR01;
228 initializationParameters.m_wNrOfRxBufferEntries = USBCAN_DEFAULT_BUFFER_ENTRIES;
229 initializationParameters.m_wNrOfTxBufferEntries = USBCAN_DEFAULT_BUFFER_ENTRIES;
242 BYTE systecCallReturn = USBCAN_SUCCESSFUL;
244 tUcanHandle canModuleHandle;
255 systecCallReturn = ::UcanInitHardwareEx(&canModuleHandle,
m_moduleNumber, 0, 0);
256 if (systecCallReturn != USBCAN_SUCCESSFUL)
259 MLOGST(
ERR,
this) <<
"UcanInitHardwareEx, return code = [" << systecCallReturn <<
"]";
260 ::UcanDeinitHardware(canModuleHandle);
267 systecCallReturn = ::UcanInitCanEx2(canModuleHandle,
m_channelNumber, &initializationParameters);
268 if (systecCallReturn != USBCAN_SUCCESSFUL)
270 MLOGST(
ERR,
this) <<
"UcanInitCanEx2, return code = [" << systecCallReturn <<
"]";
281 char errorMessage[120];
307 MLOGST(
DBG,
this) <<
"Sending message: [" << ( message == 0 ?
"" : (
const char *) message) <<
"], cobID: [" << cobID <<
"], Message Length: [" <<
static_cast<int>(len) <<
"]";
309 tCanMsgStruct canMsgToBeSent;
312 canMsgToBeSent.m_dwID = cobID;
313 canMsgToBeSent.m_bDLC = len;
314 canMsgToBeSent.m_bFF = 0;
317 canMsgToBeSent.m_bFF = USBCAN_MSG_FF_RTR;
319 int messageLengthToBeProcessed;
322 messageLengthToBeProcessed = 8;
323 MLOGST(
DBG,
this) <<
"The length is more then 8 bytes, adjust to 8, ignore >8. len= " << len;
327 messageLengthToBeProcessed = len;
329 MLOGST(
DBG,
this) <<
"The length is less then 8 bytes, process only. len= " << len;
332 canMsgToBeSent.m_bDLC = messageLengthToBeProcessed;
333 memcpy(canMsgToBeSent.m_bData, message, messageLengthToBeProcessed);
336 if (Status != USBCAN_SUCCESSFUL)
338 MLOGST(
ERR,
this) <<
"There was a problem when sending a message.";
349 tCanMsgStruct canMsg;
351 canMsg.m_dwID = cobID;
353 canMsg.m_bFF = USBCAN_MSG_FF_RTR;
361 char tmp[300] =
"Error";