int
SiSTouch_Aegis_Multi_FOR_NEW_DRIVER::call_87()
{

    int ret = 0;

    if( m_verbose)
    {
        LOGI("call_87()");
    }

    for( int i = 0; i < m_retry; i++)
    {
        ret = simple_io_master( 0x87, DELAY_FOR_GENEARL , DEFAULT_TIMEOUT, TIMEOUT_FOR_87 );
		
        // [20150304]
        if(this->m_chipNum >= 7)
        {
		    printf("chipNum >= 7, delay 4s\n");
            int sleepTime = 4 * 1000 * 1000;
            usleep( sleepTime );
        }
				
        if ( ret < 0 )
        {
            ret = parse_syscall_return_value( ret, GENERAL_TYPE_FLAG );
            break;
        }
        else
        {

            ret = read_simple_ack_master(ret);

            if ( ret != ERROR_WRONG_FORMAT )
			{
                break;
			}
        }

        usleep( m_delay );

    }

    if( ret < 0 )
    {
        if ( m_verbose )
        {
            log_out_error_message( ret, 0x87 );
        }
    }
    else
    {

#ifdef VIA_IOCTL

#ifdef CLOSE_AFTER_RESET
        sis_usb_start();
        usleep(WAIT_DEVICE_REMOVE * 1000);
#endif
        for(int i = 0; i < DEVICE_CLOSE_RETRY_TIMES; i++ )
        {
            ret = stop_driver();
            // these three error not repeat retry in stop_driver()
            if(ret != ERROR_ACCESS && ret != ERROR_ENTRY_NOT_EXIST && ret != ERROR_DEVICE_NOT_EXIST)
            {
                break;
            }
			
			/* re-find /dev/hidraw* if hidrawCnt changed ====================*/
			if(reFindSisTouchName() == false)
            {
            }
			/* ===========================================*/
			
            usleep( DEVICE_CLOSE_RETRY_INTERVAL * 1000 );
        }
#else
        ret = stop_driver();
#endif
    }
    return ret;

}
Beispiel #2
0
void CdenableSysStopRemove(void)
{
	stop_driver();
	remove_driver();
}
int
SiSTouch_Aegis_Multi_FOR_NEW_DRIVER::call_82_without_retry()
{

    if( m_verbose)
    {
        LOGI("call_82()");
    }

    int ret = simple_io_master( 0x82, DELAY_FOR_GENEARL );

    if ( ret < 0 )
    {
        ret = parse_syscall_return_value( ret, GENERAL_TYPE_FLAG );
    }
    else
    {

        ret = read_simple_ack_master(ret);
    }

    if( ret < 0 )
    {
        if ( m_verbose )
        {
            log_out_error_message( ret, 0x82 );
        }
    }
    else
    {

#ifdef VIA_IOCTL

#ifdef CLOSE_AFTER_RESET
        sis_usb_start();
        usleep(WAIT_DEVICE_REMOVE * 1000);
#endif
        for(int i = 0; i < DEVICE_CLOSE_RETRY_TIMES; i++ )
        {
            ret = stop_driver();
            // these three error not repeat retry in stop_driver()
            if(ret != ERROR_ACCESS && ret != ERROR_ENTRY_NOT_EXIST && ret != ERROR_DEVICE_NOT_EXIST)
            {
                break;
            }

			/* re-find /dev/hidraw* if hidrawCnt changed ====================*/
			if(reFindSisTouchName() == false)
            {
            }
			/* ===========================================*/
			
            usleep( DEVICE_CLOSE_RETRY_INTERVAL * 1000 );
        }

#else
        ret = stop_driver();
#endif
    }

    return ret;

}