Загрузка данных


#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 написать приложения для обработки данных команд.