1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153 |
- #include "StdAfx.h"
- #include "BikePowerDisplay.h"
- void BikePowerDisplay::ANT_eventNotification(UCHAR ucEventCode_, UCHAR* pucEventBuffer_)
- {
- switch(ucEventCode_)
- {
- case EVENT_RX_BURST_PACKET:
- case EVENT_RX_BROADCAST:
- case EVENT_RX_ACKNOWLEDGED:
- HandleReceive((UCHAR*) pucEventBuffer_);
- break;
- case EVENT_TRANSFER_TX_COMPLETED:
- ucAckRetryCount = 0;
- ucMsgExpectingAck = 0;
- UpdateDisplayAckStatus(ACK_SUCCESS);
- break;
- case EVENT_TRANSFER_TX_FAILED:
- case EVENT_ACK_TIMEOUT:
- if(ucMsgExpectingAck)
- {
- if(HandleRetransmit())
- UpdateDisplayAckStatus(ACK_RETRY);
- else
- UpdateDisplayAckStatus(ACK_FAIL);
- }
- break;
- default:
- break;
- }
- }
- void BikePowerDisplay::InitializeSim()
- {
- bSeenPower = FALSE;
- bSeenWheelTorque = FALSE;
- bSeenCrankTorque = FALSE;
- bSeenCTF = FALSE;
- ePrevType = BikePower::SensorType::UNKNOWN;
- ulAcumPowerEventCount = 0;
- ulAcumTorqueEventCount = 0;
- ulAcumTicks = 0;
- ulDistance100 = 0;
- ucWheelCircumference100 = System::Convert::ToByte(this->numericUpDown_Cal_WheelCircum->Value);
- usCTFOffset = 0;
- bAutoZeroInvalid = FALSE;
- bAZOn = (BOOL) this->radioButton_Cal_AZon->Checked;
- usCalSerialToSend = System::Convert::ToUInt16(this->numericUpDown_Cal_CTFSerial->Value);
- usCalSlopeToSend = System::Convert::ToUInt16(10 * this->numericUpDown_Cal_CTFSlope->Value);
- ucMsgExpectingAck = 0;
- bCoasting = FALSE;
- bStopped = FALSE;
- }
- void BikePowerDisplay::HandleReceive(UCHAR* pucRxBuffer_)
- {
- static USHORT usNoEventCount = 0;
-
- static UCHAR ucPrevPowerEventCount = 0;
- static USHORT usPrevAcumPower = 0;
-
- static UCHAR ucPrevTorqueEventCount = 0;
- static UCHAR ucPrevTicks = 0;
- static USHORT usPrevPeriod2048 = 0;
- static USHORT usPrevTorque32 = 0;
- static UCHAR ucCurTorqueEventCount = 0;
- static UCHAR ucCurTicks = 0;
- static USHORT usCurPeriod2048 = 0;
- static USHORT usCurTorque32 = 0;
-
- static UCHAR ucPrevCTFEventCount = 0;
- static USHORT usPrevTime2000 = 0;
- static USHORT usPrevCTFTicks = 0;
- UCHAR ucPageNum = pucRxBuffer_[0];
-
- if(ucPageNum >= CommonData::PAGE80 && ucPageNum <= CommonData::PAGE82)
- {
- try
- {
- commonPages->Decode(pucRxBuffer_);
- }
- catch(CommonData::Error^ errorCommon)
- {
- }
- }
-
- if(ucPageNum <= BikePower::PAGE_CTF)
- {
- try
- {
- bpPages->Decode(pucRxBuffer_);
- bAutoZeroInvalid = FALSE;
- bBadCalPage = FALSE;
- }
- catch(BikePower::Error^ errorBikePower)
- {
- if(errorBikePower->bUndefAutoZero)
- bAutoZeroInvalid = TRUE;
- if(ucPageNum == BikePower::PAGE_CALIBRATION)
- bBadCalPage = TRUE;
- }
- }
-
- if(ePrevType != bpPages->eType)
- {
- ChangeSensorType();
- bCoasting = FALSE;
- bStopped = FALSE;
- bSeenCTF = FALSE;
- bSeenPower = FALSE;
- bSeenWheelTorque = FALSE;
- bSeenCrankTorque = FALSE;
- bSeenCTF = FALSE;
-
- if(bpPages->eType == BikePower::SensorType::CRANK_TORQUE_FREQ)
- SendMessage(BikePower::CAL_REQUEST);
- }
-
- switch(ucPageNum)
- {
- case BikePower::PAGE_GET_SET_PARAMETERS:
- if(bpPages->ucCrankLength == 0xFF)
- {
- label_CrankLength->Text = "Invalid";
- checkBox_InvalidCrankLength->Checked = true;
- checkBox_AutoCrank->Checked = false;
- }
- else if(bpPages->ucCrankLength == 0xFE)
- {
- label_CrankLength->Text = "Auto Crank";
- checkBox_InvalidCrankLength->Checked = false;
- checkBox_AutoCrank->Checked = true;
- }
- else
- {
- label_CrankLength->Text = (((float)bpPages->ucCrankLength * (float)0.5) + (110.0)).ToString("F1");
- checkBox_InvalidCrankLength->Checked = false;
- checkBox_AutoCrank->Checked = false;
- numericUpDown_CrankLength->Value = (Decimal)(((float)bpPages->ucCrankLength * (float)0.5) + (110.0));
- }
- label_AutoCrankLength->Text = ((bpPages->ucSensorCapabilities & 0x01) == 0) ? "Manually Set Crank Length" : "Automatically Set Crank Length";
- switch((bpPages->ucSensorStatus & 0x30) >> 4)
- {
- case BikePower::SensorStatus::UNDEFINED:
- label_SensorStatus->Text = "Undefined";
- break;
- case BikePower::SensorStatus::LEFT_PRESENT:
- label_SensorStatus->Text = "Left Present";
- break;
- case BikePower::SensorStatus::RIGHT_PRESENT:
- label_SensorStatus->Text = "Right Present";
- break;
- case BikePower::SensorStatus::LEFT_RIGHT_PRESENT:
- label_SensorStatus->Text = "Left + Right Present";
- break;
- default:
- label_SensorStatus->Text = "----";
- break;
- }
- switch((bpPages->ucSensorStatus & 0x0C) >> 2)
- {
- case BikePower::SWMistmatchStatus::UNDEFINED:
- label_SWMistmatchStatus->Text = "Undefined";
- break;
- case BikePower::SWMistmatchStatus::RIGHT_SENSOR_OLDER:
- label_SWMistmatchStatus->Text = "Right Sensor Older";
- break;
- case BikePower::SWMistmatchStatus::LEFT_SENSOR_OLDER:
- label_SWMistmatchStatus->Text = "Left Sensor Older";
- break;
- case BikePower::SWMistmatchStatus::SW_SAME:
- label_SWMistmatchStatus->Text = "No mismatch";
- break;
- default:
- label_SWMistmatchStatus->Text = "----";
- break;
- }
-
- switch(bpPages->ucSensorStatus & 0x03)
- {
- case BikePower::CrankLengthStatus::LENGTH_INVALID:
- label_CrankLengthStatus->Text = "Invalid";
- break;
- case BikePower::CrankLengthStatus::DEFAULT_LENGTH_USED:
- label_CrankLengthStatus->Text = "Default Length Used";
- break;
- case BikePower::CrankLengthStatus::LENGTH_MANUALLY_SET:
- label_CrankLengthStatus->Text = "Manually Set";
- break;
- case BikePower::CrankLengthStatus::LENGTH_AUTOMATICALLY_SET:
- label_CrankLengthStatus->Text = "Automatically Set";
- break;
- default:
- label_CrankLengthStatus->Text = "----";
- break;
- }
- break;
- case BikePower::PAGE_POWER:
- {
- if(!bSeenPower)
- {
- ucPrevPowerEventCount = bpPages->ucPowEventCount;
- usPrevAcumPower = bpPages->usAcumPower;
- ulAcumPowerEventCount = 0;
- bSeenPower = TRUE;
- }
-
-
- UCHAR ucEventDiff = GetDifference(bpPages->ucPowEventCount, ucPrevPowerEventCount);
- USHORT usPowerDiff = GetDifference(bpPages->usAcumPower, usPrevAcumPower);
-
- ucPrevPowerEventCount = bpPages->ucPowEventCount;
- usPrevAcumPower = bpPages->usAcumPower;
-
- ulAcumPowerEventCount += ucEventDiff;
-
-
- if(ucEventDiff && bpPages->eType == BikePower::SensorType::POWER_ONLY)
- ulAveragePower256 = (((ULONG) usPowerDiff) << 8)/ucEventDiff;
- break;
- }
- case BikePower::PAGE_WHEEL_TORQUE:
- ucCurTorqueEventCount = bpPages->ucWTEventCount;
- ucCurTicks = bpPages->ucWheelTicks;
- usCurPeriod2048 = bpPages->usAcumWheelPeriod2048;
- usCurTorque32 = bpPages->usAcumTorque32;
- case BikePower::PAGE_CRANK_TORQUE:
- {
- if(bpPages->eType == BikePower::SensorType::TORQUE_CRANK)
- {
- ucCurTorqueEventCount = bpPages->ucCTEventCount;
- ucCurTicks = bpPages->ucCrankTicks;
- usCurPeriod2048 = bpPages->usAcumCrankPeriod2048;
- usCurTorque32 = bpPages->usAcumTorque32;
- }
-
- if((!bSeenCrankTorque && bpPages->eType == BikePower::SensorType::TORQUE_CRANK) || (!bSeenWheelTorque && bpPages->eType == BikePower::SensorType::TORQUE_WHEEL))
- {
- if(!bSeenCrankTorque && bpPages->eType == BikePower::SensorType::TORQUE_WHEEL)
- bSeenWheelTorque = TRUE;
- if(!bSeenWheelTorque && bpPages->eType == BikePower::SensorType::TORQUE_CRANK)
- bSeenCrankTorque = TRUE;
- ulAcumTorqueEventCount = 0;
- ulAcumTicks = 0;
- usNoEventCount = 0;
- ulDistance100 = 0;
- ucPrevTorqueEventCount = ucCurTorqueEventCount;
- ucPrevTicks = ucCurTicks;
- usPrevPeriod2048 = usCurPeriod2048;
- usPrevTorque32 = usCurTorque32;
- }
-
- UCHAR ucTorqueEventDiff = GetDifference(ucCurTorqueEventCount, ucPrevTorqueEventCount);
- UCHAR ucTicksDiff = GetDifference(ucCurTicks, ucPrevTicks);
- USHORT usPeriodDiff = GetDifference(usCurPeriod2048, usPrevPeriod2048);
- USHORT usTorqueDiff = GetDifference(usCurTorque32, usPrevTorque32);
-
- ucPrevTorqueEventCount =ucCurTorqueEventCount;
- ucPrevTicks = ucCurTicks;
- usPrevPeriod2048 = usCurPeriod2048;
- usPrevTorque32 = usCurTorque32;
-
- ulAcumTorqueEventCount += ucTorqueEventDiff;
- ulAcumTicks += ucTicksDiff;
-
- if(ucTorqueEventDiff)
- {
- usNoEventCount = 0;
- if(usPeriodDiff)
- {
- if(bpPages->eType == BikePower::SensorType::TORQUE_WHEEL)
- {
- bStopped = FALSE;
- ulSpeed = ((ULONG) 3600 * 2048 * ucWheelCircumference100 * ucTorqueEventDiff)/((ULONG) 100 * usPeriodDiff);
- }
- else
- {
- bCoasting = FALSE;
- ulAverageCadence = ((ULONG) 60 * 2048 * ucTorqueEventDiff)/(ULONG) usPeriodDiff;
- }
- ulAngularVelocity256 = ((ULONG) 2 * 2048 * PI256 * ucTorqueEventDiff)/(ULONG) usPeriodDiff;
- }
- else
- {
- if(bpPages->eType == BikePower::SensorType::TORQUE_WHEEL)
- {
- bStopped = TRUE;
- ulSpeed = 0;
- }
- else
- {
- bCoasting = TRUE;
- ulAverageCadence = 0;
- }
- ulAngularVelocity256 = 0;
- }
- ulAverageTorque32 = (ULONG) usTorqueDiff/(ULONG) ucTorqueEventDiff;
- ulAveragePower256 = (ulAverageTorque32 * ulAngularVelocity256)/32;
- if(bpPages->eType == BikePower::SensorType::TORQUE_WHEEL)
- {
- ulDistance100 += (ULONG) ucWheelCircumference100 * ucTicksDiff;
- if(usTorqueDiff)
- bCoasting = FALSE;
- else
- bCoasting = TRUE;
- }
- }
- else
- {
- usNoEventCount++;
- if(usNoEventCount >= BikePower::MAX_NOEVENT)
- {
- if(bpPages->eType == BikePower::SensorType::TORQUE_WHEEL)
- {
- bStopped = TRUE;
- ulSpeed = 0;
- }
- else
- {
- bCoasting = TRUE;
- ulAverageCadence = 0;
-
- }
- ulAngularVelocity256 = 0;
- }
- }
- break;
- }
- case BikePower::PAGE_CTF:
- {
- if(!bSeenCTF)
- {
- bSeenCTF = TRUE;
- ulAcumCTFEventCount = 0;
- usNoEventCount = 0;
- ucPrevCTFEventCount = bpPages->ucCTFEventCount;
- usPrevTime2000 = bpPages->usTime2000;
- usPrevCTFTicks = bpPages->usTorqueTicks;
- }
-
- UCHAR ucCTFEventDiff = GetDifference(bpPages->ucCTFEventCount, ucPrevCTFEventCount);
- USHORT usTimeDiff = GetDifference(bpPages->usTime2000, usPrevTime2000);
- USHORT usCTFTicksDiff = GetDifference(bpPages->usTorqueTicks, usPrevCTFTicks);
-
- ucPrevCTFEventCount = bpPages->ucCTFEventCount;
- usPrevTime2000 = bpPages->usTime2000;
- usPrevCTFTicks = bpPages->usTorqueTicks;
-
- ulAcumCTFEventCount += ucCTFEventDiff;
-
-
- if(ucCTFEventDiff)
- {
- usNoEventCount = 0;
- bCoasting = FALSE;
- if(usTimeDiff)
- {
- ulAverageCadence = ((ULONG) 60 * 2000 * ucCTFEventDiff)/(ULONG) usTimeDiff;
- if(!bpPages->IsSlopeInvalid(bpPages->usSlope10))
- {
- ulAverageTorque32 = ((((ULONG) 32 * 10 * 2000 * usCTFTicksDiff)/usTimeDiff) - (32 * 10 * usCTFOffset))/(ULONG)bpPages->usSlope10;
- ulAveragePower256 = (ULONG) (PI256 * ulAverageTorque32 * ulAverageCadence)/(30*32);
- if(ulAverageTorque32)
- ulAngularVelocity256 = ((ULONG) 32 * ulAveragePower256)/ulAverageTorque32;
- }
- }
- }
- else
- {
- usNoEventCount++;
- if(usNoEventCount >= BikePower::MAX_NOEVENT)
- {
- bCoasting = TRUE;
- ulAverageCadence = 0;
- ulAveragePower256 = 0;
- }
- }
- break;
- }
- case BikePower::PAGE_CALIBRATION:
-
- if(bpPages->ucRxCalibrationID == BikePower::CAL_CTF && bpPages->ucRxCTFMsgID == BikePower::CTF_OFFSET)
- {
- if(!bpPages->IsOffsetInvalid(bpPages->usCalOffset))
- usCTFOffset = bpPages->usCalOffset;
- }
- break;
- default:
- break;
- }
- UpdateDisplay(ucPageNum);
- ePrevType = bpPages->eType;
- }
- BOOL BikePowerDisplay::HandleRetransmit()
- {
- BOOL bSuccess = TRUE;
- if(ucMsgExpectingAck)
- {
- if(ucAckRetryCount++ < MAX_RETRIES)
- {
- SendMessage(ucMsgExpectingAck);
- }
- else
- bSuccess = FALSE;
- }
-
- return bSuccess;
- }
- void BikePowerDisplay::UpdateDisplay(UCHAR ucPageNum_)
- {
-
- switch(ucPageNum_)
- {
- case BikePower::PAGE_POWER:
- this->label_Trn_PageDisplay->Text = "BAS";
- this->label_Trn_UpdateCountDisplay->Text = bpPages->ucPowEventCount.ToString();
- if(bpPages->IsCadenceInvalid(bpPages->ucCadence))
- this->label_Trn_CadenceDisplay->Text = "Off";
- else
- this->label_Trn_CadenceDisplay->Text = bpPages->ucCadence.ToString();
-
- if(bpPages->ucPedalPower != BikePower::RESERVED)
- {
- UCHAR ucTemp = 0x00;
- ucTemp = ((bpPages->ucPedalPower) & 0x7F);
- if(ucTemp >= 0x65)
- {
- this->label_Trn_PedalDisplay->Text = "---";
- this->label_Trn_PedalPwrDisplay->Text = "Invalid";
- }
- else
- {
- if((bpPages->ucPedalPower) & 0x80)
- this->label_Trn_PedalDisplay->Text = "Right";
- else
- this->label_Trn_PedalDisplay->Text = "Unknown";
- this->label_Trn_PedalPwrDisplay->Text = ucTemp.ToString();
- }
- }
- else
- {
- this->label_Trn_PedalDisplay->Text = "---";
- this->label_Trn_PedalPwrDisplay->Text = "Off";
- }
-
- this->label_Trn_AccumPowerDisplay->Text = bpPages->usAcumPower.ToString();
- this->label_Trn_InstPowerDisplay->Text = bpPages->usPower.ToString();
- this->label_Dat_InstCadenceDisplay->Text = this->label_Trn_CadenceDisplay->Text;
- this->label_Dat_InstPowerDisplay->Text = bpPages->usPower.ToString();
- this->label_Dat_PedalPwrDisplay->Text = this->label_Trn_PedalPwrDisplay->Text;
- this->label_Dat_PedalDisplay->Text = this->label_Trn_PedalDisplay->Text;
- break;
- case BikePower::PAGE_WHEEL_TORQUE:
- this->label_Trn_PageDisplay->Text = "WHL";
- this->label_Trn_UpdateCountDisplay->Text = bpPages->ucWTEventCount.ToString();
- this->label_Trn_EventCountDisplay->Text = bpPages->ucWheelTicks.ToString();
- if(bpPages->IsCadenceInvalid(bpPages->ucCadence))
- this->label_Trn_CadenceDisplay->Text = "Off";
- else
- this->label_Trn_CadenceDisplay->Text = bpPages->ucCadence.ToString();
- this->label_Dat_InstCadenceDisplay->Text = this->label_Trn_CadenceDisplay->Text;
- this->label_Trn_AccumOneDisplay->Text = bpPages->usAcumWheelPeriod2048.ToString();
- this->label_Trn_AccumTwoDisplay->Text = bpPages->usAcumTorque32.ToString();
- break;
- case BikePower::PAGE_CRANK_TORQUE:
- this->label_Trn_PageDisplay->Text = "CRK";
- this->label_Trn_UpdateCountDisplay->Text = bpPages->ucCTEventCount.ToString();
- this->label_Trn_EventCountDisplay->Text = bpPages->ucCrankTicks.ToString();
- if(bpPages->IsCadenceInvalid(bpPages->ucCadence))
- this->label_Trn_CadenceDisplay->Text = "Off";
- else
- this->label_Trn_CadenceDisplay->Text = bpPages->ucCadence.ToString();
- this->label_Dat_InstCadenceDisplay->Text = this->label_Trn_CadenceDisplay->Text;
- this->label_Trn_AccumOneDisplay->Text = bpPages->usAcumCrankPeriod2048.ToString();
- this->label_Trn_AccumTwoDisplay->Text = (bpPages->usAcumTorque32).ToString();
- break;
- case BikePower::PAGE_TEPS:
- {
- if(bpPages->ucLeftTorqueEffectiveness == bpPages->INVALID_TEPS)
- label_LeftTorqueEffectiveness->Text = "INVALID";
- else
- label_LeftTorqueEffectiveness->Text = (bpPages->ucLeftTorqueEffectiveness / 2.0).ToString();
- if(bpPages->ucRightTorqueEffectiveness == bpPages->INVALID_TEPS)
- label_RightTorqueEffectiveness->Text = "INVALID";
- else
- label_RightTorqueEffectiveness->Text = (bpPages->ucRightTorqueEffectiveness / 2.0).ToString();
- if(bpPages->ucLeftPedalSmoothness == bpPages->INVALID_TEPS)
- label_LeftPedalSmoothness->Text = "INVALID";
- else
- label_LeftPedalSmoothness->Text = (bpPages->ucLeftPedalSmoothness / 2.0).ToString();
- if(bpPages->ucRightPedalSmoothness == bpPages->INVALID_TEPS)
- label_RightPedalSmoothness->Text = "INVALID";
- else if(bpPages->ucRightPedalSmoothness == bpPages->COMBINED_PEDAL_SMOOTHNESS)
- label_RightPedalSmoothness->Text = "COMBINED PEDAL SMOOTHNESS";
- else
- label_RightPedalSmoothness->Text = (bpPages->ucRightPedalSmoothness / 2.0).ToString();
- break;
- }
- case BikePower::PAGE_CTF:
- this->label_Trn_PageDisplay->Text = "CTF";
- this->label_Trn_UpdateCountDisplay->Text = bpPages->ucCTFEventCount.ToString();
- this->label_Trn_SlopeDisplay->Text = bpPages->usSlope10.ToString();
- this->label_Trn_AccumOneDisplay->Text = bpPages->usTime2000.ToString();
- this->label_Trn_AccumTwoDisplay->Text = bpPages->usTorqueTicks.ToString();
- if(bpPages->IsSlopeInvalid(bpPages->usSlope10))
- this->label_Dat_SlopeDisplay->Text = "---";
- else
- this->label_Dat_SlopeDisplay->Text = ((double)bpPages->usSlope10/10).ToString();
- break;
- case BikePower::PAGE_CALIBRATION:
- this->label_Cal_StatusDisplay->ForeColor = System::Drawing::Color::Green;
- if(bBadCalPage)
- {
- this->label_Cal_StatusDisplay->ForeColor = System::Drawing::Color::Red;
- this->label_Cal_StatusDisplay->Text = "xPAG";
- }
- switch(bpPages->ucRxCalibrationID)
- {
- case BikePower::CAL_SUCCESS:
- case BikePower::CAL_FAIL:
- if(!bAutoZeroInvalid)
- {
- this->button_Cal_AutoZeroSet->Enabled = (bpPages->bAutoZeroEnable == TRUE);
- this->radioButton_Cal_AZoff->Enabled = (bpPages->bAutoZeroEnable == TRUE);
- this->radioButton_Cal_AZon->Enabled = (bpPages->bAutoZeroEnable == TRUE);
- if(!bpPages->bAutoZeroEnable)
- this->listBox_Cal_AZStatus->SelectedIndex = 2;
- else
- this->listBox_Cal_AZStatus->SelectedIndex = (UCHAR) bpPages->bAutoZeroOn;
- }
- this->label_Cal_CalNumberDisplay->Text = bpPages->sCalibrationData.ToString();
- if(bpPages->ucRxCalibrationID == BikePower::CAL_SUCCESS)
- {
- this->label_Cal_StatusDisplay->Text = "+CAL";
- this->label_Cal_StatusDisplay->ForeColor = System::Drawing::Color::Green;
- }
- else
- {
- this->label_Cal_StatusDisplay->Text = "xCAL";
- this->label_Cal_StatusDisplay->ForeColor = System::Drawing::Color::Red;
- }
- break;
- case BikePower::CAL_TORQUE_METER_CAPABILITIES:
- this->button_Cal_AutoZeroSet->Enabled = (bpPages->bAutoZeroEnable == TRUE);
- this->radioButton_Cal_AZoff->Enabled = (bpPages->bAutoZeroEnable == TRUE);
- this->radioButton_Cal_AZon->Enabled = (bpPages->bAutoZeroEnable == TRUE);
- if(!bpPages->bAutoZeroEnable)
- this->listBox_Cal_AZStatus->SelectedIndex = 2;
- else
- this->listBox_Cal_AZStatus->SelectedIndex = (UCHAR) bpPages->bAutoZeroOn;
- if(bpPages->IsRawTorqueInvalid(bpPages->sRawTorque))
- this->label_Cal_RawTorqueDisplay->Text = "---";
- else
- this->label_Cal_RawTorqueDisplay->Text = bpPages->sRawTorque.ToString();
- if(bpPages->IsOffsetTorqueInvalid(bpPages->sOffsetTorque))
- this->label_Cal_OffsetTorqueDisplay->Text = "---";
- else
- this->label_Cal_OffsetTorqueDisplay->Text = bpPages->sOffsetTorque.ToString();
- break;
- case BikePower::CAL_CTF:
- if(bpPages->ucRxCTFMsgID == BikePower::CTF_OFFSET)
- {
- this->label_Cal_CalNumberDisplay->Text = bpPages->usCalOffset.ToString();
- if(!bpPages->usCalOffset)
- {
- this->label_Cal_StatusDisplay->ForeColor = System::Drawing::Color::Yellow;
- this->label_Cal_StatusDisplay->Text = "ZERO";
- }
- else if(bpPages->IsOffsetInvalid(bpPages->usCalOffset))
- {
- this->label_Cal_StatusDisplay->ForeColor = System::Drawing::Color::Red;
- this->label_Cal_StatusDisplay->Text = "xOFS";
- }
- else
- {
- this->label_Dat_CTFOffsetDisplay->Text = usCTFOffset.ToString();
- this->label_Cal_StatusDisplay->Text = "+OFS";
- }
- }
- if(bpPages->ucRxCTFMsgID == BikePower::CTF_ACK)
- {
- if(bpPages->ucRxCTFMsgID == BikePower::CTF_SLOPE)
- this->label_Cal_StatusDisplay->Text = "+SLP";
- if(bpPages->ucRxCTFMsgID == BikePower::CTF_SERIAL)
- this->label_Cal_StatusDisplay->Text = "+SRL";
- }
- break;
- default:
- break;
- }
- break;
- case CommonData::PAGE80:
- this->label_Glb_HardwareVerDisplay->Text = commonPages->ucHwVersion.ToString();
- this->label_Glb_ManfIDDisplay->Text = commonPages->usMfgID.ToString();
- this->label_Glb_ModelNumDisplay->Text = commonPages->usModelNum.ToString();
- break;
- case CommonData::PAGE81:
- this->label_Glb_SoftwareVerDisplay->Text = commonPages->ucSwVersion.ToString();
- if(commonPages->ulSerialNum != 0xFFFFFFFF)
- this->label_Glb_SerialNumDisplay->Text = commonPages->ulSerialNum.ToString();
- else
- this->label_Glb_SerialNumDisplay->Text = "N/A";
- break;
- case CommonData::PAGE82:
- if(commonPages->IsBatteryVoltageInvalid(commonPages->usBatVoltage256))
- this->label_Bat_VoltsDisplay->Text = "Invalid Voltage";
- else
- this->label_Bat_VoltsDisplay->Text = System::Math::Round((double)commonPages->usBatVoltage256/256,4).ToString();
- if(commonPages->IsBatteryStatusInvalid(commonPages->eBatStatus))
- this->listBox_Bat_Status->SelectedIndex = this->listBox_Bat_Status->Items->Count - 1;
- else
- this->listBox_Bat_Status->SelectedIndex = (UCHAR) (commonPages->eBatStatus) - 1;
- this->label_Bat_ElpTimeDisplay->Text = ((ULONG) (commonPages->ulOpTime & CommonData::OPERATING_TIME_MASK) * (UCHAR) commonPages->eTimeResolution).ToString();
- this->label_Bat_SecPrecis->Text = System::String::Concat(((UCHAR)commonPages->eTimeResolution).ToString(), " Sec Precision");
- break;
- default:
- break;
- }
-
-
- if(ePrevType == bpPages->eType)
- {
- switch(bpPages->eType)
- {
- case BikePower::SensorType::POWER_ONLY:
- this->label_Dat_Coasting->Visible = (bCoasting == TRUE);
- this->label_Dat_Stopped->Visible = (bStopped == TRUE);
- this->label_Dat_CalcPowerDisplay->Text = System::Math::Round((double)ulAveragePower256/256,2).ToString();
- this->label_Dat_UpdateCountDisplay->Text = ulAcumPowerEventCount.ToString();
- break;
- case BikePower::SensorType::TORQUE_WHEEL:
- case BikePower::SensorType::TORQUE_CRANK:
- this->label_Dat_Coasting->Visible = (bCoasting == TRUE);
- this->label_Dat_Stopped->Visible = (bStopped == TRUE);
- this->label_Dat_CalcPowerDisplay->Text = System::Math::Round((double) ulAveragePower256/256,2).ToString();
- this->label_Dat_UpdateCountDisplay->Text = ulAcumTorqueEventCount.ToString();
- this->label_Dat_EventCountDisplay->Text = ulAcumTicks.ToString();
- this->label_Dat_AngVelDisplay->Text = System::Math::Round((double) ulAngularVelocity256/256,2).ToString();
- this->label_Dat_TorqueDisplay->Text = System::Math::Round((double) ulAverageTorque32/32,2).ToString();
- if(bpPages->eType == BikePower::SensorType::TORQUE_WHEEL)
- {
- this->label_Dat_SpeedDisplay->Text = System::Math::Round((double)ulSpeed/1000,2).ToString();
- this->label_Dat_DistDisplay->Text = System::Math::Round((double)ulDistance100/100,2).ToString();
- }
- else
- {
- this->label_Dat_CalcRPMDisplay->Text = System::Math::Round(ulAverageCadence,2).ToString();
- }
- break;
- case BikePower::SensorType::CRANK_TORQUE_FREQ:
- if(ucPageNum_ == BikePower::PAGE_CALIBRATION && bpPages->ucRxCTFMsgID == BikePower::CTF_OFFSET)
- {
-
- this->label_Dat_CalcPowerDisplay->Text = "---";
- this->label_Dat_UpdateCountDisplay->Text = "---";
- this->label_Dat_AngVelDisplay->Text = "---";
- this->label_Dat_TorqueDisplay->Text = "---";
- this->label_Dat_CalcRPMDisplay->Text = "---";
- }
- else
- {
- this->label_Dat_Coasting->Visible = (bCoasting == TRUE);
- this->label_Dat_Stopped->Visible = (bStopped == TRUE);
- this->label_Dat_CalcPowerDisplay->Text = System::Math::Round((double)ulAveragePower256/256,2).ToString();
- this->label_Dat_UpdateCountDisplay->Text = ulAcumCTFEventCount.ToString();
- this->label_Dat_AngVelDisplay->Text = System::Math::Round((double)ulAngularVelocity256/256,2).ToString();
- this->label_Dat_TorqueDisplay->Text = System::Math::Round((double)ulAverageTorque32/32,2).ToString();
- this->label_Dat_CalcRPMDisplay->Text = ulAverageCadence.ToString();
- }
- break;
- default:
- break;
- }
- }
- }
- void BikePowerDisplay::UpdateDisplayAckStatus(UCHAR ucStatus_)
- {
- switch(ucStatus_)
- {
- case ACK_SUCCESS:
- this->label_Cal_StatusDisplay->ForeColor = System::Drawing::Color::Green;
- this->label_Cal_StatusDisplay->Text = "SENT";
- break;
- case ACK_RETRY:
- this->label_Cal_StatusDisplay->ForeColor = System::Drawing::Color::Blue;
- this->label_Cal_StatusDisplay->Text = "RTRY";
- break;
- case ACK_FAIL:
- this->label_Cal_StatusDisplay->ForeColor = System::Drawing::Color::Red;
- this->label_Cal_StatusDisplay->Text = "xSNT";
- break;
- default:
- break;
- }
- }
- void BikePowerDisplay::ChangeSensorType()
- {
- switch(bpPages->eType)
- {
- case BikePower::SensorType::POWER_ONLY:
- this->label_Dat_PageRecDisplay->Text = "Power Only Sensor";
- this->label_Trn_EventCountDisplay->Text = "---";
- this->label_Trn_AccumOneDisplay->Text = "---";
- this->label_Trn_AccumTwoDisplay->Text = "---";
- this->label_Trn_Slope->Visible = false;
- this->label_Trn_SlopeDisplay->Visible = false;
- this->label_Dat_SlopeDisplay->Text = "---";
- this->label_Dat_AngVelDisplay->Text = "---";
- this->label_Dat_TorqueDisplay->Text = "---";
- this->label_Dat_CalcRPMDisplay->Text = "---";
- this->label_Dat_SpeedDisplay->Text = "---";
- this->label_Dat_DistDisplay->Text = "---";
- this->label_Dat_CTFOffsetDisplay->Text = "---";
- this->numericUpDown_Cal_CTFSlope->Enabled = false;
- this->numericUpDown_Cal_CTFSerial->Enabled = false;
- this->button_Cal_CTFSerialSet->Enabled = false;
- this->button_Cal_CTFSlopeSet->Enabled = false;
- break;
- case BikePower::SensorType::TORQUE_WHEEL:
- this->label_Dat_PageRecDisplay->Text = "Wheel Torque Sensor";
- this->label_Trn_AccumOne->Text = "Wheel P:";
- this->label_Trn_Slope->Visible = false;
- this->label_Trn_SlopeDisplay->Visible = false;
- this->label_Trn_InstPowerDisplay->Text = "---";
- this->label_Trn_AccumPowerDisplay->Text = "---";
- this->label_Dat_InstPowerDisplay->Text = "---";
- this->label_Dat_CTFOffsetDisplay->Text = "---";
- this->label_Dat_SlopeDisplay->Text = "---";
- this->numericUpDown_Cal_CTFSlope->Enabled = false;
- this->numericUpDown_Cal_CTFSerial->Enabled = false;
- this->button_Cal_CTFSerialSet->Enabled = false;
- this->button_Cal_CTFSlopeSet->Enabled = false;
- break;
- case BikePower::SensorType::TORQUE_CRANK:
- this->label_Dat_PageRecDisplay->Text = "Crank Torque Sensor";
- this->label_Trn_AccumOne->Text = "Crank P:";
- this->label_Trn_Slope->Visible = false;
- this->label_Trn_SlopeDisplay->Visible = false;
- this->label_Trn_InstPowerDisplay->Text = "---";
- this->label_Trn_AccumPowerDisplay->Text = "---";
- this->label_Dat_SlopeDisplay->Text = "---";
- this->label_Dat_SpeedDisplay->Text = "---";
- this->label_Dat_DistDisplay->Text = "---";
- this->label_Dat_InstPowerDisplay->Text = "---";
- this->label_Dat_CTFOffsetDisplay->Text = "---";
- this->numericUpDown_Cal_CTFSlope->Enabled = false;
- this->numericUpDown_Cal_CTFSerial->Enabled = false;
- this->button_Cal_CTFSerialSet->Enabled = false;
- this->button_Cal_CTFSlopeSet->Enabled = false;
- break;
- case BikePower::SensorType::CRANK_TORQUE_FREQ:
- this->label_Dat_PageRecDisplay->Text = "Crank Torque Frequency Sensor";
- this->label_Trn_AccumOne->Text = " Time:";
- this->label_Trn_EventCountDisplay->Text = "---";
- this->label_Trn_Slope->Visible = true;
- this->label_Trn_SlopeDisplay->Visible = true;
- this->label_Trn_InstPowerDisplay->Text = "---";
- this->label_Trn_AccumPowerDisplay->Text = "---";
- this->label_Trn_CadenceDisplay->Text = "---";
- this->label_Trn_PedalDisplay->Text = "---";
- this->label_Trn_PedalPwrDisplay->Text = "---";
- this->label_Dat_SpeedDisplay->Text = "---";
- this->label_Dat_DistDisplay->Text = "---";
- this->label_Dat_InstPowerDisplay->Text = "---";
- this->label_Dat_InstCadenceDisplay->Text = "---";
- this->label_Dat_CTFOffsetDisplay->Text = "Unknown";
- this->numericUpDown_Cal_CTFSlope->Enabled = true;
- this->numericUpDown_Cal_CTFSerial->Enabled = true;
- this->button_Cal_CTFSerialSet->Enabled = true;
- this->button_Cal_CTFSlopeSet->Enabled = true;
- this->button_Cal_AutoZeroSet->Enabled = false;
- this->radioButton_Cal_AZoff->Enabled = false;
- this->radioButton_Cal_AZon->Enabled = false;
- this->listBox_Cal_AZStatus->SelectedIndex = -1;
- break;
- case BikePower::SensorType::UNKNOWN:
- this->label_Dat_PageRecDisplay->Text = "Updating...";
- this->label_Trn_EventCountDisplay->Text = "---";
- this->label_Trn_AccumOneDisplay->Text = "---";
- this->label_Trn_AccumTwoDisplay->Text = "---";
- this->label_Trn_Slope->Visible = false;
- this->label_Trn_SlopeDisplay->Visible = false;
- this->label_Dat_SlopeDisplay->Text = "---";
- this->label_Dat_AngVelDisplay->Text = "---";
- this->label_Dat_TorqueDisplay->Text = "---";
- this->label_Dat_CalcRPMDisplay->Text = "---";
- this->label_Dat_SpeedDisplay->Text = "---";
- this->label_Dat_DistDisplay->Text = "---";
- this->label_Dat_CTFOffsetDisplay->Text = "---";
- this->numericUpDown_Cal_CTFSlope->Enabled = false;
- this->numericUpDown_Cal_CTFSerial->Enabled = false;
- this->button_Cal_CTFSerialSet->Enabled = false;
- this->button_Cal_CTFSlopeSet->Enabled = false;
- break;
- default:
- break;
- }
- }
- System::Void BikePowerDisplay::button_Cal_Calibrate_Click(System::Object^ sender, System::EventArgs^ e)
- {
- bRequestCalibration = true;
- SendMessage(BikePower::CAL_REQUEST);
- }
- System::Void BikePowerDisplay::button_Cal_AutoZeroSet_Click(System::Object^ sender, System::EventArgs^ e)
- {
- bRequestCalibration = true;
- SendMessage(BikePower::CAL_AUTOZERO_CONFIG);
- }
- System::Void BikePowerDisplay::button_Cal_CTFSerialSet_Click(System::Object^ sender, System::EventArgs^ e)
- {
- bRequestCalibration = true;
- SendMessage(BikePower::CTF_SERIAL);
- }
- System::Void BikePowerDisplay::button_Cal_CTFSlopeSet_Click(System::Object^ sender, System::EventArgs^ e)
- {
- bRequestCalibration = true;
- SendMessage(BikePower::CTF_SLOPE);
- }
- System::Void BikePowerDisplay::numericUpDown_Cal_WheelCircum_ValueChanged(System::Object^ sender, System::EventArgs^ e)
- {
- ucWheelCircumference100 = System::Convert::ToByte(this->numericUpDown_Cal_WheelCircum->Value);
- }
- System::Void BikePowerDisplay::radioButton_Cal_AZ_CheckedChanged(System::Object^ sender, System::EventArgs^ e)
- {
- bAZOn = (BOOL) this->radioButton_Cal_AZon->Checked;
- }
- System::Void BikePowerDisplay::numericUpDown_Cal_CTFSerial_ValueChanged(System::Object^ sender, System::EventArgs^ e)
- {
- usCalSerialToSend = System::Convert::ToUInt16(this->numericUpDown_Cal_CTFSerial->Value);
- }
- System::Void BikePowerDisplay::numericUpDown_Cal_CTFSlope_ValueChanged(System::Object^ sender, System::EventArgs^ e)
- {
- usCalSlopeToSend = System::Convert::ToUInt16(10*(this->numericUpDown_Cal_CTFSlope->Value));
- }
- System::Void BikePowerDisplay::button_SetCrankStatus_Click(System::Object ^sender, System::EventArgs ^e)
- {
- bpPages->ucSubpageNumber = BikePower::SUBPAGE_CRANK_PARAMETERS;
- if(checkBox_InvalidCrankLength->Checked)
- bpPages->ucCrankLength = 0xFF;
- else if(checkBox_AutoCrank->Checked)
- bpPages->ucCrankLength = 0xFE;
- else
- bpPages->ucCrankLength = (UCHAR)(((float)numericUpDown_CrankLength->Value - (float)110.0) / (float)0.5);
-
- bpPages->ucSensorStatus = 0x00;
- bpPages->ucSensorCapabilities = 0x00;
- bRequestCalibration = false;
- SendMessage(bpPages->PAGE_GET_SET_PARAMETERS);
- }
- System::Void BikePowerDisplay::button_GetCrankStatus_Click(System::Object ^sender, System::EventArgs ^e)
- {
- commonPages->ucDescriptorByte1 = BikePower::SUBPAGE_CRANK_PARAMETERS;
- commonPages->ucDescriptorByte2 = 0xFF;
- commonPages->ucReqTransResp = System::Convert::ToByte(numericUpDown_TransResponse->Value);
- commonPages->ucReqPageNum = BikePower::PAGE_GET_SET_PARAMETERS;
- commonPages->ucCommandType = 0x01;
- bRequestCalibration = false;
- SendMessage(commonPages->PAGE70);
- }
- System::Void BikePowerDisplay::SendMessage(UCHAR ucMsgCode_)
- {
- UCHAR aucAckBuffer[8] = {0,0,0,0,0,0,0,0};
-
- if(bRequestCalibration)
- {
- switch(ucMsgCode_)
- {
- case BikePower::CAL_REQUEST:
- bpPages->EncodeManualCalibrationRequest(aucAckBuffer);
- break;
- case BikePower::CAL_AUTOZERO_CONFIG:
- bpPages->EncodeAZCalibrationRequest(TRUE, bAZOn, aucAckBuffer);
- break;
- case BikePower::CTF_SLOPE:
- bpPages->EncodeCTFCalibrationPage(ucMsgCode_, usCalSlopeToSend, aucAckBuffer);
- break;
- case BikePower::CTF_SERIAL:
- bpPages->EncodeCTFCalibrationPage(ucMsgCode_, usCalSerialToSend, aucAckBuffer);
- break;
- default:
- break;
- }
- }
-
- else
- {
- switch(ucMsgCode_)
- {
- case BikePower::PAGE_GET_SET_PARAMETERS:
- bpPages->EncodeMainData(ucMsgCode_, aucAckBuffer);
- break;
- case CommonData::PAGE70:
- commonPages->Encode(commonPages->PAGE70, aucAckBuffer);
- break;
- default:
- return;
- }
- }
- if(!ucMsgExpectingAck)
- {
- ucAckRetryCount = 0;
- ucMsgExpectingAck = ucMsgCode_;
- }
- requestAckMsg(aucAckBuffer);
- }
- template< typename T>
- T BikePowerDisplay::GetDifference(T CurrentVal_, T PreviousVal_)
- {
- T MaxVal = (T) 0xFFFFFF;
- T Diff = CurrentVal_ - PreviousVal_;
- if(PreviousVal_ > CurrentVal_)
- Diff = MaxVal + Diff + 1;
- return Diff;
- }
- void BikePowerDisplay::checkBox_InvalidCrankLength_CheckedChanged(System::Object ^sender, System::EventArgs ^e)
- {
- if(checkBox_InvalidCrankLength->Checked)
- {
- checkBox_AutoCrank->Checked = false;
- numericUpDown_CrankLength->Enabled = false;
- }
- else
- {
- numericUpDown_CrankLength->Enabled = true;
- }
- }
- void BikePowerDisplay::checkBox_AutoCrank_CheckedChanged(System::Object ^sender, System::EventArgs ^e)
- {
- if(checkBox_AutoCrank->Checked)
- {
- checkBox_InvalidCrankLength->Checked = false;
- numericUpDown_CrankLength->Enabled = false;
- }
- else
- numericUpDown_CrankLength->Enabled = true;
- }
|