blob: 2d055686e95fc86535c5e9a60cbc114647e780a6 [file] [log] [blame]
/*******************************************************************************
* Copyright (C) 2016, ZIXC Corporation.
*
* File Name:
* File Mark:
* Description:
* Others:
* Version: 1.0
* Author: geanfeng
* Date: 2013-3-4
* History 1:
* Date:
* Version:
* Author:
* Modification:
* History 2:
********************************************************************************/
/****************************************************************************
* Include files
****************************************************************************/
#include <linux/types.h>
#include <usb/common.h>
#include <command.h>
#include <common.h>
#include <net.h>
#include <usb/usb_config.h>
/****************************************************************************
* Local Macros
****************************************************************************/
/****************************************************************************
* Local Types
****************************************************************************/
/****************************************************************************
* Global Variables
****************************************************************************/
int dl_serial_initial = 0;
/****************************************************************************
* Global Function Prototypes
****************************************************************************/
extern int tsp_usb_init(void);
extern WORD32 usb_read(WORD32 dwLen, BYTE *pchBuf);
extern WORD32 usb_write(WORD32 dwLen, BYTE *pchBuf);
extern int UART_Read(char *pchBuf, int dwLen);
extern int UART_Write(char *pchBuf, int dwLen);
/****************************************************************************
* Function Definitions
****************************************************************************/
/*******************************************************************************
* Function:downloader_serial_init
* Description:
* Parameters:
* Input:
*
* Output:
*
* Returns:
*
*
* Others:
********************************************************************************/
void downloader_serial_init(void)
{
#if CONFIG_USB_DL
usb_boot(SYS_USB_BASE); /*usb*/
#endif
dl_serial_initial =1;
}
/*******************************************************************************
* Function:downloader_serial_read
* Description:
* Parameters:
* Input:
*
* Output:
*
* Returns:
*
*
* Others:
********************************************************************************/
unsigned int g_testLen = 0;
unsigned int g_testAddr = 0;
unsigned int g_testFlag1 = 0;
int downloader_serial_read(char * buffer,unsigned int len)
{
int ret = 0;
if(!dl_serial_initial)
return 0;
g_testAddr = (unsigned int)&len;
#if CONFIG_USB_DL
ret = usb_read(len,buffer);
#else
ret = UART_Read(buffer,len);
#endif
g_testLen = len;
g_testFlag1 = 1;
if(!ret)
{
return 0; /*error return 0*/
}
else
{
return ret;/*actual length*/
}
}
/*******************************************************************************
* Function:downloader_serial_read_actuallen
* Description:
* Parameters:
* Input:
*
* Output:
*
* Returns:
*
*
* Others:
********************************************************************************/
int downloader_serial_read_actuallen(char * buffer,unsigned int len)
{
char* pBuffer = buffer;
uint readLength = 0;
uint length = 0;
//printf("start to rececive len = %d \n",len);
#if CONFIG_USB_DL
while(readLength < len)
{
length = downloader_serial_read(pBuffer,512);
//printf(" receiving len = %d \n",length);
if(length)
{
readLength += length;
//printf(" readLength = %d \n",readLength);
pBuffer += length;
}
else
{
continue;
}
}
//printf("finish receiving len = %d \n",len);
#else
length = downloader_serial_read(pBuffer,len);
#endif
return 0;
}
/*******************************************************************************
* Function:downloader_serial_write
* Description:
* Parameters:
* Input:
*
* Output:
*
* Returns:
*
*
* Others:
********************************************************************************/
int downloader_serial_write(const char * buffer,unsigned int len)
{
if(!dl_serial_initial)
return 0;
#if CONFIG_USB_DL
return usb_write(len,(char *)buffer);
#else
return UART_Write((char *)buffer,len);
#endif
}
/*******************************************************************************
* Function:downloader_serial_write_actuallen
* Description:
* Parameters:
* Input:
*
* Output:
*
* Returns:
*
*
* Others:
********************************************************************************/
int downloader_serial_write_actuallen(const char * buffer,unsigned int len)
{
const char* pBuffer = buffer;
uint writeLength = 0;
uint length = 0;
/*need modify*/
while(writeLength < len)
{
length = MIN(len-writeLength,136192);
//printf("prepare to write len=%d\n",length);
downloader_serial_write(pBuffer,length);
//printf("this time usb write len=%d\n",length);
writeLength += length;
//printf("usb have writen len=%d\n",writeLength);
pBuffer += length;
}
return 0;
}