Statistics
| Branch: | Tag: | Revision:

amiro-lld / source / P9221R / v1 / alld_P9221R_v1.c @ 7aa812e9

History | View | Annotate | Download (4.556 KB)

1 6ef38c23 Julia Niermann
/*
2
AMiRo-LLD is a compilation of low-level hardware drivers for the Autonomous Mini Robot (AMiRo) platform.
3
Copyright (C) 2016..2019  Thomas Schöpping et al.
4

5
This program is free software: you can redistribute it and/or modify
6
it under the terms of the GNU Lesser General Public License as published by
7
the Free Software Foundation, either version 3 of the License, or
8
(at your option) any later version.
9

10
This program is distributed in the hope that it will be useful,
11
but WITHOUT ANY WARRANTY; without even the implied warranty of
12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
GNU Lesser General Public License for more details.
14

15
You should have received a copy of the GNU Lesser General Public License
16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
*/
18
19
/**
20
 * @file    alld_P9221R_v1.c
21
 *
22
 * @brief   Power Monitor function implementations
23
 *
24
 * @addtogroup lld_power
25
 * @{
26
 */
27
28 54dbb62d Julia Niermann
#include <alld_P9221R.h>
29 6ef38c23 Julia Niermann
30 54dbb62d Julia Niermann
#if (defined(AMIROLLD_CFG_P9221R) && (AMIROLLD_CFG_P9221R == 1)) || defined(__DOXYGEN__)
31 6ef38c23 Julia Niermann
32
/******************************************************************************/
33
/* LOCAL DEFINITIONS                                                          */
34
/******************************************************************************/
35
36
/******************************************************************************/
37
/* EXPORTED VARIABLES                                                         */
38
/******************************************************************************/
39
40
/******************************************************************************/
41
/* LOCAL TYPES                                                                */
42
/******************************************************************************/
43
44
/******************************************************************************/
45
/* LOCAL VARIABLES                                                            */
46
/******************************************************************************/
47
48
/******************************************************************************/
49
/* LOCAL FUNCTIONS                                                            */
50
/******************************************************************************/
51
52
/******************************************************************************/
53
/* EXPORTED FUNCTIONS                                                         */
54
/******************************************************************************/
55
56
57
/**
58
 * @brief Read the value of one or more of the registers.
59
 * @param[in]   i2cd        i2c driver
60
 * @param[in]   PRd         p9221r driver
61
 * @param[in]   addr        register address
62
 * @param[out]  data        register content
63
 * @param[in]   num         number of subsequent registers to read
64
 * @param[in]   timeout     timeout
65
 * @return                  An indicator whether the call was successfull
66
 */
67
apalExitStatus_t p9221r_lld_read_register(const P9221RDriver* const p9221r, const p9221r_lld_register_t addr, uint16_t* const data, const uint8_t num, const apalTime_t timeout)
68
{
69
  apalDbgAssert(p9221r != NULL);
70
  apalDbgAssert(p9221r->i2cd != NULL);
71
  apalDbgAssert(data != NULL);
72
73
  uint8_t buffer[num*2];
74
  apalExitStatus_t status = apalI2CMasterTransmit(p9221r->i2cd, (P9221R_LLD_I2C_ADDR_FIXED | p9221r->addr), (uint8_t*)&addr, 1, buffer, 2*num, timeout);
75
  for (uint8_t dataIdx = 0; dataIdx < num; dataIdx++) {
76
    data[dataIdx] = (buffer[2*dataIdx] << 8) | buffer[2*dataIdx+1];
77
  }
78
  return status;
79
}
80
81
/**
82
 * @brief Write the value of one or more of the registers.
83
 * @param[in]   i2cd        i2c driver
84
 * @param[in]   PRd         p9221r driver
85
 * @param[in]   addr        register address
86
 * @param[in]   data        data to write
87
 * @param[in]   num         number of subsequent registers to read
88
 * @param[in]   timeout     timeout
89
 * @return                  An indicator whether the call was successfull
90
 */
91
92
apalExitStatus_t p9221r_lld_write_register(const R9221RDriver* const p9221r, const p9221r_lld_register_t addr, const uint16_t* const data, const uint8_t num, const apalTime_t timeout)
93
{
94
  apalDbgAssert(p9221r != NULL);
95
  apalDbgAssert(p9221r->i2cd != NULL);
96
  apalDbgAssert(data != NULL);
97
98
  uint8_t buffer[1+2*num];
99
  buffer[0] = addr;
100
  for (uint8_t dataIdx = 0; dataIdx < num; dataIdx++) {
101
    buffer[dataIdx*2+1] = data[dataIdx] >> 8;
102
    buffer[dataIdx*2+2] = data[dataIdx] & (0x00FFu);
103
  }
104
  return apalI2CMasterTransmit(p9221r->i2cd, (R9221R_LLD_I2C_ADDR_FIXED | p9221r->addr), buffer, 1+2*num, NULL, 0, timeout);
105
}
106
107 54dbb62d Julia Niermann
#endif /* defined(AMIROLLD_CFG_P9221R) && (AMIROLLD_CFG_P9221R == 1) */
108 6ef38c23 Julia Niermann
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135