www.pudn.com > Net_apps.rar > IoEnv.c


//************************************************************* 
// Copyright 2003 Service & Quality Technology CO., LTD. 
// ALL RIGHTS RESERVED. 
// This software is provided under license and contains proprietary 
// and confidential material which is the property of SQ tech. 
// 
// FileName     : IoEnv.c 
// Description  : IO eeprom 
// Reversion    : 0.1 ,Date : 2004/03/24 ,Author  : gofly 
//                Comment : first implementation 
// 
//************************************************************* 
#include "opt.h" 
#include "..\include\L0\video\detection.h" 
#include "..\include\L3\net_apps\sntp\sntp.h" 
#include "..\include\L3\net_apps\httpd\HttpServer.h" 
#include "..\include\L3\net_apps\httpd\api\HttpApi.h" 
#include "..\include\L3\net_apps\IoEnv.h" 
#include "..\include\L3\net_apps\ddns\ddns.h" 
#include "..\include\L3\net_apps\httpd\api\HttpFileSystem.h" 
#include "..\include\L0\video\ae.h" 
#include "..\include\L2\system\timer.h"    //add by jgy 07/28/05 
 
INT8U  SmtpAuthflag; 
INT8U  *pSavePcTrigger; 
INT8U  Audioflag         = 0 ; 
INT8U Char00 = 0x00; 
INT8U Char1[] = "1\0x00"; 
INT8U Char0[] = "0\0x00"; 
INT8U CharPwd[] = {"*******\0x00"}; 
INT8U Check[]={"checked\x00"}; 
INT8U Select[]={"selected\x00"}; 
INT16U Httpportid = 0 ; 
 
