divide standby/resume functions

support dual activation mode
fix result value
change camera intialization to without output

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@247 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
yutaka 2007-08-23 01:02:49 +00:00
parent 3d1290d6c2
commit 1dadd63d17
19 changed files with 482 additions and 190 deletions

View File

@ -82,8 +82,8 @@ LOAD=Auto Exposure
LOAD=Auto White Balance
LOAD=Gamma Correction
LOAD=Sharpness : 0
LOAD=Refresh
//LOAD=Refresh
LOAD=Image Size : QVGA
[Initialize Camera]
REG = 0x001A, 0x0003// Activate Soft Reset & MIPI Reset
@ -91,7 +91,7 @@ DELAY = 1 // Wait 1ms for internal reset cycle (6000 EXTCLK cycles) using a 6.75
REG = 0x001A, 0x0000 // Deactivate both soft reset, MIPI reset
DELAY = 1
REG = 0x0018, 0x4028 // Enable STANDBY mode, Bit(3)
REG = 0x001A, 0x0200 // Enable parallel port:bit(9) & Output enable: Bit(8)
//REG = 0x001A, 0x0200 // Enable parallel port:bit(9) & Output enable: Bit(8) // Yutaka: no output
REG = 0x001E, 0x0777 // Program to slowest SLEW rate
REG = 0x0016, 0x42DF // Invert PIXCLK output to interface with Micron DEMO2 board
// Enable EXTCLK bit9

View File

@ -71,15 +71,16 @@
[Default Registers]
LOAD=Initialize Camera
LOAD=Image Setting ExtClk=6.75MHz Op_Pix=27.5MHz 15fps
//LOAD=Image Setting ExtClk=6.75MHz Op_Pix=27.5MHz 15fps
//LOAD=Image Setting ExtClk=16.76MHz Op_Pix=27.5MHz 15fps
//LOAD=Image Setting ExtClk=16.76MHz Op_Pix=8.38MHz
LOAD=Image Setting ExtClk=16.76MHz Op_Pix=8.38MHz
LOAD=Lens Correction V2-95%
LOAD=Auto Exposure
LOAD=Auto White Balance
LOAD=Gamma Correction
LOAD=<o> Mode : Landscape
LOAD=<o> Image Size : QVGA
[Initialize Camera]
REG = 0x001A, 0x0003// Activate Soft Reset & MIPI Reset
@ -87,7 +88,7 @@ DELAY = 1 // Wait 1ms for internal reset cycle (6000 EXTCLK cycles) using a 6.75
REG = 0x001A, 0x0000 // Deactivate both soft reset, MIPI reset
DELAY = 1
REG = 0x0018, 0x4028 // Enable STANDBY mode, Bit(3)
REG = 0x001A, 0x0200 // Enable parallel port:bit(9) & Output enable: Bit(8)
//REG = 0x001A, 0x0200 // Enable parallel port:bit(9) & Output enable: Bit(8) // Yutaka: no output
REG = 0x001E, 0x0777 // Program to slowest SLEW rate
REG = 0x0016, 0x42DF // Invert PIXCLK output to interface with Micron DEMO2 board
// Enable EXTCLK bit9

View File

@ -15,7 +15,7 @@
0A 03 #PLL1
0B 00 #PLL2
04 10
04 90
#04 98 # Yutaka: no output
C9 B0 #frame height 15fps
C8 04 #1200

View File

@ -257,5 +257,5 @@ D4 08 # 01D4 referense gain1
0A 02 #03 #pre PLL1
0B 01 #03 00 #post PLL2
04 10
04 90
#04 98 # Yutaka: no output

View File

@ -257,5 +257,5 @@ D4 08 # 01D4 referense gain1
0A 02 #03 #pre PLL1
0B 01 #03 00 #post PLL2
04 10
04 90
#04 98 # Yutaka: no output

View File

