www.pudn.com > Net_apps.rar > Tx6Rx6DisplayTv.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     : Tx6Rx6DisplayTv.c 
* Description  : 610 get image from 610 and put image into queue,display by driver 
* 
* 
* Version control: 
*  $Revision: 0.1 $    Date: 2004/09/16 12:00:00  gofly 
*      first implemetation 
* 
********************************************************************************************************* 
*/ 
#include "opt.h" 
#if TX6RX6DISPLAYTV 
#include "..\include\L3\net_apps\demo\Tx6Rx6DisplayTv.h" 
OS_EVENT		         *Tx6Rx6DisplayTvEvenSem; 
struct _TTx6Rx6DisplayTvState       Tx6Rx6DisplayTvState; 
/****************************************************************************/ 
/* FUNCTION NAME : 
/* DESCRIPTION   : 
/* in PARAMETERS : 
/* out PARAMETERS: 
/* RETURN VALUES : 
/* EXAMPLE	 : 
*****************************************************************************/ 
void Tx6Rx6DisplayTv (void *data) 
{ 
 
    struct _TTx6Rx6DisplayTvState    *state; 
    INT8U                             ucErr; 
    INT8U                             Msg[128]; 
    state                              =    &data; 
    Tx6Rx6DisplayTvEvenSem             =    (OS_EVENT*)OSSemCreate(0); 
    Tx6Rx6DisplayTvInit(state); 
 
 
 
    while(1) 
    { 
        #if 0 
        OSSemPend(Tx6Rx6DisplayTvEvenSem, 0, &ucErr); 
        #else 
        state->OrderState   =   SERVER_START; 
        #endif 
        Tx6Rx6DisplayTvLog (NULL, 0, IOINIT); 
        sprintf(Msg,"Tx6Rx6DisplayTv START.\x0d\x0a"); 
        Tx6Rx6DisplayTvLog (Msg, strlen(Msg), IOW); 
 
        while(2) 
        { 
            switch(state->SockState) 
            { 
                case SOCK_NEW: 
                    Tx6Rx6DisplayTvConnect((void*)state); 
                    break; 
                case SOCK_SEND: 
                    Tx6Rx6DisplayTvSend((void*)state); 
                    break; 
                case SOCK_RECV: 
                    Tx6Rx6DisplayTvRecv((void*)state); 
                    break; 
                case SOCK_CLOSE: 
                    close(state->sock ); 
                    state->sock = INVALID_SOCKET; 
                    sprintf(Msg,"Tx6Rx6DisplayTv CLOSE.\x0d\x0a"); 
                    Tx6Rx6DisplayTvLog (Msg, strlen(Msg), IOW); 
                    if(state->OrderState != SERVER_STOP) 
                    { 
                      Tx6Rx6DisplayTvTurnStates(state,SOCK_NEW,state->BufState,state->OrderState); 
                    } 
                    OSTimeDlyHMSM(0, 0, 5 , 0); 
                    break; 
            } 
            //---- socket close and order stop 
            if(state->SockState == SOCK_CLOSE && state->OrderState == SERVER_STOP) 
            { 
                break; 
            } 
            //----- order stop => socket stop 
            if(state->OrderState == SERVER_STOP) 
            { 
                Tx6Rx6DisplayTvTurnStates(state,SOCK_CLOSE,state->BufState,state->OrderState); 
            } 
        }// while(2) 
        sprintf(Msg,"Tx6Rx6DisplayTv STOP.\x0d\x0a"); 
        Tx6Rx6DisplayTvLog (Msg, strlen(Msg), IOW); 
        OSTimeDlyHMSM(0, 0, 5 , 0); 
    }//while(1) 
 
} 
 
