int AJ_Main(void) { static AJ_Status status = AJ_OK; static uint8_t isUnmarshalingSuccessful = FALSE; AJSVC_ServiceStatus serviceStatus; AJ_Initialize(); status = PropertyStore_Init(); if (status != AJ_OK) { goto Exit; } status = About_Init(AnnounceObjects, aboutIconMimetype, aboutIconContent, aboutIconContentSize, aboutIconUrl); if (status != AJ_OK) { goto Exit; } status = AJServices_Init(AppObjects, ProxyObjects, AnnounceObjects, deviceManufactureName, deviceProductName); if (status != AJ_OK) { goto Exit; } AJ_RegisterObjects(AppObjects, ProxyObjects); SetBusAuthPwdCallback(MyBusAuthPwdCB); while (TRUE) { AJ_Message msg; status = AJ_OK; if (!isBusConnected) { isBusConnected = AJRouter_Connect(&busAttachment, ROUTER_NAME); if (isBusConnected) { status = AJServices_ConnectedHandler(&busAttachment); } else { // Failed to connect to daemon. continue; // Retry establishing connection to daemon. } } if (status == AJ_OK) { status = AJApp_ConnectedHandler(&busAttachment); } if (status == AJ_OK) { status = AJ_UnmarshalMsg(&busAttachment, &msg, AJAPP_UNMARSHAL_TIMEOUT); isUnmarshalingSuccessful = (status == AJ_OK); if (status == AJ_ERR_TIMEOUT) { if (AJ_ERR_LINK_TIMEOUT == AJ_BusLinkStateProc(&busAttachment)) { status = AJ_ERR_READ; // something's not right. force disconnect } else { // nothing on bus, do our own thing AJ_Printf("do our own things\n"); AJServices_DoWork(&busAttachment); continue; } } if (isUnmarshalingSuccessful) { serviceStatus = AJServices_MessageProcessor(&busAttachment, &msg, &status); if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { //Pass to the built-in bus message handlers status = AJ_BusHandleBusMessage(&msg); } AJ_NotifyLinkActive(); } //Unmarshaled messages must be closed to free resources AJ_CloseMsg(&msg); } if (status == AJ_ERR_READ || status == AJ_ERR_RESTART || status == AJ_ERR_RESTART_APP) { if (isBusConnected) { AJApp_DisconnectHandler(&busAttachment, status != AJ_ERR_READ); AJServices_DisconnectHandler(); isBusConnected = !AJRouter_Disconnect(&busAttachment, status != AJ_ERR_READ); if (status == AJ_ERR_RESTART_APP) { AJ_Reboot(); } } } } // while (TRUE) return 0; Exit: return (1); }
int AJ_Main(void) { AJ_Status status = AJ_OK; uint8_t isUnmarshalingSuccessful = FALSE; AJSVC_ServiceStatus serviceStatus; AJ_Message msg; AJ_Initialize(); AJ_AboutSetIcon(aboutIconContent, aboutIconContentSize, aboutIconMimetype, aboutIconUrl); status = PropertyStore_Init(); if (status != AJ_OK) { goto Exit; } status = Config_Init(); if (status != AJ_OK) { goto Exit; } status = Onboarding_Init(); if (status != AJ_OK) { goto Exit; } AJ_RegisterObjects(AppObjects, NULL); SetBusAuthPwdCallback(MyBusAuthPwdCB); while (TRUE) { status = AJ_OK; serviceStatus = AJSVC_SERVICE_STATUS_NOT_HANDLED; if (!isBusConnected) { isBusConnected = AJRouter_Connect(&busAttachment, ROUTER_NAME); if (!isBusConnected) { // Failed to connect to router? continue; // Retry establishing connection to router. } } status = AJApp_ConnectedHandler(&busAttachment); if (!AJOBS_IsWiFiConnected()) { status = AJ_ERR_RESTART; } if (status == AJ_OK) { status = AJ_UnmarshalMsg(&busAttachment, &msg, AJAPP_UNMARSHAL_TIMEOUT); isUnmarshalingSuccessful = (status == AJ_OK); if (status == AJ_ERR_TIMEOUT) { if (AJ_ERR_LINK_TIMEOUT == AJ_BusLinkStateProc(&busAttachment)) { status = AJ_ERR_READ; // something's not right. force disconnect } } if (isUnmarshalingSuccessful) { if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJApp_MessageProcessor(&busAttachment, &msg, &status); } if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { //Pass to the built-in bus message handlers status = AJ_BusHandleBusMessage(&msg); } AJ_NotifyLinkActive(); } //Unmarshaled messages must be closed to free resources AJ_CloseMsg(&msg); } if (status == AJ_ERR_READ || status == AJ_ERR_RESTART || status == AJ_ERR_RESTART_APP) { if (isBusConnected) { AJApp_DisconnectHandler(&busAttachment, status != AJ_ERR_READ); isBusConnected = !AJRouter_Disconnect(&busAttachment, status != AJ_ERR_READ); if (status == AJ_ERR_RESTART_APP) { AJ_Reboot(); } } } } // while (TRUE) return 0; Exit: return (1); }