@ -134,6 +134,7 @@ static void CameraPxiCallback(PXIFifoTag tag, u32 data, BOOL err)
// 既知のコマンド群
case CAMERA_PXI_COMMAND_INIT:
case CAMERA_PXI_COMMAND_ACTIVATE:
case CAMERA_PXI_COMMAND_OUTPUT_WITH_DUAL_ACTIVATION:
case CAMERA_PXI_COMMAND_RESIZE:
case CAMERA_PXI_COMMAND_FRAME_RATE:
case CAMERA_PXI_COMMAND_EFFECT:
@ -232,41 +233,74 @@ static void CameraThread(void *arg)
{
case CAMERA_PXI_COMMAND_INIT:
CAMERA_PXI_SIZE_CHECK(CAMERA_PXI_SIZE_INIT);
// NONEでなければNONE状態にする
// 両方StandbyでなければStandby状態にする (TODO: 出力なしのまま初期化できるようになればいらなくなる!)
if (cameraWork.camera != CAMERA_SELECT_NONE)
{
if (FALSE == CAMERA_I2CStandby(cameraWork.camera, TRUE))
if (FALSE == CAMERA_I2CStandby(cameraWork.camera))
{
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_SUCCESS_FALSE); // ARM9に処理の失敗を通達
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_ILLEGAL_STATUS); // ARM9に処理の失敗を通達
break;
}
}
cameraWork.camera = CAMERA_SELECT_NONE;
result = CAMERA_I2CInit((CameraSelect)cameraWork.data[0]);
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS_TRUE : CAMERA_PXI_RESULT_SUCCESS_FALSE); // ARM9に処理の成功を通達
cameraWork.camera = CAMERA_SELECT_NONE; // 初期状態は両方Standby
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS : CAMERA_PXI_RESULT_ILLEGAL_STATUS); // ARM9に処理の成功を通達
break;
case CAMERA_PXI_COMMAND_ACTIVATE:
CAMERA_PXI_SIZE_CHECK(CAMERA_PXI_SIZE_ACTIVATE);
// ここでは、BOTHは設定不可
if (CAMERA_SELECT_BOTH == cameraWork.data[0])
{
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_INVALID_PARAMETER); // ARM9に処理の失敗を通達
break;
}
// 変更があるなら切り替える
if (cameraWork.camera != cameraWork.data[0])
{
// NONEでなければNONE状態にする
// 両方StandbyでなければStandby状態にする
if (cameraWork.camera != CAMERA_SELECT_NONE)
{
if (FALSE == CAMERA_I2CStandby(cameraWork.camera, TRUE))
if (FALSE == CAMERA_I2CStandby(cameraWork.camera))
{
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_SUCCESS_FALSE); // ARM9に処理の失敗を通達
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_ILLEGAL_STATUS); // ARM9に処理の失敗を通達
break;
}
}
cameraWork.camera = (CameraSelect)cameraWork.data[0];
cameraWork.camera = (CameraSelect)cameraWork.data[0]; // アクティブなカメラの記録
// 両方Standbyにするのではなければ、指定された方をアクティブにする
if (cameraWork.camera != CAMERA_SELECT_NONE)
{
if (FALSE == CAMERA_I2CStandby(cameraWork.camera, FALSE))
if (FALSE == CAMERA_I2CResume(cameraWork.camera)) // Standby解除
{
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_SUCCESS_FALSE); // ARM9に処理の失敗を通達
CAMERA_I2CStandby(CAMERA_SELECT_BOTH); // 中途半端な状態対策
cameraWork.camera = CAMERA_SELECT_NONE; // NONEに戻しておく
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_ILLEGAL_STATUS); // ARM9に処理の失敗を通達
break;
}
}
}
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_SUCCESS_TRUE); // ARM9に処理の成功を通達
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_SUCCESS); // ARM9に処理の成功を通達
break;
case CAMERA_PXI_COMMAND_OUTPUT_WITH_DUAL_ACTIVATION:
CAMERA_PXI_SIZE_CHECK(CAMERA_PXI_SIZE_OUTPUT_WITH_DUAL_ACTIVATION);
// ここでは、IN/OUTのみ設定可
if (CAMERA_SELECT_IN != cameraWork.data[0] && CAMERA_SELECT_OUT != cameraWork.data[0])
{
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_INVALID_PARAMETER); // ARM9に処理の失敗を通達
break;
}
// (いちいち状態を保存せず) 常に設定する
cameraWork.camera = CAMERA_SELECT_BOTH; // アクティブなカメラの記録
if (FALSE == CAMERA_I2CResumeBoth((CameraSelect)cameraWork.data[0]))
{
CAMERA_I2CStandby(CAMERA_SELECT_BOTH); // 中途半端な状態対策
cameraWork.camera = CAMERA_SELECT_NONE; // NONEに戻しておく
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_ILLEGAL_STATUS); // ARM9に処理の失敗を通達
break;
}
CameraReturnResult(cameraWork.command, CAMERA_PXI_RESULT_SUCCESS); // ARM9に処理の成功を通達
break;
case CAMERA_PXI_COMMAND_RESIZE:
@ -274,25 +308,25 @@ static void CameraThread(void *arg)
CAMERA_UNPACK_U16(&data16a, &cameraWork.data[1]);
CAMERA_UNPACK_U16(&data16b, &cameraWork.data[3]);
result = CAMERA_I2CResize((CameraSelect)cameraWork.data[0], data16a, data16b);
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS_TRUE : CAMERA_PXI_RESULT_SUCCESS_FALSE); // ARM9に処理の成功を通達
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS : CAMERA_PXI_RESULT_ILLEGAL_STATUS); // ARM9に処理の成否を通達
break;
case CAMERA_PXI_COMMAND_FRAME_RATE:
CAMERA_PXI_SIZE_CHECK(CAMERA_PXI_SIZE_FRAME_RATE);
result = CAMERA_I2CFrameRate((CameraSelect)cameraWork.data[0], cameraWork.data[1]);
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS_TRUE : CAMERA_PXI_RESULT_SUCCESS_FALSE); // ARM9に処理の成功を通達
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS : CAMERA_PXI_RESULT_ILLEGAL_STATUS); // ARM9に処理の成否を通達
break;
case CAMERA_PXI_COMMAND_EFFECT:
CAMERA_PXI_SIZE_CHECK(CAMERA_PXI_SIZE_EFFECT);
result = CAMERA_I2CEffect((CameraSelect)cameraWork.data[0], (CameraEffect)cameraWork.data[1]);
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS_TRUE : CAMERA_PXI_RESULT_SUCCESS_FALSE); // ARM9に処理の成功を通達
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS : CAMERA_PXI_RESULT_ILLEGAL_STATUS); // ARM9に処理の成否を通達
break;
case CAMERA_PXI_COMMAND_FLIP:
CAMERA_PXI_SIZE_CHECK(CAMERA_PXI_SIZE_FLIP);
result = CAMERA_I2CFlip((CameraSelect)cameraWork.data[0], (CameraFlip)cameraWork.data[1]);
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS_TRUE : CAMERA_PXI_RESULT_SUCCESS_FALSE); // ARM9に処理の成功を通達
CameraReturnResult(cameraWork.command, result ? CAMERA_PXI_RESULT_SUCCESS : CAMERA_PXI_RESULT_ILLEGAL_STATUS); // ARM9に処理の成否を通達
break;
// サポートしないコマンド

View File

