04bbba6c12
Rename guhRF platform to osd-merkur-256, previous osd-merkur platform is now osd-merkur-128. Also check that everything is consistent. Add both platforms to the regression tests. Move redundant files in platform dev directory of both platforms to cpu/avr/dev. Note that this probably needs some rework. Already discovered some inconsistency in io definitions of both devices in the avr/io.h includes. Added a workaround in the obvious cases. The platform makefiles now set correct parameters for bootloader and for reading mac-address from flash memory. Factor the flash programming into cpu/avr and platform/osd-merkur* and rework *all* osd example makefiles to use the new settings. Also update all the flash.sh and run.sh to use the new settings. The suli ledstrip modules (and osd example) have also been removed.
172 lines
4.4 KiB
C
172 lines
4.4 KiB
C
#ifndef Arduino_h
|
|
#define Arduino_h
|
|
|
|
#include <hw-arduino.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <math.h>
|
|
|
|
#include <avr/pgmspace.h>
|
|
#include <avr/io.h>
|
|
#include <avr/interrupt.h>
|
|
|
|
#include "binary.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"{
|
|
#endif
|
|
|
|
#define HIGH 0x1
|
|
#define LOW 0x0
|
|
|
|
#define INPUT 0x0
|
|
#define OUTPUT 0x1
|
|
#define INPUT_PULLUP 0x2
|
|
|
|
#define true 0x1
|
|
#define false 0x0
|
|
|
|
#define PI 3.1415926535897932384626433832795
|
|
#define HALF_PI 1.5707963267948966192313216916398
|
|
#define TWO_PI 6.283185307179586476925286766559
|
|
#define DEG_TO_RAD 0.017453292519943295769236907684886
|
|
#define RAD_TO_DEG 57.295779513082320876798154814105
|
|
|
|
#define SERIAL 0x0
|
|
#define DISPLAY 0x1
|
|
|
|
#define LSBFIRST 0
|
|
#define MSBFIRST 1
|
|
|
|
#define CHANGE 1
|
|
#define FALLING 2
|
|
#define RISING 3
|
|
|
|
#define DEFAULT ADC_DEFAULT
|
|
#define EXTERNAL ADC_EXTERNAL
|
|
|
|
// undefine stdlib's abs if encountered
|
|
#ifdef abs
|
|
#undef abs
|
|
#endif
|
|
|
|
#define min(a,b) ((a)<(b)?(a):(b))
|
|
#define max(a,b) ((a)>(b)?(a):(b))
|
|
#define abs(x) ((x)>0?(x):-(x))
|
|
#define constrain(amt,low,high) ((amt)<(low)?(low):((amt)>(high)?(high):(amt)))
|
|
#define round(x) ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
|
|
#define radians(deg) ((deg)*DEG_TO_RAD)
|
|
#define degrees(rad) ((rad)*RAD_TO_DEG)
|
|
#define sq(x) ((x)*(x))
|
|
|
|
#define interrupts() sei()
|
|
#define noInterrupts() cli()
|
|
|
|
#define lowByte(w) ((uint8_t) ((w) & 0xff))
|
|
#define highByte(w) ((uint8_t) ((w) >> 8))
|
|
|
|
#define bitRead(value, bit) (((value) >> (bit)) & 0x01)
|
|
#define bitSet(value, bit) ((value) |= (1UL << (bit)))
|
|
#define bitClear(value, bit) ((value) &= ~(1UL << (bit)))
|
|
#define bitWrite(value, bit, bitvalue) (bitvalue ? bitSet(value, bit) : bitClear(value, bit))
|
|
|
|
|
|
typedef unsigned int word;
|
|
|
|
#define bit(b) (1UL << (b))
|
|
|
|
typedef uint8_t boolean;
|
|
typedef uint8_t byte;
|
|
|
|
void pinMode(uint8_t, uint8_t);
|
|
void digitalWrite(uint8_t, uint8_t);
|
|
int digitalRead(uint8_t);
|
|
|
|
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
|
|
|
|
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
|
|
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
|
|
|
|
void attachInterrupt(uint8_t, void (*)(void), int mode);
|
|
void detachInterrupt(uint8_t);
|
|
|
|
void setup(void);
|
|
void loop(void);
|
|
|
|
// Get the bit location within the hardware port of the given virtual pin.
|
|
// This comes from the pins_*.c file for the active board configuration.
|
|
|
|
#define analogInPinToBit(P) (P)
|
|
|
|
// On the ATmega1280, the addresses of some of the port registers are
|
|
// greater than 255, so we can't store them in uint8_t's.
|
|
extern const uint16_t PROGMEM port_to_mode_PGM[];
|
|
extern const uint16_t PROGMEM port_to_input_PGM[];
|
|
extern const uint16_t PROGMEM port_to_output_PGM[];
|
|
|
|
extern const uint8_t PROGMEM digital_pin_to_port_PGM[];
|
|
// extern const uint8_t PROGMEM digital_pin_to_bit_PGM[];
|
|
extern const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[];
|
|
|
|
// Get the bit location within the hardware port of the given virtual pin.
|
|
// This comes from the pins_*.c file for the active board configuration.
|
|
//
|
|
// These perform slightly better as macros compared to inline functions
|
|
//
|
|
#define digitalPinToPort(P) ( pgm_read_byte( digital_pin_to_port_PGM + (P) ) )
|
|
#define digitalPinToBitMask(P) ( pgm_read_byte( digital_pin_to_bit_mask_PGM + (P) ) )
|
|
#define analogInPinToBit(P) (P)
|
|
#define portOutputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_output_PGM + (P))) )
|
|
#define portInputRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_input_PGM + (P))) )
|
|
#define portModeRegister(P) ( (volatile uint8_t *)( pgm_read_word( port_to_mode_PGM + (P))) )
|
|
|
|
#define NOT_A_PIN 0
|
|
#define NOT_A_PORT 0
|
|
|
|
#ifdef ARDUINO_MAIN
|
|
#define PA 1
|
|
#define PB 2
|
|
#define PC 3
|
|
#define PD 4
|
|
#define PE 5
|
|
#define PF 6
|
|
#define PG 7
|
|
#define PH 8
|
|
#define PJ 10
|
|
#define PK 11
|
|
#define PL 12
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
// look at this again when considering implementing serial
|
|
//#include "WCharacter.h"
|
|
//#include "WString.h"
|
|
//#include "HardwareSerial.h"
|
|
|
|
uint16_t makeWord(uint16_t w);
|
|
uint16_t makeWord(byte h, byte l);
|
|
|
|
#define word(...) makeWord(__VA_ARGS__)
|
|
|
|
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout = 1000000L);
|
|
|
|
void tone(uint8_t _pin, unsigned int frequency, unsigned long duration = 0);
|
|
void noTone(uint8_t _pin);
|
|
|
|
// WMath prototypes
|
|
long random(long);
|
|
long random(long, long);
|
|
void randomSeed(unsigned int);
|
|
long map(long, long, long, long, long);
|
|
|
|
#endif
|
|
|
|
#include "pins_arduino.h"
|
|
|
|
#include "dev/arduino/arduino-compat.h"
|
|
|
|
#endif
|