#define StrAdjust(index) while(*(index) == '%') (index) += 3    //add by jgy 07/29/05 
//*********************************************** 
// IoInit() 
// Description  :  init io 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
void IoInit() 
{ 
 //IoIpAddress(NULL, (INT8U *)netif, IOINIT, ROOT);// call in main 
   IoFtp            (NULL, NULL, IOINIT, ROOT); 
   IoAudio          (NULL, NULL, IOINIT, ROOT); 
   IoCookie         (NULL, NULL, IOINIT, ROOT); 
   IoDHCP_ENABLE    (NULL, NULL, IOINIT, ROOT); 
   IoDns            (NULL, NULL, IOINIT, ROOT); 
   IoHttpPort       (NULL, NULL, IOINIT, ROOT); 
   IoName           (NULL, NULL, IOINIT, ROOT); 
   IoPass           (NULL, NULL, IOINIT, ROOT); 
   IoWebCamName     (NULL, NULL, IOINIT, ROOT); 
   IoWid            (NULL, NULL, IOINIT, ROOT); 
   IoVideo          (NULL, NULL, IOINIT, ROOT); 
   IoSmtp           (NULL, NULL, IOINIT, ROOT); 
   IoW              (NULL, NULL, IOINIT, ROOT); 
   IoH              (NULL, NULL, IOINIT, ROOT); 
   IoImgSet         (NULL, NULL, IOINIT, ROOT); 
   IoMAC_ADDR       (NULL, NULL, IOINIT, ROOT); 
   IoPPPOE          (NULL, NULL, IOINIT, ROOT); 
   IoDDNS           (NULL, NULL, IOINIT, ROOT); 
   IoIpMode         (NULL, NULL, IOINIT, ROOT); 
   IoWlan           (NULL, NULL, IOINIT, ROOT); 
   IoSntp           (NULL, NULL, IOINIT, ROOT); 
   IoStorage        (NULL,    0, IOINIT, ROOT); 
   IoVideoCh        (NULL, NULL, IOINIT, ROOT); 
   IoEventTrigger   (NULL, NULL, IOINIT, ROOT); 
   IoMDTrigger      (NULL, NULL, IOINIT, ROOT); 
   IoViewUser       (NULL, NULL, IOINIT, ROOT); 
   IoImgReversal    (NULL, NULL, IOINIT, ROOT);  //add by jgy 
 
} 
//*********************************************** 
// IoSntp() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoSntp(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
//------------------------------------------------- 
//   SNTP_SERVER 
//   SNTP_SELECT     -12 
//   SNTP_SELECT     +12 
//   ps -03.5   =>  - 13 
//------------------------------------------------- 
    static	INT8U       ntp_server[32];			                                        //ntp server Name,init \x0+210.59.157.10 or "\x1"+"time.stdtime.gov.tw" is Public NTP Servers 
    static  INT8S       ntp_gmt; 
    INT8S              *p; 
    INT8U               Size    =   0; 
 
    if(! extra_strncmp(Key ,"SNTP_SERVER")) 
    { 
        p =  ntp_server;    Size = sizeof(ntp_server); 
    } 
    else if(! strncmp(Key ,"SNTP_SELECT",11)) 
    { 
        p = &ntp_gmt; 
        if(op == IOR) 
        { 
            *data = ntp_gmt;       //for sntp offset time 
        } 
    } 
    else if(! extra_strncmp(Key ,"SNTP_STATUS")) 
    { 
       return  &Char00;// will change return nowtime 
    } 
    else 
       return &Char00; 
 
    switch(op) 
    { 
        case IOINIT: 
            ntp_gmt	    = eprom_ptos.eprom_opt_ntp.ntp_gmt; 
            memcpy(ntp_server,eprom_ptos.eprom_opt_ntp.ntp_server ,sizeof(ntp_server)); 
            break; 
        case IOR: 
            if(p == &ntp_gmt) 
            { 
                if(atoi(Key + 11) == ntp_gmt) 
                    return Select; 
                else 
                    return &Char00; 
            } 
            else return p; 
 
            break; 
        case IOW: 
            Size = min((unsigned int)Size,strlen(data)); 
 
            if(p == &ntp_gmt ) 
            { 
                if(*data == '%') 
                { 
                    if(ntp_gmt != atoi(data+3)) 
                    { 
                        ntp_gmt = atoi(data+3); 
                    } 
                    else 
                    { 
                        sntp_start(); 
                        return &Char00; 
                    } 
 
                } 
                else 
                { 
                    if(ntp_gmt != atoi(data)) 
                    { 
                        ntp_gmt = atoi(data); 
                    } 
                    else 
                    { 
                        sntp_start(); 
                        return &Char00; 
                    } 
                } 
            } 
            else if(strlen(data) > Size || *data == 0x00) 
            { 
                return &Char00; 
            } 
            else if( extra_strncmp(p ,data)) 
            { 
	            strcpy(p,data); 
            } 
            else 
            { 
                sntp_start(); 
                return &Char00; 
            } 
 
            eprom_ptos.eprom_opt_ntp.ntp_gmt = ntp_gmt; 
            memcpy(eprom_ptos.eprom_opt_ntp.ntp_server ,ntp_server,sizeof(ntp_server)); 
            eprom_24c08_write(&eprom_ptos.eprom_opt_ntp, eprom_ptos.eprom_opt_ntp.offset, sizeof(OPT_NTP)); 
 
            return p; 
 
            break; 
 
 
    } 
 
 
 
    return &Char00; 
} 
//*********************************************** 
// IoWlan() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoWlan(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
//----------------------------------------------------- 
//    WLAN_EN    	WLAN_EN00     WLAN_EN01 
//    WLAN_AUTH   WLAN_AUTH00   WLAN_AUTH01 
//    WLAN_SSID 
//    WLAN_KEY_ID01-04 
//		WLAN_KEY_1-4 
//----------------------------------------------------- 
     static INT8U WlanEnable;			// 1 (enable)|| 1(disable) 
     static INT8U WlanAuth;			// 0 (OpenSystem)|| 1(ShareKey) 
     static INT8U WlanSsid[34]; 
     static INT8U WlanKeyId;			// 1-4 
     static INT8U WlanKey[4][16]; 
     INT8U*	p = NULL; 
     INT8U  size = 0; 
      if(! extra_strncmp(Key ,"WLAN_EN")) 
      { 
         p =  &WlanEnable; 
      } 
      else if(! strncmp(Key ,"WLAN_EN0",8)) 
      { 
          if(WlanEnable == atoi(Key+7))return Check; 
 
          return &Char00; 
      } 
      else if(! extra_strncmp(Key ,"WLAN_AUTH")) 
      { 
         p =  &WlanAuth; 
      } 
      else if(! strncmp(Key ,"WLAN_AUTH0",10)) 
      { 
          if(WlanAuth == atoi(Key+9))return Check; 
 
          return &Char00; 
      } 
      else if(! extra_strncmp(Key ,"WLAN_SSID")) 
      { 
         p =  WlanSsid;    size = sizeof(WlanSsid); 
      } 
      else if(! extra_strncmp(Key ,"WLAN_KEY_ID")) 
      { 
         p =  &WlanKeyId; 
      } 
      else if(! strncmp(Key ,"WLAN_KEY_ID0",12)) 
      { 
          if(WlanKeyId == atoi(Key+11))return Check; 
 
          return &Char00; 
      } 
      else if(! strncmp(Key ,"WLAN_KEY_",9)) 
      { 
         p = WlanKey[atoi(Key+9)-1]; size = 16; 
      } 
      else 
      { 
      	return &Char00; 
      } 
 
 
 
 
     switch(op) 
     { 
        case IOINIT: 
                     WlanEnable 	= eprom_ptos.eprom_opt_wlan.wep_en; 
                     WlanAuth       = eprom_ptos.eprom_opt_wlan.auth; 
                     WlanKeyId	    = eprom_ptos.eprom_opt_wlan.wep_key_id; 
                     memcpy(WlanSsid,eprom_ptos.eprom_opt_wlan.des_ssid,sizeof(WlanSsid)); 
                     memcpy(WlanKey,eprom_ptos.eprom_opt_wlan.wep_key,sizeof(WlanKey)); 
        					break; 
        case IOR   : 
                     return p; 
        					break; 
        case IOW   : 
        		    size = min((unsigned int)size,strlen(data)); 
 
                    if(p == &WlanEnable && *data - 0x30 != WlanEnable)   WlanEnable = *data - 0x30; 
                    else if(p == &WlanAuth && *data - 0x30 != WlanAuth)  WlanAuth   = *data - 0x30; 
                    else if(p == &WlanKeyId && *data - 0x30 != WlanKeyId)  WlanKeyId   = *data - 0x30; 
                    // change by gofly SSID  == 0x00   AUTO 
                    //else if(strlen(data) > size || *data == 0x00) return &Char00; 
                    else if(strlen(data) > size ) return &Char00; 
                    else if( extra_strncmp(p ,data)) 
                    { 
	                    strcpy(p,data); 
                    } 
                    else  return &Char00; 
 
 
                    eprom_ptos.eprom_opt_wlan.wep_en 		=  WlanEnable; 
                    eprom_ptos.eprom_opt_wlan.auth 			=  WlanAuth; 
                    eprom_ptos.eprom_opt_wlan.wep_key_id   =  WlanKeyId; 
                    memcpy(eprom_ptos.eprom_opt_wlan.des_ssid,WlanSsid,sizeof(WlanSsid)); 
                    memcpy(eprom_ptos.eprom_opt_wlan.wep_key,WlanKey,sizeof(WlanKey)); 
                    if(strlen(WlanKey[WlanKeyId - 1]) == 13 ) 
                    		eprom_ptos.eprom_opt_wlan.wep_type = 128; 
                    else 
                    	   eprom_ptos.eprom_opt_wlan.wep_type = 64; 
 
                    eprom_24c08_write(&eprom_ptos.eprom_opt_wlan, eprom_ptos.eprom_opt_wlan.offset, sizeof(OPT_WLAN)); 
 
        				   break; 
 
 
     } 
 
      return &Char00; 
} 
//*********************************************** 
// IoMDRang() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
INT8U *IoMDRang(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
   INT16U md_xy_rang_0[4] ; 
   INT16U md_xy_rang_1[4] ; 
   static INT8U Msg[64]; 
 
   Msg[0] = 0x00; 
 
   if(atoi(Key + 7) == 1) 
   { 
        if(FALSE == motion_det_get(0, md_xy_rang_0)) 
            return Msg; 
#if 0 
        sprintf(Msg,"(%04d,%04d) ~ (%04d,%04d)", 
                                 md_xy_rang_0[0],md_xy_rang_0[1] 
                                ,md_xy_rang_0[2],md_xy_rang_0[3]); 
 
        eprom_ptos.eprom_opt_trigger.md1_x1 = md_xy_rang_0[0]; 
        eprom_ptos.eprom_opt_trigger.md1_y1 = md_xy_rang_0[1]; 
        eprom_ptos.eprom_opt_trigger.md1_x2 = md_xy_rang_0[2]; 
        eprom_ptos.eprom_opt_trigger.md1_y2 = md_xy_rang_0[3]; 
#endif 
   } 
   else if(atoi(Key + 7) == 2) 
   { 
        if(FALSE == motion_det_get(1, md_xy_rang_1)) 
            return Msg; 
#if 0 
       sprintf(Msg,"(%04d,%04d) ~ (%04d,%04d)", 
                                 md_xy_rang_1[0],md_xy_rang_1[1] 
                                ,md_xy_rang_1[2],md_xy_rang_1[3]); 
 
        eprom_ptos.eprom_opt_trigger.md2_x1 = md_xy_rang_1[0]; 
        eprom_ptos.eprom_opt_trigger.md2_y1 = md_xy_rang_1[1]; 
        eprom_ptos.eprom_opt_trigger.md2_x2 = md_xy_rang_1[2]; 
        eprom_ptos.eprom_opt_trigger.md2_y2 = md_xy_rang_1[3]; 
#endif 
   } 
 
   return Msg; 
   /* 
   return 0x00; 
 
   if(FALSE == motion_det_get(0, md_xy_rang_0) || FALSE == motion_det_get(0, md_xy_rang_1)) 
   { 
     Msg[0] =   0x00; 
     return Msg; 
   } 
 
 
 
   if(atoi(Key + 7) == 1) 
   { 
    sprintf(Msg,"(%04d,%04d) ~ (%40d,%04d)", 
                             md_xy_rang_0[0],md_xy_rang_0[1] 
                            ,md_xy_rang_0[2],md_xy_rang_0[3]); 
 
    eprom_ptos.eprom_opt_trigger.md1_x1 = md_xy_rang_0[0]; 
    eprom_ptos.eprom_opt_trigger.md1_y1 = md_xy_rang_0[1]; 
    eprom_ptos.eprom_opt_trigger.md1_x2 = md_xy_rang_0[2]; 
    eprom_ptos.eprom_opt_trigger.md1_y2 = md_xy_rang_0[3]; 
 
   } 
   if(atoi(Key + 7) == 2) 
   { 
   sprintf(Msg,"(%40d,%04d) ~ (%04d,%04d)", 
                             md_xy_rang_1[0],md_xy_rang_1[1] 
                            ,md_xy_rang_1[2],md_xy_rang_1[3]); 
 
    eprom_ptos.eprom_opt_trigger.md2_x1 = md_xy_rang_1[0]; 
    eprom_ptos.eprom_opt_trigger.md2_y1 = md_xy_rang_1[1]; 
    eprom_ptos.eprom_opt_trigger.md2_x2 = md_xy_rang_1[2]; 
    eprom_ptos.eprom_opt_trigger.md2_y2 = md_xy_rang_1[3]; 
   } 
   return Msg; 
   */ 
} 
//*********************************************** 
// IOGpioTrigger() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
INT8U *IoEventTrigger(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
//------------------------------------------------------------------------------// 
//    GPIO_DI_TRIGGER         SAVE_TRIGGER 
//    GPIO_DO_TRIGGER         WARN_TRIGGER 
// 
//------------------------------------------------------------------------------// 
    static INT8U GpioDi1Trigger; 
    static INT8U GpioDi2Trigger; 
    static INT8U WarnMessageTrigger; 
    static INT8U SavePcTrigger; 
    static INT8U ShuttleTimeTrigger; 
    static INT8U GpioDo1TimerTrigger; 
    static INT8U GpioDo2TimerTrigger; 
    static INT8U MotionDet1Sensitive; 
    static INT8U MotionDet2Sensitive; 
    static INT8U tmp[2]; 
    INT8U  i; 
    INT8U *p = NULL,*q; 
    q = &GpioDi1Trigger; 
 
    if(! strncmp(Key ,"EventT_GPIO_TRIGGER_GI1",23)) 
    { 
        p = &GpioDi1Trigger; 
    } 
    else if(! strncmp(Key ,"EventT_GPIO_TRIGGER_GI2",23)) 
    { 
    	p = &GpioDi2Trigger; 
    } 
    else if(! strncmp(Key ,"EventT_WARNING_MESSAGE",22)) 
    { 
        p = &WarnMessageTrigger; 
    } 
    else if(! strncmp(Key ,"EventT_GPIO_TRIGGER_PC",22)) 
    { 
        p = &SavePcTrigger; 
        pSavePcTrigger = &SavePcTrigger; 
    } 
    else if(! strncmp(Key ,"EventT_SHUTTER_TIMER",20)) 
    { 
        p = &ShuttleTimeTrigger; 
    } 
    else if(! strncmp(Key ,"EventT_GPIO_O1_TIMER",20)) 
    { 
        p = &GpioDo1TimerTrigger; 
    } 
    else if(! strncmp(Key ,"EventT_GPIO_O2_TIMER",20)) 
    { 
        p = &GpioDo2TimerTrigger; 
    } 
    else if(! strncmp(Key ,"EventT_Det1_Sensitivity",23)) 
    { 
        //MotionDet1Sensitive = detection_ctrl.md_level[0]; 
        p = &MotionDet1Sensitive; 
        //p = &detection_ctrl.md_level[0]; 
        //return p; 
    } 
    else if(! strncmp(Key ,"EventT_Det2_Sensitivity",23)) 
    { 
        //MotionDet2Sensitive = detection_ctrl.md_level[1]; 
        p = &MotionDet2Sensitive; 
        //p = &detection_ctrl.md_level[1]; 
        //return p; 
    } 
    else if(! strncmp(Key ,"EventT_WARNING_MESSAGE_TEXT",27)) 
    { 
        //p = &WarnMessageTrigger; 
        //return &Char00; 
    } 
    else if(! strncmp(Key ,"EventT_Det_MDPC",15)) 
    { 
        INT8U MotionDetMDPC,MotionDet1TriggerEnable,MotionDet2TriggerEnable; 
        MotionDet1TriggerEnable    =   eprom_ptos.eprom_opt_trigger.motin_det1; //0; 
        MotionDet2TriggerEnable    =   eprom_ptos.eprom_opt_trigger.motin_det2; 
        MotionDetMDPC = (MotionDet1TriggerEnable | MotionDet2TriggerEnable)& SavePcTrigger; 
        sprintf(tmp,"%s",MotionDetMDPC?"y":"n"); 
        return &tmp; 
    } 
 
 
    switch(op ) 
    { 
        case IOINIT: 
          //------ will change from eeprom 
 
          GpioDi1Trigger        =   eprom_ptos.eprom_opt_trigger.gpio_in1; //0; 
          GpioDi2Trigger        =   eprom_ptos.eprom_opt_trigger.gpio_in2; //0; 
          WarnMessageTrigger    =   eprom_ptos.eprom_opt_trigger.warning_message; //0; 
          SavePcTrigger         =   eprom_ptos.eprom_opt_trigger.save_in_pc; 
          ShuttleTimeTrigger    =   eprom_ptos.eprom_opt_trigger.shutter_timer; 
          GpioDo1TimerTrigger   =   eprom_ptos.eprom_opt_trigger.gpio_out1_timer; 
          GpioDo2TimerTrigger   =   eprom_ptos.eprom_opt_trigger.gpio_out2_timer; 
          MotionDet1Sensitive   =   eprom_ptos.eprom_opt_trigger.md_sentivity[0]; 
          MotionDet2Sensitive   =   eprom_ptos.eprom_opt_trigger.md_sentivity[1]; 
 
          break; 
        case IOR: 
          if (p == &MotionDet1Sensitive || p == &MotionDet2Sensitive || p == &ShuttleTimeTrigger || p == &GpioDo1TimerTrigger || p == &GpioDo2TimerTrigger) 
          { 
            INT8U  tmp[10]; 
            sprintf(tmp,"%d",*p); 
            return tmp; 
          } 
          if(*p) 
          { 
          	return Check; 
          } 
          return &Char00; 
          break; 
        case IOW: 
 
          *p =  atoi(data); 
 
          for(i=0;i<8;i++) 
          { 
            if(p == (q + i)) 
            { 
            	m[i+8]=1; 
            } 
          } 
 
          eprom_ptos.eprom_opt_trigger.gpio_in1          =   GpioDi1Trigger      = m[8]; //0; 
          eprom_ptos.eprom_opt_trigger.gpio_in2          =   GpioDi2Trigger      = m[9]; //0; 
          eprom_ptos.eprom_opt_trigger.warning_message   =   WarnMessageTrigger  = m[10]; //0; 
          eprom_ptos.eprom_opt_trigger.save_in_pc        =   SavePcTrigger       = m[11]; 
          eprom_ptos.eprom_opt_trigger.shutter_timer     =   ShuttleTimeTrigger ;// = m[12]; 
          eprom_ptos.eprom_opt_trigger.gpio_out1_timer   =   GpioDo1TimerTrigger ;//= m[13]; 
          eprom_ptos.eprom_opt_trigger.gpio_out2_timer   =   GpioDo2TimerTrigger ;//= m[14]; 
          eprom_ptos.eprom_opt_trigger.md_sentivity[0]   =   detection_ctrl.md_level[0]; 
          eprom_ptos.eprom_opt_trigger.md_sentivity[1]   =   detection_ctrl.md_level[1]; 
 
          eprom_24c08_write(&eprom_ptos.eprom_opt_trigger , eprom_ptos.eprom_opt_trigger.offset, 
                     sizeof(OPT_TRIGGER));  //write to eprom 
 
 
         // printf("%s %d %d\n",Key,strlen(Key),atoi(data)); 
          //--- will write eeprom 
          break; 
    } 
    return &Char00; 
} 
//*********************************************** 
// IOMDTrigger() 
// Description  : 
// Parameters   : 
// Returns      : 
// 
//*********************************************** 
INT8U *IoMDTrigger(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
//------------------------------------------------------------------------------// 
//    Motion_Det_TRIGGER_ENABLE     Motion_Det_TRIGGER_GO1    Motion_Det_TRIGGER_GO2 
//    Motion_Det_TRIGGER_AUDIO      Motion_Det_TRIGGER_MAIL   Motion_Det_TRIGGER_FTP 
// 
//------------------------------------------------------------------------------// 
    static INT8U MotionDet1TriggerEnable; 
    static INT8U MotionDet2TriggerEnable; 
    static INT8U MotionDetTriggerGo1; 
    static INT8U MotionDetTriggerGo2; 
    static INT8U MotionDetTriggerSdCard; 
    static INT8U MotionDetTriggerAudio; 
    static INT8U MotionDetTriggerMail; 
    static INT8U MotionDetTriggerFtp; 
    INT8U  i; 
 
    //static INT8U m[]={0,0,0,0,0,0,0,0}; 
 
    INT8U *p = NULL,*q; 
    q = &MotionDet1TriggerEnable; 
    //p = &MotionDet1TriggerEnable; 
 
    if(! strncmp(Key ,"Motion_Det1_TRIGGER_ENABLE",26)) 
    { 
    	p = &MotionDet1TriggerEnable; 
    } 
    else if(! strncmp(Key ,"Motion_Det2_TRIGGER_ENABLE",26)) 
    { 
        p = &MotionDet2TriggerEnable; 
        //p=p+1; 
    } 
    else if(! strncmp(Key ,"Motion_Det_TRIGGER_GO1",22)) 
    { 
        p = &MotionDetTriggerGo1; 
        //p=p+2; 
    } 
    else if(! strncmp(Key ,"Motion_Det_TRIGGER_GO2",22)) 
    { 
        p = &MotionDetTriggerGo2; 
        //p=p+3; 
         
    } 
    else if(! strncmp(Key ,"Motion_Det_TRIGGER_SD_CARD",26)) 
    { 
        p = &MotionDetTriggerSdCard; 
        //p=p+4 
    } 
    else if(! strncmp(Key ,"Motion_Det_TRIGGER_AUDIO",24)) 
    { 
        p = &MotionDetTriggerAudio; 
    } 
    else if(! strncmp(Key ,"Motion_Det_TRIGGER_MAIL",23)) 
    { 
        p = &MotionDetTriggerMail; 
    } 
    else if(! strncmp(Key ,"Motion_Det_TRIGGER_FTP",22)) 
    { 
        p = &MotionDetTriggerFtp; 
    } 
 
    switch(op ) 
    { 
        case IOINIT: 
          //------ will change from eeprom 
 
          MotionDet1TriggerEnable    =   eprom_ptos.eprom_opt_trigger.motin_det1; //0; 
          MotionDet2TriggerEnable    =   eprom_ptos.eprom_opt_trigger.motin_det2; 
          MotionDetTriggerGo1        =   eprom_ptos.eprom_opt_trigger.gpio_out1; //0; 
          MotionDetTriggerGo2        =   eprom_ptos.eprom_opt_trigger.gpio_out2; //0; 
          MotionDetTriggerSdCard     =   eprom_ptos.eprom_opt_trigger.save_in_card;//0; 
          MotionDetTriggerAudio      =   eprom_ptos.eprom_opt_trigger.warning_audio ;//0; 
          MotionDetTriggerMail       =   eprom_ptos.eprom_opt_trigger.mail_image; //0; 
          MotionDetTriggerFtp        =   eprom_ptos.eprom_opt_trigger.ftp_image;//0; 
          //Motion_Det1_Sensitivity    =    
 
 
          break; 
 
        case IOR: 
          if(*p) 
          { 
          	return Check; 
          } 
          return &Char00; 
          break; 
        case IOW: 
 
          *p =  atoi(data); 
 
          for(i=0;i<8;i++) 
          { 
            if(p == (q + i)) 
            { 
            	m[i]=1; 
            } 
          } 
          // if( p ==  &MotionDetTriggerWMDR)       MotionDetTriggerWMDR           = atoi(data); 
          eprom_ptos.eprom_opt_trigger.motin_det1       =   MotionDet1TriggerEnable = m[0]; //0; 
          eprom_ptos.eprom_opt_trigger.motin_det2       =   MotionDet2TriggerEnable = m[1]; //0; 
          eprom_ptos.eprom_opt_trigger.gpio_out1        =   MotionDetTriggerGo1     = m[2]; //0; 
          eprom_ptos.eprom_opt_trigger.gpio_out2        =   MotionDetTriggerGo2     = m[3]; //0; 
          eprom_ptos.eprom_opt_trigger.save_in_card     =   MotionDetTriggerSdCard  = m[4];//0; 
          eprom_ptos.eprom_opt_trigger.warning_audio    =   MotionDetTriggerAudio   = m[5];//0; 
          eprom_ptos.eprom_opt_trigger.mail_image       =   MotionDetTriggerMail    = m[6]; //0; 
          eprom_ptos.eprom_opt_trigger.ftp_image        =   MotionDetTriggerFtp     = m[7];//0; 
 
              eprom_24c08_write(&eprom_ptos.eprom_opt_trigger , eprom_ptos.eprom_opt_trigger.offset, 
                 sizeof(OPT_TRIGGER)); 
 
 
          //printf("%s %d %d\n",Key,strlen(Key),atoi(data)); 
          //--- will write eeprom 
          break; 
    } 
 
 
 
 return &Char00; 
} 
//*********************************************** 
// IoIpMode() 
// Description  :   switch pppoe dhcp static 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoIpMode(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
     ///////////////////////////////////////////////////// 
     //     IP_MODE00   PPPOE 
     //     IP_MODE01   DHCP 
     //     IP_MODE02   STATIC 
     ///////////////////////////////////////////////////// 
     INT8U *p; 
 
     switch(op) 
     { 
        case IOINIT: break; 
        case IOR   : 
            if(atoi(Key+7) == 0) return IoPPPOE("PPPOE_ENABLE1",NULL,IOR,ROOT); 
            if(atoi(Key+7) == 1) return IoDHCP_ENABLE("DHCP_ENABLE1",NULL,IOR,ROOT); 
            //-- static---// 
            if(*IoPPPOE("PPPOE_ENABLE1",NULL,IOR,ROOT)== 0x00 && *IoDHCP_ENABLE("DHCP_ENABLE1",NULL,IOR,ROOT)== 0x00) 
                return Check; 
            else 
                return &Char00; 
 
            break; 
        case IOW    : 
            IoPPPOE("PPPOE_ENABLE","0",IOW,ROOT); 
            IoDHCP_ENABLE("DHCP_ENABLE","0",IOW,ROOT); 
            if( *data == 0x30) 
            { 
                p = IoPPPOE("PPPOE_ENABLE","1",IOW,ROOT); 
                //reset(SYSTEM); 
                return p; 
            } 
 
            if( *data == 0x31) 
            { 
                p = IoDHCP_ENABLE("DHCP_ENABLE","1",IOW,ROOT); 
                //reset(SYSTEM); 
                return p; 
            } 
            //-- static---// 
            if(*data == 0x32) return Check; 
 
 
            break; 
 
 
     } 
 
      return &Char00; 
} 
 