@ -58,7 +58,7 @@ BOOL CAMERA_I2CInit(CameraSelect camera)
result = CAMERAi_S_I2CInit(camera);
if (result == FALSE)
{
cameraType = CAMERA_TYPE_MICRON; // rotate for next try
//cameraType = CAMERA_TYPE_MICRON; // rotate for next try
//cameraType = CAMERA_TYPE_UNKNOWN; // annihilate camera I2C
}
}
@ -69,24 +69,75 @@ BOOL CAMERA_I2CInit(CameraSelect camera)
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CStandby
Description: standby or resume CAMERA
Description: goto standby
Arguments: camera : one of CameraSelect
standby : TRUE if goto standby mode
Arguments: camera : one of CameraSelect (IN/OUT/BOTH) to goto standby
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERA_I2CStandby(CameraSelect camera, BOOL standby)
BOOL CAMERA_I2CStandby(CameraSelect camera)
{
BOOL result = FALSE;
(void)I2C_Lock();
switch (cameraType)
{
case CAMERA_TYPE_MICRON:
result = CAMERAi_M_I2CStandby(camera, standby);
result = CAMERAi_M_I2CStandby(camera);
break;
case CAMERA_TYPE_SHARP:
result = CAMERAi_S_I2CStandby(camera, standby);
result = CAMERAi_S_I2CStandby(camera);
break;
}
(void)I2C_Unlock();
return result;
}
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CResume
Description: resume from standby
Arguments: camera : one of CameraSelect (IN/OUT) to resume
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERA_I2CResume(CameraSelect camera)
{
BOOL result = FALSE;
(void)I2C_Lock();
switch (cameraType)
{
case CAMERA_TYPE_MICRON:
result = CAMERAi_M_I2CResume(camera);
break;
case CAMERA_TYPE_SHARP:
result = CAMERAi_S_I2CResume(camera);
break;
}
(void)I2C_Unlock();
return result;
}
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CResumeBoth
Description: resume both CAMERAs, but only one will output
Arguments: camera : one of CameraSelect (IN/OUT) to output
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERA_I2CResumeBoth(CameraSelect camera)
{
BOOL result = FALSE;
(void)I2C_Lock();
switch (cameraType)
{
case CAMERA_TYPE_MICRON:
result = CAMERAi_S_I2CResumeBoth(camera);
break;
case CAMERA_TYPE_SHARP:
result = CAMERAi_S_I2CResumeBoth(camera);
break;
}
(void)I2C_Unlock();
@ -121,7 +172,6 @@ BOOL CAMERA_I2CResize(CameraSelect camera, u16 width, u16 height)
return result;
}
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CFrameRate
@ -203,3 +253,8 @@ BOOL CAMERA_I2CFlip(CameraSelect camera, CameraFlip flip)
return result;
}
#if 0
API候補
(YUYVの順番RGB444もあり?)
#endif

View File

