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; + /*===========================================================================*/