HardwareSPI/src/include/HSPI/Request.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/anakod/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * Request.h
8  *
9  * @author: 11 December 2018 - mikee47 <mike@sillyhouse.net>
10  *
11  * Definitions for an SPI Request Packet containing data and settings for a transfer.
12  * A single transfer may use 1 or more transactions.
13  *
14  */
15 
16 #pragma once
17 
18 #include "Data.h"
19 
20 namespace HSPI
21 {
22 class Device;
23 struct Request;
24 
29 typedef void (*Callback)(Request& request);
30 
45 struct Request {
46  Device* device{nullptr};
47  Request* next{nullptr};
49  uint8_t cmdLen{0};
50  uint8_t maxTransactionSize{0};
51  uint8_t async : 1;
52  uint8_t task : 1;
53  volatile uint8_t busy : 1;
54  uint32_t addr{0};
55  uint8_t addrLen{0};
56  uint8_t dummyLen{0};
58  Data in;
59  Callback callback{nullptr};
60  void* param{nullptr};
61 
62  Request() : async(false), task(false), busy(false)
63  {
64  }
65 
70  void prepare()
71  {
72  while(busy) {
73  ;
74  }
75  busy = false;
76  task = false;
77  }
78 
88  void setCommand(uint16_t command, uint8_t bitCount)
89  {
90  cmd = command;
91  cmdLen = bitCount;
92  }
93 
98  void setCommand8(uint8_t command)
99  {
100  setCommand(command, 8);
101  }
102 
107  void setCommand16(uint16_t command)
108  {
109  setCommand(command, 16);
110  }
111 
123  void setAddress(uint32_t address, uint8_t bitCount)
124  {
125  addr = address;
126  addrLen = bitCount;
127  }
128 
133  void setAddress24(uint32_t address)
134  {
135  setAddress(address, 24);
136  }
137 
143  void setAsync(Callback callback = nullptr, void* param = nullptr)
144  {
145  async = true;
146  this->callback = callback;
147  this->param = param;
148  }
149 };
150 
151 } // namespace HSPI
void setAddress24(uint32_t address)
Set 24-bit address.
Definition: HardwareSPI/src/include/HSPI/Request.h:133
uint8_t maxTransactionSize
Limit size of data in each transaction (excludes command/address/dummy)
Definition: HardwareSPI/src/include/HSPI/Request.h:50
volatile uint8_t busy
Request in progress.
Definition: HardwareSPI/src/include/HSPI/Request.h:53
void * param
User parameter.
Definition: HardwareSPI/src/include/HSPI/Request.h:60
Defines an SPI Request Packet.
Definition: HardwareSPI/src/include/HSPI/Request.h:45
Request()
Definition: HardwareSPI/src/include/HSPI/Request.h:62
void setAddress(uint32_t address, uint8_t bitCount)
Definition: HardwareSPI/src/include/HSPI/Request.h:123
void setCommand(uint16_t command, uint8_t bitCount)
Definition: HardwareSPI/src/include/HSPI/Request.h:88
uint8_t task
Controller will execute this request in task mode.
Definition: HardwareSPI/src/include/HSPI/Request.h:52
uint8_t addrLen
Address bits, 0 - 32.
Definition: HardwareSPI/src/include/HSPI/Request.h:55
Definition: Common.h:24
void(* Callback)(Request &request)
SPI completion callback routine.
Definition: HardwareSPI/src/include/HSPI/Request.h:29
Data in
Incoming data.
Definition: HardwareSPI/src/include/HSPI/Request.h:58
Data out
Outgoing data.
Definition: HardwareSPI/src/include/HSPI/Request.h:57
Specifies a block incoming or outgoing data.
Definition: Data.h:33
void setCommand8(uint8_t command)
Set 8-bit command.
Definition: HardwareSPI/src/include/HSPI/Request.h:98
Callback callback
Completion routine.
Definition: HardwareSPI/src/include/HSPI/Request.h:59
void prepare()
MUST call this first before attempting to re-use a request.
Definition: HardwareSPI/src/include/HSPI/Request.h:70
Request * next
Controller uses this to queue requests.
Definition: HardwareSPI/src/include/HSPI/Request.h:47
uint16_t cmd
Command value.
Definition: HardwareSPI/src/include/HSPI/Request.h:48
uint8_t async
Set for asynchronous operation.
Definition: HardwareSPI/src/include/HSPI/Request.h:51
void setAsync(Callback callback=nullptr, void *param=nullptr)
Set request to asynchronous execution with optional callback.
Definition: HardwareSPI/src/include/HSPI/Request.h:143
Device * device
Target device for this request.
Definition: HardwareSPI/src/include/HSPI/Request.h:46
void setCommand16(uint16_t command)
Set 16-bit command.
Definition: HardwareSPI/src/include/HSPI/Request.h:107
uint8_t dummyLen
Dummy read bits between address and read data, 0 - 255.
Definition: HardwareSPI/src/include/HSPI/Request.h:56
uint8_t cmdLen
Command bits, 0 - 16.
Definition: HardwareSPI/src/include/HSPI/Request.h:49
Manages a specific SPI device instance attached to a controller.
Definition: Libraries/HardwareSPI/src/include/HSPI/Device.h:35
uint32_t addr
Address value.
Definition: HardwareSPI/src/include/HSPI/Request.h:54