@ -31,50 +31,83 @@
*---------------------------------------------------------------------------*/
BOOL CAMERAi_M_I2CInit(CameraSelect camera)
{
#if 0
BOOL rIn = TRUE;
BOOL rOut = TRUE;
// should not send init command same time
// should not send init command same time (TODO:出力なしで初期化できるなら同時に処理するように変える)
if (camera & CAMERA_SELECT_IN)
{
rIn = CAMERAi_M_Default_Registers(CAMERA_SELECT_IN)
&& CAMERAi_M_WriteMCU(CAMERA_SELECT_IN, 0x2755, 0x0002) // YUYV format (required to refresh)
&& CAMERAi_M_I2CResize(CAMERA_SELECT_IN, 320, 240)
&& CAMERAi_M_I2CStandby(CAMERA_SELECT_IN, TRUE);
&& CAMERAi_M_I2CStandby(CAMERA_SELECT_IN);
}
if (camera & CAMERA_SELECT_OUT)
{
rOut = CAMERAi_M_Default_Registers(CAMERA_SELECT_OUT)
&& CAMERAi_M_WriteMCU(CAMERA_SELECT_OUT, 0x2755, 0x0002) // YUYV format (required to refresh)
&& CAMERAi_M_I2CResize(CAMERA_SELECT_OUT, 320, 240)
&& CAMERAi_M_I2CStandby(CAMERA_SELECT_OUT, TRUE);
&& CAMERAi_M_I2CStandby(CAMERA_SELECT_OUT);
}
return (rIn && rOut);
#else
return CAMERAi_M_Default_Registers(camera)
&& CAMERAi_M_WriteMCU(camera, 0x2755, 0x0002) // YUYV format (required to refresh)
&& CAMERAi_M_SetFlags(camera, 0x0018, 0x0001); // goto standby
#endif
}
/*---------------------------------------------------------------------------*
Name: CAMERAi_M_I2CStandby
Description: standby or resume CAMERA
Description: goto standby
Arguments: camera : one of CameraSelect
standby : TRUE if goto standby mode
Arguments: camera : one of CameraSelect (IN/OUT/BOTH) to goto standby
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_M_I2CStandby(CameraSelect camera, BOOL standby)
BOOL CAMERAi_M_I2CStandby(CameraSelect camera)
{
if (standby)
return CAMERAi_M_ClearFlags(camera, 0x001A, 0x0200) // disable to output
&& CAMERAi_M_SetFlags(camera, 0x0018, 0x0001); // goto standby
}
/*---------------------------------------------------------------------------*
Name: CAMERAi_M_I2CResume
Description: resume from standby
Arguments: camera : one of CameraSelect (IN/OUT) to resume
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_M_I2CResume(CameraSelect camera)
{
if (camera == CAMERA_SELECT_BOTH)
{
return CAMERAi_M_ClearFlags(camera, 0x001A, 0x0200) // stop to output
// return CAMERAi_M_Stop(camera)
&& CAMERAi_M_SetFlags(camera, 0x0018, 0x0001); // go to standby
return FALSE;
}
else
return CAMERAi_M_SetFlags(camera, 0x001A, 0x0200) // enable to output
&& CAMERAi_M_ClearFlags(camera, 0x0018, 0x0001);// resume from standby
}
/*---------------------------------------------------------------------------*
Name: CAMERAi_M_I2CResumeBoth
Description: resume both CAMERAs, but only one will output
Arguments: camera : one of CameraSelect (IN/OUT) to output
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_M_I2CResumeBoth(CameraSelect camera)
{
CameraSelect alternative = (camera == CAMERA_SELECT_IN ? CAMERA_SELECT_OUT : CAMERA_SELECT_IN);
if (camera == CAMERA_SELECT_BOTH)
{
return CAMERAi_M_ClearFlags(camera, 0x0018, 0x0001) // leave standby
&& CAMERAi_M_SetFlags(camera, 0x001A, 0x0200); // start to output
// && CAMERAi_M_Start(camera);
return FALSE;
}
return CAMERAi_M_ClearFlags(alternative, 0x001A, 0x0200) // disable to output
&& CAMERAi_M_SetFlags(camera, 0x001A, 0x0200) // enable to output
&& CAMERAi_M_ClearFlags(CAMERA_SELECT_BOTH, 0x0018, 0x0001);// resume from standby
}
/*---------------------------------------------------------------------------*
@ -135,16 +168,13 @@ BOOL CAMERAi_M_I2CEffect(CameraSelect camera, CameraEffect effect)
{
case CAMERA_EFFECT_NONE:
return CAMERAi_M_Effect_Off(camera);
// return CAMERAi_M_Option_Effect_Off(camera);
case CAMERA_EFFECT_MONO:
return CAMERAi_M_Effect_Mono(camera);
// return CAMERAi_M_Option_Effect_Mono(camera);
case CAMERA_EFFECT_SEPIA:
return CAMERAi_M_Effect_Sepia(camera);
// return CAMERAi_M_Option_Effect_Sepia(camera);
case CAMERA_EFFECT_NEGATIVE:
return CAMERAi_M_WriteMCU(camera, 0x2759, 0x6443) //NEVATIVE_SPEC_EFFECTS_A
&& CAMERAi_M_WriteMCU(camera, 0x275B, 0x6443) //NEVATIVE_SPEC_EFFECTS_B
return CAMERAi_M_WriteMCU(camera, 0x2759, 0x6443) //NEGATIVE_SPEC_EFFECTS_A
&& CAMERAi_M_WriteMCU(camera, 0x275B, 0x6443) //NEGATIVE_SPEC_EFFECTS_B
&& CAMERAi_M_Refresh(camera);
}
return FALSE;
@ -173,67 +203,3 @@ BOOL CAMERAi_M_I2CFlip(CameraSelect camera, CameraFlip flip)
}
return FALSE;
}
#if 0
/*---------------------------------------------------------------------------*
Name: CAMERAi_M_I2CWhiteBalance
Description: set CAMERA white balance
Arguments: camera : one of CameraSelect
type : preset number (0: auto)
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_M_I2CWhiteBalance(CameraSelect camera, int type)
{
switch (type)
{
case 0:
return CAMERAi_M_Manual_WB_To_Auto_WB(camera);
case 1:
return CAMERAi_M_Manual_White_Balance_P1(camera);
case 2:
return CAMERAi_M_Manual_White_Balance_P2(camera);
case 3:
return CAMERAi_M_Manual_White_Balance_P3(camera);
case 4:
return CAMERAi_M_Manual_White_Balance_P4(camera);
case 5:
return CAMERAi_M_Manual_White_Balance_P5(camera);
case 6:
return CAMERAi_M_Manual_White_Balance_P6(camera);
case 7:
return CAMERAi_M_Manual_White_Balance_P7(camera);
case 8:
return CAMERAi_M_Manual_White_Balance_P8(camera);
}
return FALSE;
}
/*---------------------------------------------------------------------------*
Name: CAMERAi_M_I2CExposure
Description: set CAMERA exposure
Arguments: camera : one of CameraSelect
type : preset number (0: auto)
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_M_I2CExposure(CameraSelect camera, int type)
{
switch (type)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
return TRUE;
}
return FALSE;
}
#endif

View File

@ -41,16 +41,17 @@ BankGroup;
*---------------------------------------------------------------------------*/
BOOL CAMERAi_S_I2CInit(CameraSelect camera)
{
#if 0
BOOL rIn = TRUE;
BOOL rOut = TRUE;
// should not send init command same time
// should not send init command same time (TODO:出力なしで初期化できるなら同時に処理するように変える)
if (camera & CAMERA_SELECT_IN)
{
rIn = CAMERAi_S_Initialize(CAMERA_SELECT_IN)
&& CAMERAi_S_WriteRegister(CAMERA_SELECT_IN, BANK_ADDR, BANK_GROUP_B)
&& CAMERAi_S_SetFlags(CAMERA_SELECT_IN, 0x1A, 0x08) // reverse RCLK polarity
&& CAMERAi_S_WriteRegister(CAMERA_SELECT_IN, 0x18, 0x02) // force to order YUYV
&& CAMERAi_S_I2CStandby(CAMERA_SELECT_IN, TRUE);
&& CAMERAi_S_I2CStandby(CAMERA_SELECT_IN);
}
if (camera & CAMERA_SELECT_OUT)
{
@ -58,33 +59,71 @@ BOOL CAMERAi_S_I2CInit(CameraSelect camera)
&& CAMERAi_S_WriteRegister(CAMERA_SELECT_OUT, BANK_ADDR, BANK_GROUP_B)
&& CAMERAi_S_SetFlags(CAMERA_SELECT_OUT, 0x1A, 0x08) // reverse RCLK polarity
&& CAMERAi_S_WriteRegister(CAMERA_SELECT_OUT, 0x18, 0x02) // force to order YUYV
&& CAMERAi_S_I2CStandby(CAMERA_SELECT_OUT, TRUE);
&& CAMERAi_S_I2CStandby(CAMERA_SELECT_OUT);
}
return (rIn && rOut);
#else
return CAMERAi_S_Initialize(camera)
&& CAMERAi_S_WriteRegister(camera, BANK_ADDR, BANK_GROUP_B)
&& CAMERAi_S_SetFlags(camera, 0x1A, 0x08) // reverse RCLK polarity
&& CAMERAi_S_WriteRegister(camera, 0x18, 0x02) // force to order YUYV
&& CAMERAi_S_ClearFlags(camera, 0x04, 0x88); // goto standby (maybe already into)
#endif
}
/*---------------------------------------------------------------------------*
Name: CAMERAi_S_I2CStandby
Description: standby or resume CAMERA
Description: goto standby
Arguments: camera : one of CameraSelect
standby : TRUE if goto standby mode
Arguments: camera : one of CameraSelect (IN/OUT/BOTH) to goto standby
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_S_I2CStandby(CameraSelect camera, BOOL standby)
BOOL CAMERAi_S_I2CStandby(CameraSelect camera)
{
if (standby)
return CAMERAi_S_WriteRegister(camera, BANK_ADDR, BANK_GROUP_B)
&& CAMERAi_S_ClearFlags(camera, 0x04, 0x88); // goto standby and disable to output
}
/*---------------------------------------------------------------------------*
Name: CAMERAi_S_I2CResume
Description: resume from standby
Arguments: camera : one of CameraSelect (IN/OUT) to resume
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_S_I2CResume(CameraSelect camera)
{
if (camera == CAMERA_SELECT_BOTH)
{
return CAMERAi_S_WriteRegister(camera, BANK_ADDR, BANK_GROUP_B)
&& CAMERAi_S_ClearFlags(camera, 0x04, 0x80);
return FALSE;
}
else
return CAMERAi_S_WriteRegister(camera, BANK_ADDR, BANK_GROUP_B)
&& CAMERAi_S_SetFlags(camera, 0x04, 0x88); // resume from standby and enable to output
}
/*---------------------------------------------------------------------------*
Name: CAMERAi_S_I2CResumeBoth
Description: resume both CAMERAs, but only one will output
Arguments: camera : one of CameraSelect (IN/OUT) to output
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_S_I2CResumeBoth(CameraSelect camera)
{
CameraSelect alternative = (camera == CAMERA_SELECT_IN ? CAMERA_SELECT_OUT : CAMERA_SELECT_IN);
if (camera == CAMERA_SELECT_BOTH)
{
return CAMERAi_S_WriteRegister(camera, BANK_ADDR, BANK_GROUP_B)
&& CAMERAi_S_SetFlags(camera, 0x04, 0x80);
return FALSE;
}
return CAMERAi_S_WriteRegister(CAMERA_SELECT_BOTH, BANK_ADDR, BANK_GROUP_B)
&& CAMERAi_S_SetParams(alternative, 0x04, 0x80, 0x88) // resume but no output
&& CAMERAi_S_SetFlags(camera, 0x04, 0x88); // resume and output
}
/*---------------------------------------------------------------------------*
@ -174,7 +213,7 @@ BOOL CAMERAi_S_I2CFlip(CameraSelect camera, CameraFlip flip)
u8 data = 0;
switch (flip)
{
case CAMERA_FLIP_NONE: data = 0x00; break;
//case CAMERA_FLIP_NONE: data = 0x00; break;
case CAMERA_FLIP_VERTICAL: data = 0x02; break;
case CAMERA_FLIP_HORIZONTAL:data = 0x01; break;
case CAMERA_FLIP_REVERSE: data = 0x03; break;

View File

@ -100,8 +100,7 @@ void CAMERA_Init(void)
CAMERA_PowerOn();
// カメラ初期化
//CAMERA_I2CInit(CAMERA_SELECT_BOTH);
CAMERA_I2CInit(CAMERA_SELECT_IN);
CAMERA_I2CInit(CAMERA_SELECT_BOTH);
}
/*---------------------------------------------------------------------------*
@ -246,9 +245,10 @@ CAMERAResult CAMERA_I2CInit(CameraSelect camera)
Name: CAMERA_I2CActivateAsync
Description: activate specified CAMERA (goto standby if NONE is specified)
if you want to activate both cameras, use CAMERA_I2COutputWithDualActivation[Async]
async version
Arguments: camera - one of CameraSelect
Arguments: camera - one of CameraSelect (BOTH is not valid)
callback -
arg -
@ -286,9 +286,10 @@ CAMERAResult CAMERA_I2CActivateAsync(CameraSelect camera, CAMERACallback callbac
Name: CAMERA_I2CActivate
Description: activate specified CAMERA (goto standby if NONE is specified)
if you want to activate both cameras, use CAMERA_I2COutputWithDualActivation[Async]
sync version.
Arguments: camera - one of CameraSelect
Arguments: camera - one of CameraSelect (BOTH is not valid)
Returns: CAMERAResult
*---------------------------------------------------------------------------*/
@ -302,6 +303,66 @@ CAMERAResult CAMERA_I2CActivate(CameraSelect camera)
return cameraWork.result;
}
/*---------------------------------------------------------------------------*
Name: CAMERA_I2COutputWithDualActivationAsync
Description: activate both camera and output specified CAMERA
async version
Arguments: camera - one of CameraSelect (IN or OUT)
callback -
arg -
Returns: CAMERAResult
*---------------------------------------------------------------------------*/
CAMERAResult CAMERA_I2COutputWithDualActivationAsync(CameraSelect camera, CAMERACallback callback, void *arg)
{
const CAMERAPxiCommand command = CAMERA_PXI_COMMAND_OUTPUT_WITH_DUAL_ACTIVATION;
const u8 size = CAMERA_PXI_SIZE_OUTPUT_WITH_DUAL_ACTIVATION;
OSIntrMode enabled;
SDK_NULL_ASSERT(callback);
if (CAMERA_SELECT_BOTH == camera || CAMERA_SELECT_NONE == camera)
{
return CAMERA_RESULT_ILLEGAL_PARAMETER;
}
enabled = OS_DisableInterrupts();
if (cameraWork.lock)
{
(void)OS_RestoreInterrupts(enabled);
return CAMERA_RESULT_BUSY;
}
cameraWork.lock = TRUE;
(void)OS_RestoreInterrupts(enabled);
// コールバック設定
cameraWork.callback = callback;
cameraWork.callbackArg = arg;
return CameraSendPxiCommand(command, size, (u8)camera) ? CAMERA_RESULT_SUCCESS : CAMERA_RESULT_SEND_ERROR;
}
/*---------------------------------------------------------------------------*
Name: CAMERA_I2COutputWithDualActivation
Description: activate both camera and output specified CAMERA
sync version.
Arguments: camera - one of CameraSelect (IN or OUT)
Returns: CAMERAResult
*---------------------------------------------------------------------------*/
CAMERAResult CAMERA_I2COutputWithDualActivation(CameraSelect camera)
{
cameraWork.result = CAMERA_I2COutputWithDualActivationAsync(camera, CameraSyncCallback, 0);
if (cameraWork.result == CAMERA_RESULT_SUCCESS)
{
CameraWaitBusy();
}
return cameraWork.result;
}
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CResizeAsync
@ -721,11 +782,8 @@ static void CameraPxiCallback(PXIFifoTag tag, u32 data, BOOL err)
// 処理結果を確認
switch (cameraWork.pxiResult)
{
case CAMERA_PXI_RESULT_SUCCESS:
result = CAMERA_RESULT_SUCCESS;
break;
case CAMERA_PXI_RESULT_SUCCESS_TRUE:
result = CAMERA_RESULT_SUCCESS_TRUE;
case CAMERA_PXI_RESULT_SUCCESS: // alias CAMERA_PXI_RESULT_SUCCESS_TRUE
result = CAMERA_RESULT_SUCCESS; // alias CAMERA_RESULT_SUCCESS_TRUE
break;
case CAMERA_PXI_RESULT_SUCCESS_FALSE:
result = CAMERA_RESULT_SUCCESS_FALSE;

View File

@ -20,7 +20,29 @@
#define DMA_NO 5 // 使用するDMA番号(4-7)
#define WIDTH 256 // イメージの幅
#define HEIGHT 192 // イメージの高さ
#define NUMS 1 // バッファ数
#define DEFAULT_CAMERA CAMERA_SELECT_IN
//#define DEFAULT_CAMERA CAMERA_SELECT_OUT
//#define DUAL_MODE // 両方アクティブ状態での使用
#if 0
DUAL_MODEはテストのために用意しているだけで
CAMERA_I2COutputWithDualActivation()
FPSを固定しておきStandbyから解除させることで
LCDにIN/OUTの両方の画像を
FPSで表示させるということが可能となるように
VRAM表示は1画面しか使えないのでFPGAでは検証
(TSのタイミングで別サンプル作成予定)
CAMERA_I2COutputWithDualActivation()
(IN/OUT共通でフレームレート固定なので
)
(ARM7側の仕様をもう少し整理できるのですが)
#endif
#define LINES_AT_ONCE CAMERA_GET_MAX_LINES(WIDTH) // 一回の転送ライン数
#define BYTES_PER_LINE CAMERA_GET_LINE_BYTES(WIDTH) // 一ラインの転送バイト数
@ -29,6 +51,7 @@ static void VBlankIntr(void);
static void CameraIntr(void);
static BOOL startRequest = FALSE;
static CameraSelect current;
/*---------------------------------------------------------------------------*
Name: TwlMain
@ -64,16 +87,25 @@ void TwlMain()
GX_DispOn();
// カメラ初期化
CAMERA_Init(); // wakeup camera module
{
OSTick begin = OS_GetTick();
CAMERA_Init(); // wakeup camera module
OS_TPrintf("CAMERA_Init took %d msec\n", (int)OS_TicksToMilliSeconds(OS_GetTick()-begin));
}
current = DEFAULT_CAMERA;
result = CAMERA_I2CActivate(CAMERA_SELECT_IN);
if (result != CAMERA_RESULT_SUCCESS_TRUE)
#ifdef DUAL_MODE
result = CAMERA_I2COutputWithDualActivation(current);
#else
result = CAMERA_I2CActivate(current);
#endif
if (result != CAMERA_RESULT_SUCCESS)
{
OS_TPrintf("CAMERA_I2CActivate was failed. (%d)\n", result);
}
#if 0
result = CAMERA_I2CResize(CAMERA_SELECT_IN, 320, 240);
if (result != CAMERA_RESULT_SUCCESS_TRUE)
result = CAMERA_I2CResize(current, 320, 240);
if (result != CAMERA_RESULT_SUCCESS)
{
OS_TPrintf("CAMERA_I2CResize was failed. (%d)\n", result);
}
@ -91,8 +123,15 @@ void TwlMain()
OS_SetIrqFunction(OS_IE_CAM, CameraIntr);
(void)OS_EnableIrqMask(OS_IE_CAM);
// カメラスタート (リクエストのみ)
// カメラスタート (割り込みハンドラで代用)
startRequest = TRUE;
CameraIntr();
/*
()
Acitavate後30msec間VBlank期間が続く仕様なのでActivate直後は
(1)
*/
OS_TPrintf("Camera is shooting a movie...\n");
while (1)
@ -107,23 +146,26 @@ void TwlMain()
trg = (u16)(pad & ~old);
old = pad;
if (trg & PAD_BUTTON_A)
{
OS_TPrintf("call CAMERA_I2CActivate(CAMERA_SELECT_IN)... ");
result = CAMERA_I2CActivate(CAMERA_SELECT_IN);
OS_TPrintf("%s\n", result == CAMERA_RESULT_SUCCESS_TRUE ? "SUCCESS" : "FAILED");
}
if (trg & PAD_BUTTON_B)
{
OS_TPrintf("call CAMERA_I2CActivate(CAMERA_SELECT_OUT)... ");
result = CAMERA_I2CActivate(CAMERA_SELECT_OUT);
OS_TPrintf("%s\n", result == CAMERA_RESULT_SUCCESS_TRUE ? "SUCCESS" : "FAILED");
current = (current == CAMERA_SELECT_IN ? CAMERA_SELECT_OUT : CAMERA_SELECT_IN);
OS_TPrintf("call CAMERA_I2CActivate(%s)... ", (current == CAMERA_SELECT_IN ? "CAMERA_SELECT_IN" : "CAMERA_SELECT_OUT"));
#ifdef DUAL_MODE
result = CAMERA_I2COutputWithDualActivation(current);
#else
result = CAMERA_I2CActivate(current);
#endif
OS_TPrintf("%s\n", result == CAMERA_RESULT_SUCCESS ? "SUCCESS" : "FAILED");
}
if (trg & PAD_BUTTON_R)
{
OS_TPrintf("call CAMERA_I2CActivate(CAMERA_SELECT_NONE)... ");
result = CAMERA_I2CActivate(CAMERA_SELECT_NONE);
OS_TPrintf("%s\n", result == CAMERA_RESULT_SUCCESS_TRUE ? "SUCCESS" : "FAILED");
OS_TPrintf("%s\n", result == CAMERA_RESULT_SUCCESS ? "SUCCESS" : "FAILED");
}
if (trg & PAD_BUTTON_START) // start/stop to capture w/o Activate API
{
@ -162,14 +204,14 @@ void TwlMain()
OS_TPrintf("Done.\n");
#if 0
// resize
OS_TPrintf("call CAMERA_I2CResize(CAMERA_SELECT_IN)... ");
result = CAMERA_I2CResize(CAMERA_SELECT_IN, 320, 240);
OS_TPrintf("%s\n", result == CAMERA_RESULT_SUCCESS_TRUE ? "SUCCESS" : "FAILED");
OS_TPrintf("call CAMERA_I2CResize(current)... ");
result = CAMERA_I2CResize(current, 320, 240);
OS_TPrintf("%s\n", result == CAMERA_RESULT_SUCCESS ? "SUCCESS" : "FAILED");
#endif
// activate inside camera first
OS_TPrintf("call CAMERA_I2CActivate(CAMERA_SELECT_IN)... ");
result = CAMERA_I2CActivate(CAMERA_SELECT_IN);
OS_TPrintf("%s\n", result == CAMERA_RESULT_SUCCESS_TRUE ? "SUCCESS" : "FAILED");
OS_TPrintf("call CAMERA_I2CActivate(current)... ");
result = CAMERA_I2CActivate(current);
OS_TPrintf("%s\n", result == CAMERA_RESULT_SUCCESS ? "SUCCESS" : "FAILED");
}
}
}
@ -236,7 +278,8 @@ void CameraIntr(void)
if (MIi_IsExDmaBusy(DMA_NO)) // NOT done to capture last frame?
{
OS_TPrintf("DMA was not done until VBlank.\n");
return; // waiting next frame (skip current frame)
MIi_StopExDma(DMA_NO); // DMA停止
// return; // waiting next frame (skip current frame)
}
// start to capture for next frame
CAMERA_DmaRecvAsync(DMA_NO, (void *)HW_LCDC_VRAM_A, BYTES_PER_LINE * LINES_AT_ONCE, BYTES_PER_LINE * HEIGHT);

