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
ea3ceed4
Commit
ea3ceed4
authored
Aug 05, 2016
by
Lucas Russo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
sm_io/protocols/*: add SPI/I2C higher objects to allow customizing the protocol
parent
6ebda772
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
324 additions
and
0 deletions
+324
-0
bpm_server_classes.h
include/bpm_server_classes.h
+7
-0
sm_pr_i2c_obj.h
include/sm_pr_i2c_obj.h
+44
-0
sm_pr_spi_obj.h
include/sm_pr_spi_obj.h
+37
-0
ops.mk
src/sm_io/protocols/ops/ops.mk
+2
-0
sm_pr_i2c_obj.c
src/sm_io/protocols/ops/sm_pr_i2c_obj.c
+125
-0
sm_pr_spi_obj.c
src/sm_io/protocols/ops/sm_pr_spi_obj.c
+109
-0
No files found.
include/bpm_server_classes.h
View file @
ea3ceed4
...
...
@@ -77,6 +77,11 @@ typedef enum _smpr_err_e smpr_err_e;
/* Opaque sm_pr_t structure */
typedef
struct
_smpr_t
smpr_t
;
/* Opaque smpr_spi_t structure */
typedef
struct
_smpr_spi_t
smpr_spi_t
;
/* Opaque smpr_i2c_t structure */
typedef
struct
_smpr_i2c_t
smpr_i2c_t
;
/* Forward smch_err_e declaration enumeration */
typedef
enum
_smch_err_e
smch_err_e
;
/* Opaque sm_ch_24aa64_t structure */
...
...
@@ -125,10 +130,12 @@ typedef struct _zmq_server_args_t zmq_server_args_t;
#include "sm_pr_err.h"
#include "sm_pr.h"
#include "sm_pr_spi.h"
#include "sm_pr_spi_obj.h"
#include "hw/wb_spi_regs.h"
#include "protocols/smpr_spi_regs.h"
#include "protocols/sm_pr_spi_defaults.h"
#include "sm_pr_i2c.h"
#include "sm_pr_i2c_obj.h"
#include "hw/wb_i2c_regs.h"
#include "protocols/smpr_i2c_regs.h"
#include "protocols/sm_pr_i2c_defaults.h"
...
...
include/sm_pr_i2c_obj.h
0 → 100644
View file @
ea3ceed4
/*
* Copyright (C) 2016 LNLS (www.lnls.br)
* Author: Lucas Russo <lucas.russo@lnls.br>
*
* Released according to the GNU GPL, version 3 or any later version.
*/
#ifndef _SM_PR_I2C_OBJ_H_
#define _SM_PR_I2C_OBJ_H_
#ifdef __cplusplus
extern
"C"
{
#endif
/* Creates a new instance of the proto_i2c */
smpr_i2c_t
*
smpr_i2c_new
(
uint32_t
rep_start
,
uint32_t
trans_size
,
uint32_t
addr
);
/* Destroy an instance of the i2c */
smpr_err_e
smpr_i2c_destroy
(
smpr_i2c_t
**
self_p
);
/* Set I2C rep_start parameter */
smpr_err_e
smpr_i2c_set_rep_start
(
smpr_i2c_t
*
self
,
uint32_t
rep_start
);
/* Get I2C rep_start parameter */
uint32_t
smpr_i2c_get_rep_start
(
smpr_i2c_t
*
self
);
/* Set I2C trans_size parameter */
smpr_err_e
smpr_i2c_set_trans_size
(
smpr_i2c_t
*
self
,
uint32_t
trans_size
);
/* Get I2C trans_size parameter */
uint32_t
smpr_i2c_get_trans_size
(
smpr_i2c_t
*
self
);
/* Set I2C addr parameter */
smpr_err_e
smpr_i2c_set_addr
(
smpr_i2c_t
*
self
,
uint32_t
addr
);
/* Get I2C addr parameter */
uint32_t
smpr_i2c_get_addr
(
smpr_i2c_t
*
self
);
/* Get SPI CHARLEN parameter */
const
smpr_proto_ops_t
*
smpr_i2c_get_ops
(
smpr_i2c_t
*
self
);
#ifdef __cplusplus
}
#endif
#endif
include/sm_pr_spi_obj.h
0 → 100644
View file @
ea3ceed4
/*
* Copyright (C) 2016 LNLS (www.lnls.br)
* Author: Lucas Russo <lucas.russo@lnls.br>
*
* Released according to the GNU GPL, version 3 or any later version.
*/
#ifndef _SM_PR_SPI_OBJ_H_
#define _SM_PR_SPI_OBJ_H_
#ifdef __cplusplus
extern
"C"
{
#endif
/* Creates a new instance of the proto_spi */
smpr_spi_t
*
smpr_spi_new
(
uint32_t
ss
,
uint32_t
charlen
);
/* Destroy an instance of the spi */
smpr_err_e
smpr_spi_destroy
(
smpr_spi_t
**
self_p
);
/* Set SPI SS parameter */
smpr_err_e
smpr_spi_set_ss
(
smpr_spi_t
*
self
,
uint32_t
ss
);
/* Get SPI SS parameter */
uint32_t
smpr_spi_get_ss
(
smpr_spi_t
*
self
);
/* Set SPI CHARLEN parameter */
smpr_err_e
smpr_spi_set_charlen
(
smpr_spi_t
*
self
,
uint32_t
charlen
);
/* Get SPI CHARLEN parameter */
uint32_t
smpr_spi_get_charlen
(
smpr_spi_t
*
self
);
/* Get SPI CHARLEN parameter */
const
smpr_proto_ops_t
*
smpr_spi_get_ops
(
smpr_spi_t
*
self
);
#ifdef __cplusplus
}
#endif
#endif
src/sm_io/protocols/ops/ops.mk
View file @
ea3ceed4
sm_io_protocols_ops_DIR = $(SRC_DIR)/sm_io/protocols/ops
sm_io_protocols_ops_OBJS = $(sm_io_protocols_ops_DIR)/sm_pr_spi.o \
$(sm_io_protocols_ops_DIR)/sm_pr_spi_obj.o \
$(sm_io_protocols_ops_DIR)/sm_pr_i2c.o \
$(sm_io_protocols_ops_DIR)/sm_pr_i2c_obj.o \
$(sm_io_protocols_ops_DIR)/sm_pr_bsmp.o
# $(sm_io_protocols_ops_DIR)/sm_pr_bypass.o \
# $(sm_io_protocols_ops_DIR)/sm_pr_1w.o \
...
...
src/sm_io/protocols/ops/sm_pr_i2c_obj.c
0 → 100644
View file @
ea3ceed4
/*
* Copyright (C) 2016 LNLS (www.lnls.br)
* Author: Lucas Russo <lucas.russo@lnls.br>
*
* Released according to the GNU GPL, version 3 or any later version.
*/
#include "bpm_server.h"
/* Undef ASSERT_ALLOC to avoid conflicting with other ASSERT_ALLOC */
#ifdef ASSERT_TEST
#undef ASSERT_TEST
#endif
#define ASSERT_TEST(test_boolean, err_str, err_goto_label,
/* err_core */
...) \
ASSERT_HAL_TEST(test_boolean, SM_PR, "[sm_pr:i2c_obj]", \
err_str, err_goto_label,
/* err_core */
__VA_ARGS__)
#ifdef ASSERT_ALLOC
#undef ASSERT_ALLOC
#endif
#define ASSERT_ALLOC(ptr, err_goto_label,
/* err_core */
...) \
ASSERT_HAL_ALLOC(ptr, SM_PR, "[sm_pr:i2c_obj]", \
smpr_err_str(SMPR_ERR_ALLOC), \
err_goto_label,
/* err_core */
__VA_ARGS__)
#ifdef CHECK_ERR
#undef CHECK_ERR
#endif
#define CHECK_ERR(err, err_type) \
CHECK_HAL_ERR(err, SM_PR, "[sm_pr:i2c_obj]", \
smpr_err_str (err_type))
/* Protocol object specification */
struct
_smpr_i2c_t
{
/* Must be located first */
smpr_proto_ops_t
proto_ops
;
/* I2C protocol operations */
uint32_t
rep_start
;
/* I2C repetitive start */
uint32_t
trans_size
;
/* I2C transaction size */
uint32_t
addr
;
/* I2C transaction size */
};
/************ Our methods implementation **********/
/* Creates a new instance of the proto_i2c */
smpr_i2c_t
*
smpr_i2c_new
(
uint32_t
rep_start
,
uint32_t
trans_size
,
uint32_t
addr
)
{
smpr_i2c_t
*
self
=
(
smpr_i2c_t
*
)
zmalloc
(
sizeof
*
self
);
ASSERT_ALLOC
(
self
,
err_smpr_i2c_alloc
);
/* copy I2C operations */
self
->
proto_ops
=
smpr_proto_ops_i2c
;
self
->
rep_start
=
rep_start
;
self
->
trans_size
=
trans_size
;
self
->
addr
=
addr
;
return
self
;
err_smpr_i2c_alloc:
return
NULL
;
}
/* Destroy an instance of the i2c */
smpr_err_e
smpr_i2c_destroy
(
smpr_i2c_t
**
self_p
)
{
assert
(
self_p
);
if
(
*
self_p
)
{
smpr_i2c_t
*
self
=
*
self_p
;
free
(
self
);
self_p
=
NULL
;
}
return
SMPR_SUCCESS
;
}
smpr_err_e
smpr_i2c_set_rep_start
(
smpr_i2c_t
*
self
,
uint32_t
rep_start
)
{
assert
(
self
);
self
->
rep_start
=
rep_start
;
return
SMPR_SUCCESS
;
}
uint32_t
smpr_i2c_get_rep_start
(
smpr_i2c_t
*
self
)
{
assert
(
self
);
return
self
->
rep_start
;
}
smpr_err_e
smpr_i2c_set_trans_size
(
smpr_i2c_t
*
self
,
uint32_t
trans_size
)
{
assert
(
self
);
self
->
trans_size
=
trans_size
;
return
SMPR_SUCCESS
;
}
uint32_t
smpr_i2c_get_trans_size
(
smpr_i2c_t
*
self
)
{
assert
(
self
);
return
self
->
trans_size
;
}
smpr_err_e
smpr_i2c_set_addr
(
smpr_i2c_t
*
self
,
uint32_t
addr
)
{
assert
(
self
);
self
->
addr
=
addr
;
return
SMPR_SUCCESS
;
}
uint32_t
smpr_i2c_get_addr
(
smpr_i2c_t
*
self
)
{
assert
(
self
);
return
self
->
addr
;
}
const
smpr_proto_ops_t
*
smpr_i2c_get_ops
(
smpr_i2c_t
*
self
)
{
assert
(
self
);
return
&
self
->
proto_ops
;
}
src/sm_io/protocols/ops/sm_pr_spi_obj.c
0 → 100644
View file @
ea3ceed4
/*
* Copyright (C) 2016 LNLS (www.lnls.br)
* Author: Lucas Russo <lucas.russo@lnls.br>
*
* Released according to the GNU GPL, version 3 or any later version.
*/
#include "bpm_server.h"
/* Undef ASSERT_ALLOC to avoid conflicting with other ASSERT_ALLOC */
#ifdef ASSERT_TEST
#undef ASSERT_TEST
#endif
#define ASSERT_TEST(test_boolean, err_str, err_goto_label,
/* err_core */
...) \
ASSERT_HAL_TEST(test_boolean, SM_PR, "[sm_pr:spi_obj]", \
err_str, err_goto_label,
/* err_core */
__VA_ARGS__)
#ifdef ASSERT_ALLOC
#undef ASSERT_ALLOC
#endif
#define ASSERT_ALLOC(ptr, err_goto_label,
/* err_core */
...) \
ASSERT_HAL_ALLOC(ptr, SM_PR, "[sm_pr:spi_obj]", \
smpr_err_str(SMPR_ERR_ALLOC), \
err_goto_label,
/* err_core */
__VA_ARGS__)
#ifdef CHECK_ERR
#undef CHECK_ERR
#endif
#define CHECK_ERR(err, err_type) \
CHECK_HAL_ERR(err, SM_PR, "[sm_pr:spi_obj]", \
smpr_err_str (err_type))
/* Protocol object specification */
struct
_smpr_spi_t
{
/* Must be located first */
smpr_proto_ops_t
proto_ops
;
/* SPI protocol operations */
uint32_t
ss
;
/* SPI Slave Select */
uint32_t
charlen
;
/* SPI character length:
0 is 128-bit data word, 1 is 1 bit, 2 is 2-bit and so on */
};
/************ Our methods implementation **********/
/* Creates a new instance of the proto_spi */
smpr_spi_t
*
smpr_spi_new
(
uint32_t
ss
,
uint32_t
charlen
)
{
smpr_spi_t
*
self
=
(
smpr_spi_t
*
)
zmalloc
(
sizeof
*
self
);
ASSERT_ALLOC
(
self
,
err_smpr_spi_alloc
);
/* copy SPI operations */
self
->
proto_ops
=
smpr_proto_ops_spi
;
self
->
ss
=
ss
;
self
->
charlen
=
charlen
;
return
self
;
err_smpr_spi_alloc:
return
NULL
;
}
/* Destroy an instance of the spi */
smpr_err_e
smpr_spi_destroy
(
smpr_spi_t
**
self_p
)
{
assert
(
self_p
);
if
(
*
self_p
)
{
smpr_spi_t
*
self
=
*
self_p
;
free
(
self
);
self_p
=
NULL
;
}
return
SMPR_SUCCESS
;
}
smpr_err_e
smpr_spi_set_ss
(
smpr_spi_t
*
self
,
uint32_t
ss
)
{
assert
(
self
);
self
->
ss
=
ss
;
return
SMPR_SUCCESS
;
}
uint32_t
smpr_spi_get_ss
(
smpr_spi_t
*
self
)
{
assert
(
self
);
return
self
->
ss
;
}
smpr_err_e
smpr_spi_set_charlen
(
smpr_spi_t
*
self
,
uint32_t
charlen
)
{
assert
(
self
);
self
->
charlen
=
charlen
;
return
SMPR_SUCCESS
;
}
uint32_t
smpr_spi_get_charlen
(
smpr_spi_t
*
self
)
{
assert
(
self
);
return
self
->
charlen
;
}
const
smpr_proto_ops_t
*
smpr_spi_get_ops
(
smpr_spi_t
*
self
)
{
assert
(
self
);
return
&
self
->
proto_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