Skip to content

Commit

Permalink
+ based upon Print interface
Browse files Browse the repository at this point in the history
+ less variables (more local)
+ some comments
  • Loading branch information
RobTillaart committed Aug 29, 2013
1 parent b99f202 commit 9593136
Showing 2 changed files with 30 additions and 27 deletions.
36 changes: 22 additions & 14 deletions libraries/FastShiftOut/FastShiftOut.cpp
Original file line number Diff line number Diff line change
@@ -1,38 +1,42 @@
//
// FILE: FastShiftOut.cpp
// AUTHOR: Rob Tillaart
// VERSION: 0.1
// PURPOSE:
// VERSION: 0.1.03
// PURPOSE: shiftout that implements the Print interface
// URL:
//
// Released to the public domain
//

#include "FastShiftOut.h"

//
// Constructor
// prepares the digitalWrite()
FastShiftOut::FastShiftOut(uint8_t datapin, uint8_t clockpin, uint8_t bitOrder)
{
_datapin = datapin;
_clockpin = clockpin;
_bitorder = bitOrder;
_value = -1;
pinMode(_datapin, OUTPUT);
pinMode(_clockpin, OUTPUT);
pinMode(datapin, OUTPUT);
pinMode(clockpin, OUTPUT);

_datatimer = digitalPinToTimer(_datapin);
_databit = digitalPinToBitMask(_datapin);
_dataport = digitalPinToPort(_datapin);
// if (_datatimer != NOT_ON_TIMER) turnOffPWM(_datatimer);
// uint8_t _datatimer = digitalPinToTimer(datapin);
// if (_datatimer != NOT_ON_TIMER) turnOffPWM(_datatimer); TODO
uint8_t _dataport = digitalPinToPort(datapin);
_dataout = portOutputRegister(_dataport);
_databit = digitalPinToBitMask(datapin);

_clocktimer = digitalPinToTimer(_clockpin);
_clockbit = digitalPinToBitMask(_clockpin);
_clockport = digitalPinToPort(_clockpin);
// uint8_t _clocktimer = digitalPinToTimer(clockpin);
// if (_clocktimer != NOT_ON_TIMER) turnOffPWM(_clocktimer);
uint8_t _clockport = digitalPinToPort(clockpin);
_clockout = portOutputRegister(_clockport);
_clockbit = digitalPinToBitMask(clockpin);
}

void FastShiftOut::write(uint8_t data)
//
// write() must implement the virtual write of Print class
//
size_t FastShiftOut::write(uint8_t data)
{
_value = data;
for (uint8_t i = 0; i < 8; i++)
@@ -49,8 +53,12 @@ void FastShiftOut::write(uint8_t data)
*_clockout &= ~_clockbit;
SREG = oldSREG;
}
return 1;
}

//
// reads back the last value written.
//
int FastShiftOut::read()
{
return _value;
21 changes: 8 additions & 13 deletions libraries/FastShiftOut/FastShiftOut.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
//
// FILE: FastShiftOut.h
// AUTHOR: Rob Tillaart
// VERSION: 0.1
// PURPOSE:
// VERSION: 0.1.03
// PURPOSE: shiftout that implements the Print interface
// URL:
//
// Released to the public domain
@@ -17,31 +17,26 @@
#include "WProgram.h"
#endif

#define FASTSHIFTOUT_LIB_VERSION "0.1.00"
#define FASTSHIFTOUT_LIB_VERSION "0.1.03"

class FastShiftOut
#include "Print.h"

class FastShiftOut : public Print
{
public:
FastShiftOut(uint8_t, uint8_t, uint8_t);
void write(uint8_t);
size_t write(uint8_t);
int read(void);

private:
uint8_t _datapin;
uint8_t _clockpin;
uint8_t _bitorder;
int _value;

uint8_t _datatimer;
uint8_t _databit;
uint8_t _dataport;
volatile uint8_t *_dataout;

uint8_t _clocktimer;

uint8_t _clockbit;
uint8_t _clockport;
volatile uint8_t *_clockout;

};

#endif

0 comments on commit 9593136

Please sign in to comment.