View File

@ -76,13 +76,13 @@ void TwlMain()
CAMERA_Init(); // wakeup camera module
result = CAMERA_I2CActivate(CAMERA_SELECT_IN);
if (result != CAMERA_RESULT_SUCCESS_TRUE)
if (result != CAMERA_RESULT_SUCCESS)
{
OS_TPrintf("CAMERA_I2CActivate was failed. (%d)\n", result);
}
#if 0
result = CAMERA_I2CResize(CAMERA_SELECT_IN, 320, 240);
if (result != CAMERA_RESULT_SUCCESS_TRUE)
if (result != CAMERA_RESULT_SUCCESS)
{
OS_TPrintf("CAMERA_I2CResize was failed. (%d)\n", result);
}

View File

@ -146,13 +146,13 @@ void TwlMain()
CAMERA_Init(); // wakeup camera module
result = CAMERA_I2CActivate(CAMERA_SELECT_IN);
if (result != CAMERA_RESULT_SUCCESS_TRUE)
if (result != CAMERA_RESULT_SUCCESS)
{
OS_TPrintf("CAMERA_I2CActivate was failed. (%d)\n", result);
}
#if 0
result = CAMERA_I2CResize(CAMERA_SELECT_IN, 320, 240);
if (result != CAMERA_RESULT_SUCCESS_TRUE)
if (result != CAMERA_RESULT_SUCCESS)
{
OS_TPrintf("CAMERA_I2CResize was failed. (%d)\n", result);
}
@ -170,8 +170,9 @@ void TwlMain()
OS_SetIrqFunction(OS_IE_CAM, CameraIntr);
(void)OS_EnableIrqMask(OS_IE_CAM);
// カメラスタート (リクエストのみ)
// カメラスタート (割り込みハンドラで代用)
startRequest = TRUE;
CameraIntr();
OS_TPrintf("Camera is shooting a movie...\n");
while (1)
@ -241,7 +242,8 @@ void CameraIntr(void)
if (MIi_IsExDmaBusy(DMA_NO)) // NOT done to capture last frame?
{
OS_TPrintf("DMA was not done until VBlank.\n");
return; // waiting next frame (skip current frame)
MIi_StopExDma(DMA_NO); // DMA停止
// return; // waiting next frame (skip current frame)
}
// start to capture for next frame
CAMERA_DmaRecvAsync(DMA_NO, GetNextCaptureAddr(), BYTES_PER_LINE * LINES_AT_ONCE, BYTES_PER_LINE * HEIGHT);

