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;
}
Beispiel #2
0
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;
}