Mcucpp
1#include <avr/io.h>2#include <spi.h>3#include <tiny_ostream.h>4#include <format_parser.h>5#include <usart.h>6#include <drivers/Rfm70.h>7
8using namespace Mcucpp;9using namespace Mcucpp::IO;10
11typedef Rfm70<Spi, Pc4, Pc5, Pc0> transceiver;12
13typedef Usart<16, 16> MyUsart;14
15ISR(USART_RXC_vect)16{
17MyUsart::RxHandler();18}
19
20ISR(USART_UDRE_vect)21{
22MyUsart::TxHandler();23}
24
25template<class Src>26class MyStream27{
28public:29void put(char c)30{31if(c == '\n')32Src::Putch('\r');33Src::Putch(c);34}35
36void write(const char *ptr, size_t size)37{38for(size_t i=0; i<size; i++)39put(ptr[i]);40}41};42
43typedef basic_ostream<MyStream<MyUsart> > Output;44Output out;45
46
47uint16_t temp;48
49__attribute__((OS_main))50int main()51{
52MyUsart::Init(19200);53Spi::Init(Spi::Div16);54
55sei();56
57out << "Rfm70 module at AtMega16\n";58transceiver::Init();59transceiver::SetRfChannel(10);60transceiver::SwitchToRxMode();61
62//Transiver2::DumpRegs(out);63
64transceiver::SetRxAddress<0>(0x3456789a, 0x12);65
66while(1)67{68if(transceiver::Recive(&temp))69out % Format("Temp = % C\n") % temp;70delay_ms<100, F_CPU>();71}72}
73