Fixed?
This commit is contained in:
+30
-7
@@ -23,8 +23,16 @@
|
||||
#ifndef BITFIELD_H
|
||||
#define BITFIELD_H
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
// A set of bitfield handling macros
|
||||
#define BF_BIT(n) ( 1<<(n) )
|
||||
|
||||
template <typename T>
|
||||
inline T BF_BIT(uint8_t n)
|
||||
{
|
||||
return T(1) << n;
|
||||
}
|
||||
|
||||
#define BF_BIT_GET(y, mask) ( y & (mask) )
|
||||
#define BF_BIT_SET(y, mask) ( y |= (mask) )
|
||||
#define BF_BIT_CLEAR(y, mask) ( y &= ~(mask) )
|
||||
@@ -33,19 +41,34 @@
|
||||
#define BF_SINGLE_BIT_SET(y, i) BF_BIT_SET(y, BF_BIT(i))
|
||||
|
||||
//! Create a bitmask of length 'len'.
|
||||
#define BF_BITMASK(len) ( BF_BIT(len)-1 )
|
||||
template <typename T>
|
||||
inline T BF_BITMASK(uint8_t len)
|
||||
{
|
||||
return BF_BIT<T>(len) - 1;
|
||||
}
|
||||
|
||||
//! Create a bitfield mask of length 'len' starting at bit 'start'.
|
||||
#define BF_MASK(start, len) ( BF_BITMASK(len)<<(start) )
|
||||
template <typename T>
|
||||
inline T BF_MASK(uint8_t start, uint8_t len)
|
||||
{
|
||||
return BF_BITMASK<T>(len) << start;
|
||||
}
|
||||
|
||||
//! Prepare a bitmask for insertion or combining.
|
||||
#define BF_PREP(x, start, len) ( ((x)&BF_BITMASK(len)) << (start) )
|
||||
template <typename T>
|
||||
inline T BF_PREP(T x, uint8_t start, uint8_t len)
|
||||
{
|
||||
return (x & BF_BITMASK<T>(len)) << start;
|
||||
}
|
||||
|
||||
//! Extract a bitfield of length 'len' starting at bit 'start' from 'y'.
|
||||
#define BF_GET(y, start, len) ( ((y)>>(start)) & BF_BITMASK(len) )
|
||||
|
||||
//! Insert 'len' bits of 'x 'into 'y', starting at bit 'start' from 'y'.
|
||||
#define BF_SET(y, x, start, len) \
|
||||
( y= ((y) &~ BF_MASK(start, len)) | BF_PREP(x, start, len) )
|
||||
template <class T>
|
||||
inline T BF_SET(T to, T from, uint8_t start, uint8_t len)
|
||||
{
|
||||
return (to & ~BF_MASK<T>(start, len)) | BF_PREP<T>(from, start, len);
|
||||
}
|
||||
|
||||
#endif //BITFIELD_H
|
||||
#endif //BITFIELD_H
|
||||
|
||||
@@ -1755,19 +1755,16 @@ void menuModelPinmap(event_t event)
|
||||
|
||||
const coord_t x = 1;
|
||||
coord_t y = FH + 1;
|
||||
uint8_t line = (menuVerticalPosition >= sentModuleChannels(g_moduleIdx) ? 2 : 0);
|
||||
uint8_t pin = (menuVerticalPosition >= 8 ? 8 : 0) + line;
|
||||
uint8_t pin = (menuVerticalPosition >= 8 ? 8 : 0);
|
||||
|
||||
for (; line < 8; line++) {
|
||||
for (uint8_t line = 0; line < 8; line++) {
|
||||
const int32_t channelValue = channelOutputs[getPinOuput(g_receiverIdx, g_moduleIdx, pin)];
|
||||
|
||||
//Pin
|
||||
// Pin
|
||||
lcdDrawText(0, y, "Pin", SMLSIZE);
|
||||
lcdDrawNumber(lcdLastRightPos+5, y, pin+1, SMLSIZE);
|
||||
lcdDrawText(lcdLastRightPos+5, y, " -> ", SMLSIZE);
|
||||
lcdDrawNumber(lcdLastRightPos + 1, y, pin+1, SMLSIZE);
|
||||
|
||||
|
||||
//Channel
|
||||
// Channel
|
||||
LcdFlags flags = SMLSIZE;
|
||||
if (menuVerticalPosition == pin) {
|
||||
flags |= INVERS;
|
||||
@@ -1778,18 +1775,16 @@ void menuModelPinmap(event_t event)
|
||||
setPinOuput(g_receiverIdx, g_moduleIdx, pin, channel);
|
||||
}
|
||||
}
|
||||
putsChn(8*FW, y, getPinOuput(g_receiverIdx, g_moduleIdx, pin)+1, flags);
|
||||
|
||||
//lcdDrawNumber(lcdLastRightPos+5, y, getPinOuput(g_receiverIdx, g_moduleIdx, pin)+1, flags);
|
||||
putsChn(lcdLastRightPos+5, y, getPinOuput(g_receiverIdx, g_moduleIdx, pin)+1, flags);
|
||||
|
||||
// Bargraph
|
||||
const uint8_t lenChannel = limit<uint8_t>(1, (abs(channelValue) * wbar/2 + lim/2) / lim, wbar/2);
|
||||
const coord_t xChannel = (channelValue>0) ? x+LCD_W-3-wbar/2 : x+LCD_W-2-wbar/2-lenChannel;
|
||||
lcdDrawHorizontalLine(xChannel, y+1, lenChannel, DOTTED, 0);
|
||||
lcdDrawHorizontalLine(xChannel, y+2, lenChannel, DOTTED, 0);
|
||||
|
||||
y += FH-1;
|
||||
|
||||
if (++pin >sentModuleChannels(g_moduleIdx))
|
||||
if (++pin > sentModuleChannels(g_moduleIdx))
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -208,7 +208,7 @@ inline uint8_t getPinOuput(uint8_t receiverIdx, uint8_t moduleIdx, uint8_t pin)
|
||||
|
||||
inline void setPinOuput(uint8_t receiverIdx, uint8_t moduleIdx, uint8_t pin, uint8_t chan)
|
||||
{
|
||||
BF_SET(g_model.moduleData[moduleIdx].pxx2.receivers[receiverIdx].channelMapping, chan, (pin + ((pin & 0x01) ? -1 : 1 )) * 4, 4);
|
||||
g_model.moduleData[moduleIdx].pxx2.receivers[receiverIdx].channelMapping = BF_SET<uint64_t>(g_model.moduleData[moduleIdx].pxx2.receivers[receiverIdx].channelMapping, chan, (pin + ((pin & 0x01) ? -1 : 1 )) * 4, 4);
|
||||
}
|
||||
|
||||
inline int8_t maxModuleChannels_M8(uint8_t idx)
|
||||
|
||||
Reference in New Issue
Block a user