/****************************************************************************/ 
/* FUNCTION NAME :   Tx6Rx6DisplayTvRecv 
/* DESCRIPTION   : 
/* in PARAMETERS : 
/* out PARAMETERS: 
/* RETURN VALUES : 
/* EXAMPLE	 : 
*****************************************************************************/ 
void Tx6Rx6DisplayTvRecv(void *data) 
{ 
    struct _TTx6Rx6DisplayTvState    *state; 
    INT8U               maxfdp1; 
    fd_set              readset; 
    INT8U               time_count; 
    INT16S              recv_len; 
    INT8U               Msg[1024]; 
    INT8U              *pMsgRecv; 
    struct  timeval     timeout={1,0}; 
    state                               =  data; 
    maxfdp1                             =  state->sock + 1; 
    time_count                          =  0; 
    while(1) 
    { 
        FD_ZERO(&readset); 
        FD_SET(state->sock , &readset); 
 
        select(maxfdp1, &readset, 0, 0,&timeout); 
 
        if(FD_ISSET(state->sock, &readset)) 
        { 
            memset(Msg,0x00,sizeof(Msg)); 
            recv_len = recv(state->sock , Msg, sizeof(Msg), 0); 
            if(recv_len <= 0) goto GOTO_Tx6Rx6DisplayTvRecv_ERR_END; 
 
            break; 
 
        } 
        else 
        { 
           time_count++; 
           if(time_count > 30) 
           { 
             goto GOTO_Tx6Rx6DisplayTvRecv_ERR_END; 
 
           } 
        } 
 
    }// while(1) 
 
 
 
 
    return; 
 
    GOTO_Tx6Rx6DisplayTvRecv_ERR_END: 
    sprintf(Msg,"Tx6Rx6DisplayTvRecv  fail\x0d\x0a\x00") ; 
    Tx6Rx6DisplayTvLog(Msg,strlen(Msg),IOW); 
    Tx6Rx6DisplayTvTurnStates(state,SOCK_CLOSE,state->BufState,state->OrderState); 
    //state->sock_state = SOCK_CLOSE; 
} 
/****************************************************************************/ 
/* FUNCTION NAME :   Tx6Rx6DisplayTvSend 
/* DESCRIPTION   : 
/* in PARAMETERS : 
/* out PARAMETERS: 
/* RETURN VALUES : 
/* EXAMPLE	 : 
*****************************************************************************/ 
void Tx6Rx6DisplayTvSend(void *data) 
{ 
    struct _TTx6Rx6DisplayTvState    *state; 
    INT8U                             Msg[128]; 
    INT16S                            send_len; 
     
    state                                 =       data; 
 
 
    sprintf(Msg,"GET /cgi-bin/Stream?Video webcamPWD=%s\x0d\x0a\x0d\x0a", 
           IoCookie(NULL,NULL,IOR,ROOT) 
        ); 
 
    send_len = send(state->sock , Msg, strlen(Msg),0); 
 
    sprintf(Msg,"Tx6Rx6DisplayTvSend send size = %d  \x0d\x0a\x00", send_len) ; 
    Tx6Rx6DisplayTvLog(Msg,strlen(Msg),IOW); 
 
    if(send_len <= 0) goto  GOTO_Tx6Rx6DisplayTv_ERR_END; 
 
 
    sprintf(Msg,"Tx6Rx6DisplayTvSend DdnsSend ok  \x0d\x0a\x00") ; 
    Tx6Rx6DisplayTvLog(Msg,strlen(Msg),IOW); 
    Tx6Rx6DisplayTvTurnStates(state,SOCK_RECV,state->BufState,state->OrderState); 
    return; 
 
 
    GOTO_Tx6Rx6DisplayTv_ERR_END: 
    sprintf(Msg,"DDNS_DEBUG DdnsSend  fail\x0d\x0a\x00") ; 
    Tx6Rx6DisplayTvLog(Msg,strlen(Msg),IOW); 
    Tx6Rx6DisplayTvTurnStates(state,SOCK_CLOSE,state->BufState,state->OrderState); 
 
} 
/****************************************************************************/ 
/* FUNCTION NAME :   Tx6Rx6DisplayTvConnect 
/* DESCRIPTION   : 
/* in PARAMETERS : 
/* out PARAMETERS: 
/* RETURN VALUES : 
/* EXAMPLE	 : 
*****************************************************************************/ 
void Tx6Rx6DisplayTvConnect(void *data) 
{ 
    struct _TTx6Rx6DisplayTvState    *state; 
    INT8U                             Msg[128]; 
    state                                 =       data; 
    state->S_ip_port_data.sin_port        =       htons(80); 
    state->sock                           =       socket(0,SOCK_STREAM,0); 
    state->S_ip_port_data.sin_addr.s_addr =       IMAGE_SERVER_IP4; 
    state->S_ip_port_data.sin_family      =       AF_INET; 
    if(state->sock == INVALID_SOCKET) 
    { 
        sprintf(Msg,"Tx6Rx6DisplayTvConnect socket() fail \x0d\x0a\x00") ; 
 
        goto GOTO_Tx6Rx6DisplayTvConnect_ERR_END; 
    } 
 
 
    if( -1  ==  connect(state->sock, &state->S_ip_port_data, 0)) 
    { 
        sprintf(Msg,"Tx6Rx6DisplayTvConnect connect() fail  \x0d\x0a\x00") ; 
        goto GOTO_Tx6Rx6DisplayTvConnect_ERR_END; 
    } 
 
 
        sprintf(Msg,"Tx6Rx6DisplayTvConnect ok  \x0d\x0a\x00") ; 
        Tx6Rx6DisplayTvLog(Msg,strlen(Msg),IOW); 
        Tx6Rx6DisplayTvTurnStates(state,SOCK_SEND,state->BufState,state->OrderState); 
        //state->SockState = SOCK_SEND; 
        return; 
 
        GOTO_Tx6Rx6DisplayTvConnect_ERR_END: 
        Tx6Rx6DisplayTvLog(Msg,strlen(Msg),IOW); 
        sprintf(Msg,"Tx6Rx6DisplayTvConnect  fail  \x0d\x0a\x00") ; 
        Tx6Rx6DisplayTvLog(Msg,strlen(Msg),IOW); 
        Tx6Rx6DisplayTvTurnStates(state,SOCK_CLOSE,state->BufState,state->OrderState); 
        //state->SockState = SOCK_CLOSE; 
 
 
} 
/****************************************************************************/ 
/* FUNCTION NAME :    
/* DESCRIPTION   : 
/* in PARAMETERS : 
/* out PARAMETERS: 
/* RETURN VALUES : 
/* EXAMPLE	 : 
*****************************************************************************/ 
void Tx6Rx6DisplayTvInit(void *data) 
{ 
    struct _TTx6Rx6DisplayTvState    *state; 
 
    state                   =       data; 
 
    state->BufState         =       RELEASE; 
    state->OrderState       =       SERVER_STOP; 
    state->SockState        =       SOCK_NEW; 
    state->sock             =       INVALID_SOCKET; 
    state->pLog             =       NULL; 
    state->RequestCount     =       0; 
 
 
}; 
 
