// +FHDR------------------------------------------------------------ // Copyright (c) 2022 SmartLogic. // ALL RIGHTS RESERVED // ----------------------------------------------------------------- // Filename : main.c // Author : lishuang.xie // Created On : 2023-09-18 // Last Modified : // ----------------------------------------------------------------- // Description: // // rfic function // // -FHDR------------------------------------------------------------ #define _GNU_SOURCE #include #include #include #include #include "../inc/typedef.h" #include "../inc/ucp_api_rfic.h" #include "../inc/xzJSON.h" #define RFIC_CFG_FILE_PATH "/lib/firmware/resources/ucp_rfic_cfg.json" #define RFIC_SEM_KEY 0x1027 typedef struct ucp_rfic_cfg_info { uint64_t txLo; uint64_t rxLo; uint64_t bw; uint16_t signalType; uint16_t initAtt; uint16_t initGain; uint16_t padding; }ucp_rfic_cfg_info_t; #if 1 extern xzJSON* ucp_jsonLoad (const char *fileName); extern xzJSON* xzJSON_GetObjectItem(const xzJSON * const object, const char * const string); ucp_rfic_cfg_info_t rfic_get_cfg_info() { ucp_rfic_cfg_info_t st_rfic_cfg; xzJSON *root = NULL; xzJSON *item = NULL; xzJSON *config = NULL; root = ucp_jsonLoad(RFIC_CFG_FILE_PATH); if (((xzJSON*)NULL) == root) { printf("rfic_get_cfg_info: load file error!\r\n"); exit(1); } item = xzJSON_GetObjectItem(root, "common"); config = xzJSON_GetObjectItem(item, "txLo"); st_rfic_cfg.txLo = config->valuedouble; config = xzJSON_GetObjectItem(item, "rxLo"); st_rfic_cfg.rxLo = config->valuedouble; config = xzJSON_GetObjectItem(item, "bw"); st_rfic_cfg.bw = config->valuedouble; config = xzJSON_GetObjectItem(item, "signalType"); st_rfic_cfg.signalType = config->valueint; config = xzJSON_GetObjectItem(item, "initAtt"); st_rfic_cfg.initAtt = config->valueint; config = xzJSON_GetObjectItem(item, "initGain"); st_rfic_cfg.initGain = config->valueint; xzJSON_Delete(root); return st_rfic_cfg; } #endif int32_t gi32_rfic_sem = 0; int32_t rfic_sem_create(void) { int32_t i32_ret = 0; /* create sem */ gi32_rfic_sem = semget((key_t)RFIC_SEM_KEY, 1, IPC_CREAT); if (-1 == gi32_rfic_sem) { printf("rfic_sem_create semget error!\r\n"); return -1; } /* set value */ i32_ret = semctl(gi32_rfic_sem, 0, SETVAL, 0); if (-1 == i32_ret) { printf("rfic_sem_create semctrl error!\r\n"); return -2; } return 0; } int32_t rfic_sem_post(int32_t sem_id) { int32_t i32_ret = 0; struct sembuf st_sem_buf; memset(&st_sem_buf, 0, sizeof(st_sem_buf)); st_sem_buf.sem_num = 0; st_sem_buf.sem_op = 1; st_sem_buf.sem_flg = SEM_UNDO; i32_ret = semop(sem_id, &st_sem_buf, 1); if (-1 == i32_ret) { printf("rfic_sem_post semop return error!\r\n"); return -1; } return 0; } int32_t main(int32_t argc, char* argvp[]) { ucp_rfic_cfg_info_t st_rfic_cfg_info; /* create sem */ int32_t i32_ret = rfic_sem_create(); if (0 != i32_ret) { printf("rfic_sem_create return %d\r\n", i32_ret); return -1; } #if 1 st_rfic_cfg_info = rfic_get_cfg_info(); printf("para: txLo:%ld, rxLo:%ld, bw:%ld, st:%d, initAtt:%d, initGain:%d\r\n", st_rfic_cfg_info.txLo, st_rfic_cfg_info.rxLo, st_rfic_cfg_info.bw, st_rfic_cfg_info.signalType, st_rfic_cfg_info.initAtt, st_rfic_cfg_info.initGain); #endif /* call jesd init function */ UCP_API_RFIC_CellInit(st_rfic_cfg_info.signalType, st_rfic_cfg_info.bw); UCP_API_RFIC_CellSetup(st_rfic_cfg_info.txLo, st_rfic_cfg_info.rxLo, st_rfic_cfg_info.initAtt, st_rfic_cfg_info.initGain); //UCP_API_RFIC_CellSetup(2575770000u, 2575770000u, 0); /* post sem */ i32_ret = rfic_sem_post(gi32_rfic_sem); if (0 != i32_ret) { printf("rfic_sem_post return %d\r\n", i32_ret); return -2; } return 0; }