#define SRTM_SERVICE_CAMERA_ID (0x7F)
#define SRTM_CMD_CAMERA_ON (0x01)
#define SRTM_CMD_CAMERA_OFF (0x02)
void APP_SRTM_CameraSendCommandSync(uint8_t category, uint8_t camera_id, uint8_t command_id, uint32_t timeout_ms)
{
#if SRTM_CAMERA_SERVICE_USED
if(category == SRTM_SERVICE_CAMERA_ID)
{
SRTM_CameraClient_SendCommandSync(cameraService, camera_id, command_id, timeout_ms);
}
#endif
}
/* Operational API routing logic duplicating SRTM_AutoService_SendCommand logic patterns */
static srtm_status_t SRTM_CameraClient_SendCmd(srtm_service_t service,
uint8_t cameraID,
uint8_t cmd,
bool sync,
srtm_camera_cmd_cb_t cb,
void *param,
uint32_t timeout_ms)
{
srtm_status_t status;
srtm_camera_async_req_t asyncReq;
bool freeAsyncReq = true;
assert(service);
asyncReq = SRTM_CameraService_CreateAsyncReq(service);
if (!asyncReq)
{
return SRTM_Status_OutOfMemory;
}
asyncReq->syncResult = sync;
asyncReq->cameraID = cameraID;
asyncReq->command = cmd;
asyncReq->resultCb = cb;
asyncReq->resultCbParam = param;
status = SRTM_CameraService_DoRequest(asyncReq, cameraID, cmd);
if (status == SRTM_Status_Success)
{
if (sync)
{
/* Intercept blocking validation parameter rules */
assert(timeout_ms > 0);
SRTM_Sem_Wait(asyncReq->sem, timeout_ms);
SRTM_Mutex_Lock(asyncReq->mutex);
if (asyncReq->reqState != SRTM_CAMERA_ASYNC_REQ_STATE_FINISHED)
{
asyncReq->reqState = SRTM_CAMERA_ASYNC_REQ_STATE_CANCELLED;
status = SRTM_Status_Timeout;
}
else
{
status = (asyncReq->retCode == SRTM_CAMERA_RETURN_CODE_SUCCESS) ?
SRTM_Status_Success : SRTM_Status_Error;
}
SRTM_Mutex_Unlock(asyncReq->mutex);
}
else
{
/* Asynchronous pipeline tracking passed to internal handlers safely */
freeAsyncReq = false;
}
}
if (freeAsyncReq)
{
SRTM_CameraService_DestroyAsyncReq(asyncReq);
}
return status;
}
IMX95 FRDM: Со стороны M7 написан данный код для передачи в A55 команд старта/стопа камер. Надо в userspace полсе загрузки linux написать приложения для обработки данных команд.