Skip to content

Commit 32ecea1

Browse files
authored
Merge pull request #15 from m5stack/develop
0.0.7
2 parents 67f0fe2 + f5a3dc4 commit 32ecea1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+4278
-685
lines changed

library.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"type": "git",
1111
"url": "https://github.com/m5stack/M5GFX.git"
1212
},
13-
"version": "0.0.6",
13+
"version": "0.0.7",
1414
"framework": "arduino",
1515
"platforms": "espressif32"
1616
}

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=M5GFX
2-
version=0.0.6
2+
version=0.0.7
33
author=M5Stack
44
maintainer=M5Stack
55
sentence=Library for M5Stack All Display

src/M5GFX.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,12 @@ namespace m5gfx
130130

131131
if (_cfg.pin_int >= 0)
132132
{
133-
lgfx::pinMode(_cfg.pin_int, lgfx::pin_mode_t::input_pullup);
133+
lgfx::pinMode(_cfg.pin_int, lgfx::pin_mode_t::input);
134134
}
135135
_inited = lgfx::i2c::init(_cfg.i2c_port, _cfg.pin_sda, _cfg.pin_scl).has_value();
136+
static constexpr uint8_t irq_modechange_cmd[] = { 0x5a, 0x5a }; /// (INT mode change)
137+
lgfx::i2c::transactionWrite(_cfg.i2c_port, _cfg.i2c_addr, irq_modechange_cmd, 2);
138+
136139
return _inited;
137140
}
138141

@@ -141,10 +144,10 @@ namespace m5gfx
141144
if (tp) tp->size = 0;
142145
if (!_inited || count == 0) return 0;
143146
if (count > 2) count = 2; // max 2 point.
144-
// if (_cfg.pin_int >= 0)
145-
// {
146-
// Serial.printf("tp:%d \r\n", gpio_in(_cfg.pin_int));
147-
// }
147+
if (_cfg.pin_int >= 0)
148+
{
149+
if (gpio_in(_cfg.pin_int)) return 0;
150+
}
148151

149152
std::size_t len = 3 + count * 6;
150153
std::uint8_t buf[2][len];

src/M5GFX.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ namespace m5gfx
144144
, board_M5Paper
145145
, board_M5Tough
146146
, board_M5ATOM
147+
, board_M5Camera
148+
, board_M5TimerCam
147149
};
148150
}
149151
using board_t = boards::board_t;

src/lgfx/v1/Bus.hpp

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -42,53 +42,53 @@ namespace lgfx
4242

4343
virtual bus_type_t busType(void) const = 0;
4444

45-
/// ペリフェラルの準備を行う。
45+
/// ペリフェラルの準備を行う。;
4646
virtual bool init(void) = 0;
4747

48-
/// ペリフェラルを解放する。
48+
/// ペリフェラルを解放する。;
4949
virtual void release(void) = 0;
5050

51-
/// 通信トランザクションを開始する。(ペリフェラルを占有する)
51+
/// 通信トランザクションを開始する。(ペリフェラルを占有する);
5252
virtual void beginTransaction(void) = 0;
5353

54-
/// 通信トランザクションを終了する。(ペリフェラルの占有を終了する)
54+
/// 通信トランザクションを終了する。(ペリフェラルの占有を終了する);
5555
virtual void endTransaction(void) = 0;
5656

57-
/// 通信が完了するのを待機する
57+
/// 通信が完了するのを待機する;
5858
virtual void wait(void) = 0;
5959

60-
/// 現在通信中か否かを返す。true:通信中
60+
/// 現在通信中か否かを返す。true:通信中;
6161
virtual bool busy(void) const = 0;
6262

63-
/// DMA転送に必要なペリフェラルの準備を行う。
63+
/// DMA転送に必要なペリフェラルの準備を行う。;
6464
virtual void initDMA(void) = 0;
6565

66-
/// DMA転送キューを追加する。
66+
/// DMA転送キューを追加する。;
6767
virtual void addDMAQueue(const uint8_t* data, uint32_t length) = 0; // { writeBytes(data, length, true); }
6868

69-
/// 蓄積したDMA転送キューの送信を実行する。
69+
/// 蓄積したDMA転送キューの送信を実行する。;
7070
virtual void execDMAQueue(void) = 0;
7171

72-
/// DMA用のバッファを取得する。バスの実装によっては内部的には2個のバッファを交互に使用する。
73-
/// 繰返し実行した場合は前回と異なるポインタを得るが、前々回と同じになる場合がある点に注意すること。
72+
/// DMA用のバッファを取得する。バスの実装によっては内部的には2個のバッファを交互に使用する。;
73+
/// 繰返し実行した場合は前回と異なるポインタを得るが、前々回と同じになる場合がある点に注意すること。;
7474
virtual uint8_t* getDMABuffer(uint32_t length) = 0;
7575

76-
/// 未送信のデータがあれば送信を開始する。
76+
/// 未送信のデータがあれば送信を開始する。;
7777
virtual void flush(void) = 0;
7878