//*********************************************** 
// IoPPPOE() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoDDNS(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
	static INT8U       host_name[32];			                                    //init "\x0" 
	static INT8U       user[16]; 
	static INT8U       pass[16]; 
    static INT8U       stat[32]; 
    static INT8U       flag = 0; 
    INT8U             *p = NULL; 
    INT8U              size; 
 
 
 
 
      if(op == IOINIT) 
      { 
        //DdnsApi(GBody,NULL,0); 
        memcpy(host_name, eprom_ptos.eprom_opt_ddns.host_name , sizeof(host_name)); 
        memcpy(user,eprom_ptos.eprom_opt_ddns.user , sizeof(user)); 
        memcpy(pass, eprom_ptos.eprom_opt_ddns.pass , sizeof(pass)); 
     /* //--- will change from eeprom 
        memcpy(host_name, "gofly.dyndns.org" , sizeof(host_name)); 
        memcpy(user, "gofly" , sizeof(user)); 
        memcpy(pass, "goflytku" , sizeof(pass)); 
       */ 
        memset(stat,0x00,sizeof(stat)); 
        return p; 
      } 
 
 
        if(! extra_strncmp(Key ,"DDNS_HOST")) 
        { 
            p =  host_name;    size = sizeof(host_name); 
        } 
        else if(! extra_strncmp(Key ,"DDNS_USER")) 
        { 
            p =  user;    size = sizeof(user); 
        } 
        else if(! extra_strncmp(Key ,"DDNS_PASS")) 
        { 
            if (! strncmp(data ,"*******" ,7)) 
            { 
                return &Char00; 
            } 
            p =  pass;     size = sizeof(pass); 
        } 
        else if(! extra_strncmp(Key ,"DDNS_STAT")) 
        { 
            p =  stat;     size = sizeof(stat); 
        } 
 
 
        else if(! extra_strncmp(Key ,"DDNS_GET_PASS")) 
             return pass; 
        else return   &Char00; 
 
 
 
     if(op == IOW) 
     { 
 
        if(data[0] != 0x00 && extra_strncmp(p ,data)) 
        { 
           memset(p, 0x00, size); 
           memcpy(p, data, strlen(data)); 
           flag++; 
 
        } 
        #if EEPROM_CHANGE_EVERY 
        if(flag) 
        #else 
        if(p == pass && flag) 
        #endif 
        { 
 
            flag    =   0; 
            //--- will change eeprom 
            memcpy(eprom_ptos.eprom_opt_ddns.host_name ,host_name,  sizeof(host_name)); 
            memcpy(eprom_ptos.eprom_opt_ddns.user ,user, sizeof(user)); 
            memcpy( eprom_ptos.eprom_opt_ddns.pass ,pass, sizeof(pass)); 
            eprom_24c08_write(&eprom_ptos.eprom_opt_ddns, eprom_ptos.eprom_opt_ddns.offset, sizeof(OPT_DDNS)); 
 
        } 
 
 
 
        if(! extra_strncmp(Key ,"DDNS_HOST")) 
        { 
            DdnsStart(); 
        } 
         
     }/* if(op == IOW)*/ 
 
 
 
    if(p == pass ) return    &Char00; 
 
 
 
 
    return p; 
} 
 
//*********************************************** 
// IoAppVer() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoAppVer(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    return    APP_VER; 
 
} 
//*********************************************** 
// IoPPPOE() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoPPPOE(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
	static INT8U       server_name[32];			                                    //init "\x0" 
	static INT8U       ppp_user[32]; 
	static INT8U       ppp_pass[16]; 
    static INT8U       flag = 0; 
    static INT8U       ppp_session_id[6]; 
    static INT8U       tmp[32]; 
    INT8U             *p = NULL; 
    INT8U              size; 
 
 
 
 
      if(op == IOINIT) 
      { 
        memcpy(server_name, eprom_ptos.eprom_opt_pppoe.server_name , sizeof(server_name)); 
        memcpy(ppp_user, eprom_ptos.eprom_opt_pppoe.ppp_user , sizeof(ppp_user)); 
        memcpy(ppp_pass, eprom_ptos.eprom_opt_pppoe.ppp_pass , sizeof(ppp_pass)); 
        //ppp_session_id = eprom_ptos.eprom_opt_pppoe.ppp_session_id; 
        return p; 
      } 
 
 
        if(! extra_strncmp(Key ,"PPPOE_NAME")) 
        { 
            p =  ppp_user;    size = sizeof(ppp_user); 
        } 
        else if(! extra_strncmp(Key ,"PPPOE_PASS")) 
        { 
            p =  ppp_pass;     size = sizeof(ppp_pass); 
        } 
        else if(! extra_strncmp(Key ,"PPPOE_SESSIONID")) ///< for pppoe session id 
        { 
            memcpy(ppp_session_id,eprom_ptos.eprom_opt_pppoe.ppp_session_id,sizeof(ppp_session_id)); 
            p =  ppp_session_id; 
            size=sizeof(ppp_session_id); 
        } 
        else if(! strncmp(Key ,"PPPOE_ENABLE",10)) 
        { 
             p =  server_name;  size = sizeof(server_name); 
        } 
        else if(! extra_strncmp(Key ,"PPPOE_GET_PASS")) 
             return ppp_pass; 
        else return   &Char00; 
 
     if(op == IOW) 
     { 
        if(p == server_name) //PPPOE_ENABLE1 
        { 
           if(atoi(server_name) != atoi(data)) 
           { 
                sprintf(server_name, "%d\x00", atoi(data)); 
                flag++; 
           } 
 
        } 
 
        if( p == ppp_session_id || (data[0] != 0x00 && extra_strncmp(p ,data))) 
        { 
           memset(p, 0x00, size); 
           memcpy(p, data, strlen(data)); 
           flag++; 
 
        } 
        #if EEPROM_CHANGE_EVERY 
        if(flag) 
        #else 
        if((p == ppp_pass || p == ppp_session_id )&& flag) 
        #endif 
        { 
            //INT16U *test0; 
            //INT16U test; 
            //test0 = (INT16U *)data; 
 
            //test = *test0; 
            flag    =   0; 
            memcpy(eprom_ptos.eprom_opt_pppoe.server_name, server_name, sizeof(server_name)); 
            memcpy(eprom_ptos.eprom_opt_pppoe.ppp_user ,ppp_user,  sizeof(ppp_user)); 
            memcpy(eprom_ptos.eprom_opt_pppoe.ppp_pass ,ppp_pass,  sizeof(ppp_pass)); 
            memcpy(eprom_ptos.eprom_opt_pppoe.ppp_session_id ,ppp_session_id,sizeof(ppp_session_id));//*((INT16U *)data); 
            eprom_24c08_write(&eprom_ptos.eprom_opt_pppoe, eprom_ptos.eprom_opt_pppoe.offset, sizeof(OPT_PPPOE)); 
        } 
 
 
     }/* if(op == IOW)*/ 
 
 
 
    if(p == ppp_pass ) return    &CharPwd; 
 
    if(p == server_name) 
    { 
       if(atoi(server_name) == atoi(Key+12)) return Check; 
       else  return    &Char00; 
 
    } 
 
 
    return p; 
} 
 
//*********************************************** 
// IoFtp() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoFtp(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static INT8U  FtpServer[32]; 
    static INT8U  FtpUser[16]; 
    static INT8U  FtpPass[16]; 
    static INT8U  FtpPort[6]; 
    static INT8U  FtpMode[2]; 
    static INT8U  FtpTrigger[2]; 
    INT8U        *p; 
    INT8U         size; 
 
    if(op == IOINIT) 
    {    //---- change by gofly 
 
 
         if( strlen(eprom_ptos.eprom_opt_ftp.ftp_server) > sizeof(FtpServer)) 
            FtpServer[0] = 0x00; 
         else 
            strcpy(FtpServer, eprom_ptos.eprom_opt_ftp.ftp_server); 
 
         if(strlen(eprom_ptos.eprom_opt_ftp.ftp_user) > sizeof(FtpUser)) 
            FtpUser[0] = 0x00; 
         else 
            strcpy(FtpUser, eprom_ptos.eprom_opt_ftp.ftp_user); 
 
         if(strlen(eprom_ptos.eprom_opt_ftp.ftp_pass) > sizeof(FtpPass)) 
            FtpPass[0] = 0x00; 
         else 
            strcpy(FtpPass, eprom_ptos.eprom_opt_ftp.ftp_pass); 
 
 
 
        sprintf(FtpPort, "%d\x00", eprom_ptos.eprom_opt_ftp.ftp_port); 
        sprintf(FtpMode, "%d\x00", eprom_ptos.eprom_opt_ftp.ftp_mod); 
 
        FtpTrigger[0] = 0x30; // will change from eepron SQ_2_90_1 
 
       /* 
        //---- will change from eeprom 
        strcpy(FtpServer, "192.168.1.108"); 
        strcpy(FtpUser,   "gofly"); 
        strcpy(FtpPass,   "goflytku"); 
        strcpy(FtpPort,   "21"); 
        strcpy(FtpMode,   "0\x00"); //o port 1 pasv 
          */ 
        return &Char00; 
    } 
 
    if(! extra_strncmp(Key ,"FTP_SERVER")) 
    { 
        p =   FtpServer;   size = sizeof(FtpServer); 
    } 
    else if(! extra_strncmp(Key ,"FTP_USER")) 
    { 
        p =   FtpUser;     size = sizeof(FtpUser); 
    } 
    else if(! extra_strncmp(Key ,"FTP_PASS")) 
    { 
        if (! strncmp(data ,"*******" ,7)) 
        { 
            return &Char00; 
        } 
        p =   FtpPass;    size = sizeof(FtpPass); 
    } 
    else if(! extra_strncmp(Key ,"FTP_PORT")) 
    { 
        p =   FtpPort;    size = sizeof(FtpPort); 
    } 
    else if(! strncmp(Key ,"FTP_MODE" ,8)) 
    { 
        p =   FtpMode;    size = sizeof(FtpMode); 
 
    } 
    else if(! strncmp(Key ,"FTP_TRIGGER" ,11)) 
    { 
        p =   FtpTrigger;    size = sizeof(FtpTrigger); 
 
    } 
    else if(! strncmp(Key ,"GET_FTP_PASS" ,12)) 
    { 
        p =   FtpPass;    size = sizeof(FtpPass); 
        return p; 
 
    } 
    else if(! strncmp(Key ,"GET_FTP_MODE" ,12)) 
    { 
        p =   FtpMode;    size = sizeof(FtpMode); 
        return p; 
    } 
    else 
    { 
        return &Char00; 
    } 
 
 
 
    if(op == IOR) 
    { 
        if(p == FtpMode && FtpMode[0] == Key[8]) //FTP_MODE1 FTP_MODE0 
            return Check; 
        if(p == FtpTrigger && FtpTrigger[0] == Key[12]) 
            return Check; 
 
        if(p == FtpMode || p == FtpTrigger) 
            return &Char00; 
 
        return (p == FtpPass )   ?     &Char00: p; //can't get FTP_PASS 
    } 
 
    if(op == IOW) 
    { 
        static INT8U flag = 0; 
        if(strlen(data) > size) return p; 
        // change by gofly allow name ftp pass "" 
        if( extra_strncmp(p ,data)) 
        //if(data[0] != 0x00 && extra_strncmp(p ,data)) 
        { 
           memset(p, 0x00, size); 
           memcpy(p, data, strlen(data)); 
           //--- if ftp trigger call function ---// 
          flag++; 
        } 
        //--- gofly add to write 24c08 when the last env IOW && evn change(flag) 
        #if EEPROM_CHANGE_EVERY 
        if(flag) 
        #else 
        if(p == FtpMode && flag) 
        #endif 
        { // service ftp last env 
            flag    =   0; 
            strcpy(eprom_ptos.eprom_opt_ftp.ftp_server, FtpServer); 
            strcpy(eprom_ptos.eprom_opt_ftp.ftp_user, FtpUser); 
            strcpy(eprom_ptos.eprom_opt_ftp.ftp_pass, FtpPass); 
            eprom_ptos.eprom_opt_ftp.ftp_port = atoi(FtpPort); 
            eprom_ptos.eprom_opt_ftp.ftp_mod = atoi(FtpMode); 
            eprom_24c08_write(&eprom_ptos.eprom_opt_ftp, eprom_ptos.eprom_opt_ftp.offset, sizeof(OPT_FTP)); 
 
        } 
 
 
    } 
 
    return p; 
 
} 
 
//*********************************************** 
// IoSmtp() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoSmtp(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static INT8U  SmtpServer    [32]; 
    static INT8U  SmtpMailFrom  [32]; 
    static INT8U  SmtpRcptTo    [32]; 
    static INT8U  SmtpUser      [32]; 
    static INT8U  SmtpPass      [32]; 
