2017.05.19回顾 TSS = ESS + RSS证明

本文深入探讨了线性回归中的R²概念及其与相关系数的关系,并解决了实际工作中遇到的技术难题,如风控接口集成、手机三要素验证等问题。

1、对风控描述文档进行了修改,交付给了相关同事

2、然后就是把Ken的接口加入到合作方决策引擎中,没什么问题,还是老套路,只是对于AS前置模型的情况进行了一些小处理

3、下午我记得还Henry微信沟通了一下,放宽了AS某个渠道的客户

4、下午还研究了手机三要素的问题,发现根本就没拉3A的手机三要素,然后又是一番沟通,过程中也了解到3A的一些库表结构

5、下午的另外一半时间都是集中在领悟线性回归/相关系数/R2的事情上,R2=ESS/TSS,TSS = ESS + RSS,TSS称为总平方和,ESS称为回归平方和,RSS称为残差平方和,


TSS = ESS + RSS,然后接下来就是解决这个等式的证明,证明要用到一个拆分的技巧,详细过程见


看到这里,又出现了新的问题,为什么残差之和为0,这个我搜了好久,我的直觉告诉我残差之和为0跟最小二乘肯定有什么联系,果然,最后搜到了一个,残差之和为0是最小二乘的一阶条件,使用最小二乘对参数进行估计,令偏导等于0必然有残差之和为0,后面的残差乘以X,求和为0,同理得到,解释详见这个回答

其实本来只是想解决R2和相关系数关系的问题,想不到最后引出这么多问题,好在我都解决掉了,但是R2和相关系数的关系证明,目前我还没能给出,既然都走到这一步了,一咬牙一跺脚就把这个问题也解决了吧,我在星期五的证明过程中,自己也有一点感觉,似乎证明不难的!

下面补充一下R2和相关系数证明


思路就是尝试去根据相关系数做构造,然后把系数用样本点的表达式去带!OK,至此,解决了所有疑惑,问题的最初是为什么pearson相关系数表征的是线性相关性,想不到引出一系列问题,从中我也复习了很多知识线性回归的相关知识!


