yb_arm/rfic/src/main.c
lishuang.xie 36a9ef7332 update New Feature#1167
1. UCP_API_RFIC_CellInit() and UCP_API_RFIC_CellSetup() changed input parameter.
2. modify: ucp_rfic_cfg.json file add two parameter.
3. modify: /rfic/src/main.c read the new input parameter from the ucp_rfic_cfg.json.
4. test: spu(case44) + arm(case5): pass
2023-10-20 14:15:56 +08:00

161 lines
4.1 KiB
C

// +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 <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#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;
}