From 7bc35270e1d3d55b13f05d07614d517969efdd6a Mon Sep 17 00:00:00 2001 From: kamikawa Date: Fri, 9 May 2008 08:40:55 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=9E=E3=82=A4=E3=82=B3=E3=83=B3=E3=82=A2?= =?UTF-8?q?=E3=82=AF=E3=82=BB=E3=82=B9=E7=94=A8PXI=E3=82=92=E6=94=B9?= =?UTF-8?q?=E5=96=84=E3=80=82=E3=82=AB=E3=83=A1=E3=83=A9=E3=83=A2=E3=82=B8?= =?UTF-8?q?=E3=83=A5=E3=83=BC=E3=83=AB=E3=82=BF=E3=82=A4=E3=83=97=E5=8F=96?= =?UTF-8?q?=E5=BE=97PXI=E3=82=92=E8=BF=BD=E5=8A=A0=E3=80=82=EF=BC=88?= =?UTF-8?q?=E8=A3=BD=E5=93=81=E6=8A=80=E8=A1=93=E9=83=A8=EF=BC=9A=E6=A4=9C?= =?UTF-8?q?=E6=9F=BB=E5=B7=A5=E7=A8=8B=E5=AF=BE=E5=BF=9C=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1307 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../ARM7.TWL/src/kami_pxi.c | 53 ++++++++--- .../ARM9.TWL/include/kami_pxi.h | 4 +- .../ARM9.TWL/src/kami_pxi.c | 89 ++++++++++++++++++- .../NandInitializerRed/common/include/fifo.h | 21 ++++- 4 files changed, 151 insertions(+), 16 deletions(-) diff --git a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c index d8481094..9299ee7e 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c +++ b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c @@ -24,10 +24,9 @@ #include "nvram.h" #include #include - -//#include -//#include - +#include +#include +#include typedef unsigned char byte; /* Don't change */ typedef unsigned short word; /* Don't change */ @@ -134,6 +133,7 @@ static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) case KAMI_ARM7_IO: case KAMI_CDC_GO_DSMODE: case KAMI_CLEAR_NAND_ERRORLOG: + case KAMI_GET_CAMERA_MODULE_TYPE: if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) { KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); @@ -253,23 +253,23 @@ static void KamiThread(void *arg) { BOOL is_read; u32 reg_no; - void* buffer; - u32 value; + u32 write; + u32 read; is_read = (BOOL)kamiWork.data[0]; KAMI_UNPACK_U32(®_no, &kamiWork.data[1]); - KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]); - KAMI_UNPACK_U32(&value, &kamiWork.data[9]); + KAMI_UNPACK_U32(&write, &kamiWork.data[5]); if (is_read) { - *(u8 *)buffer = MCU_ReadRegister( (u8)reg_no ); + read = MCU_ReadRegister( (u8)reg_no ); + KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(u8), (u8*)&read ); } else { - MCU_WriteRegister( (u8)reg_no, (u8)value ); + MCU_WriteRegister( (u8)reg_no, (u8)write ); + KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); } - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); } break; @@ -317,6 +317,37 @@ static void KamiThread(void *arg) } break; + case KAMI_GET_CAMERA_MODULE_TYPE: + { + CameraModuleTypes types; + if (CAMERAi_IsSharpModule(CAMERA_SELECT_IN)) + { + types.in = CAMERA_MODULE_TYPE_SHARP; + } + else if (CAMERAi_IsMicronModule(CAMERA_SELECT_IN)) + { + types.in = CAMERA_MODULE_TYPE_MICRON; + } + else + { + types.in = CAMERA_MODULE_TYPE_UNKNOWN; + } + if (CAMERAi_IsSharpModule(CAMERA_SELECT_OUT)) + { + types.out = CAMERA_MODULE_TYPE_SHARP; + } + else if (CAMERAi_IsMicronModule(CAMERA_SELECT_OUT)) + { + types.out = CAMERA_MODULE_TYPE_MICRON; + } + else + { + types.out = CAMERA_MODULE_TYPE_UNKNOWN; + } + KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(CameraModuleTypes), (u8*)&types); + } + break; + default: KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); } diff --git a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h index eb0ad6a6..4b18a74c 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h +++ b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h @@ -65,9 +65,11 @@ KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read); KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read); KAMIResult kamiCDC_GoDsMode( void ); KAMIResult kamiClearNandErrorLog( void ); +KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ); +KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ); // (重要) -// ARM7が読み書きするためリード後はInvalidate、ライト前はフラッシュしてください。 +// ARM7が読み書きするためリード前はInvalidate、ライト前はフラッシュしてください。 // static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count) { diff --git a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c index 929880dd..6fb06a7d 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c +++ b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c @@ -254,12 +254,18 @@ KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) kamiWork.callback = NULL; kamiWork.arg = 0; - kamiWork.data = 0; + if (is_read) + { + kamiWork.data = (u8*)buffer; + } + else + { + kamiWork.data = 0; + } // データ作成 KAMI_PACK_U32(&data[0], ®_no); - KAMI_PACK_U32(&data[4], &buffer); - KAMI_PACK_U32(&data[8], &value); + KAMI_PACK_U32(&data[4], &value); if (KamiSendPxiCommand(KAMI_MCU_IO, 12, (u8)is_read)) { @@ -400,6 +406,83 @@ KAMIResult kamiClearNandErrorLog( void ) return KAMI_RESULT_SEND_ERROR; } +/*---------------------------------------------------------------------------* + Name: kamiGetCameraModuleTypesAsync + + Description: カメラモジュールタイプを取得します(非同期版) + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ) +{ + OSIntrMode enabled; + + if (pTypes == NULL) + { + return KAMI_RESULT_INVALID_PARAMETER; + } + + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + kamiWork.callback = callback; + kamiWork.arg = arg; + kamiWork.data = (u8*)pTypes; + (void)OS_RestoreInterrupts(enabled); + + if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) + { + return KAMI_RESULT_SUCCESS; + } + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: kamiGetCameraModuleTypes + + Description: カメラモジュールタイプを取得します(同期版) + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ) +{ + OSIntrMode enabled; + + if (pTypes == NULL) + { + return KAMI_RESULT_INVALID_PARAMETER; + } + + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = (u8*)pTypes; + (void)OS_RestoreInterrupts(enabled); + + if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) + { + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + return KAMI_RESULT_SEND_ERROR; +} + /*---------------------------------------------------------------------------* PXI関連 *---------------------------------------------------------------------------*/ diff --git a/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h b/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h index 8bb2f503..9c859689 100644 --- a/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h +++ b/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h @@ -57,6 +57,7 @@ typedef enum KAMIPxiResult } KAMIPxiResult; + typedef enum KamiCommand { KAMI_TEST_COMMAND, @@ -66,10 +67,28 @@ typedef enum KamiCommand KAMI_MCU_IO, KAMI_ARM7_IO, KAMI_CDC_GO_DSMODE, - KAMI_CLEAR_NAND_ERRORLOG + KAMI_CLEAR_NAND_ERRORLOG, + KAMI_GET_CAMERA_MODULE_TYPE } KamiCommand; + +typedef enum CameraModuleType +{ + CAMERA_MODULE_TYPE_UNKNOWN, + CAMERA_MODULE_TYPE_SHARP, + CAMERA_MODULE_TYPE_MICRON +} +CameraModuleType; + + +typedef struct CameraModuleTypes +{ + CameraModuleType in; + CameraModuleType out; +} +CameraModuleTypes; + /*===========================================================================*/