Есть вопрос по стеку BitCloud 1.12.0. Проблема над которой ломаю голову больше недели.
Есть координатор который принимает данные по UART и передает их роутеру. По не понятным мне причинам через 2-6 часов координатор зависает наглухо. В режиме дебага координатор в сеть вообще ничего не передает.
Если ничего координатору по UART не передавать то проблем нет.
CODE
void appCoordinatorTaskHandler(AppEvent_t event, void *param)
{
param = param; // warning prevention
switch (appDeviceState)
{
case READING_SENSORS_STATE:
switch (event)
{
case APP_PROCESS:
appReadLqiRssi();
appSensorsesGot();
break;
case APP_READING_DONE:
appDeviceState = SENDING_DEVICE_STATE;
appPostSubTaskTask();
break;
default:
break;
}
break;
case SENDING_DEVICE_STATE:
switch (event)
{
case APP_PROCESS:
visualizeSerialTx();
appSendMessageToUsart(&appMessage.data, sizeof(AppMessage_t));
appDeviceState = STARTING_TIMER_STATE;
appPostSubTaskTask();
break;
default:
break;
}
break;
case STARTING_TIMER_STATE:
switch (event)
{
case APP_PROCESS:
HAL_StartAppTimer(&deviceTimer);
break;
case APP_TIMER_FIRED:
appDeviceState = READING_SENSORS_STATE;
appPostSubTaskTask();
break;
default:
break;
}
break;
case WAITING_DEVICE_STATE:
switch (event)
{
default:
appDeviceState = INITIAL_DEVICE_STATE;
appPostSubTaskTask();
break;
}
break;
case INITIAL_DEVICE_STATE:
switch (event)
{
case APP_PROCESS:
HAL_StopAppTimer(&deviceTimer);
deviceTimer.interval = APP_TIMER_SENDING_PERIOD;
deviceTimer.mode = TIMER_ONE_SHOT_MODE;
deviceTimer.callback = deviceTimerFired;
// Prefilling request parameters
messageParams.profileId = simpleDescriptor.AppProfileId;
messageParams.dstAddrMode = APS_SHORT_ADDRESS;
// Адресс устройства которому предназначено текущее сообщение (EXT_ADDRESS)
messageParams.dstAddress.extAddress = 0;
messageParams.dstAddress.shortAddress = 0x0012;
messageParams.dstEndpoint = 1;
messageParams.clusterId = CPU_TO_LE16(1);
messageParams.srcEndpoint = simpleDescriptor.endpoint;
// Длина полезной нагрузки
messageParams.asduLength = sizeof(appMessageBuffer.data);
// Полезная нагрузка
messageParams.asdu = (uint8_t*)(&appMessageBuffer.data[0]);
messageParams.txOptions.acknowledgedTransmission = 0;
#ifdef _APS_FRAGMENTATION_
messageParams.txOptions.fragmentationPermitted = 1;
#endif // _APS_FRAGMENTATION_
#ifdef _HIGH_SECURITY_
messageParams.txOptions.securityEnabledTransmission = 1;
#endif
messageParams.radius = 0x0;
messageParams.APS_DataConf = APS_DataConf;
appDeviceState = READING_SENSORS_STATE;
appPostSubTaskTask();
break;
default:
break;
}
break;
default:
break;
}
}
void appInitDeviceCoordinator(void)
{
appDeviceState = INITIAL_DEVICE_STATE;
appPostSubTaskTask();
}
static void appSensorsesGot(void)
{
appCoordinatorTaskHandler(APP_READING_DONE, NULL);
}
/// ***** Пользовательские функции реализация *****
static void APS_DataConf(APS_DataConf_t *confInfo)
{
data_arrived = true;
appPostSubTaskTask();
}
void dataUSARTRecived (void *data, uint16_t dataLength)
{
… парсер, заполнение данными messageParams ...
if ( data_arrived )
{
APS_DataReq(&messageParams);
data_arrived = false;
}
...
appPostSubTaskTask();
}
Сообщение отредактировал IgorKossak - Sep 8 2014, 10:45
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!