22#include "api/Stream.h"
69 GpioAnalogWriteFrequency,
70 GpioAnalogWriteResolution,
119 void setStream(
Stream* str) { io = str; }
126 void send(
uint8_t data) { io->write((
uint8_t*)&data,
sizeof(data)); }
130 io->write((
uint8_t*)&data,
sizeof(data));
135 io->write((
uint8_t*)&data,
sizeof(data));
140 io->write((
uint8_t*)&data,
sizeof(data));
145 io->write((
uint8_t*)&data,
sizeof(data));
149 io->write((
uint8_t*)&data,
sizeof(data));
152 void send(
bool data) { io->write((
uint8_t*)&data,
sizeof(data)); }
154 void send(
void* data,
size_t len) { io->write((
uint8_t*)data, len); }
156 void flush() { io->flush(); }
173 return swap_uint64(
result);
182 uint16_t receive(
void* data,
int len) {
183 return blockingRead((
char*)data, len);
186 operator bool() {
return io !=
nullptr; }
190 bool isLittleEndian = !is_big_endian();
191 int timeout_ms = 1000;
193 uint16_t blockingRead(
void* data,
int len,
int timeout = 1000) {
195 long start = millis();
196 while (
offset < len && (millis() -
start) < timeout) {
204 bool is_big_endian(
void) {
208 }
bint = {0x01020304};
210 return bint.c[0] == 1;
215 if (isLittleEndian)
return val;
216 return (
val << 8) | (
val >> 8);
221 if (isLittleEndian)
return val;
222 return (
val << 8) | ((
val >> 8) & 0xFF);
227 if (isLittleEndian)
return val;
228 val = ((
val << 8) & 0xFF00FF00) | ((
val >> 8) & 0xFF00FF);
229 return (
val << 16) | (
val >> 16);
234 if (isLittleEndian)
return val;
235 val = ((
val << 8) & 0xFF00FF00) | ((
val >> 8) & 0xFF00FF);
236 return (
val << 16) | ((
val >> 16) & 0xFFFF);
240 if (isLittleEndian)
return val;
241 val = ((
val << 8) & 0xFF00FF00FF00FF00ULL) |
242 ((
val >> 8) & 0x00FF00FF00FF00FFULL);
243 val = ((
val << 16) & 0xFFFF0000FFFF0000ULL) |
244 ((
val >> 16) & 0x0000FFFF0000FFFFULL);
245 return (
val << 32) | ((
val >> 32) & 0xFFFFFFFFULL);
248 uint64_t swap_uint64(uint64_t val) {
249 if (isLittleEndian)
return val;
250 val = ((val << 8) & 0xFF00FF00FF00FF00ULL) |
251 ((val >> 8) & 0x00FF00FF00FF00FFULL);
252 val = ((val << 16) & 0xFFFF0000FFFF0000ULL) |
253 ((val >> 16) & 0x0000FFFF0000FFFFULL);
254 return (val << 32) | (val >> 32);
Provides a virtualized hardware communication service for SPI, I2C, I2S, and GPIO over a stream.
Definition HardwareService.h:115
int32_t swap_int32(int32_t val)
Byte swap int.
Definition HardwareService.h:233
uint16_t swap_uint16(uint16_t val)
Byte swap unsigned short.
Definition HardwareService.h:214
int16_t swap_int16(int16_t val)
Byte swap short.
Definition HardwareService.h:220
uint32_t swap_uint32(uint32_t val)
Byte swap unsigned int.
Definition HardwareService.h:226
We provide the WiFi class to simulate the Arduino WIFI. In in Linux we can expect that networking is ...
Definition CanMsg.cpp:31
HWCalls
We virtualize the hardware and send the requests and replys over a stream.
Definition HardwareService.h:32