static BOOL SaveCanSetup(HWND hdlg, struct TMhsCanCfg* cfg) { short unBTRVal; UBTR0 sBtr0Reg; UBTR1 sBtr1Reg; UINT unNbt0 = 0; FLOAT fNbt = 0; UINT unBrp0 = 0; UINT unNbt1 = 0; UINT unBrp1 = 0; FLOAT fBrp = 0; WORD unProductNbtNBrp= 0; DOUBLE dBaudRate = 0; DOUBLE dblClock = 16; GetDlgItemTextCpy(cfg->CanSnrStr, hdlg, IDC_SNR_EDIT, MHS_STR_SIZE); if ( g_bBTRRadioBtnChecked ) { cfg->CanBtrValue = GetDlgItemHex(hdlg, IDC_BTR_EDIT); unBTRVal = cfg->CanBtrValue; sBtr1Reg.ucBTR1 = (0x00FF & unBTRVal); sBtr0Reg.ucBTR0 = (unBTRVal >> 8); // Get the baudrate for BTR0 and BTR1 values. dBaudRate = dCalculateBaudRateFromBTRs(sBtr0Reg.ucBTR0 ,sBtr1Reg.ucBTR1); // Calculate the NBT and BRP product. and NBT value using BTR0 value unProductNbtNBrp = (UINT)((dblClock/(dBaudRate/1000))/2.0* (defFACT_FREQUENCY / defFACT_BAUD_RATE)); unBrp0 = (sBtr0Reg.sBTR0Bit.ucBRPbit+1); unNbt0 = unProductNbtNBrp/unBrp0; fNbt = (FLOAT)unProductNbtNBrp/unBrp0; unNbt1 = (sBtr1Reg.sBTR1Bit.ucTSEG1bit+1)+ (sBtr1Reg.sBTR1Bit.ucTSEG2bit+1)+1; unBrp1 = unProductNbtNBrp/unNbt1; fBrp = (FLOAT)unProductNbtNBrp/unNbt1; //Check if the BTR0 and BTR1 value entered is valid. if Not valid // Restore the previos value else calculate the new list. if( unNbt0>defMAX_NBT || unNbt0<defMIN_NBT || fNbt != unNbt0 || unBrp1>defMAX_BRP || unBrp1<defMIN_BRP || unBrp1 != fBrp || unNbt1>defMAX_NBT || unNbt1<defMIN_NBT ) { MessageBox(hdlg, "Invalid BTRs Configuration!", "Warning", MB_OK|MB_ICONSTOP); return FALSE; } } else {
static void SaveCanSetup(HWND hdlg, struct TMhsCanCfg *cfg) { GetDlgItemTextCpy(cfg->CanSnrStr, hdlg, IDC_SNR_EDIT, MHS_STR_SIZE); cfg->CanBtrValue = GetDlgItemHex(hdlg, IDC_BTR_EDIT); cfg->CanSpeed = GetComboBox(hdlg, IDC_CAN_SPEED); }