init: allow init to be called multiple times
[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
40 #include "maa.h"
41
42 /**
43  * A strucutre representing the SPI device
44  */
45 typedef struct {
46     /*@{*/
47     int spifd; /**< File descriptor to SPI Device */
48     /*@}*/
49 } maa_spi_context;
50
51 /** Initialise SPI_context, uses board mapping. Sets the muxes
52  *
53  * @return maa_spi_context The returned initialised SPI context
54  */
55 maa_spi_context* maa_spi_init();
56
57 /** Set the SPI device mode. see spidev
58  *
59  * @param spi the spi device context
60  * @param mode the mode. See Linux spidev
61  *
62  * @return maa_spi_context The returned initialised SPI context
63  */
64 maa_result_t maa_spi_mode(maa_spi_context* spi,unsigned short mode);
65
66 /** Set the SPI device operating clock frequency.
67  *
68  * @param spi the spid device clock frequency
69  * @param hz the frequency in hz
70  *
71  * @return maa_spi_context The returned initialised SPI context
72  */
73 maa_result_t maa_spi_frequency(maa_spi_context* spi, int hz);
74
75 /** Write to the SPI device.
76  *
77  * @param spi the spid device clock frequency
78  * @param data to send
79  *
80  * @return data recevied on the miso line.
81  */
82 unsigned int maa_spi_write(maa_spi_context* spi, unsigned int data);
83
84 /** De-inits an maa_spi_context device
85  *
86  *  @param dev the spi context
87  *
88  *  @return maa_result_t the maa result.
89  */
90 maa_result_t maa_spi_stop(maa_spi_context* spi);
91
92 #ifdef __cplusplus
93 }
94 #endif