View File

@ -86,13 +86,13 @@ void TwlMain()
CAMERA_Init(); // wakeup camera module
result = CAMERA_I2CActivate(CAMERA_SELECT_IN);
if (result != CAMERA_RESULT_SUCCESS_TRUE)
if (result != CAMERA_RESULT_SUCCESS)
{
OS_TPrintf("CAMERA_I2CActivate was failed. (%d)\n", result);
}
#if 0
result = CAMERA_I2CResize(CAMERA_SELECT_IN, 320, 240);
if (result != CAMERA_RESULT_SUCCESS_TRUE)
if (result != CAMERA_RESULT_SUCCESS)
{
OS_TPrintf("CAMERA_I2CResize was failed. (%d)\n", result);
}
@ -110,8 +110,9 @@ void TwlMain()
OS_SetIrqFunction(OS_IE_CAM, CameraIntr);
(void)OS_EnableIrqMask(OS_IE_CAM);
// カメラスタート (リクエストのみ)
// カメラスタート (割り込みハンドラで代用)
startRequest = TRUE;
CameraIntr();
OS_TPrintf("Camera is shooting a movie...\n");
while (1)
@ -187,7 +188,8 @@ void CameraIntr(void)
if (MIi_IsExDmaBusy(DMA_NO)) // NOT done to capture last frame?
{
OS_TPrintf("DMA was not done until VBlank.\n");
return; // waiting next frame (skip current frame)
MIi_StopExDma(DMA_NO); // DMA停止
// return; // waiting next frame (skip current frame)
}
// start to capture for next frame
if (wp_pending)

