alljoyn有约

来源:互联网 发布:淘宝热卖排行榜女装 编辑:程序博客网 时间:2024/04/29 04:39
上期讲到如何使用4004开发板,这是个基础,搞硬件的都清楚,我们先得玩起来。alljoyn是个软件,不是拿来看的,也不是炫耀技术的,毕竟是拿来用的,用户用起来才能说好与坏。否则我们都是局外人。
  这里先说说alljoyn在4004上运行的环境,alljoyn所有组件要能运行,包括操作系统,协议栈等,需要至少200多k的flash,100多kram,对CPU资源是个严重挑战,太多的ram也许你编译都不能通过,有可能你编译通过了,硬件堆栈不够用,系统也会异常。这个需要你有耐心去优化下,嵌入式系统本来就如此。其他的CPU可能会好很多,毕竟不需要这么复杂的底层系统来支持。
  这里先教会大家先用起来,再去理解他。如果要想了解整个系统的运作,估计要写一本书才能够充分说明这个事情,当然这是后面的安排。这里先看看软件的处理流程:

  图一:主程序

int AJ_Main(void)
{
    AJ_Status status = AJ_OK;
    uint8_t isUnmarshalingSuccessful = FALSE;
    AJSVC_ServiceStatus serviceStatus;
    AJ_Message msg;
    int ipaddr;
    
    gpio_set_pin_dir(GPIO_KEY1,1);  //set input    
    gpio_set_pin_dir(GPIO_KEY2,1);  //set input
    
    gpio_set_pin_dir(GPIO_k1_LED,0);  //set output
    gpio_set_pin_dir(GPIO_K2_LED,0);  //set output
    gpio_set_pin_dir(GPIO_K1,0);  //set output        
    gpio_set_pin_dir(GPIO_k2,0);  //set output
    
    //gpio_set_pin_dir(WIFI_LED,0);  //set output         
    gpio_set_pin_low(GPIO_k1_LED);
    k_msleep(1000);


    
    k1_onoff(0);   
    k2_onoff(0);   
    set_key_interrupt();
    
    AJ_Initialize();


    AJ_AboutSetIcon(aboutIconContent, aboutIconContentSize, aboutIconMimetype, aboutIconUrl);
    
    //About_Init(NULL,aboutIconMimetype,aboutIconContent, aboutIconContentSize, aboutIconUrl);


    status = PropertyStore_Init();
    if (status != AJ_OK) {
        goto Exit;
    }  
    
    AJ_Debug("---------ssidNameVar=%s,ssidPasswdNameVar=%s------------\n",ssidNameVar,ssidPasswdNameVar);
    
    status = AJServices_Init(AJ_ABOUT_SERVICE_PORT, AppObjects, ProxyObjects, deviceManufactureName, deviceProductName);
    if (status != AJ_OK) {
        AJ_ErrPrintf(("AJServices_Init() error %s\n", (AJ_StatusText(status))));
        goto Exit;
    }


    //AJ_RegisterObjects(AppObjects, ProxyObjects);
    AJ_RegisterObjects(AppObjects, NULL);
    SetBusAuthPwdCallback(MyBusAuthPwdCB);
    
    while (TRUE) {
        status = AJ_OK;
        serviceStatus = AJSVC_SERVICE_STATUS_NOT_HANDLED;


        if(gpio_get_pin_state(GPIO_KEY1)==0){
            printf("..................GPIO_KEY1 IS LOW 1............... \n");
            //goto LABLE_OTA;
            //k1_onoff(3);
        }        
        if(gpio_get_pin_state(GPIO_KEY2)==0){
            printf("..................GPIO_KEY2 IS LOW............... \n");
            if(key_timer++>5)
                goto LABLE_OTA;
        }       
        else         
            key_timer=0;
        
        if (!isBusConnected) {
            printf("..................AJRouter_Connect............... \n");
            isBusConnected = AJRouter_Connect(&busAttachment, ROUTER_NAME);
            if (!isBusConnected) { // Failed to connect to router?
                continue; // Retry establishing connection to router.
            }
        }
        //printf("..................AJApp_ConnectedHandler............... \n");


        status = AJApp_ConnectedHandler(&busAttachment);
        
        //printf("..................AJOBS_IsWiFiConnected............... \n");


#ifdef ONBOARDING_SERVICE
        if (!AJOBS_IsWiFiConnected()) {
            status = AJ_ERR_RESTART;
        }
#endif
        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
                    //printf("..................AJApp_DoWork............... \n");
                    AJApp_DoWork(&busAttachment);
                    continue;
                }
            }


            if (isUnmarshalingSuccessful) {
                //printf("..................isUnmarshalingSuccessful............... \n");
                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) {
LABLE_OTA:
                    ipaddr=SERVER_IP;               
                    qca_OTA_tftp(ipaddr, "app", 1, 1);
                    AJ_Reboot();
                }
            }
        }
    }     // while (TRUE)


    return 0;


