HRESULT CTxMsgWndJ1939::SendSavedMessage(void) { HRESULT hResult = S_FALSE; if ((m_sMsgToBeSent.m_eMsgType == MSG_TYPE_DATA) || (m_sMsgToBeSent.m_eMsgType == MSG_TYPE_BROADCAST)) { hResult = GetIJ1939DIL()->DILIJ_SendJ1939Msg(m_sClientParams.m_dwClientId, m_sMsgToBeSent.m_unChannel, m_sMsgToBeSent.m_eMsgType, m_sMsgToBeSent.m_unPGN, m_sMsgToBeSent.m_abyData, m_sMsgToBeSent.m_unDLC, m_sMsgToBeSent.m_byPriority, m_sMsgToBeSent.m_bySrc, m_sMsgToBeSent.m_byDest); } if (m_sMsgToBeSent.m_eMsgType == MSG_TYPE_REQUEST) { hResult = GetIJ1939DIL()->DILIJ_RequestPGN(m_sClientParams.m_dwClientId, m_sMsgToBeSent.m_unChannel, m_sMsgToBeSent.m_unPGN, m_sMsgToBeSent.m_byPriority, m_sMsgToBeSent.m_bySrc, m_sMsgToBeSent.m_byDest); } return hResult; }
HRESULT CGlobalObj::RegisterNodeToDIL(BOOL bRegister, PSNODEINFO pNodeInfo) { VALIDATE_POINTER_RETURN_VAL(pNodeInfo, S_FALSE); HRESULT hResult = S_FALSE; switch (m_eBus) { case CAN: { hResult = CGlobalObj::GetICANDIL()->DILC_RegisterClient(bRegister, pNodeInfo->m_dwClientId, pNodeInfo->m_omStrNodeName.GetBuffer(MAX_PATH)); if ((hResult == S_OK) && (bRegister == TRUE)) { //Set the buffer hResult = CGlobalObj::GetICANDIL()->DILC_ManageMsgBuf(MSGBUF_ADD, pNodeInfo->m_dwClientId, (pNodeInfo->m_ouCanBufFSE)); } } break; case J1939: { hResult = CGlobalObj::GetIJ1939DIL()->DILIJ_RegisterClient(bRegister, pNodeInfo->m_omStrNodeName.GetBuffer(MAX_CHAR), pNodeInfo->m_unEcuName, pNodeInfo->m_byPrefAddress, pNodeInfo->m_dwClientId); if (((hResult == S_OK) || (hResult == ERR_CLIENT_EXISTS)) && (bRegister == TRUE)) { //Set the buffer hResult = CGlobalObj::GetIJ1939DIL()->DILIJ_ManageMsgBuf(MSGBUF_ADD, pNodeInfo->m_dwClientId, (pNodeInfo->m_ouMsgBufVSE)); GetIJ1939DIL()->DILIJ_SetCallBckFuncPtr(pNodeInfo->m_dwClientId, CLBCK_FN_LDATA_CONF, (PCLBCK_FN_LDATA_CONF)sg_vDataConfEventFnJ1939); GetIJ1939DIL()->DILIJ_SetCallBckFuncPtr(pNodeInfo->m_dwClientId, CLBCK_FN_BC_LDATA_CONF, (PCLBCK_FN_BC_LDATA_CONF)sg_vDataConfEventFnJ1939); GetIJ1939DIL()->DILIJ_SetCallBckFuncPtr(pNodeInfo->m_dwClientId, CLBCK_FN_NM_ACL, (PCLBCK_FN_NM_ACL)sg_vAddressClaimEventFnJ1939); } } break; case LIN: { hResult = CGlobalObj::GetILINDIL()->DILL_RegisterClient(bRegister, pNodeInfo->m_dwClientId, pNodeInfo->m_omStrNodeName.GetBuffer(MAX_PATH)); if (((hResult == S_OK) || (hResult == ERR_CLIENT_EXISTS)) && (bRegister == TRUE)) { //Set the buffer hResult = CGlobalObj::GetILINDIL()->DILL_ManageMsgBuf(MSGBUF_ADD, pNodeInfo->m_dwClientId, (pNodeInfo->m_ouLinBufSE)); } } break; } return hResult; }
CTxMsgWndJ1939::CTxMsgWndJ1939(CWnd* pParent /*=NULL*/, SJ1939CLIENTPARAM& sClientParam) : CDialog(CTxMsgWndJ1939::IDD, pParent) , m_omMsgDataEditVal("") , m_unDataLength(0) , m_nMsgTypeIndex(0) , m_sClientParams(sClientParam) , m_bNM(TRUE) { m_eTransState = TRANS_STOPPED; m_sCyclicThread.m_hActionEvent = CreateEvent(NULL, FALSE, FALSE, NULL); m_bThreadStarted = FALSE; sg_hMsgSent = CreateEvent(NULL, FALSE, FALSE, NULL); sg_hMsgStopped = CreateEvent(NULL, FALSE, FALSE, NULL); GetIJ1939DIL()->DILIJ_SetCallBckFuncPtr(m_sClientParams.m_dwClientId, CLBCK_FN_LDATA_CONF, (void*)CallBackMsgSent); GetIJ1939DIL()->DILIJ_SetCallBckFuncPtr(m_sClientParams.m_dwClientId, CLBCK_FN_BC_LDATA_CONF, (void*)CallBackMsgSent); }
LRESULT CTxMsgWndJ1939::OnMessageConnect(WPARAM wParam, LPARAM lParam) { BOOL bConnect = (BOOL)wParam; BOOL bOnline = (BOOL)lParam; ResetEvent(sg_hMsgStopped); //For safety if (bOnline == TRUE) { GetIJ1939DIL()->DILIJ_SetCallBckFuncPtr(m_sClientParams.m_dwClientId, CLBCK_FN_LDATA_CONF, (void*)CallBackMsgSent); GetIJ1939DIL()->DILIJ_SetCallBckFuncPtr(m_sClientParams.m_dwClientId, CLBCK_FN_BC_LDATA_CONF, (void*)CallBackMsgSent); } if (eGetTransState() == TRANS_STARTED) { vSetTransState(TRANS_TO_BE_STOPPED); SetEvent(sg_hMsgSent); } if (eGetTransState() == TRANS_TO_BE_STOPPED) { WaitForSingleObject(sg_hMsgStopped, m_sMsgToBeSent.m_unTimerVal * 2); } GetDlgItem(IDC_SEND)->EnableWindow(bConnect); return 0; }
void CJ1939TimeOutCfg::OnBnClickedOk() { CButton* pButton = NULL; pButton = (CButton*)GetDlgItem(IDC_CHECK_BROADCAST); if (pButton->GetCheck() == BST_CHECKED && bVerifyTimeoutValue((UINT)m_omBroadcast.lGetValue()) ) { GetIJ1939DIL()->configureTimeout(TYPE_TO_BROADCAST, (UINT)m_omBroadcast.lGetValue()); } pButton = (CButton*)GetDlgItem(IDC_CHECK_RESPONSE); if (pButton->GetCheck() == BST_CHECKED && bVerifyTimeoutValue((UINT)m_omResponse.lGetValue()) ) { GetIJ1939DIL()->configureTimeout(TYPE_TO_RESPONSE, (UINT)m_omResponse.lGetValue()); } pButton = (CButton*)GetDlgItem(IDC_CHECK_HOLDING); if (pButton->GetCheck() == BST_CHECKED && bVerifyTimeoutValue((UINT)m_omHolding.lGetValue()) ) { GetIJ1939DIL()->configureTimeout(TYPE_TO_HOLDING, (UINT)m_omHolding.lGetValue()); } pButton = (CButton*)GetDlgItem(IDC_CHECK_T1); if (pButton->GetCheck() == BST_CHECKED && bVerifyTimeoutValue((UINT)m_omT1.lGetValue()) ) { GetIJ1939DIL()->configureTimeout(TYPE_TO_T1, (UINT)m_omT1.lGetValue()); } pButton = (CButton*)GetDlgItem(IDC_CHECK_T2); if (pButton->GetCheck() == BST_CHECKED && bVerifyTimeoutValue((UINT)m_omT2.lGetValue()) ) { GetIJ1939DIL()->configureTimeout(TYPE_TO_T2, (UINT)m_omT2.lGetValue()); } pButton = (CButton*)GetDlgItem(IDC_CHECK_T3); if (pButton->GetCheck() == BST_CHECKED && bVerifyTimeoutValue((UINT)m_omT3.lGetValue()) ) { GetIJ1939DIL()->configureTimeout(TYPE_TO_T3, (UINT)m_omT3.lGetValue()); } pButton = (CButton*)GetDlgItem(IDC_CHECK_T4); if (pButton->GetCheck() == BST_CHECKED && bVerifyTimeoutValue((UINT)m_omT4.lGetValue()) ) { GetIJ1939DIL()->configureTimeout(TYPE_TO_T4, (UINT)m_omT4.lGetValue()); } GetDlgItem(IDOK)->EnableWindow(FALSE); //OnOK(); }
void CTxMsgWndJ1939::OnBnClickedSend() { UpdateData(); LPARAM lParam = 0; GetICANDIL()->DILC_GetControllerParams(lParam, 0, NUMBER_HW); UINT unChannel = (UINT) lParam; if (m_bNM == TRUE) { BYTE byAddress = (BYTE)m_omCurAddress.lGetValue(); BYTE byEcuName = (BYTE)m_omEcuName.lGetValue(); CButton* pButton = (CButton*)GetDlgItem(IDC_CLAIM_ADDRESS); if (pButton->GetCheck() == BST_CHECKED) { for (UINT i = 0; i < unChannel; i++) { GetIJ1939DIL()->DILIJ_NM_ClaimAddress(m_sClientParams.m_dwClientId, i + 1, byAddress); } } pButton = (CButton*)GetDlgItem(IDC_RQST_ADDRESS); if (pButton->GetCheck() == BST_CHECKED) { for (UINT i = 0; i < unChannel; i++) { GetIJ1939DIL()->DILIJ_NM_RequestAddress(m_sClientParams.m_dwClientId, i + 1, DEFAULT_PRIORITY, byAddress, byEcuName); } } pButton = (CButton*)GetDlgItem(IDC_CMD_ADDRESS); if (pButton->GetCheck() == BST_CHECKED) { UINT64 unECUNAME = m_omEcuName.lGetValue(); for (UINT i = 0; i < unChannel; i++) { GetIJ1939DIL()->DILIJ_NM_CommandAddress(m_sClientParams.m_dwClientId, i + 1, unECUNAME, byAddress, DEFAULT_PRIORITY, byAddress, ADDRESS_ALL); } } } else { if ((eGetTransState() == TRANS_STOPPED) && GetIJ1939DIL()->DILIJ_bIsOnline()) { m_sMsgToBeSent.m_unChannel = 1; CString omChannel; int nIndex = m_omComboChannel.GetCurSel(); if (nIndex != -1) { m_omComboChannel.GetLBText(m_omComboChannel.GetCurSel(), omChannel); m_sMsgToBeSent.m_unChannel = _ttoi(omChannel); } //Check for DLC length if (m_unDataLength > MAX_DATA_LEN_J1939) { CString omInvDLCMsg; omInvDLCMsg.Format("Invalid DLC value: %d, Please enter a value between 0 and %d", m_unDataLength, MAX_DATA_LEN_J1939); vSetStatusBarText(omInvDLCMsg); return; } //Data bytes if (m_omMsgDataEditVal.GetLength() > (INT)(2 * m_unDataLength)) { m_omMsgDataEditVal = m_omMsgDataEditVal.Left(2 * m_unDataLength); } //DLC m_sMsgToBeSent.m_unDLC = CString_2_ByteArray(m_omMsgDataEditVal, m_sMsgToBeSent.m_abyData, MAX_DATA_LEN_J1939); //Msg type m_sMsgToBeSent.m_eMsgType = eGetCurrMsgType(); //Destination address m_sMsgToBeSent.m_byDest = (BYTE)m_omTOEdit.lGetValue(); //Source address m_sMsgToBeSent.m_bySrc = (BYTE)m_omFromEdit.lGetValue(); //Priority m_sMsgToBeSent.m_byPriority = (BYTE)m_omPriorityEdit.lGetValue(); //PGN value CString omPGN; nIndex = m_omComboPGN.GetCurSel(); if (nIndex != -1) { m_omComboPGN.GetLBText(m_omComboPGN.GetCurSel(), omPGN); } else { m_omComboPGN.GetWindowText(omPGN); omPGN = "0x" + omPGN; } m_sMsgToBeSent.m_unPGN = unGetMsgIDFromName(omPGN); if (m_sMsgToBeSent.m_unPGN > MAX_LMT_FOR_PGN) { CString omPGN; omPGN.Format("Invalid PGN value: %x, Please enter a value between 0 and 0x%x", m_sMsgToBeSent.m_unPGN, MAX_LMT_FOR_PGN); vSetStatusBarText(omPGN); return; } //Now send the message //Check for cyclic transmission if (m_omCheckCyclic.GetCheck() == BST_CHECKED) { m_sMsgToBeSent.m_unTimerVal = (UINT)m_omMiliSecs.lGetValue(); vProcessTransmission(TRUE); if (m_bThreadStarted == FALSE) { m_sCyclicThread.m_pBuffer = this; m_sCyclicThread.m_unActionCode = INVOKE_FUNCTION; m_bThreadStarted = m_sCyclicThread.bStartThread(Cyclic_Transmission_Thread); SetEvent(m_sCyclicThread.m_hActionEvent); } else { m_sCyclicThread.m_pBuffer = this; m_sCyclicThread.m_unActionCode = INVOKE_FUNCTION; SetEvent(m_sCyclicThread.m_hActionEvent); } } else { vSetStatusBarText(""); //Clear status bar. SendSavedMessage(); } } else if (eGetTransState() == TRANS_STARTED) { vSetTransState(TRANS_TO_BE_STOPPED); SetEvent(sg_hMsgSent); SetEvent(m_sCyclicThread.m_hActionEvent); } } }
//Init dialog BOOL CJ1939TimeOutCfg::OnInitDialog() { CDialog::OnInitDialog(); CButton* pButton = NULL; UINT unTimeOutVal = 0; pButton = (CButton*)GetDlgItem(IDC_CHECK_BROADCAST); pButton->SetCheck(BST_UNCHECKED); GetIJ1939DIL()->getTimeout(TYPE_TO_BROADCAST, unTimeOutVal); m_omBroadcast.vSetBase(BASE_DECIMAL); m_omBroadcast.vSetSigned(FALSE); m_omBroadcast.LimitText(4); m_omBroadcast.vSetValue(unTimeOutVal); OnBnClickedCheckBroadcast(); pButton = (CButton*)GetDlgItem(IDC_CHECK_RESPONSE); pButton->SetCheck(BST_UNCHECKED); GetIJ1939DIL()->getTimeout(TYPE_TO_RESPONSE, unTimeOutVal); m_omResponse.vSetBase(BASE_DECIMAL); m_omResponse.vSetSigned(FALSE); m_omResponse.LimitText(4); m_omResponse.vSetValue(unTimeOutVal); OnBnClickedCheckResponse(); pButton = (CButton*)GetDlgItem(IDC_CHECK_HOLDING); pButton->SetCheck(BST_UNCHECKED); GetIJ1939DIL()->getTimeout(TYPE_TO_HOLDING, unTimeOutVal); m_omHolding.vSetBase(BASE_DECIMAL); m_omHolding.vSetSigned(FALSE); m_omHolding.LimitText(4); m_omHolding.vSetValue(unTimeOutVal); OnBnClickedCheckHolding(); pButton = (CButton*)GetDlgItem(IDC_CHECK_T1); pButton->SetCheck(BST_UNCHECKED); GetIJ1939DIL()->getTimeout(TYPE_TO_T1, unTimeOutVal); m_omT1.vSetBase(BASE_DECIMAL); m_omT1.vSetSigned(FALSE); m_omT1.LimitText(4); m_omT1.vSetValue(unTimeOutVal); OnBnClickedCheckT1(); pButton = (CButton*)GetDlgItem(IDC_CHECK_T2); pButton->SetCheck(BST_UNCHECKED); GetIJ1939DIL()->getTimeout(TYPE_TO_T2, unTimeOutVal); m_omT2.vSetBase(BASE_DECIMAL); m_omT2.vSetSigned(FALSE); m_omT2.LimitText(4); m_omT2.vSetValue(unTimeOutVal); OnBnClickedCheckT2(); pButton = (CButton*)GetDlgItem(IDC_CHECK_T3); pButton->SetCheck(BST_UNCHECKED); GetIJ1939DIL()->getTimeout(TYPE_TO_T3, unTimeOutVal); m_omT3.vSetBase(BASE_DECIMAL); m_omT3.vSetSigned(FALSE); m_omT3.LimitText(4); m_omT3.vSetValue(unTimeOutVal); OnBnClickedCheckT3(); pButton = (CButton*)GetDlgItem(IDC_CHECK_T4); pButton->SetCheck(BST_UNCHECKED); GetIJ1939DIL()->getTimeout(TYPE_TO_T4, unTimeOutVal); m_omT4.vSetBase(BASE_DECIMAL); m_omT4.vSetSigned(FALSE); m_omT4.LimitText(4); m_omT4.vSetValue(unTimeOutVal); OnBnClickedCheckT4(); pButton = (CButton*)GetDlgItem(IDC_STATIC_DESCRIPTION); pButton->SetWindowText(""); return TRUE; }