View File

@ -41,14 +41,35 @@ BOOL CAMERA_I2CInit(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CStandby
Description: standby or resume CAMERA
Description: goto standby
Arguments: camera : one of CameraSelect
standby : TRUE if goto standby mode
Arguments: camera : one of CameraSelect (IN/OUT/BOTH) to goto standby
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERA_I2CStandby(CameraSelect camera, BOOL standby);
BOOL CAMERA_I2CStandby(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CResume
Description: resume from standby
Arguments: camera : one of CameraSelect (IN/OUT) to resume
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERA_I2CResume(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CResumeBoth
Description: resume both CAMERAs, but only one will output
Arguments: camera : one of CameraSelect (IN/OUT) to output
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERA_I2CResumeBoth(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CResize
@ -63,7 +84,6 @@ BOOL CAMERA_I2CStandby(CameraSelect camera, BOOL standby);
*---------------------------------------------------------------------------*/
BOOL CAMERA_I2CResize(CameraSelect camera, u16 width, u16 height);
/*---------------------------------------------------------------------------*
Name: CAMERA_I2CFrameRate

View File

@ -282,14 +282,35 @@ BOOL CAMERAi_M_I2CInit(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERAi_M_I2CStandby
Description: standby or resume CAMERA
Description: goto standby
Arguments: camera : one of CameraSelect
standby : TRUE if goto standby mode
Arguments: camera : one of CameraSelect (IN/OUT/BOTH) to goto standby
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_M_I2CStandby(CameraSelect camera, BOOL standby);
BOOL CAMERAi_M_I2CStandby(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERAi_M_I2CResume
Description: resume from standby
Arguments: camera : one of CameraSelect (IN/OUT) to resume
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_M_I2CResume(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERAi_M_I2CResumeBoth
Description: resume both CAMERAs, but only one will output
Arguments: camera : one of CameraSelect (IN/OUT) to output
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_M_I2CResumeBoth(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERAi_M_I2CResize

View File

@ -282,14 +282,35 @@ BOOL CAMERAi_S_I2CInit(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERAi_S_I2CStandby
Description: standby or resume CAMERA
Description: goto standby
Arguments: camera : one of CameraSelect
standby : TRUE if goto standby mode
Arguments: camera : one of CameraSelect (IN/OUT/BOTH) to goto standby
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_S_I2CStandby(CameraSelect camera, BOOL standby);
BOOL CAMERAi_S_I2CStandby(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERAi_S_I2CResume
Description: resume from standby
Arguments: camera : one of CameraSelect (IN/OUT) to resume
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_S_I2CResume(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERAi_S_I2CResumeBoth
Description: resume both CAMERAs, but only one will output
Arguments: camera : one of CameraSelect (IN/OUT) to output
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL CAMERAi_S_I2CResumeBoth(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERAi_S_I2CResize

View File

@ -120,9 +120,10 @@ CAMERAResult CAMERA_I2CInit(CameraSelect camera);
Name: CAMERA_I2CActivateAsync
Description: activate specified CAMERA (goto standby if NONE is specified)
if you want to activate both cameras, use CAMERA_I2COutputWithDualActivation[Async]
async version
Arguments: camera - one of CameraSelect
Arguments: camera - one of CameraSelect (BOTH is not valid)
callback -
arg -
@ -134,14 +135,41 @@ CAMERAResult CAMERA_I2CActivateAsync(CameraSelect camera, CAMERACallback callbac
Name: CAMERA_I2CActivate
Description: activate specified CAMERA (goto standby if NONE is specified)
if you want to activate both cameras, use CAMERA_I2COutputWithDualActivation[Async]
sync version.
Arguments: camera - one of CameraSelect
Arguments: camera - one of CameraSelect (BOTH is not valid)
Returns: CAMERAResult
*---------------------------------------------------------------------------*/
CAMERAResult CAMERA_I2CActivate(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERA_I2COutputWithDualActivationAsync
Description: activate both camera and output specified CAMERA
async version
Arguments: camera - one of CameraSelect (IN or OUT)
callback -
arg -
Returns: CAMERAResult
*---------------------------------------------------------------------------*/
CAMERAResult CAMERA_I2COutputWithDualActivationAsync(CameraSelect camera, CAMERACallback callback, void *arg);
/*---------------------------------------------------------------------------*
Name: CAMERA_I2COutputWithDualActivation
Description: activate both camera and output specified CAMERA
sync version.
Arguments: camera - one of CameraSelect (IN or OUT)
Returns: CAMERAResult
*---------------------------------------------------------------------------*/
CAMERAResult CAMERA_I2COutputWithDualActivation(CameraSelect camera);
/*---------------------------------------------------------------------------*
Name: CAMERAi_I2CResizeAsync

View File

@ -50,6 +50,7 @@ typedef enum CAMERAPxiCommand
CAMERA_PXI_COMMAND_INIT = 0x00, // 初期化
CAMERA_PXI_COMMAND_ACTIVATE = 0x10, // アクティブ選択
CAMERA_PXI_COMMAND_OUTPUT_WITH_DUAL_ACTIVATION = 0x11, // 出力選択(両方アクティブ)
CAMERA_PXI_COMMAND_RESIZE = 0x30, // サイズ設定
CAMERA_PXI_COMMAND_FRAME_RATE = 0x31, // フレームレート設定
@ -66,6 +67,7 @@ typedef enum CAMERAPxiSize
CAMERA_PXI_SIZE_INIT = 1, // camera
CAMERA_PXI_SIZE_ACTIVATE = 1, // camera
CAMERA_PXI_SIZE_OUTPUT_WITH_DUAL_ACTIVATION = 1, // camera
CAMERA_PXI_SIZE_RESIZE = 5, // camera, (u16)width, (u16)height
CAMERA_PXI_SIZE_FRAME_RATE = 2, // camera, rate
@ -80,11 +82,11 @@ CAMERAPxiSize;
typedef enum CAMERAPxiResult
{
CAMERA_PXI_RESULT_SUCCESS = 0, // 処理成功 (void/void*型) // 場合により後続パケットあり
CAMERA_PXI_RESULT_SUCCESS_TRUE, // 処理成功 (BOOL型)
CAMERA_PXI_RESULT_SUCCESS_TRUE = 0, // 処理成功 (BOOL型)
CAMERA_PXI_RESULT_SUCCESS_FALSE, // 処理成功 (BOOL型)
CAMERA_PXI_RESULT_INVALID_COMMAND, // 不正なPXIコマンド
CAMERA_PXI_RESULT_INVALID_PARAMETER, // 不正なパラメータ
CAMERA_PXI_RESULT_ILLEGAL_STATUS, // RTCの状態により処理を実行不能
CAMERA_PXI_RESULT_ILLEGAL_STATUS, // CAMERAの状態により処理を実行不可
CAMERA_PXI_RESULT_BUSY, // 他のリクエストを実行中
CAMERA_PXI_RESULT_FATAL_ERROR, // その他何らかの原因で処理に失敗
CAMERA_PXI_RESULT_MAX