/****************************************************************************/ 
/* FUNCTION NAME :   DdnsLog 
/* DESCRIPTION   : 
/* in PARAMETERS : 
/* out PARAMETERS: 
/* RETURN VALUES : 
/* EXAMPLE	 : 
*****************************************************************************/ 
 
void Tx6Rx6DisplayTvLog (INT8U *data,INT32U Size,INT8U op) 
{ 
 static INT8U Log[1024]; 
 
 Tx6Rx6DisplayTvState.pLog = Log; 
 //if(op == IOW)SHOW_EX1(1 ,data); 
 asm {PUSHF; CLI} 
 switch(op) 
 { 
    case IOR: 
        memset(data, 0x00, Size); 
        Size = min(Size, sizeof(Log)); 
        memcpy(data, Log,Size); 
 
        break; 
    case IOW: 
        if(Size  > sizeof(Log)) break; 
 
        if(Size + strlen(Log)  >=  sizeof(Log)) 
            memset(Log, 0x00, sizeof(Log)); 
        strcat(Log, data); 
 
        break; 
    case IOINIT: 
        memset(Log, 0x00, sizeof(Log)); 
        break; 
 } 
 
 
 asm  POPF 
} 
/****************************************************************************/ 
/* FUNCTION NAME :    
/* DESCRIPTION   : 
/* in PARAMETERS : 
/* out PARAMETERS: 
/* RETURN VALUES : 
/* EXAMPLE	 : 
*****************************************************************************/ 
void Tx6Rx6DisplayTvTurnStates(void *data,INT8U SockState,INT8U BufState,INT8U OrderState) 
{ 
    struct _TTx6Rx6DisplayTvState    *state; 
    state                   =       data; 
    asm {PUSHF; CLI} 
    state->BufState         =       BufState; 
    state->OrderState       =       OrderState; 
    state->SockState        =       SockState; 
    asm  POPF 
} 
 
#endif//TX6RX6DISPLAYTV