79-
/// D/Cピンをlowにしてデータを送信する。
79+
/// D/Cピンをlowにしてデータを送信する。;
8080
virtual bool writeCommand(uint32_t data, uint_fast8_t bit_length) = 0;
8181

82-
/// D/Cピンをhighにしてデータを送信する。
82+
/// D/Cピンをhighにしてデータを送信する。;
8383
virtual void writeData(uint32_t data, uint_fast8_t bit_length) = 0;
8484

85-
/// D/Cピンをhighにして指定回数繰り返しデータを送信する。
85+
/// D/Cピンをhighにして指定回数繰り返しデータを送信する。;
8686
virtual void writeDataRepeat(uint32_t data, uint_fast8_t bit_length, uint32_t count) = 0;
8787

88-
/// pixelcopy構造体を利用してピクセルデータを送信する。
88+
/// pixelcopy構造体を利用してピクセルデータを送信する。;
8989
virtual void writePixels(pixelcopy_t* pc, uint32_t length) = 0;
9090

91-
/// 引数のバイト列を送信する。
91+
/// 引数のバイト列を送信する。;
9292
virtual void writeBytes(const uint8_t* data, uint32_t length, bool dc, bool use_dma) = 0;
9393

9494
virtual void beginRead(void) = 0;

src/lgfx/v1/LGFXBase.cpp

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ Original Source:
3131
#include <cmath>
3232
#include <list>
3333

34+
#ifdef min
35+
#undef min
36+
#endif
37+
#ifdef max
38+
#undef max
39+
#endif
40+
3441
namespace lgfx
3542
{
3643
inline namespace v1
@@ -1095,31 +1102,31 @@ namespace lgfx
10951102
result[5] = dst_y - src_x * result[3] - src_y * result[4];
10961103
}
10971104

1098-
static bool make_invert_affine32(int32_t* __restrict__ result, const float* __restrict__ matrix)
1105+
static bool make_invert_affine32(int32_t* __restrict result, const float* __restrict matrix)
10991106
{
11001107
float det = matrix[0] * matrix[4] - matrix[1] * matrix[3];
11011108
if (det == 0.0f) return false;
11021109
det = (1 << FP_SCALE) / det;
1103-
result[0] = roundf(det * matrix[4]);
1104-
result[1] = roundf(det * -matrix[1]);
1105-
result[2] = roundf(det * (matrix[1] * matrix[5] - matrix[2] * matrix[4]));
1106-
result[3] = roundf(det * -matrix[3]);
1107-
result[4] = roundf(det * matrix[0]);
1108-
result[5] = roundf(det * (matrix[2] * matrix[3] - matrix[0] * matrix[5]));
1110+
result[0] = (int32_t)roundf(det * matrix[4]);
1111+
result[1] = (int32_t)roundf(det * -matrix[1]);
1112+
result[2] = (int32_t)roundf(det * (matrix[1] * matrix[5] - matrix[2] * matrix[4]));
1113+
result[3] = (int32_t)roundf(det * -matrix[3]);
1114+
result[4] = (int32_t)roundf(det * matrix[0]);
1115+
result[5] = (int32_t)roundf(det * (matrix[2] * matrix[3] - matrix[0] * matrix[5]));
11091116
return true;
11101117
}
11111118

11121119
void LGFXBase::push_image_rotate_zoom(float dst_x, float dst_y, float src_x, float src_y, float angle, float zoom_x, float zoom_y, int32_t w, int32_t h, pixelcopy_t* pc)
11131120
{
11141121
float matrix[6];
1115-
make_rotation_matrix(matrix, dst_x + 0.5, dst_y + 0.5, src_x + 0.5, src_y + 0.5, angle, zoom_x, zoom_y);
1122+
make_rotation_matrix(matrix, dst_x + 0.5f, dst_y + 0.5f, src_x + 0.5f, src_y + 0.5f, angle, zoom_x, zoom_y);
11161123
push_image_affine(matrix, w, h, pc);
11171124
}
11181125

11191126
void LGFXBase::push_image_rotate_zoom_aa(float dst_x, float dst_y, float src_x, float src_y, float angle, float zoom_x, float zoom_y, int32_t w, int32_t h, pixelcopy_t* pc)
11201127
{
11211128
float matrix[6];
1122-
make_rotation_matrix(matrix, dst_x + 0.5, dst_y + 0.5, src_x + 0.5, src_y + 0.5, angle, zoom_x, zoom_y);
1129+
make_rotation_matrix(matrix, dst_x + 0.5f, dst_y + 0.5f, src_x + 0.5f, src_y + 0.5f, angle, zoom_x, zoom_y);
11231130
push_image_affine_aa(matrix, w, h, pc);
11241131
}
11251132

