输入口增加按下时间统计,利于长按按钮的功能统计
This commit is contained in:
parent
da95bed688
commit
586b14d99c
|
@ -44,10 +44,10 @@ void Button::Set(Pin key, Pin led, bool ledInvert, Pin relay, bool relayInvert)
|
|||
}
|
||||
}
|
||||
|
||||
void Button::OnPress(Pin pin, bool down, void* param)
|
||||
void Button::OnPress(InputPort* port, bool down, void* param)
|
||||
{
|
||||
Button* btn = (Button*)param;
|
||||
if(btn) btn->OnPress(pin, down);
|
||||
if(btn) btn->OnPress(port->_Pin, down);
|
||||
}
|
||||
|
||||
void Button::OnPress(Pin pin, bool down)
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
class Button : public Object, public ByteDataPort
|
||||
{
|
||||
private:
|
||||
static void OnPress(Pin pin, bool down, void* param);
|
||||
static void OnPress(InputPort* port, bool down, void* param);
|
||||
void OnPress(Pin pin, bool down);
|
||||
|
||||
EventHandler _Handler;
|
||||
|
|
|
@ -70,10 +70,10 @@ void Button_GrayLevel::RenewGrayLevel()
|
|||
}
|
||||
}
|
||||
|
||||
void Button_GrayLevel::OnPress(Pin pin, bool down, void* param)
|
||||
void Button_GrayLevel::OnPress(InputPort* port, bool down, void* param)
|
||||
{
|
||||
Button_GrayLevel* btn = (Button_GrayLevel*)param;
|
||||
if(btn) btn->OnPress(pin, down);
|
||||
if(btn) btn->OnPress(port->_Pin, down);
|
||||
}
|
||||
|
||||
void Button_GrayLevel::OnPress(Pin pin, bool down)
|
||||
|
|
|
@ -22,7 +22,7 @@ struct ButtonPin
|
|||
class Button_GrayLevel : public ByteDataPort
|
||||
{
|
||||
private:
|
||||
static void OnPress(Pin pin, bool down, void* param);
|
||||
static void OnPress(InputPort* port, bool down, void* param);
|
||||
void OnPress(Pin pin, bool down);
|
||||
|
||||
EventHandler _Handler;
|
||||
|
|
|
@ -61,10 +61,10 @@ Button_magnetic::~Button_magnetic()
|
|||
}
|
||||
|
||||
|
||||
void Button_magnetic::OnPress(Pin pin, bool down, void* param)
|
||||
void Button_magnetic::OnPress(InputPort* port, bool down, void* param)
|
||||
{
|
||||
Button_magnetic * btn = (Button_magnetic*)param;
|
||||
if(btn) btn->OnPress(pin, down);
|
||||
if(btn) btn->OnPress(port->_Pin, down);
|
||||
}
|
||||
|
||||
void Button_magnetic::OnPress(Pin pin, bool down)
|
||||
|
|
|
@ -17,7 +17,7 @@ class Button_magnetic
|
|||
private:
|
||||
void Init();
|
||||
|
||||
static void OnPress(Pin pin, bool down, void* param);
|
||||
static void OnPress(InputPort* port, bool down, void* param);
|
||||
void OnPress(Pin pin, bool down);
|
||||
|
||||
EventHandler _Handler;
|
||||
|
|
|
@ -53,10 +53,10 @@ Sensor::~Sensor()
|
|||
Mag = NULL;
|
||||
}
|
||||
|
||||
void Sensor::OnPress(Pin pin, bool down, void* param)
|
||||
void Sensor::OnPress(InputPort* port, bool down, void* param)
|
||||
{
|
||||
Sensor* btn = (Sensor*)param;
|
||||
if(btn) btn->OnPress(pin, down);
|
||||
if(btn) btn->OnPress(port->_Pin, down);
|
||||
}
|
||||
|
||||
void Sensor::OnPress(Pin pin, bool down)
|
||||
|
|
|
@ -41,7 +41,7 @@ public:
|
|||
private:
|
||||
void Init();
|
||||
|
||||
static void OnPress(Pin pin, bool down, void* param);
|
||||
static void OnPress(InputPort* port, bool down, void* param);
|
||||
void OnPress(Pin pin, bool down);
|
||||
|
||||
EventHandler _Handler;
|
||||
|
|
|
@ -995,7 +995,7 @@ void NRF24L01::AddError()
|
|||
}
|
||||
}
|
||||
|
||||
void NRF24L01::OnIRQ(Pin pin, bool down, void* param)
|
||||
void NRF24L01::OnIRQ(InputPort* port, bool down, void* param)
|
||||
{
|
||||
// 必须在down=true才能读取到正确的状态
|
||||
if(!down) return;
|
||||
|
|
|
@ -616,7 +616,7 @@ void W5500::Register(byte Index, HardSocket* handler)
|
|||
}
|
||||
|
||||
// irq 中断处理部分
|
||||
void W5500::OnIRQ(Pin pin, bool down, void* param)
|
||||
void W5500::OnIRQ(InputPort* port, bool down, void* param)
|
||||
{
|
||||
if(!down) return; // 低电平中断
|
||||
|
||||
|
|
|
@ -82,7 +82,7 @@ public:
|
|||
|
||||
private:
|
||||
// 中断脚回调
|
||||
static void OnIRQ(Pin pin, bool down, void* param);
|
||||
static void OnIRQ(InputPort* port, bool down, void* param);
|
||||
static void IRQTask(void* param);
|
||||
void OnIRQ();
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ private:
|
|||
static void ReceiveTask(void* param);
|
||||
uint _tidOpen;
|
||||
uint _tidRecv;
|
||||
static void OnIRQ(Pin pin, bool down, void* param);
|
||||
static void OnIRQ(InputPort* port, bool down, void* param);
|
||||
void OnIRQ();
|
||||
|
||||
int _Lock; // 收发数据锁,确保同时只有一个对象使用
|
||||
|
|
8
Port.cpp
8
Port.cpp
|
@ -510,15 +510,17 @@ void InputPort::OnPress(bool down)
|
|||
if(down)
|
||||
{
|
||||
if((Mode & Rising) == 0) return;
|
||||
_PressStart = Sys.Ms();
|
||||
}
|
||||
else
|
||||
{
|
||||
if((Mode & Falling) == 0) return;
|
||||
PressTime = Sys.Ms() - _PressStart;
|
||||
}
|
||||
|
||||
if(HardEvent)
|
||||
{
|
||||
if(Handler) Handler(_Pin, down, Param);
|
||||
if(Handler) Handler(this, down, Param);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -538,8 +540,8 @@ void InputPort::InputTask(void* param)
|
|||
{
|
||||
port->_Value = 0;
|
||||
v &= port->Mode;
|
||||
if(v & Rising) port->Handler(port->_Pin, true, port->Param);
|
||||
if(v & Falling) port->Handler(port->_Pin, false, port->Param);
|
||||
if(v & Rising) port->Handler(port, true, port->Param);
|
||||
if(v & Falling) port->Handler(port, false, port->Param);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
19
Port.h
19
Port.h
|
@ -82,14 +82,19 @@ public:
|
|||
|
||||
// 整体写入所有包含的引脚
|
||||
void Write(bool value);
|
||||
void WriteGroup(ushort value); // 整组写入
|
||||
void Up(uint ms); // 拉高一段时间后拉低
|
||||
void Blink(uint times, uint ms); // 闪烁多次
|
||||
// 整组写入
|
||||
void WriteGroup(ushort value);
|
||||
// 拉高一段时间后拉低
|
||||
void Up(uint ms);
|
||||
// 闪烁多次
|
||||
void Blink(uint times, uint ms);
|
||||
|
||||
ushort ReadGroup(); // 整组读取
|
||||
// 整组读取
|
||||
ushort ReadGroup();
|
||||
// 读取指定索引引脚。索引按照从小到大,0xFF表示任意脚为true则返回true
|
||||
bool Read(byte index);
|
||||
bool Read(); // Read() ReadReal() 的区别在 前者读输出 一个读输入 在开漏输出的时候有很大区别
|
||||
// Read/ReadInput 的区别在于,前者读输出后者,读输入,在开漏输出的时候有很大区别
|
||||
bool Read();
|
||||
bool ReadInput();
|
||||
|
||||
static bool Read(Pin pin);
|
||||
|
@ -150,7 +155,7 @@ public:
|
|||
}Trigger;
|
||||
|
||||
// 读取委托
|
||||
typedef void (*IOReadHandler)(Pin pin, bool down, void* param);
|
||||
typedef void (*IOReadHandler)(InputPort* port, bool down, void* param);
|
||||
|
||||
ushort ShakeTime; // 抖动时间。毫秒
|
||||
PuPd Pull; // 上拉下拉电阻
|
||||
|
@ -159,6 +164,7 @@ public:
|
|||
bool Invert; // 是否倒置输入输出
|
||||
|
||||
bool HardEvent; // 是否使用硬件事件。默认false
|
||||
ushort PressTime; // 长按时间
|
||||
|
||||
InputPort() : Port() { Init(); }
|
||||
InputPort(Pin pin, bool floating = true, PuPd pull = UP) : Port()
|
||||
|
@ -194,6 +200,7 @@ private:
|
|||
|
||||
byte _Value;
|
||||
uint _taskInput; // 输入任务
|
||||
ulong _PressStart; // 开始按下时间
|
||||
static void InputTask(void* param);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue