Skip to content

Commit c143199

Browse files
committed
fxed ssd1306::write and sh1106::write
1 parent 89bff92 commit c143199

File tree

8 files changed

+32
-24
lines changed

8 files changed

+32
-24
lines changed

src/modm/driver/display/ili9341_interface_spi.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class Ili9341InterfaceSpi : public ili9341_register, public modm::SpiDevice< Spi
3232
this->attachConfigurationHandler([]() {
3333
SpiMaster::setDataMode(SpiMaster::DataMode::Mode0);
3434
SpiMaster::setDataOrder(SpiMaster::DataOrder::MsbFirst);
35+
SpiMaster::setDataSize(SpiMaster::DataSize::Bit16);
3536
});
3637
Cs::setOutput(modm::Gpio::High);
3738
Dc::setOutput();
@@ -85,7 +86,7 @@ class Ili9341InterfaceSpi : public ili9341_register, public modm::SpiDevice< Spi
8586
Cs::reset();
8687

8788
Dc::reset();
88-
RF_CALL(SpiMaster::transfer(uint8_t(command)));
89+
RF_CALL(SpiMaster::transfer(uint16_t(command)));
8990
Dc::set();
9091

9192
RF_CALL(SpiMaster::template transfer<T>(data, nullptr, length));
@@ -104,7 +105,7 @@ class Ili9341InterfaceSpi : public ili9341_register, public modm::SpiDevice< Spi
104105
RF_WAIT_UNTIL(this->acquireMaster());
105106
Cs::reset();
106107

107-
RF_CALL(SpiMaster::template transfer<16>(pixel.getValue()));
108+
RF_CALL(SpiMaster::transfer(pixel.getValue()));
108109

109110
if (this->releaseMaster())
110111
Cs::set();

src/modm/driver/display/sh1106.hpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,19 @@ class Sh1106 : public Ssd1306<I2cMaster, H>
3939

4040
Sh1106(uint8_t address = 0x3C) : Ssd1306<I2cMaster, H>(address) {}
4141

42+
// TODO Abstract these write(...) cause is common to all I2c Displays!
4243
// Write BufferInterface
4344
modm::ResumableResult<bool>
4445
write(BufferInterface<Monochrome> &buffer, Point placement = {0, 0}) {
4546
RF_BEGIN();
46-
RF_END_RETURN_CALL(writeImage(ImageAccessor<Monochrome, modm::accessor::Ram>(&buffer), placement));
47+
RF_END_RETURN_CALL(writeImage(ImageAccessor<Monochrome, modm::accessor::Ram>(&buffer, placement)));
4748
}
4849

4950
// Write Flash Image
50-
modm::ResumableResult<void>
51+
modm::ResumableResult<bool>
5152
write(const uint8_t *addr, Point placement = {0, 0}) {
5253
RF_BEGIN();
53-
RF_END_RETURN_CALL(writeImage(
54-
ImageAccessor<Monochrome, modm::accessor::Flash>(addr),
55-
placement)
56-
);
54+
RF_END_RETURN_CALL(writeImage(ImageAccessor<Monochrome, modm::accessor::Flash>(addr, placement)));
5755
}
5856

5957
protected:
@@ -67,7 +65,7 @@ class Sh1106 : public Ssd1306<I2cMaster, H>
6765
// Caution: placement.y rounds to multiples of 8
6866
template<template<typename> class Accessor>
6967
modm::ResumableResult<bool>
70-
writeImage(ImageAccessor<Monochrome, Accessor> accessor, Point placement = {0, 0});
68+
writeImage(ImageAccessor<Monochrome, Accessor> accessor);
7169

7270
// Static variables for Resumable Functions
7371
size_t yd; // vertical index in display (page)

src/modm/driver/display/sh1106_impl.hpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,9 @@ modm::Sh1106<I2cMaster, H>::updateClipping()
4646
template<class I2cMaster, uint16_t H>
4747
template<template<typename> class Accessor>
4848
modm::ResumableResult<bool>
49-
modm::Sh1106<I2cMaster, H>::writeImage(ImageAccessor<Monochrome, Accessor> accessor, Point placement) {
49+
modm::Sh1106<I2cMaster, H>::writeImage(ImageAccessor<Monochrome, Accessor> accessor) {
5050
RF_BEGIN();
51-
52-
// IMPLEMENT method with getIntersection()
53-
this->clipping = Rectangle(placement, accessor.getSize());
51+
this->clipping = this->getIntersection(accessor.getSection());
5452

5553
if (this->pointInCanvas(this->clipping.bottomRight - Point(1, 1)))
5654
{

src/modm/driver/display/ssd1306.hpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -161,22 +161,20 @@ class Ssd1306 : public ssd1306,
161161
return writeCommands(1);
162162
}
163163

164+
// TODO Abstract these write(...) cause is common to all I2c Displays!
164165
// Write BufferInterface
165166
// Caution: placement.y rounds to multiples of 8
166167
modm::ResumableResult<bool>
167168
write(BufferInterface<Monochrome> &buffer, Point placement = {0, 0}) {
168169
RF_BEGIN();
169-
RF_END_RETURN_CALL(writeImage(ImageAccessor<Monochrome, modm::accessor::Ram>(&buffer), placement));
170+
RF_END_RETURN_CALL(writeImage(ImageAccessor<Monochrome, modm::accessor::Ram>(&buffer, placement)));
170171
}
171172

172173
// Write Flash Image
173-
modm::ResumableResult<void>
174+
modm::ResumableResult<bool>
174175
write(const uint8_t *addr, Point placement = {0, 0}) {
175176
RF_BEGIN();
176-
RF_END_RETURN_CALL(writeImage(
177-
ImageAccessor<Monochrome, modm::accessor::Flash>(addr),
178-
placement)
179-
);
177+
RF_END_RETURN_CALL(writeImage(ImageAccessor<Monochrome, modm::accessor::Flash>(addr, placement)));
180178
}
181179

182180
// Clear whole screen with color
@@ -190,7 +188,7 @@ class Ssd1306 : public ssd1306,
190188
// Write monochrome Image
191189
template<template<typename> class Accessor>
192190
modm::ResumableResult<bool>
193-
writeImage(ImageAccessor<Monochrome, Accessor> accessor, Point placement = {0, 0});
191+
writeImage(ImageAccessor<Monochrome, Accessor> accessor);
194192

195193
modm::ResumableResult<bool>
196194
writeCommands(std::size_t length);

src/modm/driver/display/ssd1306_impl.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,10 @@ modm::Ssd1306<I2cMaster, H>::updateClipping()
168168
template<class I2cMaster, uint16_t H>
169169
template<template<typename> class Accessor>
170170
modm::ResumableResult<bool>
171-
modm::Ssd1306<I2cMaster, H>::writeImage(ImageAccessor<Monochrome, Accessor> accessor, Point placement) {
171+
modm::Ssd1306<I2cMaster, H>::writeImage(ImageAccessor<Monochrome, Accessor> accessor) {
172172
RF_BEGIN();
173173

174-
this->clipping = Rectangle(placement, accessor.getSize());
174+
this->clipping = this->getIntersection(accessor.getSection());
175175

176176
if(!this->pointInCanvas(this->clipping.bottomRight - Point(1, 1))) {
177177
MODM_LOG_ERROR << "buffer exceeds display border in " << __FUNCTION__ << modm::endl;

src/modm/driver/touch/touch2046.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,16 @@ template < class SpiMaster, class Cs, Size R>
124124
class Touch2046 : public touch2046, public modm::SpiDevice< SpiMaster >, protected modm::NestedResumable<3>
125125
{
126126
public:
127+
Touch2046() {
128+
this->attachConfigurationHandler([]() {
129+
SpiMaster::setDataMode(SpiMaster::DataMode::Mode0);
130+
SpiMaster::setDataOrder(SpiMaster::DataOrder::MsbFirst);
131+
SpiMaster::setDataSize(SpiMaster::DataSize::Bit16);
132+
});
133+
134+
Cs::setOutput(true);
135+
}
136+
127137
using Orientation = modm::graphic::Orientation;
128138

129139
/**

src/modm/driver/touch/touch2046_impl.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ modm::Touch2046<SpiMaster, Cs, R>::updateZ()
2525
RF_WAIT_UNTIL(this->acquireMaster());
2626
Cs::reset();
2727

28-
RF_CALL(SpiMaster::template transfer<16>(&bufferWrite[0], &bufferRead[0], 3));
28+
RF_CALL(SpiMaster::transfer(&bufferWrite[0], &bufferRead[0], 3));
2929

3030
z = 4095 + (bufferRead[1] >> 3) - (bufferRead[2] >> 3);
3131

@@ -44,7 +44,7 @@ modm::Touch2046<SpiMaster, Cs, R>::updateXY()
4444
RF_WAIT_UNTIL(this->acquireMaster());
4545
Cs::reset();
4646

47-
RF_CALL(SpiMaster::template transfer<16>(&bufferWrite[2], &bufferRead[0], bufferRead.size()));
47+
RF_CALL(SpiMaster::transfer(&bufferWrite[2], &bufferRead[0], bufferRead.size()));
4848

4949
if (this->releaseMaster())
5050
Cs::set();

src/modm/ui/color/gray.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ class GrayD : public modm::ScalingUnsigned<D>
4444
static_assert(D > 0, "Positive number of digits required for grayscale / colorchannel type.");
4545
public:
4646
using ValueType = ScalingUnsigned<D>::ValueType;
47+
48+
// using PalletType = uint32_t; // Best performance on STM32
4749
using PalletType = uint16_t;
50+
// using PalletType = uint8_t; // Ssd1306, Sh1106
4851
// using PalletType = P; // TODO PalletType from template argument
4952

5053
using ScalingUnsigned<D>::ScalingUnsigned;

0 commit comments

Comments
 (0)