123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600 |
- #include "StdAfx.h"
- #include "SDMDisplay.h"
- void SDMDisplay::ANT_eventNotification(UCHAR ucEventCode_, UCHAR* pucEventBuffer_)
- {
- switch(ucEventCode_)
- {
- case EVENT_RX_ACKNOWLEDGED:
- case EVENT_RX_BURST_PACKET:
- case EVENT_RX_BROADCAST:
- 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 SDMDisplay::InitializeSim()
- {
- ucLatency32 = 0;
- usSpeed256 = 0;
- usCadence16 = 0;
- sStatusFlags.ucBatteryStatus = 0;
- sStatusFlags.ucHealth = 0;
- sStatusFlags.ucLocation = 0;
- sStatusFlags.ucUseState = 0;
- ucStrideCount = 0;
- usTime200 = 0;
- usDistance16 = 0;
- ucCalCount = 0;
- ulAcumStrideCount = 0;
- ulAcumDistance16 = 0;
- ulAcumTime200 = 0;
- ulAcumCalCount = 0;
- ucMsgExpectingAck = 0;
- ucCapabFlags = 0;
- ucRqTxTimes = System::Convert::ToByte(this->numericUpDown_RqTxTimes->Value);
- bRqAckReply = FALSE;
- bRqTxUntilAck = FALSE;
- bInitialized = FALSE;
- bCalInitialized = FALSE;
- }
- void SDMDisplay::HandleReceive(UCHAR* pucRxBuffer_)
- {
- UCHAR ucPageNum = pucRxBuffer_[0];
- ULONG ulTempHolder = 0;
-
- switch(ucPageNum)
- {
- case SDM_PAGE1:
- usTime200 = pucRxBuffer_[1];
- usTime200 += pucRxBuffer_[2] * 200;
- usDistance16 = pucRxBuffer_[3] << 4;
- usDistance16 |= (pucRxBuffer_[4] & 0xF0) >> 4;
- usSpeed256 = (pucRxBuffer_[4] & 0x0F) << 8;
- usSpeed256 |= pucRxBuffer_[5];
- ucStrideCount = pucRxBuffer_[6];
- ucLatency32 = pucRxBuffer_[7];
- if(!bInitialized)
- {
- ucPreviousStrideCount = ucStrideCount;
- usPreviousDistance16 = usDistance16;
- usPreviousTime200 = usTime200;
- bInitialized = TRUE;
- }
- break;
- case SDM_PAGE2:
- case SDM_PAGE3:
- case SDM_PAGE4:
- case SDM_PAGE5:
- case SDM_PAGE6:
- case SDM_PAGE7:
- case SDM_PAGE8:
- case SDM_PAGE9:
- case SDM_PAGE10:
- case SDM_PAGE11:
- case SDM_PAGE12:
- case SDM_PAGE13:
- case SDM_PAGE14:
- case SDM_PAGE15:
- usCadence16 = pucRxBuffer_[3] << 4;
- usCadence16 |= (pucRxBuffer_[4] & 0xF0) >>4;
- usSpeed256 = (pucRxBuffer_[4] & 0x0F) << 8;
- usSpeed256 |= pucRxBuffer_[5];
- sStatusFlags.ucLocation = (pucRxBuffer_[7] & SDM_LOCATION_MASK) >> SDM_LOCATION_SHIFT;
- sStatusFlags.ucBatteryStatus = (pucRxBuffer_[7] & SDM_BAT_MASK) >> SDM_BAT_SHIFT;
- sStatusFlags.ucHealth = (pucRxBuffer_[7] & SDM_HEALTH_MASK) >> SDM_HEALTH_SHIFT;
- sStatusFlags.ucUseState = (pucRxBuffer_[7] & SDM_STATE_MASK) >> SDM_STATE_SHIFT;
-
-
- if (ucPageNum == SDM_PAGE3)
- ucCalCount = pucRxBuffer_[6];
- if(!bCalInitialized)
- {
- ucPreviousCalCount = ucCalCount;
- bCalInitialized = TRUE;
- }
- break;
- case SDM_PAGE16:
- ulStridesAccum = pucRxBuffer_[1];
- ulTempHolder = pucRxBuffer_[2] & 0xFF;
- ulStridesAccum = ulStridesAccum | (ulTempHolder << 8);
- ulTempHolder = pucRxBuffer_[3] & 0xFF;
- ulStridesAccum = ulStridesAccum | (ulTempHolder << 16);
- ulDistanceAccum = pucRxBuffer_[4];
- ulTempHolder = pucRxBuffer_[5] & 0xFF;
- ulDistanceAccum = ulDistanceAccum | (ulTempHolder << 8);
- ulTempHolder = pucRxBuffer_[6] & 0xFF;
- ulDistanceAccum = ulDistanceAccum | (ulTempHolder << 16);
- ulTempHolder = pucRxBuffer_[7] & 0xFF;
- ulDistanceAccum = ulDistanceAccum | (ulTempHolder << 24);
- break;
- case SDM_PAGE22:
- ucCapabFlags = pucRxBuffer_[1];
- break;
- case CommonData::PAGE80:
- case CommonData::PAGE81:
- try
- {
- commonPages->Decode(pucRxBuffer_);
- }
- catch(CommonData::Error^ errorCommon)
- {
- }
- break;
- default:
- break;
- }
-
- if(ucStrideCount != ucPreviousStrideCount)
- {
-
- if(ucStrideCount > ucPreviousStrideCount)
- ulAcumStrideCount += (ucStrideCount - ucPreviousStrideCount);
- else
- ulAcumStrideCount += (UCHAR) (0xFF - ucPreviousStrideCount + ucStrideCount + 1);
-
- if(usTime200 > usPreviousTime200)
- ulAcumTime200 += (usTime200 - usPreviousTime200);
- else
- ulAcumTime200 += (USHORT) (0xFFFF - usPreviousTime200 + usTime200 + 1);
-
- if(usDistance16> usPreviousDistance16)
- ulAcumDistance16 += (usDistance16 - usPreviousDistance16);
- else
- ulAcumDistance16 += (0xFFF - usPreviousDistance16 + usDistance16 + 1) & 0x0FFF;
- ucPreviousStrideCount = ucStrideCount;
- usPreviousTime200 = usTime200;
- usPreviousDistance16 = usDistance16;
- }
-
-
- if (ucCalCount != ucPreviousCalCount)
- {
- if(ucCalCount > ucPreviousCalCount)
- ulAcumCalCount += (ucCalCount - ucPreviousCalCount);
- else
- ulAcumCalCount += (UCHAR) (0xFF - ucPreviousCalCount + ucCalCount + 1);
- ucPreviousCalCount = ucCalCount;
- }
- UpdateDisplay(ucPageNum);
- }
- void SDMDisplay::UpdateDisplay(UCHAR ucPageNum_)
- {
- switch(ucPageNum_)
- {
- case SDM_PAGE1:
-
- this->label_TransStrideCountDisplay->Text = ucStrideCount.ToString();
- this->label_P1StrideCountDisplay->Text = ulAcumStrideCount.ToString();
- if(usTime200)
- {
- this->label_Trn_EventTimeDisplay->Text = ((double)usTime200/200).ToString();
- this->label_Calc_TimeDisplay->Text = ((double) ulAcumTime200/200).ToString();
- }
- else
- {
- this->label_Trn_EventTimeDisplay->Text = "Off";
- }
- if(usDistance16)
- {
- this->label_TransDistDisplay->Text = ((double) usDistance16/16).ToString();
- this->label_P1TotDistDisplay->Text = System::Math::Round((double) ulAcumDistance16/16 , 4).ToString();
- }
- else
- {
- this->label_TransDistDisplay->Text = "Off";
- }
- if(usSpeed256)
- {
- this->label_TransInstSpeedDisplay->Text = ((double)usSpeed256/256).ToString();
- this->label_Calc_SpeedDisplay->Text = System::Math::Round((double)usSpeed256/256 , 3).ToString();
- this->label_Calc_PaceDisplay->Text = System::Math::Round((double) (256*1000/60)/usSpeed256 , 2).ToString();
- }
- else
- {
- this->label_TransInstSpeedDisplay->Text = "Off";
- }
- if(ulAcumTime200)
- this->label_Calc_AvgSpdDisplay->Text = System::Math::Round((double) 12.5 * ulAcumDistance16/ulAcumTime200 , 3).ToString();
- else
- this->label_Calc_AvgSpdDisplay->Text = "Off";
- if(ucLatency32)
- this->label_TransLatencyDisplay->Text = ((double) 1000 * ucLatency32/32).ToString();
- else
- this->label_TransLatencyDisplay->Text = "Off";
- break;
- case SDM_PAGE2:
- case SDM_PAGE3:
- case SDM_PAGE4:
- case SDM_PAGE5:
- case SDM_PAGE6:
- case SDM_PAGE7:
- case SDM_PAGE8:
- case SDM_PAGE9:
- case SDM_PAGE10:
- case SDM_PAGE11:
- case SDM_PAGE12:
- case SDM_PAGE13:
- case SDM_PAGE14:
- case SDM_PAGE15:
- if(usCadence16)
- {
- this->label_Calc_CadenceDisplay->Text = ((double)usCadence16/16).ToString();
- this->label_TransCadenceDisplay->Text = ((double)usCadence16/16).ToString();
- }
- else
- this->label_TransCadenceDisplay->Text = "Off";
- if(usSpeed256)
- {
- this->label_TransInstSpeedDisplay->Text = ((double)usSpeed256/256).ToString();
- this->label_Calc_SpeedDisplay->Text = System::Math::Round((double)usSpeed256/256 , 3).ToString();
- this->label_Calc_PaceDisplay->Text = System::Math::Round((double) (256*1000/60)/usSpeed256 , 2).ToString();
- }
- else
- {
- this->label_TransInstSpeedDisplay->Text = "Off";
- }
- try{
- this->listBox_P2Location->SelectedIndex = sStatusFlags.ucLocation;
- this->listBox_P2Battery->SelectedIndex = sStatusFlags.ucBatteryStatus;
- this->listBox_P2Health->SelectedIndex = sStatusFlags.ucHealth;
- this->listBox_P2Use->SelectedIndex = sStatusFlags.ucUseState;
- }
- catch(...){
-
- }
-
-
- if (ucPageNum_ == SDM_PAGE3)
- {
- this->label_TransCalDisplay->Text = ucCalCount.ToString();
- this->label_P2Calories->Text = ulAcumCalCount.ToString();
- }
- else
- this->label_TransCalDisplay->Text = "Off";
- break;
- case SDM_PAGE16:
- this->label_RqStridesDisplay->Text = ulStridesAccum.ToString();
- this->label_RqDistanceDisplay->Text = ulDistanceAccum.ToString();
- break;
- case SDM_PAGE22:
- if ((ucCapabFlags & SDM_TIME_MASK) > 0)
- this->label_RqTime->ForeColor = System::Drawing::Color::Green;
- else
- this->label_RqTime->ForeColor = System::Drawing::Color::Red;
- if ((ucCapabFlags & SDM_DISTANCE_MASK) > 0)
- this->label_RqDistance->ForeColor = System::Drawing::Color::Green;
- else
- this->label_RqDistance->ForeColor = System::Drawing::Color::Red;
- if ((ucCapabFlags & SDM_SPEED_MASK) > 0)
- this->label_RqSpeed->ForeColor = System::Drawing::Color::Green;
- else
- this->label_RqSpeed->ForeColor = System::Drawing::Color::Red;
- if ((ucCapabFlags & SDM_LATENCY_MASK) > 0)
- this->label_RqLatency->ForeColor = System::Drawing::Color::Green;
- else
- this->label_RqLatency->ForeColor = System::Drawing::Color::Red;
- if ((ucCapabFlags & SDM_CADENCE_MASK) > 0)
- this->label_RqCadence->ForeColor = System::Drawing::Color::Green;
- else
- this->label_RqCadence->ForeColor = System::Drawing::Color::Red;
- if ((ucCapabFlags & SDM_CALORIES_MASK) > 0)
- this->label_RqCalories->ForeColor = System::Drawing::Color::Green;
- else
- this->label_RqCalories->ForeColor = System::Drawing::Color::Red;
- 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 = "N/A";
- else
- this->label_Glb_SerialNumDisplay->Text = commonPages->ulSerialNum.ToString();
- break;
- }
- }
- void SDMDisplay::SendRequestMsg(UCHAR ucMsgCode_)
- {
- UCHAR aucAckBuffer[8] = {0,0,0,0,0,0,0,0};
- switch(ucMsgCode_)
- {
- case SDM_PAGE16:
- EncodeRequestMsg(ucMsgCode_, aucAckBuffer);
- break;
- case SDM_PAGE22:
- EncodeRequestMsg(ucMsgCode_, aucAckBuffer);
- break;
- default:
- return;
- }
-
- if(!ucMsgExpectingAck)
- {
- ucAckRetryCount = 0;
- ucMsgExpectingAck = ucMsgCode_;
- }
- requestAckMsg(aucAckBuffer);
- }
- BOOL SDMDisplay::HandleRetransmit()
- {
- BOOL bSuccess = TRUE;
- if(ucMsgExpectingAck)
- {
- if(ucAckRetryCount++ < MAX_RETRIES)
- SendRequestMsg(ucMsgExpectingAck);
- else
- bSuccess = FALSE;
- }
-
- return bSuccess;
- }
- void SDMDisplay::UpdateDisplayAckStatus(UCHAR ucStatus_)
- {
- switch(ucStatus_)
- {
- case ACK_SUCCESS:
- this->label_AckMsgStatus->ForeColor = System::Drawing::Color::Green;
- this->label_AckMsgStatus->Text = "SENT";
- break;
- case ACK_RETRY:
- this->label_AckMsgStatus->ForeColor = System::Drawing::Color::Blue;
- this->label_AckMsgStatus->Text = "RTRY";
- break;
- case ACK_FAIL:
- this->label_AckMsgStatus->ForeColor = System::Drawing::Color::Red;
- this->label_AckMsgStatus->Text = "FAIL";
- break;
- default:
- break;
- }
- }
- void SDMDisplay::EncodeRequestMsg(UCHAR ucPageID_, UCHAR* pucTxBuffer_)
- {
- if (bRqAckReply)
- ucRqTxTimes |= 0x80;
- else
- ucRqTxTimes &= ~0x80;
-
- if (bRqTxUntilAck)
- ucRqTxTimes = 0x80;
- pucTxBuffer_[0] = SDM_PAGE70;
- pucTxBuffer_[1] = SDM_RESERVED;
- pucTxBuffer_[2] = SDM_RESERVED;
- pucTxBuffer_[3] = SDM_RESERVED;
- pucTxBuffer_[4] = SDM_RESERVED;
- pucTxBuffer_[5] = ucRqTxTimes;
- pucTxBuffer_[6] = ucPageID_;
- pucTxBuffer_[7] = SDM_DATA_REQUEST;
- }
- System::Void SDMDisplay::button_RequestPage16_Click(System::Object^ sender, System::EventArgs^ e)
- {
- SendRequestMsg(SDM_PAGE16);
- }
- System::Void SDMDisplay::button_RequestPage22_Click(System::Object^ sender, System::EventArgs^ e)
- {
- SendRequestMsg(SDM_PAGE22);
- }
- System::Void SDMDisplay::numericUpDown_RqTxTimes_ValueChanged(System::Object^ sender, System::EventArgs^ e)
- {
- ucRqTxTimes = System::Convert::ToByte(this->numericUpDown_RqTxTimes->Value);
- }
- System::Void SDMDisplay::checkBox_RqAckReply_CheckedChanged(System::Object^ sender, System::EventArgs^ e)
- {
- if(this->checkBox_RqAckReply->Checked)
- {
- bRqAckReply = TRUE;
- }
- else
- {
- bRqAckReply = FALSE;
- }
- }
- System::Void SDMDisplay::checkBox_RqTxUntilAck_CheckedChanged(System::Object^ sender, System::EventArgs^ e)
- {
- if(this->checkBox_RqTxUntilAck->Checked)
- {
- bRqTxUntilAck = TRUE;
-
- this->checkBox_RqAckReply->Enabled = FALSE;
- this->numericUpDown_RqTxTimes->Enabled = FALSE;
- }
- else
- {
- bRqTxUntilAck = FALSE;
-
- this->checkBox_RqAckReply->Enabled = TRUE;
- this->numericUpDown_RqTxTimes->Enabled = TRUE;
- ucRqTxTimes = System::Convert::ToByte(this->numericUpDown_RqTxTimes->Value);
- }
- }
|