]> begriffs open source - cmsis-freertos/blob - Demo/WizNET_DEMO_GCC_ARM7/i2c.h
This is a FreeRTOS header, not RTX.
[cmsis-freertos] / Demo / WizNET_DEMO_GCC_ARM7 / i2c.h
1 /*
2  * FreeRTOS Kernel V10.0.1
3  * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of
6  * this software and associated documentation files (the "Software"), to deal in
7  * the Software without restriction, including without limitation the rights to
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9  * the Software, and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in all
13  * copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * http://www.FreeRTOS.org
23  * http://aws.amazon.com/freertos
24  *
25  * 1 tab == 4 spaces!
26  */
27
28 #ifndef I2C_H
29 #define I2C_H
30
31 /* Structure used to capture the I2C message details.  The structure is then
32  * queued for processing by the I2C ISR. 
33  */
34 typedef struct AN_I2C_MESSAGE
35 {
36         long lMessageLength;                                    /*< How many bytes of data to send or received - excluding the buffer address. */
37         unsigned char ucSlaveAddress;                   /*< The slave address of the WIZnet on the I2C bus. */
38         unsigned char ucBufferAddressLowByte;   /*< The address within the WIZnet device to which data should be read from / written to. */
39         unsigned char ucBufferAddressHighByte;  /*< As above, high byte. */
40         SemaphoreHandle_t xMessageCompleteSemaphore;    /*< Contains a reference to a semaphore if the application tasks wants notifying when the message has been transacted. */
41         unsigned char *pucBuffer;                               /*< Pointer to the buffer from where data will be read for transmission, or into which received data will be placed. */
42 } xI2CMessage;
43
44 /* Constants to use as the ulDirection parameter of i2cMessage(). */
45 #define i2cWRITE                                ( ( unsigned long ) 0 )
46 #define i2cREAD                                 ( ( unsigned long ) 1 )
47
48 /**
49  * Must be called once before any calls to i2cMessage.
50  */
51 void i2cInit( void );
52
53 /**
54  * Send or receive a message over the I2C bus.
55  *
56  * @param pucMessage     The data to be transmitted or the buffer into which
57  *                                               received data will be placed. 
58  *
59  * @param lMessageLength The number of bytes to either transmit or receive.
60  *
61  * @param ucSlaveAddress The slave address of the WIZNet device on the I2C bus.
62  *
63  * @param usBufferAddress The address within the WIZNet device to which data is
64  *                                               either written to or read from.  The WIZnet has it's
65  *                                               own Rx and Tx buffers.
66  *
67  * @param ulDirection    Must be either i2cWRITE or i2cREAD as #defined above.
68  *
69  * @param xMessageCompleteSemaphore
70  *                                               Can be used to pass a semaphore reference if the 
71  *                                               calling task want notification of when the message has
72  *                                               completed.  Otherwise NULL can be passed.
73  * 
74  * @param xBlockTime     The time to wait for a space in the message queue to 
75  *                                               become available should one not be available 
76  *                                               immediately.
77  */
78 void i2cMessage( const unsigned char * const pucMessage, long lMessageLength, unsigned char ucSlaveAddress, unsigned short usBufferAddress, unsigned long ulDirection, SemaphoreHandle_t xMessageCompleteSemaphore, TickType_t xBlockTime );
79
80 #endif
81