增加遥控器读取
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
#include "Basic.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief map 映射函数,把x的值,映射到out_min到out_max的范围内
|
||||
* @param x 需要映射的值
|
||||
@@ -11,11 +13,16 @@
|
||||
M_d64 map(M_d64 x, M_d64 in_min, M_d64 in_max, M_d64 out_min, M_d64 out_max) {
|
||||
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
|
||||
}
|
||||
/**
|
||||
* @brief Sleep_ms 不占用线程的延时函数
|
||||
* @param msec 需要延时的毫秒数
|
||||
*/
|
||||
void Sleep_ms(M_u16 msec){
|
||||
QTime _Timer = QTime::currentTime().addMSecs(msec);
|
||||
while( QTime::currentTime() < _Timer )
|
||||
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取 32 位数据的第 N 位状态
|
||||
* @param data 32 位数据源(支持 uint32_t 或 int32_t)
|
||||
@@ -37,6 +44,7 @@ bool getBitOf32Data(uint32_t data, int bitIndex, bool defaultValue)
|
||||
// - (data & 掩码):按位与操作,若结果非0,说明指定位为1;否则为0
|
||||
return (static_cast<uint32_t>(data) & (1U << bitIndex)) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将 32 位数据的第 N 位设为 1
|
||||
* @param data 原始 32 位数据(按引用修改)
|
||||
@@ -52,6 +60,7 @@ bool setBitOf32Data(uint32_t &data, int bitIndex)
|
||||
data |= (1U << bitIndex); // 置 1
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将 32 位数据的第 N 位清 0
|
||||
* @param data 原始 32 位数据(按引用修改)
|
||||
@@ -67,6 +76,7 @@ bool clearBitOf32Data(uint32_t &data, int bitIndex)
|
||||
data &= ~(1U << bitIndex); // 清 0
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将 32 位数据的第 N 位设为指定状态
|
||||
* @param data 原始 32 位数据(按引用修改)
|
||||
@@ -79,6 +89,7 @@ bool writeBitOf32Data(uint32_t &data, int bitIndex, bool bitValue)
|
||||
return bitValue ? setBitOf32Data(data, bitIndex)
|
||||
: clearBitOf32Data(data, bitIndex);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将 QVariant 按“先转字符串判断小数点”逻辑格式化
|
||||
* @param variant:待转换的 QVariant 数据
|
||||
@@ -122,3 +133,44 @@ QString variantToFormattedString(const QVariant& variant, int decimalDigits) {
|
||||
return originalStr;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过索引提取uint32_t的8位部分
|
||||
* @param data 要提取的32位无符号整数
|
||||
* @param index 索引:0=HH(高8位), 1=HL(次高8位), 2=LH(次低8位), 3=LL(低8位)
|
||||
* @return 对应的8位部分
|
||||
* @throws std::out_of_range 当索引超出0-3范围时
|
||||
*/
|
||||
uint8_t extractUInt32_8BitPart(uint32_t data, uint8_t index) {
|
||||
switch(index) {
|
||||
case 0: // HH - 高8位
|
||||
return (data >> 24) & 0xFF;
|
||||
case 1: // HL - 次高8位
|
||||
return (data >> 16) & 0xFF;
|
||||
case 2: // LH - 次低8位
|
||||
return (data >> 8) & 0xFF;
|
||||
case 3: // LL - 低8位
|
||||
return data & 0xFF;
|
||||
default:
|
||||
return 00;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过索引提取uint32_t的16位部分
|
||||
* @param data 要提取的32位无符号整数
|
||||
* @param index 索引:0=高16位, 1=低16位
|
||||
* @return 对应的16位部分(uint16_t类型)
|
||||
* @throws std::out_of_range 当索引超出0-1范围时
|
||||
*/
|
||||
uint16_t extractUInt32_16BitPart(uint32_t data, int index) {
|
||||
switch(index) {
|
||||
case 0: // 高16位
|
||||
return static_cast<uint16_t>((data >> 16) & 0xFFFF);
|
||||
case 1: // 低16位
|
||||
return static_cast<uint16_t>(data & 0xFFFF);
|
||||
default:
|
||||
return 00;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,11 +5,80 @@
|
||||
#include <QTime>
|
||||
|
||||
|
||||
double map(double x, double in_min, double in_max, double out_min, double out_max);
|
||||
void Sleep_ms(uint16_t msec);
|
||||
/**
|
||||
* @brief map 映射函数,把x的值,映射到out_min到out_max的范围内
|
||||
* @param x 需要映射的值
|
||||
* @param in_min x有可能的最小值
|
||||
* @param in_max x有可能的最大值
|
||||
* @param out_min 输出的最小值
|
||||
* @param out_max 输出的最大值
|
||||
* @return 映射结果
|
||||
*/
|
||||
M_d64 map(M_d64 x, M_d64 in_min, M_d64 in_max, M_d64 out_min, M_d64 out_max);
|
||||
|
||||
/**
|
||||
* @brief Sleep_ms 不占用线程的延时函数
|
||||
* @param msec 需要延时的毫秒数
|
||||
*/
|
||||
void Sleep_ms(M_u16 msec);
|
||||
|
||||
/**
|
||||
* @brief 获取 32 位数据的第 N 位状态
|
||||
* @param data 32 位数据源(支持 uint32_t 或 int32_t)
|
||||
* @param bitIndex 位索引(0 = 最低位/第1位,31 = 最高位/第32位)
|
||||
* @param defaultValue 索引越界时的默认返回值(默认 false)
|
||||
* @return bool 位状态:true = 1,false = 0
|
||||
*/
|
||||
bool getBitOf32Data(uint32_t data, int bitIndex, bool defaultValue = false);
|
||||
|
||||
/**
|
||||
* @brief 将 32 位数据的第 N 位设为 1
|
||||
* @param data 原始 32 位数据(按引用修改)
|
||||
* @param bitIndex 位索引(0 = 最低位,31 = 最高位)
|
||||
* @return bool 成功返回 true;若索引越界返回 false,且不修改 data
|
||||
*/
|
||||
bool setBitOf32Data(uint32_t &data, int bitIndex);
|
||||
|
||||
/**
|
||||
* @brief 将 32 位数据的第 N 位清 0
|
||||
* @param data 原始 32 位数据(按引用修改)
|
||||
* @param bitIndex 位索引(0 = 最低位,31 = 最高位)
|
||||
* @return bool 成功返回 true;若索引越界返回 false,且不修改 data
|
||||
*/
|
||||
bool clearBitOf32Data(uint32_t &data, int bitIndex);
|
||||
|
||||
/**
|
||||
* @brief 将 32 位数据的第 N 位设为指定状态
|
||||
* @param data 原始 32 位数据(按引用修改)
|
||||
* @param bitIndex 位索引(0 = 最低位,31 = 最高位)
|
||||
* @param bitValue 要写入的位值:true = 1,false = 0
|
||||
* @return bool 成功返回 true;若索引越界返回 false,且不修改 data
|
||||
*/
|
||||
bool writeBitOf32Data(uint32_t &data, int bitIndex, bool bitValue);
|
||||
QString variantToFormattedString(const QVariant& variant, int decimalDigits =2);
|
||||
|
||||
/**
|
||||
* @brief 将 QVariant 按“先转字符串判断小数点”逻辑格式化
|
||||
* @param variant:待转换的 QVariant 数据
|
||||
* @param decimalDigits:需要保留的小数位数(默认2位,可自定义)
|
||||
* @return 格式化后的字符串
|
||||
*/
|
||||
QString variantToFormattedString(const QVariant& variant, int decimalDigits);
|
||||
|
||||
/**
|
||||
* 通过索引提取uint32_t的8位部分
|
||||
* @param data 要提取的32位无符号整数
|
||||
* @param index 索引:0=HH(高8位), 1=HL(次高8位), 2=LH(次低8位), 3=LL(低8位)
|
||||
* @return 对应的8位部分
|
||||
* @throws std::out_of_range 当索引超出0-3范围时
|
||||
*/
|
||||
uint8_t extractUInt32_8BitPart(uint32_t data, uint8_t index);
|
||||
|
||||
/**
|
||||
* 通过索引提取uint32_t的16位部分
|
||||
* @param data 要提取的32位无符号整数
|
||||
* @param index 索引:0=高16位, 1=低16位
|
||||
* @return 对应的16位部分(uint16_t类型)
|
||||
* @throws std::out_of_range 当索引超出0-1范围时
|
||||
*/
|
||||
uint16_t extractUInt32_16BitPart(uint32_t data, int index);
|
||||
#endif // BASIC_H
|
||||
|
||||
@@ -67,3 +67,17 @@ QString BitMaps::DialBut(bool B1,bool B2,bool Dir){
|
||||
QString BitMaps::DiBut(bool B1){
|
||||
return ChoiceBit2(B1,":/Icos/Icos/LED1_Grey.png",":/Icos/Icos/LED1_Green.png");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief BitMaps::DiBut 普通按钮的显示
|
||||
* @param B1 按钮是否激活
|
||||
* @return 如果被按下则返回,没有返回为空字符串
|
||||
*/
|
||||
QString BitMaps::SwitchBut(bool Start,bool Stop){
|
||||
if(Start && !Stop)
|
||||
return ":/Icos/Icos/LED1_Green.png";
|
||||
else if(!Start && Stop)
|
||||
return ":/Icos/Icos/LED1_Rad.png";
|
||||
else
|
||||
return ":/Icos/Icos/LED1_Grey.png";
|
||||
}
|
||||
|
||||
@@ -29,6 +29,13 @@ public:
|
||||
* @return 如果被按下则返回,没有返回为空字符串
|
||||
*/
|
||||
QString DiBut(bool B1);
|
||||
|
||||
/**
|
||||
* @brief BitMaps::DiBut 普通按钮的显示
|
||||
* @param B1 按钮是否激活
|
||||
* @return 如果被按下则返回,没有返回为空字符串
|
||||
*/
|
||||
QString SwitchBut(bool Start,bool Stop);
|
||||
signals:
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user