////    static INT8U  SmtpAuthflag      = 1 ; 
    //static INT8U  SmtpTrigger[2]; 
    INT8U        *p; 
    INT8U         size; 
 
    if(op == IOINIT) 
    { 
        //---- gofly change 
        SmtpServer  [0]    = 0x00; 
        SmtpMailFrom[0]    = 0x00; 
        SmtpRcptTo  [0]    = 0x00; 
        SmtpUser    [0]    = 0x00; 
        SmtpPass    [0]    = 0x00; 
 
        SmtpAuthflag = *eprom_ptos.eprom_opt_smtp.smtp_authorization; 
 
        if( strlen(eprom_ptos.eprom_opt_smtp.smtp_server) < sizeof(SmtpServer)) 
            strcpy(SmtpServer, eprom_ptos.eprom_opt_smtp.smtp_server); 
 
        if( strlen(eprom_ptos.eprom_opt_smtp.smtp_server) < sizeof(SmtpMailFrom)) 
            strcpy(SmtpMailFrom, eprom_ptos.eprom_opt_smtp.smtp_senduser); 
 
        if( strlen(eprom_ptos.eprom_opt_smtp.smtp_server) < sizeof(SmtpRcptTo)) 
            strcpy(SmtpRcptTo, eprom_ptos.eprom_opt_smtp.smtp_recvuser); 
 
        if( strlen(eprom_ptos.eprom_opt_smtp.smtp_user) < sizeof(SmtpUser)) 
            strcpy(SmtpUser, eprom_ptos.eprom_opt_smtp.smtp_user); 
 
        if( strlen(eprom_ptos.eprom_opt_smtp.smtp_pass) < sizeof(SmtpPass)) 
            strcpy(SmtpPass, eprom_ptos.eprom_opt_smtp.smtp_pass); 
 
         //SmtpTrigger[0] = 0x30; // will change from eepron SQ_2_90_1   init smtp trigger 
        /* 
        //---- will change from eeprom 
        strcpy(SmtpServer, "mail.sq.com.tw"); 
        strcpy(SmtpMailFrom,"god@mail.sq.com.tw"); 
        strcpy(SmtpRcptTo,  "gofly@sq.com.tw"); 
        */ 
        return &Char00; 
    } 
 
    if(! extra_strncmp(Key ,"SMTP_SERVER")) 
    { 
        p =   SmtpServer;   size = sizeof(SmtpServer); 
    } 
    else if(! extra_strncmp(Key ,"SMTP_MAIL_FROM")) 
    { 
        p =   SmtpMailFrom;     size = sizeof(SmtpMailFrom); 
    } 
    else if(! extra_strncmp(Key ,"SMTP_RCPT_TO")) 
    { 
        p =   SmtpRcptTo;    size = sizeof(SmtpRcptTo); 
    } 
    else if(! extra_strncmp(Key ,"SMTP_USER")) 
    { 
        p =   SmtpUser;    size = sizeof(SmtpUser); 
    } 
    else if(! extra_strncmp(Key ,"SMTP_PASS")) 
    { 
        if (! strncmp(data ,"*******" ,7)) 
        { 
            return &Char00; 
        } 
 
        p =   SmtpPass;    size = sizeof(SmtpPass); 
 
        //if(op == IOR ) return  &Char00; 
    } 
    else if(! extra_strncmp(Key ,"SMTP_AUTH")) 
    { 
        *Char0 = 0x30; 
        *Char1 = 0x31;  
        p = SmtpAuthflag?Char1:Char0; size = 3; 
    } 
    else if(! extra_strncmp(Key ,"SMTP_AUTHON")) 
        { 
            if(SmtpAuthflag) 
            { 
                p=&Check; 
            } 
            else 
            { 
                p=&Char00; 
            } 
        } 
   else if(! extra_strncmp(Key ,"SMTP_AUTHOF")) 
        { 
            if (!SmtpAuthflag) 
            { 
                p=&Check; 
            } 
            else 
            { 
                p=&Char00; 
            } 
        } 
 
    else if(! extra_strncmp(Key ,"GET_SMTP_PASS")) 
    { 
        p =   SmtpPass;    size = sizeof(SmtpPass); 
    } 
 
    /* 
    else if(! strncmp(Key ,"SMTP_TRIGGER",12)) 
    { 
        p =   SmtpTrigger;    size = sizeof(SmtpTrigger); 
    } 
    */ 
    else 
    { 
        return &Char00; 
    } 
    /* 
    if(op == IOR) 
    { 
 
        if(p == SmtpTrigger&&SmtpTrigger[0] == Key[13]) 
            return Check; 
        if(p == SmtpTrigger) 
            return &Char00; 
    } 
    */ 
 
 
    if(op == IOW) 
    {   static INT8U flag =  0; 
 
        //// add by daniel 
        if(!strncmp(Key ,"SMTP_AUTH",9)) 
        { 
            SmtpAuthflag = atoi(data)?1:0; 
            *data =0x01; 
        } 
        //// 
        if(strlen(data) > size) return p; 
        if(data != NULL && data[0] != 0x00 && extra_strncmp(p ,data)) 
        { 
           flag++; 
           memset(p, 0x00, size); 
           memcpy(p, data, strlen(data)); 
           //--- if smtp trigger call function ---// 
        } 
        #if EEPROM_CHANGE_EVERY 
        if(flag) 
        #else 
        if(p == SmtpRcptTo && flag) 
        #endif 
        { 
 
            flag    =   0; 
            strcpy(eprom_ptos.eprom_opt_smtp.smtp_server, SmtpServer); 
            strcpy(eprom_ptos.eprom_opt_smtp.smtp_senduser, SmtpMailFrom); 
            strcpy(eprom_ptos.eprom_opt_smtp.smtp_recvuser, SmtpRcptTo); 
            strcpy(eprom_ptos.eprom_opt_smtp.smtp_user, SmtpUser); 
            strcpy(eprom_ptos.eprom_opt_smtp.smtp_pass, SmtpPass); 
            *eprom_ptos.eprom_opt_smtp.smtp_authorization = SmtpAuthflag; 
            eprom_24c08_write(&eprom_ptos.eprom_opt_smtp, eprom_ptos.eprom_opt_smtp.offset, sizeof(OPT_SMTP)); 
        } 
        //SmtpAuthflag = atoi(data)? 1:0; 
 
    } 
 
    return p; 
 
} 
//*********************************************** 
// IoVideoCh() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoVideoCh(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
 
    static    INT8U  ch; 
 
    switch(op) 
    { 
        case IOINIT: 
                    ch = 1; // default ch 1 
                    //add  change ch function 
                    break; 
        case IOR: 
                    if(atoi(Key + 8) == ch) 
                    { 
                        return Check; 
                    } 
                    else 
                    return &Char00; 
                    break; 
 
        case IOW: 
                    ch = atoi(data); 
                    //add  change ch function                     
                    break; 
 
        default: 
                    return &ch; 
 
    } 
 
 
 
} 
 
