Open microbit-carlos opened 3 years ago
To use DAL PinMode and PullXXX in CODAL, could we replace in MicroBitCompat.h
typedef enum {
PullNone = 0,
PullDown = 1,
PullUp = 3,
PullDefault = PullUp
} PinMode;
with
typedef codal::PullMode PinMode;
const codal::PullMode PullNone = codal::PullMode::None;
const codal::PullMode PullDown = codal::PullMode::Down;
const codal::PullMode PullUp = codal::PullMode::Up;
const codal::PullMode PullDefault = codal::PullMode::Up;
With this the MicroBitButton constructors don't need getPullModeFronPinMode.
Is there a problem with the fact that CODAL PullMode::Up==2 while DAL PullUp==3?
This sample wraps a PinMode in a PullMode class, so that V2 CODAL style PullMode code compiles for V1 DAL.
It should start in PullUp mode, then B sets PullMode::Down, A sets PullMode::Up.
#include "MicroBit.h"
#ifndef MICROBIT_CODAL
#ifdef CODAL_CONFIG_H
#define MICROBIT_CODAL 1
#else
#define MICROBIT_CODAL 0
#endif
#endif
#if MICROBIT_CODAL
#else // MICROBIT_CODAL
class PullMode
{
public:
PinMode pm;
PullMode() : pm( PullNone) {};
PullMode( uint8_t p) : pm( (PinMode)p) {};
PullMode( PinMode p) : pm( p) {};
static const PinMode None = PullNone;
static const PinMode Down = PullDown;
static const PinMode Up = PullUp;
operator PinMode() { return pm; }
operator uint8_t() { return pm; }
};
#endif // MICROBIT_CODAL
MicroBit uBit;
void onButtonA(MicroBitEvent e)
{
PullMode pullmode = PullMode::Up;
uBit.io.P0.setPull(pullmode);
}
void onButtonB(MicroBitEvent e)
{
uBit.io.P0.setPull(PullMode::Down);
}
void display()
{
while (true)
{
uBit.display.printChar( uBit.io.P0.getDigitalValue() ? '1' : '0');
uBit.sleep(100);
}
}
void DoPullMode( PullMode p)
{
uBit.io.P0.setPull(p);
}
void DoPinMode( PinMode p)
{
uBit.io.P0.setPull(p);
}
int main() {
uBit.init();
uBit.messageBus.listen( MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA);
uBit.messageBus.listen( MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB);
uBit.io.P0.setPull(PullUp);
uBit.io.P0.setPull(PullMode::Up);
DoPinMode( PullUp);
DoPullMode( PullMode::Up);
PullMode pullmode = PullUp;
DoPinMode( pullmode);
DoPullMode( pullmode);
PullMode pinmode = PullMode::Up;
DoPinMode( pinmode);
DoPullMode( pinmode);
ManagedString s1( (int) sizeof(pullmode));
uBit.display.scroll( s1);
ManagedString s2( (int) sizeof(pinmode));
uBit.display.scroll( s2);
create_fiber( display);
release_fiber();
}
@finneyj Is there any reason not to bring this compat code into CODAL.
This will compile with DAL and fail with CODAL:
Need to use
PullMode::Up
instead, but it's not DAL compatible.