123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803 |
- #include "stdafx.h"
- #include "ANTClass.h"
- #include "antplus.h"
- static UCHAR aucResponseBuf[10];
- static UCHAR aucRxBuf[17];
- static volatile ANT_RESPONSE_FUNC pResponseFunc = NULL;
- static volatile ANT_EVENT_RESPONSE_FUNC pEventResponseFunc = NULL;
- void ANTProtocolEventProcess(UCHAR ucChannel_, UCHAR ucMessageCode_)
- {
- if(ANTClass::pclMyCommandTimeout->bWaitingForResponse)
- {
-
- if(ucMessageCode_ == MESG_RESPONSE_EVENT_ID)
- {
- if(aucResponseBuf[1] == ANTClass::pclMyCommandTimeout->ucMessageID)
- {
- ANTClass::pclMyCommandTimeout->ClearWait();
- }
- }
- else if(ucMessageCode_ == ANTClass::pclMyCommandTimeout->ucResponseID)
- {
- ANTClass::pclMyCommandTimeout->ClearWait();
- }
-
- }
-
-
-
- System::Diagnostics::Debug::Assert(pEventResponseFunc != NULL);
- pEventResponseFunc(ucChannel_, ucMessageCode_, (char*)&aucResponseBuf[0]);
- }
- void ANTChannelEventProcess(UCHAR ucChannel_, UCHAR ucMessageCode_)
- {
-
- if(ANTClass::paclMyAckTimeout[ucChannel_]->bWaitingForResponse)
- {
-
-
- switch(ucMessageCode_)
- {
- case EVENT_TRANSFER_TX_COMPLETED:
- case EVENT_TRANSFER_TX_FAILED:
- case EVENT_CHANNEL_CLOSED:
- case CHANNEL_NOT_OPENED:
- case TRANSFER_IN_PROGRESS:
- {
- ANTClass::paclMyAckTimeout[ucChannel_]->ClearWait();
- break;
- }
- default:
- break;
- }
-
-
- }
-
- pResponseFunc(ucChannel_, ucMessageCode_, &aucRxBuf[0]);
- }
- BOOL ANTClass::LibInit(ANT_EVENT_RESPONSE_FUNC pEventResponseFunc_)
- {
- if (pEventResponseFunc_ == NULL)
- return FALSE;
- pEventResponseFunc = pEventResponseFunc_;
-
- if (!ANT_Load())
- return FALSE;
-
-
- ANT_AssignResponseFunction( (RESPONSE_FUNC) ANTProtocolEventProcess, aucResponseBuf);
-
- pclMyCommandTimeout = gcnew TimeoutStruct(gcnew ChannelDelegate(&ANTClass::TimerEvent));
- pclMyCommandTimeout->Interval = 500;
- pclMyCommandTimeout->Elapsed += gcnew System::Timers::ElapsedEventHandler(pclMyCommandTimeout, &TimeoutStruct::ProcessTimerEvent);
-
-
- return(TRUE);
- }
- BOOL ANTClass::AssignChannelEventFunctions(int iChannels_, ANT_RESPONSE_FUNC pResponseFunc_)
- {
- int i;
- if (pResponseFunc_ == NULL)
- return FALSE;
-
- paclMyAckTimeout = gcnew array<TimeoutStruct^, 1>(iChannels_);
-
- pResponseFunc = pResponseFunc_;
-
-
- for(i=0; i < iChannels_; ++i)
- {
- paclMyAckTimeout[i] = gcnew TimeoutStruct(gcnew ChannelDelegate(&ANTClass::AckTimerEvent));
- paclMyAckTimeout[i]->Elapsed += gcnew System::Timers::ElapsedEventHandler(paclMyAckTimeout[i], &TimeoutStruct::ProcessTimerEvent);
- ANT_AssignChannelEventFunction((UCHAR)i, (CHANNEL_EVENT_FUNC) ANTChannelEventProcess, aucRxBuf);
- }
- return(TRUE);
- }
- void ANTClass::Disconnect()
- {
- ANT_ResetSystem();
- Sleep(600);
- ANT_Close();
-
- }
-
- const UCHAR* ANTClass::GetLibVersion()
- {
- if(ANT_LibVersionSupport())
- {
- return (ANT_LibVersion());
- }
- else
- return nullptr;
- }
- BOOL ANTClass::Init(UCHAR ucUSBPort_, ULONG ulBaud_, UCHAR ucPortType_, UCHAR ucSerialFrameType_)
- {
- return(ANT_Init(ucUSBPort_, ulBaud_, ucPortType_, ucSerialFrameType_));
- }
- BOOL ANTClass::GetDeviceUSBInfo(UCHAR ucUSBPort_, UCHAR* pucStringDesc_, UCHAR* pucSerial_)
- {
- return(ANT_GetDeviceUSBInfo(ucUSBPort_,pucStringDesc_, pucSerial_));
- }
- BOOL ANTClass::GetDeviceUSBPID(USHORT* pusPID_)
- {
- return(ANT_GetDeviceUSBPID(pusPID_));
- }
- void ANTClass::Close()
- {
- ANT_Close();
- }
- void ANTClass::UnAssignChannel(UCHAR ucChannel_)
- {
- if(!ANT_UnAssignChannel(ucChannel_, RESPONSE_TIME))
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
- void ANTClass::AssignChannel(UCHAR ucChannel_, UCHAR ucType_, UCHAR ucNetworkNum_)
- {
- if(!ANT_AssignChannel(ucChannel_, ucType_, ucNetworkNum_, RESPONSE_TIME))
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
- void ANTClass::SetChannelId(UCHAR ucChannel_, USHORT usDeviceNumber_, UCHAR ucDeviceType_, UCHAR ucTransmissionType_)
- {
- if(!ANT_SetChannelId(ucChannel_, usDeviceNumber_, ucDeviceType_, ucTransmissionType_, RESPONSE_TIME))
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
-
- void ANTClass::SetChannelPeriod(UCHAR ucChannel_, USHORT usPeriod_)
- {
- if(!ANT_SetChannelPeriod(ucChannel_, usPeriod_, RESPONSE_TIME))
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
-
- void ANTClass::SetChannelSearchTimeout(UCHAR ucChannel_, UCHAR ucTimeout_)
- {
- if(!ANT_SetChannelSearchTimeout(ucChannel_, ucTimeout_, RESPONSE_TIME))
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
-
- void ANTClass::SetChannelRFFreq(UCHAR ucChannel_, UCHAR ucRFFreq_)
- {
- if(!ANT_SetChannelRFFreq(ucChannel_, ucRFFreq_, RESPONSE_TIME))
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
-
- void ANTClass::SetNetworkKey(UCHAR ucNetNum_, UCHAR* pucKey_)
- {
- if(!ANT_SetNetworkKey(ucNetNum_, pucKey_, RESPONSE_TIME))
- System::Windows::Forms::MessageBox::Show("Failed to set network key. Ensure device is alive and you are connected at the correct baud rate.");
- }
-
- void ANTClass::SetTransmitPower(UCHAR ucPower_)
- {
- if(!ANT_SetTransmitPower(ucPower_, RESPONSE_TIME))
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
-
- void ANTClass::SetChannelTxPower(UCHAR ucChannel_, UCHAR ucPower_)
- {
- if(!ANT_SetChannelTxPower(ucChannel_, ucPower_, RESPONSE_TIME))
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
-
- void ANTClass::ResetSystem()
- {
- ANT_ResetSystem();
- Sleep(600);
- }
-
- void ANTClass::OpenChannel(UCHAR ucChannel_)
- {
- if(!pclMyCommandTimeout->bWaitingForResponse)
- {
- ANT_OpenChannel(ucChannel_);
- pclMyCommandTimeout->WaitForResponse(ucChannel_, MESG_RESPONSE_EVENT_ID, MESG_OPEN_CHANNEL_ID);
- }
- else
- {
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
-
- }
-
- void ANTClass::CloseChannel(UCHAR ucChannel_)
- {
- if(!pclMyCommandTimeout->bWaitingForResponse)
- {
- ANT_CloseChannel(ucChannel_);
- pclMyCommandTimeout->WaitForResponse(ucChannel_, MESG_RESPONSE_EVENT_ID, MESG_CLOSE_CHANNEL_ID);
- }
- else
- {
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
- }
-
- void ANTClass::RequestMessage(UCHAR ucChannel_, UCHAR ucMsgID_)
- {
- if(!pclMyCommandTimeout->bWaitingForResponse)
- {
- ANT_RequestMessage(ucChannel_, ucMsgID_);
- pclMyCommandTimeout->WaitForResponse(ucChannel_, ucMsgID_, MESG_REQUEST_ID);
- }
- else
- {
- System::Diagnostics::Debug::Assert(FALSE, "Command sent before response or timeout recieved");
- }
- }
- void ANTClass::WriteMessage(UCHAR ucMessageID, UCHAR* aucData, USHORT usMessageSize)
- {
- ANT_WriteMessage(ucMessageID, aucData, usMessageSize);
- }
-
- void ANTClass::SendBroadcastData(UCHAR ucChannel_, UCHAR* pucData_)
- {
- ANT_SendBroadcastData(ucChannel_, pucData_);
- }
-
- void ANTClass::SendAcknowledgedData(UCHAR ucChannel_, UCHAR* pucData_)
- {
- SendAcknowledgedData(ucChannel_, pucData_, 0);
- }
- void ANTClass::SendAcknowledgedData(UCHAR ucChannel_, UCHAR* pucData_, USHORT usTimeout_)
- {
- System::Diagnostics::Debug::Assert(paclMyAckTimeout[ucChannel_] != nullptr, "ANT Class not initialized properly! ");
- if(usTimeout_)
- {
- paclMyAckTimeout[ucChannel_]->Interval = usTimeout_;
- paclMyAckTimeout[ucChannel_]->WaitForResponse(ucChannel_, 0,0);
-
- }
- ANT_SendAcknowledgedData(ucChannel_, pucData_);
- }
-
- void ANTClass::SendBurstTransfer(UCHAR ucChannel_, UCHAR* pucData_, USHORT usSize_)
- {
- ANT_SendBurstTransfer(ucChannel_, pucData_, usSize_);
- }
-
- void ANTClass::AckTimerEvent(UCHAR ucChannel_)
- {
- aucRxBuf[0] = ucChannel_;
- aucRxBuf[1] = 1;
- aucRxBuf[2] = EVENT_ACK_TIMEOUT;
- ANTChannelEventProcess(ucChannel_, EVENT_ACK_TIMEOUT);
- }
-
- void ANTClass::TimerEvent(UCHAR ucChannel_)
- {
-
-
-
-
- if(pclMyCommandTimeout->ucResponseID != MESG_RESPONSE_EVENT_ID)
- {
- pclMyCommandTimeout->ucResponseID = MESG_RESPONSE_EVENT_ID;
- }
- aucResponseBuf[0] = pclMyCommandTimeout->ucChannel;
- aucResponseBuf[1] = pclMyCommandTimeout->ucMessageID;
- aucResponseBuf[2] = EVENT_COMMAND_TIMEOUT;
-
- ANTProtocolEventProcess(0, pclMyCommandTimeout->ucResponseID);
- pclMyCommandTimeout->ClearWait();
-
- }
-
- TimeoutStruct::TimeoutStruct(ChannelDelegate^ ChannelCallbackFunc_)
- {
- ChannelCallback = ChannelCallbackFunc_;
- }
-
- void TimeoutStruct::ProcessTimerEvent(System::Object^ sender, System::Timers::ElapsedEventArgs^ e)
- {
- Stop();
- if(bWaitingForResponse)
- {
- ChannelCallback(ucChannel);
- }
- }
-
- void TimeoutStruct::WaitForResponse(UCHAR ucChannel_, UCHAR ucResponseID_, UCHAR ucMessageID_)
- {
- ucMessageID = ucMessageID_;
- ucResponseID = ucResponseID_;
- ucChannel = ucChannel_;
- bWaitingForResponse = TRUE;
- Start();
- }
-
- void TimeoutStruct::ClearWait()
- {
- Stop();
- ucMessageID = 0;
- ucResponseID = 0;
- ucChannel = 0;
- bWaitingForResponse = FALSE;
- }
|