@@ -1485,11 +1492,11 @@ namespace lgfx
14851492
p.src_bits = _read_conv.depth & color_depth_t::bit_mask;
14861493
switch (_read_conv.depth)
14871494
{
1488-
case color_depth_t::rgb888_3Byte: p.fp_copy = pixelcopy_t::compare_rgb_fast<bgr888_t>; break;
1489-
case color_depth_t::rgb666_3Byte: p.fp_copy = pixelcopy_t::compare_rgb_fast<bgr666_t>; break;
1490-
case color_depth_t::rgb565_2Byte: p.fp_copy = pixelcopy_t::compare_rgb_fast<swap565_t>; break;
1491-
case color_depth_t::rgb332_1Byte: p.fp_copy = pixelcopy_t::compare_rgb_fast<rgb332_t>; break;
1492-
default: p.fp_copy = pixelcopy_t::compare_bit_fast;
1495+
case color_depth_t::rgb888_3Byte: p.fp_copy = pixelcopy_t::compare_rgb_affine<bgr888_t>; break;
1496+
case color_depth_t::rgb666_3Byte: p.fp_copy = pixelcopy_t::compare_rgb_affine<bgr666_t>; break;
1497+
case color_depth_t::rgb565_2Byte: p.fp_copy = pixelcopy_t::compare_rgb_affine<swap565_t>; break;
1498+
case color_depth_t::rgb332_1Byte: p.fp_copy = pixelcopy_t::compare_rgb_affine<rgb332_t>; break;
1499+
default: p.fp_copy = pixelcopy_t::compare_bit_affine;
14931500
p.src_mask = (1 << p.src_bits) - 1;
14941501
p.transp &= p.src_mask;
14951502
break;
@@ -1529,6 +1536,8 @@ namespace lgfx
15291536
it = points.begin();
15301537

15311538
bufY[0] = it->y;
1539+
p.src_x32_add = 1 << FP_SCALE;
1540+
p.src_y32_add = 0;
15321541
_panel->readRect(cl, it->y, w, 1, linebufs[0], &p);
15331542
}
15341543
else
@@ -1569,6 +1578,8 @@ namespace lgfx
15691578
if (bidx == 3) {
15701579
for (bidx = 0; bidx < 2 && (abs(bufY[bidx] - ly) <= 1); ++bidx);
15711580
bufY[bidx] = newy;
1581+
p.src_x32_add = 1 << FP_SCALE;
1582+
p.src_y32_add = 0;
15721583
_panel->readRect(cl, newy, w, 1, linebufs[bidx], &p);
15731584
}
15741585
auto linebuf = &linebufs[bidx][- cl];
@@ -1610,10 +1621,10 @@ namespace lgfx
16101621

16111622
static char* floatToStr(double number, char* buf, size_t /*buflen*/, uint8_t digits)
16121623
{
1613-
if (std::isnan(number)) { return strcpy(buf, "nan"); }
1614-
if (std::isinf(number)) { return strcpy(buf, "inf"); }
1615-
if (number > 4294967040.0) { return strcpy(buf, "ovf"); } // constant determined empirically
1616-
if (number <-4294967040.0) { return strcpy(buf, "ovf"); } // constant determined empirically
1624+
if (std::isnan(number)) { return (char*)memcpy(buf, "nan\0", 4); }
1625+
if (std::isinf(number)) { return (char*)memcpy(buf, "inf\0", 4); }
1626+
if (number > 4294967040.0) { return (char*)memcpy(buf, "ovf\0", 4); } // constant determined empirically
1627+
if (number <-4294967040.0) { return (char*)memcpy(buf, "ovf\0", 4); } // constant determined empirically
16171628

16181629
char* dst = buf;
16191630
// Handle negative numbers
@@ -1996,7 +2007,7 @@ namespace lgfx
19962007
}
19972008

19982009
#if !defined (ARDUINO)
1999-
size_t LGFXBase::printf(const char * __restrict__ format, ...)
2010+
size_t LGFXBase::printf(const char * __restrict format, ...)
20002011
{
20012012
va_list arg;
20022013
va_start(arg, format);
@@ -2007,7 +2018,7 @@ namespace lgfx
20072018
}
20082019
#endif
20092020

2010-
size_t LGFXBase::vprintf(const char* __restrict__ format, va_list arg)
2021+
size_t LGFXBase::vprintf(const char* __restrict format, va_list arg)
20112022
{
20122023
char loc_buf[64];
20132024
char * temp = loc_buf;
@@ -2967,7 +2978,7 @@ namespace lgfx
29672978
uint_fast8_t panel_offsetrot = panel()->config().offset_rotation;
29682979
uint_fast8_t touch_offsetrot = touch()->config().offset_rotation;
29692980

2970-
// 回転オフセットをキャンセルしてタッチデバイスのデフォルトの向きに合わせる
2981+
// 回転オフセットをキャンセルしてタッチデバイスのデフォルトの向きに合わせる;
29712982
setRotation(( (touch_offsetrot ^ panel_offsetrot) & 4)
29722983
|(-(touch_offsetrot + panel_offsetrot) & 3));
29732984

0 commit comments

Comments
 (0)