//*********************************************** 
// IoImgSet() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
extern OS_EVENT *imgSyncMbox;       //add by jgy 09/30/05 
INT8U *IoImgSet(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static INT8U  ImgMode[10]; 
    static INT8U  ImgComp[4]; 
    static INT8U  ImgOutDoor[4]; 
    static INT8U  VideoCh[4]; 
    //static INT8U  ImgModeP[10]; 
    INT8U  err; 
    INT8U  temp[10]; 
    INT8U        *p; 
    INT8U         size; 
    INT8U  videosize = eprom_ptos.eprom_opt_img.img_size; 
    INT8U  height[6],width[6]; 
 
    if(op == IOINIT) 
    { 
        //---- will change from eeprom 
        //---- image size & ImgComp &  ImgOutDoor  不写入 eeprom 
        sprintf(ImgComp,"%03d",eprom_ptos.eprom_opt_img.img_qual); 
        sprintf(ImgOutDoor,"%03d",api_ae.AcPowerType = eprom_ptos.eprom_opt_img.img_lf); 
        sprintf(VideoCh,"%03d",eprom_ptos.eprom_opt_img.videoch); 
        sprintf(ImgMode ,"%04d%04d\x00", 
            640>>videosize, 480>>videosize);// add by jjl for prev img resolution 
 
        return &Char00; 
 
    } 
 
/* 
    if(! strncmp(Key , "IMG_S_M_P", 9)) // add by jjl for prev img resolution 
    { 
        //sprintf(ImgMode ,"%04d%04d\x00", 
        //    atoi(IoW(NULL, NULL, IOR, ROOT)), atoi(IoH(NULL, NULL, IOR, ROOT))); 
        p =   ImgModeP; 
        size = sizeof(ImgModeP); 
        return p; 
    } 
 
    else if(! strncmp(Key , "IMG_S_M_N", 9)) // add by jjl for prev img resolution 
    { 
        //sprintf(ImgMode ,"%04d%04d\x00", 
        //    atoi(IoW(NULL, NULL, IOR, ROOT)), atoi(IoH(NULL, NULL, IOR, ROOT))); 
        p =   ImgMode; 
        size = sizeof(ImgMode); 
        return p; 
    } 
*/ 
    if(! strncmp(Key ,"IMG_V_C", 7))  //outdoor 
    { 
        p =   VideoCh;    size = sizeof(VideoCh); 
    } 
    else if(! strncmp(Key , "IMG_S_M", 7)) // image mode 
    { 
        p =   ImgMode;   size = sizeof(ImgMode); 
    } 
    else if(! strncmp(Key ,"IMG_S_C", 7))  //image Compression 
    { 
        p =   ImgComp;     size = sizeof(ImgComp); 
    } 
    else if(! strncmp(Key ,"IMG_S_O", 7))  //outdoor 
    { 
        p =   ImgOutDoor;    size = sizeof(ImgOutDoor); 
    } 
    else if(! strncmp(Key ,"IMG_S_GET_C", 11)) 
    { 
        p =   ImgComp;    size = sizeof(ImgComp); 
        return p; 
    } 
    else 
    { 
        return &Char00; 
    } 
 
 
    if(op == IOR) 
    { 
        //IMG_S_C_070 
        if(atoi(Key + 8) == atoi(p)) 
          return Check; 
        else 
          return &Char00; 
    } 
 
 
    if(op == IOW) 
    { 
        if(strlen(data) > size) return p; 
        OSMboxPend(imgSyncMbox, 0, &err); 
 
        if(p == ImgMode) 
        { 
            INT8U i; 
            memset(temp,      0x00, sizeof(temp)); 
            memcpy(temp    ,  data    , 4); 
            memcpy(temp + 5,  data + 4, 4); 
            //memcpy(ImgModeP,ImgMode,10); 
 
            IoW(NULL, temp,     IOW, ROOT); 
            IoH(NULL, temp + 5, IOW, ROOT); 
            sprintf(ImgMode ,"%04d%04d\x00", 
            atoi(IoW(NULL, NULL, IOR, ROOT)), atoi(IoH(NULL, NULL, IOR, ROOT))); 
 
            for (i=0;i<3;i++) 
            { 
                if ((atoi(IoW(NULL, NULL, IOR, ROOT))< 0) video_server_ref--; 
                      jpgsmp[i] = 0; 
                   } 
                   HttpCloseConnect((void *)&GtHCB,i); 
                } 
                //OSTimeDlyHMSM(0,0,5,0); 
            } 
            //return p; 
        } 
 
        if((data != NULL) && (data[0] != 0x00) && (extra_strncmp(p ,data))) 
        { 
            memset(p, 0x00, size); 
            memcpy(p, data, strlen(data)); 
 
            //add by ue ^^ 
            //video_init(jpeg_inf); 
        } 
 
        if(p == ImgOutDoor) 
        { 
            if(strncmp(p, "060", 3) == 0)       //AcPowerType = 60 
            { 
                api_ae.AcPowerType = 60; 
            } 
            else if(strncmp(p, "050", 3) == 0)  // AcPowerType = 50 
            { 
                api_ae.AcPowerType = 50; 
            } 
            else    //AcPowerType = 100 is outdoor 
            { 
                api_ae.AcPowerType = 100; 
            } 
 
            //awaly re-init EV_Rank, and setting 
            api_ae.NewEvRank = 15;//EV_START_PTR; 
            //SetExpValTable(); 
            switch(api_sen.View) 
            { 
                case VGA: 
                        ae_awb_init(640); 
                        break; 
                case CIF: 
                        ae_awb_init(320); 
                        break; 
                default://case QCIF: 
                        ae_awb_init(160); 
                        break; 
            } 
            eprom_ptos.eprom_opt_img.img_lf = api_ae.AcPowerType; 
        } 
        if(p == VideoCh) 
        { 
            eprom_ptos.eprom_opt_img.videoch = atoi(data); 
        } 
        if(p == ImgComp) 
        { 
            eprom_ptos.eprom_opt_img.img_qual = atoi(data); 
        } 
        OSMboxPost(imgSyncMbox, (void*)1); 
        eprom_24c08_write(&eprom_ptos.eprom_opt_img, eprom_ptos.eprom_opt_img.offset , sizeof(OPT_IMG)); 
    } 
 
    return p; 
 
} 
//*********************************************** 
// IoUser() //user.html 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoUser(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    if(op == IOR) 
    { 
        if(! strncmp(Key ,"NEW_ADMIN_NAME", strlen(Key))) 
        { 
           return IoName(Key,data,IOR,ROOT); 
        } 
        if(! strncmp(Key ,"NEW_USER_NAME", strlen(Key))) 
        { 
           return IoName(Key,data,IOR,USER); 
        } 
        if(! strncmp(Key ,"OLD_ADMIN_PWD", strlen(Key))) 
        { 
           return IoPass(Key,data,IOR,ROOT); 
        } 
        if(! strncmp(Key ,"OLD_USER_PWD", strlen(Key))) 
        { 
           return IoPass(Key,data,IOR,USER); 
        } 
        return  &Char00; 
    } 
 
    if(op == IOW) 
    { 
 
        if(! strncmp(Key ,"NEW_ADMIN_NAME", strlen(Key))) 
        { 
           return IoName(Key,data,IOW,ROOT); 
        } 
        if(! strncmp(Key ,"NEW_USER_NAME", strlen(Key))) 
        { 
           return IoName(Key,data,IOW,USER); 
        } 
 
        if(! strncmp(Key ,"NEW_ADMIN_PWD", strlen(Key))) 
        { 
            return IoPass(Key,data,IOW,ROOT); 
        } 
        if(! strncmp(Key ,"NEW_USER_PWD", strlen(Key))) 
        { 
            return IoPass(Key,data,IOW,USER); 
        } 
 
    } 
 
} 
//*********************************************** 
// IoDns() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoDns(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static    INT8U          dns1[16],dns2[16],dns[16]; 
    INT8U                   *p; 
    struct  ip_addr          addr; 
    INT8U                   *addressStr; 
 
    if(op == IOINIT) 
    { 
      //--- change by gofly 
            dns1[0] = 0x00; 
            dns2[0] = 0x00; 
 
        p = CheckIP_INT32U_Str(*(INT32U*)eprom_ptos.eprom_opt_dns_dhcp.dns1_server); 
 
        if( p!=NULL) 
                strcpy(dns1, p); 
 
            p = CheckIP_INT32U_Str(*(INT32U*)eprom_ptos.eprom_opt_dns_dhcp.dns2_server); 
 
            if( p!=NULL) 
                strcpy(dns2, p); 
 
    } 
     
    if(! strncmp(Key ,"DNS_IP_Address_1",16)) 
    { 
        p=&dns1; 
    } 
    if(! strncmp(Key ,"DNS_IP_Address_2",16)) 
    { 
        p=&dns2; 
    }             
   
    if(op == IOW) 
    { 
        if (p==&dns1){p=&dns1;} 
        else if (p==&dns2){p=&dns2;} 
 
        if(strncmp(p , data, strlen(data))) 
        { 
            //------ check ip allow ? ------// 
            if(!inet_aton((const char*)data, &addr)) 
            { 
                return p; 
            } 
            addressStr   =  inet_ntoa(addr.addr); 
 
            if(strncmp(data , addressStr, strlen(data))) 
                return p; 
             
                strcpy(p, addressStr); 
                 
            if (p==&dns1) 
            { 
                memcpy(eprom_ptos.eprom_opt_dns_dhcp.dns1_server ,&addr.addr, 4); 
            } 
            else if (p==&dns2) 
            { 
                memcpy(eprom_ptos.eprom_opt_dns_dhcp.dns2_server ,&addr.addr, 4); 
            } 
 
            //    strcpy(eprom_ptos.eprom_opt_dns_dhcp.dns1_server,dns1); 
            //    strcpy(eprom_ptos.eprom_opt_dns_dhcp.dns2_server,dns2); 
            eprom_24c08_write(&eprom_ptos.eprom_opt_dns_dhcp, eprom_ptos.eprom_opt_dns_dhcp.offset , sizeof(OPT_DNS_DHCP)); 
 
        } 
         
     } 
 
     return p;    
 
 
} 
//*********************************************** 
// IoIP() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoIpAddress(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static    INT8U  ip[32]; 
    static    INT8U  gw[32]; 
    static    INT8U  ma[32]; 
 
    INT8U                   *p; 
    struct  ip_addr          addr; 
    INT8U                   *addressStr; 
    static struct  netif    *netif      =       NULL; 
 
    if(op == IOINIT) 
    { 
        ip[0]   =   0x00; 
        gw[0]   =   0x00; 
        ma[0]   =   0x00; 
 
        netif = (struct  netif*)data; 
 
        p = CheckIP_INT32U_Str(*(INT32U*)eprom_ptos.eprom_opt_ip.ip_addr); 
 
        if( p!=NULL) strcpy(ip, p); 
 
 
        p = CheckIP_INT32U_Str(*(INT32U*)eprom_ptos.eprom_opt_ip.def_gate); 
 
        if( p!=NULL) strcpy(gw, p); 
 
 
        p = CheckIP_INT32U_Str(*(INT32U*)eprom_ptos.eprom_opt_ip.sub_mask); 
 
        if( p!=NULL) strcpy(ma, p); 
 
        if(ip[0] == 0x00 || gw[0] == 0x00 || ma[0] == 0x00) 
        {//init fail 
            sprintf(ip,"%s\x00",DEFAULT_IP); 
            sprintf(gw,"%s\x00",DEFAULT_GW); 
            sprintf(ma,"%s\x00",DEFAULT_MA); 
 
        } 
 
        /* 
        sprintf(ip,"%s\x00",DEFAULT_IP);// will change 
        sprintf(gw,"%s\x00",DEFAULT_GW);// will change 
        sprintf(ma,"%s\x00",DEFAULT_MA);// will change 
        */ 
        return p; 
    } 
 
    ASSERT_EX1(HTTP_DEBUG, "IoIP netif init err", netif != NULL); 
 
    if(Key[0] == 'I') p = ip; 
    else if(Key[0] == 'G') p = gw; 
    else if(Key[0] == 'M') p = ma; 
    else return &Char00; 
 
 
    if(op == IOW) 
    { 
        static INT8U flag = 0; 
         
        if(strncmp(p , data, strlen(data))) 
        { 
            //------ check ip allow ? ------// 
            if(!inet_aton(data,&addr)) 
            { 
                return p; 
            } 
            addressStr   =  inet_ntoa(addr.addr); 
 
            if(strncmp(data , addressStr, strlen(data))) 
            { 
 
              return p; 
            } 
 
            flag++; 
 
            strcpy(p, addressStr); 
 
            if(Key[0] == 'I') 
             { 
                 netif_set_ipaddr(netif, &addr); 
                 memcpy(eprom_ptos.eprom_opt_ip.ip_addr ,&addr.addr, 4); 
             } 
            else if(Key[0] == 'G') 
             { 
                netif_set_gw(netif, &addr); 
                memcpy(eprom_ptos.eprom_opt_ip.def_gate ,&addr.addr, 4); 
             } 
            else if(Key[0] == 'M') 
             { 
                netif_set_netmask(netif, &addr); 
                memcpy(eprom_ptos.eprom_opt_ip.sub_mask ,&addr.addr, 4);                 
             } 
        }/*  if(strncmp(p , data, strlen(data)))*/ 
 
 
        #if EEPROM_CHANGE_EVERY 
        if(flag) 
        #else 
        if(flag && Key[0] == 'G') 
        #endif 
        { 
            flag = 0; 
            eprom_24c08_write(&eprom_ptos.eprom_opt_ip, eprom_ptos.eprom_opt_ip.offset , sizeof(OPT_IP)); 
        } 
 
 
 
    } 
 
    return p; 
 
 
} 
//*********************************************** 
// IoH() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoDHCP_ENABLE(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static INT8U  C; 
 
    if(op == IOINIT) 
    { 
 
        C = eprom_ptos.eprom_opt_dns_dhcp.dhcp_server; 
    } 
 
    if(op == IOW) 
    { 
        if(atoi(data) != C ) 
        { 
            //--- add code change eepron 
            C = atoi(data); 
            eprom_ptos.eprom_opt_dns_dhcp.dhcp_server = C; 
            eprom_24c08_write(&eprom_ptos.eprom_opt_dns_dhcp, 
            eprom_ptos.eprom_opt_dns_dhcp.offset , sizeof(OPT_DNS_DHCP)); 
 
        } 
 
    } 
 
    if(atoi(Key+11) == C) 
    { 
        return Check; 
    } 
    return &Char00; 
 
} 
//*********************************************** 
// IoCODEBASE() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoCODEBASE(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
  static const INT8U p[]={"/view.cab#Version="_CODEBASE}; 
  return p; 
 
} 
//*********************************************** 
// IoH() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoH(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static INT8U p[6]; 
    INT8U  videosize = eprom_ptos.eprom_opt_img.img_size; 
 
    if(op == IOINIT) 
    { 
      sprintf(p,"%d\x00", 480>>videosize); 
    } 
    if(op == IOR) 
    { 
        return p; 
    } 
    if(op == IOW) 
    { 
        if(atoi(data) != atoi(p)) 
        { 
        //--- add code change eepron 
            sprintf(p,"%d\x00",atoi(data)); 
        } 
    } 
 
    return p; 
 
 
 
 
} 
//*********************************************** 
// IoH() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoW(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static INT8U p[6]; 
    INT8U  videosize = eprom_ptos.eprom_opt_img.img_size; 
 
    if(op == IOINIT) 
    { 
      sprintf(p,"%d\x00", 640>>videosize); 
    } 
 
    else if(op == IOW) 
    { 
        if(atoi(data) != atoi(p)) 
        { 
          //--- add code change eepron 
         sprintf(p,"%d\x00",atoi(data)); 
        } 
     } 
 
     return p; 
 
 
 
 
} 
//*********************************************** 
// IoWid() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoTrage(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
  const static INT8U R[]={"MAIN\x00"}; 
  const static INT8U U[]={"OTHER\x00"}; 
  if(uid == ROOT) return R; 
 
 
  return U; 
 
} 
//*********************************************** 
// IoWid() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoWid(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
  static INT8U  p[14]; 
  INT8U  *pMac; 
 
  if(op == IOINIT) 
  { 
   pMac = IoMAC_ADDR(NULL, NULL, IOR, ROOT); 
    memset(p, 0x00, sizeof(p)); 
    memset(p, 0x20, 13); 
 
   sprintf(p, "=%02x%02x%02x%02x%02x%02x", *(pMac) ,*(pMac+1),*(pMac+2),*(pMac+3),*(pMac+4),*(pMac+5)); 
 
  /*  pMac    =  IoMAC_ADDR(NULL, NULL, IOR, ROOT) + 11; 
    for(i = 0; i < 12; i++) 
    { 
        p[i]    =     *(pMac - i) - '0'; 
 
    }   */ 
 
  } 
 
  return p; 
} 
//*********************************************** 
// IoUid() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoUid(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
  static INT8U p[6]; 
  sprintf(p,"%d\x00", uid); 
  return p; 
} 
 