给出这个value有哪几种种类的builder; <entry key="${omada.app.eap.status.type}" value-ref="eapStatusMsgGcmPayloadBuilder"/> <entry key="${omada.app.controller.status.type}" value-ref="statusMsgGcmPayloadBuilder" /> <entry key="${tether.app.subscribe.status.type}" value-ref="statusMsgGcmPayloadBuilder" /> <entry key="${tapo.shareLauch.msg.type}" value-ref="tapoShareFcmPayloadBuilder" /> <entry key="${tapo.detect.smartTapoDeviceActivity.msg.type}" value-ref="smartTapoDeviceActivityFcmPayloadBuilder" /> <entry key="${device.msg.msg.type}" value-ref="notificationFcmPayloadBuilder" /> <entry key="${autoupgrade.msg.msg.type}" value-ref="autoUpgradeFcmPayloadBuilder" /> <entry key="${tapoFfsNewDeviceFound.msg.msg.type}" value-ref="tapoFfsFcmPayloadBuilder" /> <entry key="${tapo.camera.areaIntrusion.msg.msg.type}" value-ref="tapoFcmPayloadBuilder" /> <entry key="${tapo.camera.linecrossing.msg.msg.type}" value-ref="tapoFcmPayloadBuilder" /> <entry key="${tapo.camera.cameraTampering.msg.msg.type}" value-ref="tapoFcmPayloadBuilder" /> <entry key="${tapo.expire.trialin3days.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.expire.trial.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.expire.subscriptionin3days.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.expire.subscription.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.paymentfailed.subscription.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.preference.subscription.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.activated.subscription.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoContactSensorTriggered.msg.type}" value-ref="tapoTriggeredFcmPayloadBuilder"/> <entry key="${tapo.tapoSmartButtonTriggered.msg.type}" value-ref="tapoTriggeredFcmPayloadBuilder"/> <entry key="${tapo.tapoSmartSwitchTriggered.msg.type}" value-ref="tapoTriggeredFcmPayloadBuilder"/> <entry key="${tapo.tapoHubTriggered.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoMotionSensorTriggered.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoThermostatRadiatorValve.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoDeviceLowBattery.msg.type}" value-ref="triggeredMsgFcmPayloadBuilder"/> <entry key="${tapo.tapoSensorFrequentlyTriggered.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoSmartGarageDoorKeptOpen.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoSmartGarageDoorOpen.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoSmartGarageDoorClose.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoSmartGarageDoorAbnormallyOpen.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoSmartGarageDoorAbnormallyClose.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${verification.msg.type}" value-ref="verificationFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceActivity.msg.type}" value-ref="triggeredMsgFcmPayloadBuilder"/> <entry key="${tapo.kasaCareFreeTrialEnded.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.kasaCareSubscriptionExpired.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.kasaCarePaymentFailed.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceManualRecording.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceTampered.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceTransactionTimeout.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDoorBellRing.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceTempOverheat.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceVideoSummary.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.videosummaryGenerated.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.videosummaryGeneratedV2.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.videosummaryCanCreateFromClips.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${iac.userReport.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.petDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.vehicleDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.BatteryEmpty.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.BatteryFullyCharged.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.PowerSavingModeEnabled.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.CameraLowBattery.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${backupAlert.msg.msg.type}" value-ref="backupAlertFcmPayloadBuilder"/> <entry key="${iac.tapoCareWeeklyReportNewFeature.msg.type}" value-ref="tapoFcmPayloadBuilder" /> <entry key="${tapo.tapoGlassBreakingDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoSmokeAlarmDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoMeowDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoBarkDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoDeviceOverheat.msg.type}" value-ref="triggeredMsgFcmPayloadBuilder"/> <entry key="${tapo.tapoDeviceOverheatRelieve.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoSensorWaterLeakDetected.msg.type}" value-ref="tapoSensorMsgFcmPayloadBuilder"/> <entry key="${tapo.tapoSensorWaterLeakSolved.msg.type}" value-ref="tapoSensorMsgFcmPayloadBuilder"/> <entry key="${tapo.tapoSensorTempTooWarm.msg.type}" value-ref="tapoSensorMsgFcmPayloadBuilder"/> <entry key="${tapo.tapoSensorTempTooCool.msg.type}" value-ref="tapoSensorMsgFcmPayloadBuilder"/> <entry key="${tapo.tapoSensorTooHumid.msg.type}" value-ref="tapoSensorMsgFcmPayloadBuilder"/> <entry key="${tapo.tapoSensorTooDry.msg.type}" value-ref="tapoSensorMsgFcmPayloadBuilder"/> <entry key="${tapo.lensMask.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.ringEvent.msg.type}" value-ref="soundFcmPayloadBuilder"/> <entry key="${tapo.missRingEvent.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.storyRingEvent.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.storyPersonEvent.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.deliverPackageDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.pickUpPackageDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.antiTheft.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceTriggerStop.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceMotionTriggeredStop.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceLock.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceUnlock.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceLocking.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceUnlocking.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceUnknown.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceStatus.msg.type}" value-ref="triggeredMsgFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceAbnormal.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.iotDeviceLoadAbnormal.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tss.provisionee.msg.type}" value-ref="tssFcmPayloadBuilder" /> <entry key="${tapo.tapoDevicePowerProtection.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.msg.online.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.robotBatteryExceptionEvent.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.robotCleanRelativeEvent.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.robotLocateFailEvent.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.robotIssueDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.kasaCareSubscriptionExpiringIn3Days.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.kasaCareSubscriptionDowngradePreference.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.kasaCareSubscriptionDowngradeActivated.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${cloud.account.abnormalLogin.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${cloud.account.accountLeak.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.abnormalBatteryPowerConsumption.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.messageActionPush.msg.type}" value-ref="tapoFcmPayloadBuilder" /> <entry key="${tapo.deviceOffline.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.currentProtectionEvent.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoDeviceJam.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoDeviceMotorMalfunction.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoLockLowBattery.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoDeviceUnlock.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoDeviceLock.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoDeviceWrongTry.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.tapoDeviceDoorbellRang.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.familiarFaceDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.unfamiliarFaceDetected.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.hardDiskNotInitialized.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.hardDiskInsufficientStorage.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.faceDetectWeeklyReport.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.faceDetectMonthlyReport.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.connectedApplianceFullyCharged.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${tapo.newMessageFromTechnicalSupport.msg.type}" value-ref="tapoFcmPayloadBuilder"/> <entry key="${app.push.type.default}" value-ref="gcmPayLoadBuilder" />
09-20
uint8_t *tssd_build_tss_resp_payload(struct provisioner *er, struct provisionee_list_entry *entry, struct tss_report_response *rep_resp, uint16_t *payload_len) { struct tss_context *tss_ctx = tss_ctx_get(); struct tss_response resp = {0}; struct tss_ecc_key_pair pair = {0}; struct tss_wireless_config wl_conf; struct tss_ap_info *ap_info; enum tss_wireless_band band; enum tss_wireless_function_type type = 0; enum tss_system_mode sysmode = tss_get_sysmode(); int i, j, k; if (!tss_ctx) { tss_print("Invalid tss context"); return NULL; } /* Deal with fast reaccess */ if (entry->target_wlnet != 0) { resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_CONFIG | TSS_CMD_TYPE_CONNECT; resp.command[resp.cmd_cnt].dtype = TSS_FORMAT_STRUCT; resp.command[resp.cmd_cnt].format = TSS_WIRELESS_CONFIG; resp.command[resp.cmd_cnt].wl_conf_cnt = 0; type = entry->target_wlnet; for (i = BAND_2G; i < BAND_MAX; i++) { for (j = 0; j < MAX_MULTI_SSID_VAP; j++) { if (tss_get_wireless_config(i, type, j, &wl_conf) != TSS_OK || !wl_conf.enable) continue; if ((wl_conf.wl_freq & entry->cap.wl_freq) && (wl_conf.key_type & entry->cap.key_type)) { band = frequency_to_wireless_band(wl_conf.freq_point); if (band && !(band & entry->cap.band)) continue; memcpy(&resp.command[resp.cmd_cnt].wl_conf[resp.command[resp.cmd_cnt].wl_conf_cnt], &wl_conf, sizeof(wl_conf)); resp.command[resp.cmd_cnt].wl_conf_cnt++; } } } resp.cmd_cnt++; } else { if (strlen(rep_resp->bindtoken)) { resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_CONFIG; resp.command[resp.cmd_cnt].dtype = TSS_FORMAT_STRUCT; resp.command[resp.cmd_cnt].format = TSS_CLOUD; strcpy(resp.command[resp.cmd_cnt].cloud.bindtoken, rep_resp->bindtoken); tss_get_username_md5(resp.command[resp.cmd_cnt].cloud.user_name_md5); tss_get_username_sha1(resp.command[resp.cmd_cnt].cloud.user_name_sha1); resp.cmd_cnt++; } if (strlen(rep_resp->location)) { resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_CONFIG; resp.command[resp.cmd_cnt].dtype = TSS_LOCATION; strcpy(resp.command[resp.cmd_cnt].location, rep_resp->location); resp.cmd_cnt++; } if (strlen(rep_resp->time_zone)) { resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_CONFIG; resp.command[resp.cmd_cnt].dtype = TSS_TIME_ZONE; strcpy(resp.command[resp.cmd_cnt].time_zone, rep_resp->time_zone); resp.cmd_cnt++; } if (SYSTEM_MODE_SUPPORT_STA(rep_resp->sysmode)) { resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_CONFIG; resp.command[resp.cmd_cnt].dtype = TSS_SYSTEM_MODE; resp.command[resp.cmd_cnt].sysmode = rep_resp->sysmode; resp.cmd_cnt++; if (rep_resp->apinfo_num > 0) { entry->target_mesh = 0; resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_CONFIG | TSS_CMD_TYPE_CONNECT; resp.command[resp.cmd_cnt].dtype = TSS_FORMAT_STRUCT; resp.command[resp.cmd_cnt].format = TSS_WIRELESS_CONFIG; resp.command[resp.cmd_cnt].wl_conf_cnt = 0; type = rep_resp->apinfo[0].func_type; for (i = BAND_2G; i < BAND_MAX; i++) { for (j = 0; j < MAX_MULTI_SSID_VAP; j++) { if (tss_get_wireless_config(i, type, j, &wl_conf) != TSS_OK || !wl_conf.enable) continue; for (k = 0; k < rep_resp->apinfo_num; k++) { ap_info = &rep_resp->apinfo[k]; if ((wl_conf.wl_freq == ap_info->wl_freq) && !strcmp(wl_conf.ssid, ap_info->ssid)) { memcpy(&resp.command[resp.cmd_cnt].wl_conf[resp.command[resp.cmd_cnt].wl_conf_cnt], &wl_conf, sizeof(wl_conf)); resp.command[resp.cmd_cnt].wl_conf_cnt++; } } } } resp.cmd_cnt++; } else { if (entry->cap.mesh_type) { resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_CONFIG | TSS_CMD_TYPE_CONNECT; resp.command[resp.cmd_cnt].dtype = TSS_MESH_TYPE; if (entry->cap.mesh_type & TSS_MESH_TYPE_DECOMESH) { resp.command[resp.cmd_cnt].mesh_type = TSS_MESH_TYPE_DECOMESH; type = TSS_WIRELESS_FUNC_TYPE_BACKHAUL; entry->target_mesh = TSS_MESH_TYPE_DECOMESH; } else if (entry->cap.mesh_type & TSS_MESH_TYPE_EASYMESH) { resp.command[resp.cmd_cnt].mesh_type = TSS_MESH_TYPE_EASYMESH; type = TSS_WIRELESS_FUNC_TYPE_EASYMESH; entry->target_mesh = TSS_MESH_TYPE_EASYMESH; } else if (entry->cap.mesh_type & TSS_MESH_TYPE_ONEMESH) { resp.command[resp.cmd_cnt].mesh_type = TSS_MESH_TYPE_ONEMESH; type = TSS_WIRELESS_FUNC_TYPE_BACKHAUL; entry->target_mesh = TSS_MESH_TYPE_ONEMESH; } resp.cmd_cnt++; } resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_CONFIG | TSS_CMD_TYPE_CONNECT; resp.command[resp.cmd_cnt].dtype = TSS_FORMAT_STRUCT; resp.command[resp.cmd_cnt].format = TSS_WIRELESS_CONFIG; resp.command[resp.cmd_cnt].wl_conf_cnt = 0; if (type == 0) { if (SYSTEM_MODE_ONLY_SUPPORT_STA(sysmode)) type = TSS_WIRELESS_FUNC_TYPE_STA; else type = TSS_WIRELESS_FUNC_TYPE_MASTER; } for (i = BAND_2G; i < BAND_MAX; i++) { for (j = 0; j < MAX_MULTI_SSID_VAP; j++) { if (tss_get_wireless_config(i, type, j, &wl_conf) != TSS_OK || !wl_conf.enable) continue; if ((wl_conf.wl_freq & entry->cap.wl_freq) && (wl_conf.key_type & entry->cap.key_type)) { band = frequency_to_wireless_band(wl_conf.freq_point); if (band && !(band & entry->cap.band)) continue; memcpy(&resp.command[resp.cmd_cnt].wl_conf[resp.command[resp.cmd_cnt].wl_conf_cnt], &wl_conf, sizeof(wl_conf)); resp.command[resp.cmd_cnt].wl_conf_cnt++; } } } resp.cmd_cnt++; } } if (rep_resp->sync == TSS_SYNC_TRUE) { resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_QS_STORE; resp.command[resp.cmd_cnt].dtype = TSS_SYSTEM_MODE; resp.command[resp.cmd_cnt].sysmode = rep_resp->sysmode; resp.cmd_cnt++; /* When Provisionee is selected to run in GW mode and Provisioner is running in GW mode, sync the network config */ if (rep_resp->sysmode == TSS_SYS_MODE_GW && sysmode == rep_resp->sysmode) { resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_QS_STORE; resp.command[resp.cmd_cnt].dtype = TSS_FORMAT_STRUCT; resp.command[resp.cmd_cnt].format = TSS_NETWORK; tss_get_network_config(&resp.command[resp.cmd_cnt].net_conf); resp.cmd_cnt++; } /* When provisionee support WiFi AP, sync the wireless AP config */ if (SYSTEM_MODE_SUPPORT_AP(rep_resp->sysmode)) { resp.command[resp.cmd_cnt].ctype = TSS_CMD_TYPE_QS_STORE; resp.command[resp.cmd_cnt].dtype = TSS_FORMAT_STRUCT; resp.command[resp.cmd_cnt].format = TSS_WIRELESS_CONFIG; resp.command[resp.cmd_cnt].wl_conf_cnt = 0; for (i = BAND_2G; i < BAND_MAX; i++) { for (j = TSS_WIRELESS_FUNC_TYPE_MASTER; j < MAX_WIRELESS_FUNC_TYPE; j++) { if (!WIRELESS_FUNC_TYPE_ACCESSABLE(sysmode, j)) continue; for (k = 0; k < MAX_MULTI_SSID_VAP; k++) { if (tss_get_wireless_config(i, j, k, &wl_conf) != TSS_OK) continue; if (SYSTEM_MODE_ONLY_SUPPORT_STA(sysmode) && (wl_conf.func_type == TSS_WIRELESS_FUNC_TYPE_STA)) wl_conf.func_type = TSS_WIRELESS_FUNC_TYPE_MASTER; if ((wl_conf.wl_freq & entry->cap.wl_freq) && (wl_conf.key_type & entry->cap.key_type)) { band = frequency_to_wireless_band(wl_conf.freq_point); if (band && !(band & entry->cap.band)) continue; memcpy(&resp.command[resp.cmd_cnt].wl_conf[resp.command[resp.cmd_cnt].wl_conf_cnt], &wl_conf, sizeof(wl_conf)); resp.command[resp.cmd_cnt].wl_conf_cnt++; } } } } resp.cmd_cnt++; } } } pair.ecc_prikey = tss_ctx->ecc_private_key; pair.ecc_prikey_len = tss_ctx->ecc_private_key_len; pair.ecc_pubkey = entry->public_key; pair.ecc_pubkey_len = entry->public_key_len; if (rep_resp->padding.data) { resp.padding.data = rep_resp->padding.data; resp.padding.len = rep_resp->padding.len; } return build_tss_resp_data(&resp, payload_len, &pair, tss_ctx->ecc_public_key, tss_ctx->ecc_public_key_len); }
最新发布
12-02
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值