Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
Beam Positoning Monitor - Software
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
Beam Positoning Monitor - Software
Commits
eb8534bd
Commit
eb8534bd
authored
Mar 23, 2016
by
Lucas Russo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sm_io/*/fmc250m_4ch/*: add ISLA216P test mode function
parent
79a2f4d0
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
149 additions
and
2 deletions
+149
-2
sm_io_fmc250m_4ch_codes.h
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_codes.h
+3
-1
sm_io_fmc250m_4ch_core.c
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_core.c
+18
-0
sm_io_fmc250m_4ch_core.h
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_core.h
+8
-1
sm_io_fmc250m_4ch_exp.c
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_exp.c
+106
-0
sm_io_fmc250m_4ch_exports.c
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_exports.c
+13
-0
sm_io_fmc250m_4ch_exports.h
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_exports.h
+1
-0
No files found.
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_codes.h
View file @
eb8534bd
...
...
@@ -110,7 +110,9 @@
#define FMC250M_4CH_NAME_RST_ADCS "fmc250m_4ch_rst_adcs"
#define FMC250M_4CH_OPCODE_RST_DIV_ADCS 46
#define FMC250M_4CH_NAME_RST_DIV_ADCS "fmc250m_4ch_rst_div_adcs"
#define FMC250M_4CH_OPCODE_END 47
#define FMC250M_4CH_OPCODE_TESTMODE 47
#define FMC250M_4CH_NAME_TESTMODE "fmc250m_4ch_test_mode"
#define FMC250M_4CH_OPCODE_END 48
/* Messaging Reply OPCODES */
#define FMC250M_4CH_REPLY_TYPE uint32_t
...
...
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_core.c
View file @
eb8534bd
...
...
@@ -49,6 +49,16 @@ smio_fmc250m_4ch_t * smio_fmc250m_4ch_new (smio_t *parent)
ASSERT_TEST
(
inst_id
<
NUM_FMC250M_4CH_SMIOS
,
"Number of FMC250M_4CH SMIOs instances exceeded"
,
err_num_fmc250m_4ch_smios
);
/* Setup ISLA216P ADC SPI communication */
self
->
smch_isla216p_adc0
=
smch_isla216p_new
(
parent
,
FMC_250M_ISLA216P_SPI_OFFS
,
0
,
0
);
ASSERT_ALLOC
(
self
->
smch_isla216p_adc0
,
err_smch_isla216p_adc0
);
self
->
smch_isla216p_adc1
=
smch_isla216p_new
(
parent
,
FMC_250M_ISLA216P_SPI_OFFS
,
1
,
0
);
ASSERT_ALLOC
(
self
->
smch_isla216p_adc1
,
err_smch_isla216p_adc1
);
self
->
smch_isla216p_adc2
=
smch_isla216p_new
(
parent
,
FMC_250M_ISLA216P_SPI_OFFS
,
2
,
0
);
ASSERT_ALLOC
(
self
->
smch_isla216p_adc2
,
err_smch_isla216p_adc2
);
self
->
smch_isla216p_adc3
=
smch_isla216p_new
(
parent
,
FMC_250M_ISLA216P_SPI_OFFS
,
3
,
0
);
ASSERT_ALLOC
(
self
->
smch_isla216p_adc3
,
err_smch_isla216p_adc3
);
/* FMC250M_4CH isntance 0 is the one controlling this CI */
/* FIXME: This breaks generality for this class */
if
(
inst_id
==
0
)
{
...
...
@@ -150,6 +160,14 @@ err_smch_24aa64_alloc:
smch_pca9547_destroy
(
&
self
->
smch_pca9547
);
}
err_smch_pca9547_alloc:
smch_isla216p_destroy
(
&
self
->
smch_isla216p_adc3
);
err_smch_isla216p_adc3:
smch_isla216p_destroy
(
&
self
->
smch_isla216p_adc2
);
err_smch_isla216p_adc2:
smch_isla216p_destroy
(
&
self
->
smch_isla216p_adc1
);
err_smch_isla216p_adc1:
smch_isla216p_destroy
(
&
self
->
smch_isla216p_adc0
);
err_smch_isla216p_adc0:
err_num_fmc250m_4ch_smios:
free
(
self
);
err_self_alloc:
...
...
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_core.h
View file @
eb8534bd
...
...
@@ -10,6 +10,10 @@
#define SMIO_AD9510_HANDLER(smio_handler) ((smch_ad9510_t *) smio_handler->smch_ad9510)
#define SMIO_SI57X_HANDLER(smio_handler) ((smch_si57x_t *) smio_handler->smch_si571)
#define SMIO_ISLA216P_HANDLER0(smio_handler) ((smch_isla216p_t *) smio_handler->smch_isla216p_adc0)
#define SMIO_ISLA216P_HANDLER1(smio_handler) ((smch_isla216p_t *) smio_handler->smch_isla216p_adc1)
#define SMIO_ISLA216P_HANDLER2(smio_handler) ((smch_isla216p_t *) smio_handler->smch_isla216p_adc2)
#define SMIO_ISLA216P_HANDLER3(smio_handler) ((smch_isla216p_t *) smio_handler->smch_isla216p_adc3)
/* The follosing codes were generated via the following command:
* > echo FMC250M_4CH_ACTIVE | md5sum | cut -c 1-8
...
...
@@ -33,8 +37,11 @@ typedef struct {
fmc250m_4ch_type_e
type
;
/* FMC250M_4CH type */
#if 0
smch_amc7823_t *smch_amc7823; /* AMC7823 chip handler */
smch_isla216p_t *smch_isla216p; /* ISLA216P chip handler */
#endif
smch_isla216p_t
*
smch_isla216p_adc0
;
/* ISLA216P 0 chip handler */
smch_isla216p_t
*
smch_isla216p_adc1
;
/* ISLA216P 1 chip handler */
smch_isla216p_t
*
smch_isla216p_adc2
;
/* ISLA216P 2 chip handler */
smch_isla216p_t
*
smch_isla216p_adc3
;
/* ISLA216P 3 chip handler */
smch_ad9510_t
*
smch_ad9510
;
/* AD9510 chip handler */
smch_si57x_t
*
smch_si571
;
/* SI571 chip handler */
smch_24aa64_t
*
smch_24aa64
;
/* 24AA64 chip handler */
...
...
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_exp.c
View file @
eb8534bd
...
...
@@ -55,6 +55,8 @@
static
smch_err_e
smch_ad9510_cfg_defaults_compat
(
smch_ad9510_t
*
self
,
uint32_t
*
param
);
static
smch_err_e
smch_isla216p_test_mode_compat
(
smch_isla216p_t
*
self
,
uint32_t
*
mode
);
/************************************************************/
/************ Specific FMC_250M_4CH Operations **************/
...
...
@@ -627,6 +629,109 @@ RW_PARAM_FUNC(fmc250m_4ch, rst_div_adcs) {
NO_FMT_FUNC
,
SET_FIELD
);
}
/* Macros to avoid repetition of the function body ISLA216P */
typedef
smch_err_e
(
*
smch_isla216p_func_fp
)
(
smch_isla216p_t
*
self
,
uint32_t
*
param
);
#define FMC250M_4CH_ISLA216P_FUNC_NAME(func_name) \
_fmc250m_4ch_isla216p_ ## func_name
#define FMC250M_4CH_ISLA216P_FUNC_NAME_HEADER(func_name) \
static int FMC250M_4CH_ISLA216P_FUNC_NAME(func_name) (void *owner, void *args, void *ret)
#define FMC250M_4CH_ISLA216P_FUNC_BODY(owner, args, ret, read_func, write_func, \
error_msg) \
do { \
assert (owner); \
assert (args); \
\
int err = -FMC250M_4CH_OK; \
SMIO_OWNER_TYPE *self = SMIO_EXP_OWNER(owner); \
smio_fmc250m_4ch_t *fmc250m = smio_get_handler (self); \
ASSERT_TEST(fmc250m != NULL, "Could not get SMIO FMC250M handler", \
err_get_fmc250m_handler, -FMC250M_4CH_ERR); \
smch_isla216p_t *smch_isla216p0 = SMIO_ISLA216P_HANDLER0(fmc250m); \
smch_isla216p_t *smch_isla216p1 = SMIO_ISLA216P_HANDLER1(fmc250m); \
smch_isla216p_t *smch_isla216p2 = SMIO_ISLA216P_HANDLER2(fmc250m); \
smch_isla216p_t *smch_isla216p3 = SMIO_ISLA216P_HANDLER3(fmc250m); \
uint32_t rw = *(uint32_t *) EXP_MSG_ZMQ_FIRST_ARG(args); \
(void) rw; \
uint32_t param = *(uint32_t *) EXP_MSG_ZMQ_NEXT_ARG(args); \
\
DBE_DEBUG (DBG_SM_IO | DBG_LVL_TRACE, "[sm_io:fmc250m_4ch_exp] Calling " \
"ISLA216P function\n"); \
\
smch_err_e serr = SMCH_SUCCESS; \
/* Call specific function */
\
if (rw) { \
WHEN(ISEMPTY(read_func))( \
(void) ret; \
DBE_DEBUG (DBG_SM_IO | DBG_LVL_TRACE, "[sm_io:fmc250m_4ch_exp] " \
"ISLA216P read function not implemented\n"); \
err = -FMC250M_4CH_UNINPL; \
return err; \
) \
WHENNOT(ISEMPTY(read_func))( \
uint32_t value = 0; \
serr = ((smch_isla216p_func_fp) read_func) (smch_isla216p0, \
&value); \
serr |= ((smch_isla216p_func_fp) read_func) (smch_isla216p1, \
&value); \
serr |= ((smch_isla216p_func_fp) read_func) (smch_isla216p2, \
&value); \
serr |= ((smch_isla216p_func_fp) read_func) (smch_isla216p3, \
&value); \
if (serr != SMCH_SUCCESS) { \
err = -FMC250M_4CH_ERR; \
} \
else { \
*((uint32_t *) ret) = value; \
err = sizeof (value); \
DBE_DEBUG (DBG_SM_IO | DBG_LVL_TRACE, "[sm_io:fmc250m_4ch_exp] " \
"ISLA216P function read value = 0x%08X\n", value); \
} \
) \
} \
else { \
WHEN(ISEMPTY(write_func))( \
DBE_DEBUG (DBG_SM_IO | DBG_LVL_TRACE, "[sm_io:fmc250m_4ch_exp] " \
"ISLA216P write function not implemented\n"); \
err = -FMC250M_4CH_UNINPL; \
return err; \
) \
WHENNOT(ISEMPTY(write_func))( \
serr = ((smch_isla216p_func_fp) write_func) (smch_isla216p0, \
¶m); \
serr |= ((smch_isla216p_func_fp) write_func) (smch_isla216p1, \
¶m); \
serr |= ((smch_isla216p_func_fp) write_func) (smch_isla216p2, \
¶m); \
serr |= ((smch_isla216p_func_fp) write_func) (smch_isla216p3, \
¶m); \
if (serr != SMCH_SUCCESS) { \
err = -FMC250M_4CH_ERR; \
} \
else { \
err = -FMC250M_4CH_OK; \
} \
) \
} \
\
err_get_fmc250m_handler: \
return err; \
} while(0)
static
smch_err_e
smch_isla216p_test_mode_compat
(
smch_isla216p_t
*
self
,
uint32_t
*
mode
)
{
uint8_t
test_mode
=
*
(
uint8_t
*
)
mode
;
return
smch_isla216p_set_test_mode
(
self
,
test_mode
);
}
FMC250M_4CH_ISLA216P_FUNC_NAME_HEADER
(
test_mode
)
{
FMC250M_4CH_ISLA216P_FUNC_BODY
(
owner
,
args
,
ret
,
/* No read function */
,
smch_isla216p_test_mode_compat
,
"Could not set/get ISLA216P test mode"
);
}
/* Exported function pointers */
const
disp_table_func_fp
fmc250m_4ch_exp_fp
[]
=
{
...
...
@@ -681,6 +786,7 @@ const disp_table_func_fp fmc250m_4ch_exp_fp [] = {
FMC250M_4CH_SI571_FUNC_NAME
(
get_defaults
),
RW_PARAM_FUNC_NAME
(
fmc250m_4ch
,
rst_adcs
),
RW_PARAM_FUNC_NAME
(
fmc250m_4ch
,
rst_div_adcs
),
FMC250M_4CH_ISLA216P_FUNC_NAME
(
test_mode
),
NULL
};
...
...
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_exports.c
View file @
eb8534bd
...
...
@@ -580,6 +580,18 @@ disp_op_t fmc250m_4ch_si571_get_defaults_exp = {
}
};
disp_op_t
fmc250m_4ch_test_mode_exp
=
{
.
name
=
FMC250M_4CH_NAME_TESTMODE
,
.
opcode
=
FMC250M_4CH_OPCODE_TESTMODE
,
.
retval
=
DISP_ARG_END
,
.
retval_owner
=
DISP_OWNER_OTHER
,
.
args
=
{
DISP_ARG_ENCODE
(
DISP_ATYPE_UINT32
,
uint32_t
),
DISP_ARG_ENCODE
(
DISP_ATYPE_UINT32
,
uint32_t
),
DISP_ARG_END
}
};
/* Exported function description */
const
disp_op_t
*
fmc250m_4ch_exp_ops
[]
=
{
&
fmc250m_4ch_leds_exp
,
...
...
@@ -633,6 +645,7 @@ const disp_op_t *fmc250m_4ch_exp_ops [] = {
&
fmc250m_4ch_si571_get_defaults_exp
,
&
fmc250m_4ch_rst_adcs_exp
,
&
fmc250m_4ch_rst_div_adcs_exp
,
&
fmc250m_4ch_test_mode_exp
,
NULL
};
src/sm_io/modules/fmc250m_4ch/sm_io_fmc250m_4ch_exports.h
View file @
eb8534bd
...
...
@@ -61,6 +61,7 @@ extern disp_op_t fmc250m_4ch_si571_set_freq_exp;
extern
disp_op_t
fmc250m_4ch_si571_get_defaults_exp
;
extern
disp_op_t
fmc250m_4ch_rst_adcs_exp
;
extern
disp_op_t
fmc250m_4ch_rst_div_adcs_exp
;
extern
disp_op_t
fmc250m_4ch_test_mode_exp
;
extern
const
disp_op_t
*
fmc250m_4ch_exp_ops
[];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment