a4223c473641f8ddef85486fb21083777c505daa
[contrib/mraa.git] / api / spi.h
1 /*
2  * Author: Thomas Ingleby <thomas.c.ingleby@intel.com>
3  * Copyright (c) 2014 Intel Corporation.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining
6  * a copy of this software and associated documentation files (the
7  * "Software"), to deal in the Software without restriction, including
8  * without limitation the rights to use, copy, modify, merge, publish,
9  * distribute, sublicense, and/or sell copies of the Software, and to
10  * permit persons to whom the Software is furnished to do so, subject to
11  * the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24
25 #pragma once
26
27 /** @file
28  *
29  * This file defines the spi interface for libmaa
30  *
31  */
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 #include <stdio.h>
38 #include <fcntl.h>
39 #include <stdint.h>
40
41 #include "maa.h"
42
43 typedef struct _spi* maa_spi_context;
44
45 /** Initialise SPI_context, uses board mapping. Sets the muxes
46  *
47  * @param bus to use, as listed in platform definition. Normally 0
48  * @return maa_spi_context The returned initialised SPI context
49  */
50 maa_spi_context maa_spi_init(int bus);
51
52 /** Set the SPI device mode. see spidev
53  * 0-3.
54  * @param spi the spi device context
55  * @param mode the mode. See Linux spidev
56  *
57  * @return maa_spi_context The returned initialised SPI context
58  */
59 maa_result_t maa_spi_mode(maa_spi_context dev,unsigned short mode);
60
61 /** Set the SPI device operating clock frequency.
62  *
63  * @param spi the spid device clock frequency
64  * @param hz the frequency in hz
65  *
66  * @return maa_spi_context The returned initialised SPI context
67  */
68 maa_result_t maa_spi_frequency(maa_spi_context dev, int hz);
69
70 /** Write Single Byte to the SPI device.
71  *
72  * @param spi the spid device clock frequency
73  * @param data to send
74  *
75  * @return data received on the miso line.
76  */
77 uint8_t maa_spi_write(maa_spi_context dev, uint8_t data);
78
79 /** Write Buffer of bytes to the SPI device.
80  *
81  * @param spi the spid device clock frequency
82  * @param data to send
83  * @param length elements within buffer, Max 4096
84  *
85  * @return data received on the miso line. Same length as passed in.
86  */
87 uint8_t* maa_spi_write_buf(maa_spi_context dev, uint8_t* data, int length);
88
89 /**
90  *
91  * @param dev spi context
92  * @param lsb. Use least significant bit transmission. 0 for msbi
93  *
94  * @return maa result of operation
95  */
96 maa_result_t
97 maa_spi_lsbmode(maa_spi_context dev, maa_boolean_t lsb);
98
99 /** Set bits per mode on transaction
100  * Defaults at 8.
101  *
102  * @param dev spi context
103  * @param bits bits per word
104  *
105  * @return Result of operation
106  */
107 maa_result_t
108 maa_spi_bit_per_word(maa_spi_context dev, unsigned int bits);
109
110 /** De-inits an maa_spi_context device
111  *
112  *  @param dev the spi context
113  *
114  *  @return maa_result_t the maa result.
115  */
116 maa_result_t maa_spi_stop(maa_spi_context dev);
117
118 #ifdef __cplusplus
119 }
120 #endif