first commit
This commit is contained in:
157
STM32ArduinoCompat/wirish.h
Normal file
157
STM32ArduinoCompat/wirish.h
Normal file
@@ -0,0 +1,157 @@
|
||||
// ArduinoCompat/wirish.h
|
||||
|
||||
#ifndef _wirish_h
|
||||
#define _wirish_h
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <stm32f4xx_rng.h>
|
||||
|
||||
#define PROGMEM
|
||||
#define memcpy_P memcpy
|
||||
|
||||
typedef enum WiringPinMode {
|
||||
OUTPUT, /**< Basic digital output: when the pin is HIGH, the
|
||||
voltage is held at +3.3v (Vcc) and when it is LOW, it
|
||||
is pulled down to ground. */
|
||||
|
||||
OUTPUT_OPEN_DRAIN, /**< In open drain mode, the pin indicates
|
||||
"low" by accepting current flow to ground
|
||||
and "high" by providing increased
|
||||
impedance. An example use would be to
|
||||
connect a pin to a bus line (which is pulled
|
||||
up to a positive voltage by a separate
|
||||
supply through a large resistor). When the
|
||||
pin is high, not much current flows through
|
||||
to ground and the line stays at positive
|
||||
voltage; when the pin is low, the bus
|
||||
"drains" to ground with a small amount of
|
||||
current constantly flowing through the large
|
||||
resistor from the external supply. In this
|
||||
mode, no current is ever actually sourced
|
||||
from the pin. */
|
||||
|
||||
INPUT, /**< Basic digital input. The pin voltage is sampled; when
|
||||
it is closer to 3.3v (Vcc) the pin status is high, and
|
||||
when it is closer to 0v (ground) it is low. If no
|
||||
external circuit is pulling the pin voltage to high or
|
||||
low, it will tend to randomly oscillate and be very
|
||||
sensitive to noise (e.g., a breath of air across the pin
|
||||
might cause the state to flip). */
|
||||
|
||||
INPUT_ANALOG, /**< This is a special mode for when the pin will be
|
||||
used for analog (not digital) reads. Enables ADC
|
||||
conversion to be performed on the voltage at the
|
||||
pin. */
|
||||
|
||||
INPUT_PULLUP, /**< The state of the pin in this mode is reported
|
||||
the same way as with INPUT, but the pin voltage
|
||||
is gently "pulled up" towards +3.3v. This means
|
||||
the state will be high unless an external device
|
||||
is specifically pulling the pin down to ground,
|
||||
in which case the "gentle" pull up will not
|
||||
affect the state of the input. */
|
||||
|
||||
INPUT_PULLDOWN, /**< The state of the pin in this mode is reported
|
||||
the same way as with INPUT, but the pin voltage
|
||||
is gently "pulled down" towards 0v. This means
|
||||
the state will be low unless an external device
|
||||
is specifically pulling the pin up to 3.3v, in
|
||||
which case the "gentle" pull down will not
|
||||
affect the state of the input. */
|
||||
|
||||
INPUT_FLOATING, /**< Synonym for INPUT. */
|
||||
|
||||
PWM, /**< This is a special mode for when the pin will be used for
|
||||
PWM output (a special case of digital output). */
|
||||
|
||||
PWM_OPEN_DRAIN, /**< Like PWM, except that instead of alternating
|
||||
cycles of LOW and HIGH, the voltage on the pin
|
||||
consists of alternating cycles of LOW and
|
||||
floating (disconnected). */
|
||||
} WiringPinMode;
|
||||
|
||||
extern void pinMode(uint8_t pin, WiringPinMode mode);
|
||||
extern uint32_t millis();
|
||||
extern void delay(uint32_t millis);
|
||||
extern void attachInterrupt(uint8_t, void (*)(void), int mode);
|
||||
extern void digitalWrite(uint8_t pin, uint8_t val);
|
||||
extern uint8_t digitalRead(uint8_t pin);
|
||||
|
||||
//extern long random(long to);
|
||||
//extern long random(long from, long to);
|
||||
|
||||
#define HIGH 0x1
|
||||
#define LOW 0x0
|
||||
|
||||
#define LSBFIRST 0
|
||||
#define MSBFIRST 1
|
||||
|
||||
#define CHANGE 1
|
||||
#define FALLING 2
|
||||
#define RISING 3
|
||||
|
||||
// Equivalent to HardwareSerial in Arduino
|
||||
class SerialUSBClass
|
||||
{
|
||||
public:
|
||||
#define DEC 10
|
||||
#define HEX 16
|
||||
#define OCT 8
|
||||
#define BIN 2
|
||||
|
||||
// TODO: move these from being inlined
|
||||
void begin(int baud) {}
|
||||
|
||||
size_t println(const char* s)
|
||||
{
|
||||
print(s);
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
size_t print(const char* s)
|
||||
{
|
||||
printf(s);
|
||||
return 0;
|
||||
}
|
||||
size_t print(unsigned int n, int base = DEC)
|
||||
{
|
||||
if (base == DEC)
|
||||
printf("%d", n);
|
||||
else if (base == HEX)
|
||||
printf("%02x", n);
|
||||
else if (base == OCT)
|
||||
printf("%o", n);
|
||||
// TODO: BIN
|
||||
return 0;
|
||||
}
|
||||
size_t print(char ch)
|
||||
{
|
||||
printf("%c", ch);
|
||||
return 0;
|
||||
}
|
||||
size_t println(char ch)
|
||||
{
|
||||
printf("%c\n", ch);
|
||||
return 0;
|
||||
}
|
||||
size_t print(unsigned char ch, int base = DEC)
|
||||
{
|
||||
return print((unsigned int)ch, base);
|
||||
}
|
||||
size_t println(unsigned char ch, int base = DEC)
|
||||
{
|
||||
print((unsigned int)ch, base);
|
||||
printf("\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// Global instance of the Serial output
|
||||
extern SerialUSBClass SerialUSB;
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user