Exit:


    return (1);
}

  
  
  图二:调试输出

  

*********** start alljoyn task ***********
### MEM FREE : 25324.
000.000 aj_target_nvram.c:119 AJ_NVRAM_Init() :_AJ_EraseNVRAM
000.174 aj_nvram.c:186 AJ_NVRAM_Open(): Data set 4098. does not exist
000.181 aj_nvram.c:209 AJ_NVRAM_Open(): failure: status=AJ_OK
000.189 PropertyStore.c:376 nvram read fieldIndex=2 [DeviceName] langIndex=0 [en] entry=2 val= size=33 status=AJ_OK
000.201 aj_nvram.c:186 AJ_NVRAM_Open(): Data set 4099. does not exist
000.208 aj_nvram.c:209 AJ_NVRAM_Open(): failure: status=AJ_OK
000.214 PropertyStore.c:376 nvram read fieldIndex=3 [DefaultLanguage] langIndex=0 [en] entry=3 val= size=8 status=AJ_OK
000.226 aj_nvram.c:186 AJ_NVRAM_Open(): Data set 4100. does not exist
000.234 aj_nvram.c:209 AJ_NVRAM_Open(): failure: status=AJ_OK
000.240 PropertyStore.c:376 nvram read fieldIndex=4 [Passcode] langIndex=0 [en] entry=4 val= size=33 status=AJ_OK
000.252 aj_nvram.c:186 AJ_NVRAM_Open(): Data set 4101. does not exist
000.259 aj_nvram.c:209 AJ_NVRAM_Open(): failure: status=AJ_OK
000.265 PropertyStore.c:376 nvram read fieldIndex=5 [RealmName] langIndex=0 [en] entry=5 val= size=11 status=AJ_OK
000.277 aj_nvram.c:186 AJ_NVRAM_Open(): Data set 4102. does not exist
000.284 aj_nvram.c:209 AJ_NVRAM_Open(): failure: status=AJ_OK
000.290 PropertyStore.c:376 nvram read fieldIndex=6 [Ssid] langIndex=0 [en] entry=6 val= size=11 status=AJ_OK
000.302 aj_nvram.c:186 AJ_NVRAM_Open(): Data set 4103. does not exist
000.309 aj_nvram.c:209 AJ_NVRAM_Open(): failure: status=AJ_OK
000.315 PropertyStore.c:376 nvram read fieldIndex=7 [SsidPasswd] langIndex=0 [en] entry=7 val= size=11 status=AJ_OK
000.327 PropertyStore.c:198 Set key [DeviceId] defaultValue [f198954d9baf879ec755d669a5bcea3d]
000.337 PropertyStore.c:198 Set key [DeviceName] defaultValue [My Smple AC 5bcea3d]
---------ssidNameVar=,ssidPasswdNameVar=------------
..................AJCFG_Start............... 
Init(): Set Consumer to detect SuperAgent option is turned ON
----------------------WidgetsInit end!---------------------
..................AJRouter_Connect............... 
Attempting to connect to bus 'org.alljoyn.BusNode'
Connected to OPENWRT_TOM, bssid = a8-40-41-13-4a-20, channel = 3, rssi = 14

  
  
  

  图三:APP客户界面


  

控制界面:


  
  多个APK,显示界面。如果你有多个终端,可以同步显示设备的状态。
  
  本例程所有所有代码都会开源,我们下载专区上线后,大家都可以去下载,测试。这里先上个二进制,先玩玩。
  后面将系统介绍alljoyn协议的前世今生。
0 0