📄 ctcust.c
字号:
Name: CTExampleArray
Desc: Example of function with multiple parameters.
Params: -
Returns: -
Caveats:
*/
static void CTExampleArray( void )
{
char ShortString[10];
CTSendStringResponse( "ExampleArrayFunc:\n" );
CTSendStringResponse( "The first two parameters you entered multiplied by each other:" );
GSMsprintf( ShortString, "%d\n", DummyArray[0] * DummyArray[1] );
CTSendStringResponse( ShortString );
CTSendStringResponse( "ExampleArrayFunc:DONE\n" );
return;
}
/*------------------------------------------------------------------------*/
/*
Name: ExampleCmdLineFunc
Desc: Example of function with string parameters.
Please notice the structure of CTTokenList.
Params: -
Returns: -
Caveats:
*/
static void CTExampleCmdLine( CTTokenList * CTCmd )
{
INT8 i;
STRING str = GSM_NEW_STRING( 50 );
CTSendStringResponse( "ExampleCmdLineFunc:\n" );
CTSendStringResponse( "This type of function evaluates the tokens separated by commas in any way desired.\n" );
CTSendStringResponse( "These are the parameters you entered:\n" );
for ( i = 1; i < CTCmd->NumTokens; i++ )
{
GSMsprintf( str, "%s\n", CTCmd->Token[i] );
CTSendStringResponse( str );
}
GSMFree( str );
CTSendStringResponse( "ExampleCmdLineFunc:DONE\n" );
return;
}
#if (_CAM_IC_ == UH_CAMIC_CLC_HERA)
/**Mtis_L1 2004.08.16 kdheon for sublcd preview */
BOOLEAN CTGetUnsigned( char *pszStr, UINT32 * pdwVal, UINT32 dwMin, UINT32 dwMax )
{
static const UINT8 HexDigit[] = "0123456789ABCDEF";
BOOLEAN bHex = FALSE;
char *pC = pszStr;
UINT32 dwVal = 0,
dwDigit,
dwRadix,
dwOverflow;
while ( *pC && ( *pC < '0' ) && ( *pC > '9' ) )
pC++;
if ( ( *pC == '0' ) && ( ( pC[1] == 'x' ) || ( pC[1] == 'X' ) ) )
{
pC += 2;
bHex = TRUE;
}
dwRadix = ( bHex ? 16 : 10 );
dwOverflow = 0xffffffff / dwRadix;
while ( *pC )
{
if ( dwVal >= dwOverflow )/* overflow ? */
return FALSE;
if ( bHex && ( *pC >= 'a' ) && ( *pC <= 'f' ) )
*pC = 'A' + ( *pC - 'a' );
for ( dwDigit = 0; dwDigit < dwRadix; dwDigit++ )
if ( *pC == HexDigit[dwDigit] )
break;
if ( dwDigit >= dwRadix ) /* invalid char ? */
return FALSE;
dwVal = dwVal * dwRadix + dwDigit;
pC++;
}
if ( ( dwMin != dwMax ) && ( ( dwVal < dwMin ) || ( dwVal > dwMax ) ) )
return FALSE;
*pdwVal = dwVal;
return TRUE;
}
/**Mtis_L1 2004.08.16 kdheon for sublcd preview */
void PrintMemory (PRINTDEV device, UINT32 Rdsize, UINT32 PrintAddr, UINT8 LongEN)
{
int i,j;
UINT16* DumpContextBufPtr;
UINT32* WordReadPtr;
UINT16* HWordReadPtr;
UINT16* tmpDumpctxt = NULL;
//UINT8* DumpChar;
DumpContextBufPtr = (UINT16*)GSMMalloc(Rdsize);
tmpDumpctxt = (UINT16*) DumpContextBufPtr;
GSMmemset(DumpContextBufPtr, 0, Rdsize);
memcpy(DumpContextBufPtr, PrintAddr, Rdsize);
WordReadPtr = (UINT32*)DumpContextBufPtr;
HWordReadPtr = DumpContextBufPtr;
//DumpChar = (UINT8*)DumpContextBufPtr;
for (i = 0; i < (Rdsize/16); i++)
{
GSMcprintf(device, "0x%08X : ", (UINT32)PrintAddr + ( i * 0x10 ));
if (LongEN)
{
for (j = 0; j < 4; j++)
{
GSMcprintf(device, "%08X ", *WordReadPtr++);
}
}
else
{
for (j = 0; j < 8; j++)
{
GSMcprintf(device, "%04X ", *HWordReadPtr++);
}
}
/*
GSMcprintf(device, "\t\t\t");
for (j = 0; j < 16; j++)
{
GSMcprintf(device, "%c ", *DumpChar++);
}
/*
TRSetTransparent( device ); /* Put tracer in transparent mode */
GSMcprintf(device, "\n");
if ( (i % 50) == 0)
WDResetWatchdogTimer();
}
GSMFree( tmpDumpctxt );
}
/**Mtis_L1 2004.08.16 kdheon for sublcd preview */
void Dump_Memory(UINT8* dumpaddr, UINT32 ReadSize, UINT8 LongEN, UINT8* InitStr)
{
PRINTDEV device;
extern CHIP_SET_TYPE Chip_Set;
extern void TRSafePutChar( char Char );
UINT8 i;
//GSMClearTrace( ); /* Stop tracing, as this results in system calls */
/*If you wish to use GSMPrintf, You Can Point This Function "GSMPutChar"*/
device = TRSafePutChar;
TRSafeInitTracePort( Chip_Set ); /* Make sure UART is initialized properly */
TRSafeEmptyTRPutBuffer( device ); /* If connected to OptiTrace, dump any traces
that may be still queued in TRPutBuffer */
TRSetTransparent( device ); /* Put tracer in transparent mode */
if (InitStr != NULL)
GSMcprintf(device, InitStr);
GSMcprintf(device, "\n!!Memory Dump Start\n");
PrintMemory(device, ReadSize, dumpaddr, LongEN);
GSMcprintf(device, "... Memory Dump : End \n\n");
}
/*---------------------------- Global Functions: -------------------------*/
/*
Name: CTHERADeviceControl
Desc: Control the "CL851S64" ASIC (HERA)
Params: -
Returns:
Caveats:
*/
typedef enum
{
CAM_DEVICE_INIT,
CAM_PREVIEW,
CAM_PREVIEW_OFF,
CAM_SINGLECAPTURE,
CAM_MULTISHOT,
CAM_SPLITSHOT,
CAM_FRAMESHOT,
CAM_MPEG4_RECORD,
CAM_MPEG4_RECORD_STOP,
CAM_MPEG4_PLAY,
CAM_MPEG4_PLAY_STOP,
CAM_MP3_PLAY,
CAM_MP3_STOP,
CAM_DEVICE_DEINIT,
CAM_REG_READ,
CAM_REG_WRITE,
CAM_API_WRITE
} CAM_MODE;
static void CTHERADeviceControl (CTTokenList * CTCmd)
{
CAM_MODE CamMode;
extern UINT32 Get_Register(UINT32 Address);
extern void Set_Register(UINT32 Address, UINT32 Data);
extern void Cmd_WriteHeraCommand(U16 command, U16 parameter);
UINT8 strbuff[256];
UINT8 strbuff2[256];
UINT8 InitStr[256];
if(GSMstrcmp( "init", CTCmd->Token[1]) == 0)
CamMode = CAM_DEVICE_INIT;
else if(GSMstrcmp( "preview", CTCmd->Token[1]) == 0)
CamMode = CAM_PREVIEW;
else if(GSMstrcmp( "previewoff", CTCmd->Token[1]) == 0)
CamMode = CAM_PREVIEW_OFF;
else if(GSMstrcmp( "singleshot", CTCmd->Token[1]) == 0)
CamMode = CAM_SINGLECAPTURE;
else if(GSMstrcmp( "multishot", CTCmd->Token[1]) == 0)
CamMode = CAM_MULTISHOT;
else if(GSMstrcmp( "splitshot", CTCmd->Token[1]) == 0)
CamMode = CAM_SPLITSHOT;
else if(GSMstrcmp( "frameshot", CTCmd->Token[1]) == 0)
CamMode = CAM_FRAMESHOT;
else if(GSMstrcmp( "mpeg4record", CTCmd->Token[1]) == 0)
CamMode = CAM_MPEG4_RECORD;
else if(GSMstrcmp( "mpeg4recordstop", CTCmd->Token[1]) == 0)
CamMode = CAM_MPEG4_RECORD_STOP;
else if(GSMstrcmp( "mpeg4play", CTCmd->Token[1]) == 0)
CamMode = CAM_MPEG4_PLAY;
else if(GSMstrcmp( "mpeg4playstop", CTCmd->Token[1]) == 0)
CamMode = CAM_MPEG4_PLAY_STOP;
else if(GSMstrcmp( "mp3play", CTCmd->Token[1]) == 0)
CamMode = CAM_MP3_PLAY;
else if(GSMstrcmp( "mp3stop", CTCmd->Token[1]) == 0)
CamMode = CAM_MP3_STOP;
else if(GSMstrcmp( "exit", CTCmd->Token[1]) == 0)
CamMode = CAM_DEVICE_DEINIT;
else if(GSMstrcmp( "readreg", CTCmd->Token[1]) == 0)
CamMode = CAM_REG_READ;
else if(GSMstrcmp( "writereg", CTCmd->Token[1]) == 0)
CamMode = CAM_REG_WRITE;
else if(GSMstrcmp( "writeapi", CTCmd->Token[1]) == 0)
CamMode=CAM_API_WRITE;
else
{
CTSendStringResponse( "UNKNOWN Cam Command" );
return;
}
switch(CamMode)
{
case CAM_DEVICE_INIT:
{
CTSendStringResponse( "Camera Device Init " );
uiCameraOn();
}
break;
#if 0
case CAM_PREVIEW:
{
if(GSMstrcmp( "main", CTCmd->Token[2]) == 0)
{
/*Mtis_L1 kdheon 2004.08.19 sublcd preview debug */
SetCurLCD(MAIN_LCD);
if(GSMstrcmp( "jpeg", CTCmd->Token[3]) == 0)
CamSetPreview(0/*JPEG*/,2, 0); // QVGA Preview
else if(GSMstrcmp( "mpeg", CTCmd->Token[3]) == 0)
CamSetPreview(1/*MPEG*/,2, 0); // QVGA Preview
CamPreviewOn();
}
/*Mtis_L1 kdheon 2004.08.19 sublcd preview debug */
else if (GSMstrcmp( "sub", CTCmd->Token[2]) == 0)
{
SetCurLCD(SUB_LCD);
CamSetPreview(0,2, 0); // QVGA Preview
CamPreviewOn();
}
else
{
CTSendStringResponse( "Camera Preview Parameter Error" );
return;
}
}
#endif
break;
case CAM_PREVIEW_OFF:
{
CamPreviewEnd();
CTSendStringResponse( "Camera Preview OFF" );
}
break;
case CAM_SINGLECAPTURE:
{
#if defined(__LCD_COLOR_240x320__)
#define SAVE_SIZE 240 * 320 * 2
#else
#define SAVE_SIZE 176 * 160 * 2
#endif
extern CAM_ERROR CamCaptureSingle(void );
extern CamBitmap_t SJpeg;
extern UINT8 *CamGramImage;
UINT8 Readbuff[SAVE_SIZE];
int status;
CamCaptureSingle();
/*JPEG READ DATA Dump*/
GSMstrcpy(InitStr, "\n\nJPEG Read Data :\n");
Dump_Memory(SJpeg.data, SAVE_SIZE, FALSE, InitStr);
/*RGB READ DATA Dump*/
GSMstrcpy(InitStr, "\n\nRGB Read Data :\n");
Dump_Memory((UINT8*)CamGramImage, SAVE_SIZE, FALSE, InitStr);
/*Save Samsung NandFlash*/
nffsChangeDir(nffs_dir[CAMERA]);
status = nffsWriteFile("test.jpeg", CamGramImage, SAVE_SIZE);
if(status)
GSMprintf("### nffsWriteFile FAIL!!\n");
nffsChangeDir("/");
CTSendStringResponse( "NandSave : Done" );
/*Saved Nand DATA Dump*/
if (nffsChangeDir(nffs_dir[CAMERA]))
GSMprintf("### nffsReadFile FAIL!!\n");
nffsReadFile("test.jpeg", Readbuff, SAVE_SIZE);
GSMstrcpy(InitStr, "\n\nSaved NandData :\n");
Dump_Memory((UINT8*)Readbuff, SAVE_SIZE, FALSE, InitStr);
}
break;
case CAM_MULTISHOT:
{
// To do
}
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -