static void USER_FUNC lum_enterSearchFreqMode(ORIGIN_WAVE_DATA* pWaveDataInfo) { g_pWaveDataInfo = pWaveDataInfo; hfgpio_fset_out_low(HFGPIO_F_WIFI_LED); //Open LED memset(&g_searchFreqData, 0, sizeof(SEARCH_FREQ_INFO)); memset(pWaveDataInfo, 0, sizeof(ORIGIN_WAVE_DATA)); lum_initSdo2Interupt(); #if 0 g_searchFreqData.chipStatus = SX1208_SEARCHING; g_searchFreqData.curFreq = MIN_SEARCH_FREQUENT; g_searchFreqData.timeout = hfsys_get_time(); lum_changeToSearchFreqMode(); lum_searchNextFreq(); lum_start433StudyTimer(MAX_SEARCH_FREQ_TIMER_GAP); #else g_searchFreqData.bestFreq = 433920000; lum_enterStudyMode(g_searchFreqData.bestFreq); #endif }
/************************************************* * Function: ZC_SendJdQueryReq * Description: * Author: cxy * Returns: * Parameter: * History: *************************************************/ void ZC_SendJDQueryReq(u8 *pu8Msg, u32 u32RecvLen,struct sockaddr_in addr) { int len_udp_back; cmd_header* pCmd = NULL; ZC_SendParam struParam; cJSON* jDevice = ZC_JDPacketAnalyse(&pCmd, (char *)pu8Msg, u32RecvLen); if(jDevice == NULL) { ZC_Printf("PacketAnalyse error\n\r"); return; } cJSON *root = cJSON_CreateObject(); //注意用完必须释放内存 if(root == NULL) { ZC_Printf("cJSON_CreateObject failed"); cJSON_Delete(jDevice); return; } switch(pCmd->type) { case 1: { //int smtlk = 0; u8 DeviceId[ZC_HS_DEVICE_ID_LEN+1]; u8 *pu8DeviceId; #if 0 hfsys_nvm_read(0,(char *)&smtlk,4); if(!((hfsys_get_time() < 2000*60) && (smtlk == 1))) { smtlk = 0; hfsys_nvm_write(0,(char *)&smtlk,4); break; } #endif cJSON *pItem = cJSON_GetObjectItem(jDevice, "productuuid"); if( (strcmp((const char *)JD_PROUUID, (const char *)pItem->valuestring) )||(pItem->valuestring[0]==0)||(strcmp("0", (const char *)pItem->valuestring) )) { if(ZC_MAGIC_FLAG!=g_struZcConfigDb.struJdInfo.u32MagicFlag) { cJSON_AddStringToObject(root,"feedid", "0"); ZC_Printf("Configuration file not exists"); } else { cJSON_AddStringToObject(root,"feedid", (const char *)g_struZcConfigDb.struJdInfo.u8Feedid); ZC_Printf("Configuration file exists"); } ZC_GetStoreInfor(ZC_GET_TYPE_DEVICEID, &pu8DeviceId); memcpy(DeviceId, pu8DeviceId, ZC_HS_DEVICE_ID_LEN); DeviceId[ZC_HS_DEVICE_ID_LEN] = 0; cJSON_AddStringToObject(root,"mac", (const char *)DeviceId); cJSON_AddStringToObject(root,(const char *)"productuuid", (const char *)JD_PROUUID); int length = ZC_JDPacketBuild(pu8Msg, 2, 2, root); struParam.u8NeedPoll = 0; struParam.pu8AddrPara = (u8 *)&addr; g_struProtocolController.pstruMoudleFun->pfunSendUdpData(g_Jdfd, pu8Msg, length, &struParam); ZC_Printf("HeartBeat_OK\n"); } break; } case 3: { cJSON *pItem = cJSON_GetObjectItem(jDevice,"feedid"); ZC_StoreFeedInfo((u8 *)pItem->valuestring); cJSON_AddNumberToObject(root,"code",0); cJSON_AddStringToObject(root,"msg","write feed_id and accesskey successfully!"); len_udp_back = ZC_JDPacketBuild(pu8Msg, 2, 4, root); struParam.u8NeedPoll = 0; struParam.pu8AddrPara = (u8*)&addr; g_struProtocolController.pstruMoudleFun->pfunSendUdpData(g_Jdfd, pu8Msg, len_udp_back, &struParam); char* p = cJSON_PrintUnformatted(jDevice); ZC_Printf("WriteOK_%s",p); hfmem_free(p); break; } default: break; } cJSON_Delete(root); cJSON_Delete(jDevice); }
static void USER_FUNC lum_searchFreqCallback(void) { U8 rssiData = 0; U32 readCount = 0; U32 beginTime = 0; U32 curTime = 0; U32 totalRssi = 0; U32 waitTime = MIN_SEARCH_FREQ_WAIT_TIME; static U8 g_bLastFound = 0; if(g_searchFreqData.foundIrq) { lum_setSdo2InteruptStatus(FALSE); beginTime = hfsys_get_time(); while(1) { if((GpioGetReg(GPIO_C_IN)&0x04) != 0) { rssiData = lum_spiReadData(REG_RSSIVALUE); if(waitTime != MAX_SEARCH_FREQ_WAIT_TIME) { waitTime = MAX_SEARCH_FREQ_WAIT_TIME; } if(rssiData != 0x80) { readCount++; totalRssi += rssiData; if(readCount >= MAX_READ_RSSI_COUNT) { totalRssi /= readCount; if(totalRssi > g_searchFreqData.maxRssi) { if(g_bLastFound != 0) { g_searchFreqData.maxRssi = totalRssi; g_searchFreqData.bestFreq = g_searchFreqData.curFreq; } else { totalRssi = 0; g_bLastFound = 1; } } curTime = hfsys_get_time(); break; } } } else { curTime = hfsys_get_time(); if(curTime < beginTime) { beginTime = 0; } if((curTime - beginTime) > waitTime) { totalRssi = 0; g_bLastFound = 0; break; } } } } //lumi_debug("curFreq=%ld RSSI=%d bSdo2High=%d readCount=%d timegap=%d\n", g_searchFreqData.curFreq, totalRssi, g_searchFreqData.foundIrq, readCount, (curTime - beginTime)); if(g_searchFreqData.curFreq < MAX_SEARCH_FREQUENT) { //search next frequent if(g_searchFreqData.foundIrq) { g_searchFreqData.curFreq += MIN_SEARCH_FREQ_GAP; } else { g_searchFreqData.curFreq += MAX_SEARCH_FREQ_GAP; } if(readCount == 0) { g_searchFreqData.foundIrq = 0; } lum_searchNextFreq(); } else if(g_searchFreqData.maxRssi < MIN_SEARCH_FREQ_RSSI) { curTime = hfsys_get_time(); if(curTime < MAX_STUDY_TIME_WAIT || (curTime - g_searchFreqData.timeout) < MAX_STUDY_TIME_WAIT) { //search again U32 lastTime; lastTime = g_searchFreqData.timeout; memset(&g_searchFreqData, 0, sizeof(SEARCH_FREQ_INFO)); g_searchFreqData.chipStatus = SX1208_SEARCHING; g_searchFreqData.curFreq = MIN_SEARCH_FREQUENT; g_searchFreqData.timeout = lastTime; lum_searchNextFreq(); } else { //Search Faild; lum_setSdo2InteruptStatus(FALSE); g_searchFreqData.chipStatus = SX1208_IDLE; lum_setRfMode(RF_SLEEP); lum_sendReplyStudyMessage(); lumi_debug("search frequent timeout time1=%ld time2=%ld\n", g_searchFreqData.timeout, curTime); } } else { //search success lum_setSdo2InteruptStatus(FALSE); lum_enterStudyMode(g_searchFreqData.bestFreq); } }