Пример #1
0
// Data = AuthData#FTCServer(localIp/netMask/gateWay/dnsServer)
void EasyLinkNotify_EasyLinkGetExtraDataHandler(int datalen, char* data, mico_Context_t * const inContext)
{
  OSStatus err;
  int index ;
  char address[16];
  easylink_log_trace();
  uint32_t *ipInfo, ipInfoCount;
  require_action(inContext, exit, err = kParamErr);
  char *debugString;

  debugString = DataToHexStringWithSpaces( (const uint8_t *)data, datalen );
  easylink_log("Get user info: %s", debugString);
  free(debugString);

  for(index = datalen - 1; index>=0; index-- ){
    if(data[index] == '#' &&( (datalen - index) == 5 || (datalen - index) == 25 ) )
      break;
  }
  require_action(index >= 0, exit, err = kParamErr);

  data[index++] = 0x0;
  ipInfo = (uint32_t *)&data[index];
  ipInfoCount = (datalen - index)/sizeof(uint32_t);
  require_action(ipInfoCount >= 1, exit, err = kParamErr);
  mico_rtos_lock_mutex(&inContext->flashContentInRam_mutex);
  inContext->flashContentInRam.micoSystemConfig.easylinkServerIP = *(uint32_t *)(ipInfo);

  if(ipInfoCount == 1){
    inContext->flashContentInRam.micoSystemConfig.dhcpEnable = true;
    inet_ntoa( address, inContext->flashContentInRam.micoSystemConfig.easylinkServerIP);
    easylink_log("Get auth info: %s, EasyLink server ip address: %s", data, address);
  }else{
    inContext->flashContentInRam.micoSystemConfig.dhcpEnable = false;
    ipInfo = (uint32_t *)&data[index];
    inet_ntoa(inContext->flashContentInRam.micoSystemConfig.localIp, *(uint32_t *)(ipInfo+1));
    inet_ntoa(inContext->flashContentInRam.micoSystemConfig.netMask, *(uint32_t *)(ipInfo+2));
    inet_ntoa(inContext->flashContentInRam.micoSystemConfig.gateWay, *(uint32_t *)(ipInfo+3));
    inet_ntoa(inContext->flashContentInRam.micoSystemConfig.dnsServer, *(uint32_t *)(ipInfo+4));
    strcpy((char *)inContext->micoStatus.localIp, inContext->flashContentInRam.micoSystemConfig.localIp);
    strcpy((char *)inContext->micoStatus.netMask, inContext->flashContentInRam.micoSystemConfig.netMask);
    strcpy((char *)inContext->micoStatus.gateWay, inContext->flashContentInRam.micoSystemConfig.gateWay);
    strcpy((char *)inContext->micoStatus.dnsServer, inContext->flashContentInRam.micoSystemConfig.dnsServer);
    inet_ntoa( address, inContext->flashContentInRam.micoSystemConfig.easylinkServerIP);
    easylink_log("Get auth info: %s, EasyLink server ip address: %s, local IP info:%s %s %s %s ", data, address, inContext->flashContentInRam.micoSystemConfig.localIp,\
    inContext->flashContentInRam.micoSystemConfig.netMask, inContext->flashContentInRam.micoSystemConfig.gateWay,inContext->flashContentInRam.micoSystemConfig.dnsServer);
  }
  mico_rtos_unlock_mutex(&inContext->flashContentInRam_mutex);

  require_noerr(ConfigELRecvAuthData(data, inContext), exit);
  
  EasylinkFailed = false;
  mico_rtos_set_semaphore(&easylink_sem);
  ConfigEasyLinkIsSuccess(inContext);
  return;

exit:
  easylink_log("ERROR, err: %d", err);
  ConfigWillStop(inContext);
  MicoSystemReboot();
}
Пример #2
0
void EasyLinkNotify_EasyLinkGetExtraDataHandler(int datalen, char* data, const int inContext)
{
  OSStatus err;
  int index ;
  char address[16];
  char *debugString;
  uint32_t *ipInfo, ipInfoCount;
  debugString = DataToHexStringWithSpaces( (const uint8_t *)data, datalen );
  wifi_easylink_log("Get user info: %s", debugString);
  free(debugString);
  
  for(index = datalen - 1; index>=0; index-- ){
    if(data[index] == '#' &&( (datalen - index) == 5 || (datalen - index) == 25 ) )
      break;
  }
  require_action(index >= 0, exit, err = kParamErr);
  
  data[index++] = 0x0;
  ipInfo = (uint32_t *)&data[index];
  ipInfoCount = (datalen - index)/sizeof(uint32_t);
  require_action(ipInfoCount >= 1, exit, err = kParamErr);
  
  inet_ntoa( address, *(uint32_t *)(ipInfo) );
  wifi_easylink_log("Get auth info: %s, EasyLink server ip address: %s", data, address);
  is_easylink_success = 1;
  mico_rtos_set_semaphore(&easylink_sem);
  return;
  
exit:
  wifi_easylink_log("ERROR, err: %d", err); 
}