//*********************************************** 
// IoViewUsr() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return str 
// 
//*********************************************** 
INT8U *IoViewUser(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
  static INT8U p[10]; 
  void *q; 
  int i,j=0; 
 
  for(i=0;iMain\x00"); 
                /* 
                sprintf(p,"LiveView\x00", 
                			IoVideo(NULL, NULL, IOR, uid), 
                        IoAudio(NULL, NULL, IOR, uid), 
                        IoCookie(NULL, NULL, IOR, uid), 
                        IoWid(NULL, NULL, IOR, uid), 
                        uid, 
                        //IoTrage(NULL, NULL, IOR, uid), 
                        IoEventTrigger("EventT_Det_MDPC",NULL,IOR,uid) 
                        ); 
                */   /* 
                sprintf(p,"LiveView\x00"); 
                break; 
      case DDNS_HTML: 
                sprintf(p,"Ddns\x00"); 
                break; 
      case SNTP_HTML: 
                sprintf(p,"Sntp\x00"); 
                break; 
      case USER_HTML: 
                sprintf(p,"Administration\x00"); 
                break; 
      case CAPTURE_HTML: 
                sprintf(p,"CaptureView\x00"); 
                break; 
      case IMAGESET_HTML: 
                sprintf(p,"ImageSet\x00"); 
                break; 
//      case WLAN_HTML: 
//                sprintf(p,"Wlan\x00"); 
//                break; 
 
      case NETWORK_HTML: 
                sprintf(p,"Network\x00"); 
                break; 
      case SERVER_HTML: 
                sprintf(p,"Server\x00"); 
 
                break; 
      case TRIGGER_HTML: 
                sprintf(p,"EventTrigger\x00"); 
 
                break; 
      case VERSION_HTML: 
 
              /* sprintf(p,"Version\x00" 
               ,IoAppVer(NULL, NULL, IOR, uid),IoCookie(NULL, NULL, IOR,  uid) 
               );*/ /* 
               sprintf(p,"Update\x00"); 
                
               break; 
      case OTHER_HTML: 
                #if    UI_OPEN_MODIFY_LOW_ENV 
                sprintf(p,"Other\x00"); 
                #endif 
                break; 
//      case STORAGE_HTML: 
//                sprintf(p,"Storage\x00"); 
//                break; 
      case TEST_HTML: 
              //  sprintf(p,"test\x00"); 
                break; 
 
  } 
    return p; 
} 
*/ 
 
//*********************************************** 
// IoHttpPort() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  httpport 
// 
//*********************************************** 
INT16U *IoHttpPort(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static INT8U port[6]; 
    INT16U tmp16; 
 
    if(op == IOINIT) 
    { 
        //--- will change 
        sprintf(port, "%u\00",(INT32U)eprom_ptos.eprom_opt_www.www_port); 
         ////add by daniel 
        Httpportid = atoi(port); 
        tmp16 = (Httpportid & 0xff00)>>8; 
        Httpportid= ((Httpportid << 8) | tmp16); 
 
    } 
    if(op == IOR) 
    { 
        return port; 
    } 
    if(op == IOW) 
    { 
        if(atoi(data) != atoi(port)) 
        { 
            eprom_ptos.eprom_opt_www.www_port =   atoi(data); 
            sprintf(port,"%u\x00", (INT32U)eprom_ptos.eprom_opt_www.www_port); 
            eprom_24c08_write(&eprom_ptos.eprom_opt_www, 
                eprom_ptos.eprom_opt_www.offset , sizeof(OPT_WWW)); 
 
        } 
    } 
 
    return port; 
 
} 
 
//*********************************************** 
// IoCookie() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  return Cookie 
// 
//*********************************************** 
INT8U *IoCookie(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
     static INT8U RootCookie[16] ; 
     static INT8U UserCookie[16]; 
     static INT8U OtherCookie[16]; 
     INT8U *p; 
 
     if(op == IOINIT) 
     { 
        // will change 
       // if(eprom_ptos.eprom_opt_rand.magicNumber != rand()) 
        strcpy(RootCookie, "RootCookie00000"); 
        strcpy(UserCookie, "UserCookie00000"); 
        strcpy(OtherCookie,"OtherCookie0000"); 
     } 
 
     switch(uid) 
     { 
       case ROOT: 
           p =   RootCookie; 
           break; 
       case USER: 
           p =   UserCookie; 
           break; 
       case OTHER: 
           p =   OtherCookie; 
           break; 
 
     }; 
 
     if(op == IOW) 
     { 
        if(data != NULL && extra_strncmp(p, data)) 
        { 
             //--- add code change eepron 
             memcpy(p, data, sizeof(RootCookie) - 1 ); 
        } 
     } 
 
     return p; 
} 
 
//*********************************************** 
// IoName() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      : return name 
// 
//*********************************************** 
INT8U *IoName(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
     static INT8U NameR[16] ; 
     static INT8U NameU[16] ; 
     static INT8U flag=0; 
     INT8U *p; 
 
 
 
    if(op == IOINIT) 
    { 
 
        NameR[0]    = 0x00; 
        NameU[0]    = 0x00; 
 
 
        if( strlen(eprom_ptos.eprom_opt_secure.admin_name) < sizeof(NameR)) 
            strcpy(NameR, eprom_ptos.eprom_opt_secure.admin_name); 
 
        if( strlen(eprom_ptos.eprom_opt_secure.guest_name) < sizeof(NameU)) 
            strcpy(NameU, eprom_ptos.eprom_opt_secure.guest_name); 
 
       if(NameR[0] == 0x00)   strcpy(NameR, "root"); 
       if(NameU[0] == 0x00)   strcpy(NameU, "user"); 
       /* 
        //--- will change 
        strcpy(NameR, "root"); 
        strcpy(NameU, "user"); 
        */ 
 
    } 
 
     switch(uid) 
     { 
       case ROOT: 
           p =   NameR; 
           break; 
       case USER: 
           p =   NameU; 
           break; 
     }; 
 
 
 
     if(op == IOW) 
     { 
        if(data != NULL && data[0] != 0x00 && 
            strlen(data) < sizeof(NameR) && extra_strncmp(p, data)) 
        { 
             flag++; 
             //--- add code change eepron 
             memset(p, 0x00, sizeof(NameR)); 
             memcpy(p, data, sizeof(NameR)); 
        } 
        #if EEPROM_CHANGE_EVERY 
        if(flag) 
        { 
            flag = 0; 
            strcpy(eprom_ptos.eprom_opt_secure.admin_name ,NameR); 
            strcpy(eprom_ptos.eprom_opt_secure.guest_name ,NameU); 
            strcpy(eprom_ptos.eprom_opt_secure.admin_pass ,IoPass(NULL,NULL,IOR,ROOT)); 
            strcpy(eprom_ptos.eprom_opt_secure.guest_pass ,IoPass(NULL,NULL,IOR,USER)); 
 
            eprom_24c08_write(&eprom_ptos.eprom_opt_secure , 
                eprom_ptos.eprom_opt_secure.offset , sizeof(OPT_SECURE)); 
       } 
       #endif 
 
     } 
 
     return p; 
} 
 
//*********************************************** 
// IoPass() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      : return Pass 
// 
//*********************************************** 
INT8U *IoPass(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
     static INT8U PassRoot[16] ; 
     static INT8U PassUser[16] ; 
     static INT8U  flag = 0; 
     INT8U *p; 
      
    if(op == IOINIT) 
    { 
 
 
        PassRoot[0]    = 0x00; 
        PassUser[0]    = 0x00; 
 
 
        if( strlen(eprom_ptos.eprom_opt_secure.admin_pass) < sizeof(PassRoot)) 
            strcpy(PassRoot, eprom_ptos.eprom_opt_secure.admin_pass); 
 
        if( strlen(eprom_ptos.eprom_opt_secure.guest_pass) < sizeof(PassUser)) 
            strcpy(PassUser, eprom_ptos.eprom_opt_secure.guest_pass); 
 
        //--- will change 
        if(PassRoot[0]    == 0x00)strcpy(PassRoot, "rootpass"); 
        if(PassUser[0]    == 0x00)strcpy(PassUser, "userpass"); 
 
    } 
 
     switch(uid) 
     { 
       case ROOT: 
           p =   PassRoot; 
           break; 
       case USER: 
           p =   PassUser; 
           break; 
     }; 
 
     if(op == IOW) 
     { 
        if(data != NULL && data[0] != 0x00 && 
            strlen(data) < sizeof(PassRoot)&& extra_strncmp(p, data)) 
        { 
             //--- add code change eepron 
             flag++; 
             memset(p, 0x00, sizeof(PassRoot)); 
             memcpy(p, data, sizeof(PassRoot) ); 
        } 
 
        #if EEPROM_CHANGE_EVERY 
        if(flag) 
        #else 
        if( p == PassUser) 
        #endif 
        { 
            flag = 0; 
            strcpy(eprom_ptos.eprom_opt_secure.admin_name ,IoName(NULL, NULL, IOR, ROOT)); 
            strcpy(eprom_ptos.eprom_opt_secure.guest_name ,IoName(NULL, NULL, IOR, USER)); 
            strcpy(eprom_ptos.eprom_opt_secure.admin_pass ,PassRoot); 
            strcpy(eprom_ptos.eprom_opt_secure.guest_pass ,PassUser); 
 
            eprom_24c08_write(&eprom_ptos.eprom_opt_secure , 
                eprom_ptos.eprom_opt_secure.offset , sizeof(OPT_SECURE)); 
        } 
     } 
 
     return p; 
} 
 
 
//*********************************************** 
// IoWebCamName() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      : root Pass 
// 
//*********************************************** 
INT8U *IoWebCamName(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
     static INT8U name[16]; 
 
 
     switch(op) 
     { 
        case IOINIT: 
            memset(name, 0x00, sizeof(name)); 
            if( strlen(eprom_ptos.eprom_opt_system.cam_location) < sizeof(name)) 
                strcpy(name, eprom_ptos.eprom_opt_system.cam_location); 
            else 
            { 
                strcpy(name,"UNKNOW"); 
            } 
            break; 
        case IOR: 
            break; 
        case IOW: 
            if(data != NULL && data[0] != 0x00 && strcmp(name,data)!=0)///< extra_strncmp ---> strcmp タ﹃浪琩bug 
            { 
                //--- add code change eepron 
                INT8U i,*pname; 
                pname = name; 
 
                for (i=0;i 1 ? *PageIntTmp-1:1)); 
                } 
            	else if(!strncmp(Key, "PageNext" , 8)) 
            	{ 
                	sprintf(Pagetemp,"%06d",(*PageIntTmp < k ? *PageIntTmp+1:k)); 
            	} 
            	else if(!strncmp(Key, "PageTotal" , 9)) 
            	{ 
                	sprintf(Pagetemp,"%d",k); 
                } 
            	else if(!strncmp(Key, "PageNow" , 7)) 
            	{ 
                	sprintf(Pagetemp,"%d",*PageIntTmp); 
                } 
                else if(!strncmp(Key, "PageLast" , 8)) 
            	{ 
                	sprintf(Pagetemp,"%06d",k); 
                } 
                else 
                { 
                	return &Char00; 
                } 
                return Pagetemp; 
           } 
           //STORAGE_0045 
           j = atoi(Key + 8); 
           if(!strncmp(Key+8, "PC",2)) 
           { 
               if (!PC_value) 
               { 
                   return Check; 
               } 
               return &Char00; 
           } 
           else if (!strncmp(Key+8, "FC",2)) 
           { 
               if (PC_value) 
               { 
                   return Check; 
               } 
               return &Char00; 
           } 
           else 
           { 
               if( j >= STORAGE_PAGE_MAX ) 
               { 
               	    return &Char00; 
               } 
           } 
           i = *(PageInf + 15 * atoi(Key + 8)); 
 
           if(i == 0x00) return &Char00; 
 
           memset(SearchFileName, 0x00, sizeof(SearchFileName)); 
          // strcat(SearchFileName, "SImage"); 
           //strcat(SearchFileName, "STHtml"); 
           //memcpy(SearchFileName6, PageInf + 15 * j + 1,14); 
          // strcat(SearchFileName,".jpg"); 
           //strcat(SearchFileName,".html"); 
           memcpy(SearchFileName, PageInf + 15 * j + 1,14); 
           break; 
     } 
 
     return SearchFileName; 
} 
//*********************************************** 
// IoWL() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  httpport 
// 
//*********************************************** 
INT16U *IoWL(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{  //---- only read 
   static INT8U temp[50]; 
   INT8U i,j; 
   i = atoi(Key + 3); 
   j = atoi(Key + 8); 
 
   if(j >= sizeof(temp)) return &Char00; 
    
    //WL_0001_0001 
   if(i == 0) 
   { 
     memset(temp, 0x20, sizeof(temp)); 
     temp[j] = 0x00; 
   } 
   else 
   { 
     sprintf(temp,"$WL_%04d_%04d=\x00", i-1 , j ); 
 
   } 
 
     return temp; 
} 
//*********************************************** 
// IoWL() 
// Description  : 
// Parameters   : data 
//                op //IOR   IOW 
// Returns      :  httpport 
// 
//*********************************************** 
INT16U *IoMAC_ADDR(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
   static INT8U MacAddr[6]={0x00,0x00,0x00,0x00,0x00,0x00}; 
   static INT8U Flag = 0; 
   static INT8U temp[13]; 
   INT8U  i; 
   INT8U  ch; 
   if(Flag == 0) 
   { 
     Flag = 1; 
 
     memcpy(MacAddr, eprom_ptos.eprom_opt_inf.mac_addr , 6); 
 
     if(MacAddr[0] == 0x00 && MacAddr[1] == 0x00 && MacAddr[2] == 0x00 
        && MacAddr[3] == 0x00 && MacAddr[4] == 0x00 && MacAddr[5] == 0x00) 
     { 
         memcpy(MacAddr + 2, DEFAULT_MAC_ADDR, 4); 
         memcpy(eprom_ptos.eprom_opt_inf.mac_addr, MacAddr, 6); 
         eprom_24c08_write(&eprom_ptos.eprom_opt_inf , 
                eprom_ptos.eprom_opt_inf.offset , sizeof(OPT_INF)); 
 
     } 
 
 
     return MacAddr; 
   } 
 
   if(op == IOR) 
   { 
      if(Key != NULL) 
      { 
         temp[0] = 0x00; 
         for(i = 0; i < 6; i++) 
         { 
           sprintf(temp + strlen(temp), "%02x\x00", MacAddr[i]); 
 
         } 
          return temp; 
      } 
 
 
      return MacAddr; 
   } 
 
 
   if(op == IOW && uid == ROOT ) 
   { 
 
      if(Key != NULL) 
      { 
        for(i = 0; i < 6; i++) 
        { 
           ch = 0x00; 
           if(data[i*2] >= 'a') 
                ch+= (data[i*2] - 0x61 ) +10; 
           else if (data[i*2] >= 'A') 
                    ch+= (data[i*2] - 0x41 ) +10; 
           else 
                ch+= (data[i*2] - 0x30 ) ; 
 
           ch *= 16; 
 
           if(data[i*2+1] >= 'a') 
                ch+= (data[i*2+1] - 0x61 )+10 ; 
           else if (data[i*2+1] >= 'A') 
                    ch+= (data[i*2+1] - 0x41 ) +10; 
           else 
                ch+= (data[i*2+1] - 0x30 ) ; 
 
          temp[i] = ch; 
 
        } 
        memcpy(data, temp, 6); 
      } 
 
 
      for(i = 0; i < 6; i++) 
      { 
       if(data[i] != MacAddr[i])break; 
 
      } 
 
      if( i != 6) 
      { 
         memcpy(eprom_ptos.eprom_opt_inf.mac_addr, data, 6); 
         memcpy(MacAddr, data, 6); 
 
 
      i= eprom_24c08_write(&eprom_ptos.eprom_opt_inf ,eprom_ptos.eprom_opt_inf.offset , sizeof(OPT_INF)); 
 
 
       // eprom_24c08_read(&eprom_ptos.eprom_opt_inf, eprom_ptos.eprom_opt_inf.offset,  sizeof(OPT_INF)); 
 
       /*eprom_24c08_write(&eprom_ptos.eprom_opt_inf , 
                eprom_ptos.eprom_opt_inf.offset , sizeof(OPT_INF));   */ 
      } 
 
   } 
   /* 
   //   static INT8U flag = 0; 
   //-- DEFAULT_MAC_ADDR   define in opt.h 
 
 
   if(!flag) 
   { 
      flag  =   1; 
      memcpy(MacAddr + 2, DEFAULT_MAC_ADDR, sizeof(MacAddr) - 2); 
   } 
 
  */ 
      return MacAddr; 
 
 
} 
 
//*********************************************** 
// CheckIP_INT32U_Str(INT32U ) 
// Description  : check ip allow 
// Parameters   : 
// Returns      :  success return point "x.x.x.x" 
//                 fail           NULL 
//*********************************************** 
INT8U *CheckIP_INT32U_Str(INT32U Ip32U) 
{ 
    struct  ip_addr          addr; 
    static  INT8U           *addressStr; 
    addressStr   =  inet_ntoa(Ip32U); 
    inet_aton((const char*)addressStr, &addr); 
 
    if(addr.addr != Ip32U) return  NULL; 
 
    return addressStr; 
 
 
} 
 
//*********************************************** 
// *IoReset() 
// Description  : software reset 
// Parameters   : 
// Returns      :  
//*********************************************** 
IoReset() 
{ 
    reset(SYSTEM); 
} 
 
//*********************************************** 
//调整时钟 
//*********************************************** 
u16_t   sun_day(u16_t year,u16_t mon, u16_t day); 
u16_t   weekday(u16_t year,u16_t mon, u16_t day); 
INT8U *IoTimer(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
    static char    date[16]={0}; 
    static char    time[16]={0}; 
    INT8U              *p; 
    OS_TIME            time_set_inf; 
 
    if(!strncmp(data, "keep", 4) && !strncmp(Key, "system_time", 11)) 
    { 
        return &Char00;   //keep current date and time 
    } 
 
    switch(op) 
    { 
        case IOINIT: 
            // 
            break; 
        case IOR: 
            // 
            break; 
        case IOW: 
            if(!strncmp(data, "auto", 4)) 
            { 
                //在这里添加处置sntp服务器的代码 
                //sntp_start(); 
                return &Char00; 
            } 
            if(!strncmp(Key, "system_date", 11)) 
            { 
                memcpy(date, data, sizeof(date)); 
                if(time[0] == '\x00') 
                { 
                    return &Char00; 
                } 
            } 
            else if(!strncmp(Key, "system_time", 11)) 
            { 
                memcpy(time, data, sizeof(time)); 
                if(date[0] == '\x00') 
                { 
                    return &Char00; 
                } 
            } 
            else 
                return &Char00; 
            p = date; 
            StrAdjust(p); 
            time_set_inf.tm_year = atoi(p); 
            p += 4; 
            StrAdjust(p); 
            time_set_inf.tm_mon = atoi(p); 
            p += 2; 
            StrAdjust(p); 
            time_set_inf.tm_mday = atoi(p); 
            p = time; 
            StrAdjust(p); 
            time_set_inf.tm_hour = atoi(p); 
            p += 2; 
            StrAdjust(p); 
            time_set_inf.tm_min = atoi(p); 
            p += 2; 
            StrAdjust(p); 
            time_set_inf.tm_sec = atoi(p); 
            time_set_inf.tm_yday = sun_day(time_set_inf.tm_year, time_set_inf.tm_mon, time_set_inf.tm_mday); 
            time_set_inf.tm_wday = weekday(time_set_inf.tm_year, time_set_inf.tm_mon, time_set_inf.tm_mday); 
            timer_settime(&time_set_inf); 
            date[0] = '\x00'; 
            time[0] = '\x00'; 
 
            break; 
    } 
    return &Char00; 
} 
 
//处理图像倒转 
INT8U *IoImgReversal(INT8U *Key, INT8U *data, INT8U op, INT16U uid) 
{ 
   static INT8U Flip, Mirror; 
   INT16U read_mode; 
   INT8U flag1, flag2; 
   INT8U err; 
 
   if(op == IOINIT) 
   { 
      Flip = eprom_ptos.eprom_opt_img.flip; 
      Mirror = eprom_ptos.eprom_opt_img.mirror; 
      if(i2c_process_call(0x5d)) 
         return &Char00; 
      read_mode = i2c_read_word(0x5d, 0x20); 
      if(Mirror != 0 && Flip != 0) 
      { 
         i2c_write_word(0x5d, 0x20, read_mode | 0xc0a0); 
      } 
      else if(Mirror != 0) 
      { 
         i2c_write_word(0x5d, 0x20, read_mode | 0x4020); 
      } 
      else if(Flip != 0) 
      { 
         i2c_write_word(0x5d, 0x20, read_mode | 0x8080);      //flip 
      } 
      return &Char00; 
   } 
 
   if(op == IOR) 
   {//IMG_REV_ 
      if(!strncmp(Key+8, "FLIP", 4) && Flip != 0) 
         return Check; 
      else if(!strncmp(Key+8, "MIRROR", 6) && Mirror != 0) 
         return Check; 
      else 
         return &Char00; 
   } 
 
   if(op == IOW) 
   { 
      flag1 = 0; flag2 = 0; 
      if(!strncmp(Key+8, "flip", 4)) 
      { 
         switch(atoi(data)) 
         { 
            case 0: 
               Flip = 0; 
               eprom_ptos.eprom_opt_img.flip = 0; 
               break; 
            case 1: 
            default: 
               Flip = 1; 
               eprom_ptos.eprom_opt_img.flip = 1; 
               break; 
         } 
         flag1 = 1; 
      } 
      if(!strncmp(Key+8, "mirror", 6)) 
      { 
         switch(atoi(data)) 
         { 
            case 0: 
               Mirror = 0; 
               eprom_ptos.eprom_opt_img.mirror = 0; 
               break; 
            case 1: 
            default: 
               Mirror = 1; 
               eprom_ptos.eprom_opt_img.mirror = 1; 
               break; 
         } 
         flag2 = 1; 
      } 
      eprom_24c08_write(&eprom_ptos.eprom_opt_img, eprom_ptos.eprom_opt_img.offset , sizeof(OPT_IMG)); 
 
      if(i2c_process_call(0x5d)) 
        return &Char00; 
 
      OSMboxPend(imgSyncMbox, 0, &err); 
      read_mode = i2c_read_word(0x5d, 0x20); 
      if(flag1) 
      { 
         if(Flip != 0) 
           i2c_write_word(0x5d, 0x20, read_mode | 0x8080);       //flip 
         else 
           i2c_write_word(0x5d, 0x20, read_mode & 0x7f7f);       //clear flip 
      } 
      if(flag2) 
      { 
         if(Mirror != 0) 
           i2c_write_word(0x5d, 0x20, read_mode | 0x4020);      //mirror 
         else 
           i2c_write_word(0x5d, 0x20, read_mode & 0xbfcf);       //clear mirror 
      } 
      OSMboxPost(imgSyncMbox, (void*)1); 
   } 
 
   return Key; 
}