microbit: MicroBitPin api additions

Based on the previous commit, the api for MicroBitPin
has two new accessor methods:

	* getAnalogPeriodUs
	* getAnalogPeriod

There are also whitespace changes in the MicroBitPin head file
as well as some minor textual changes.
This commit is contained in:
James Devine 2016-01-09 19:52:46 +00:00
parent 32c40cdc29
commit 2650aaa569
2 changed files with 75 additions and 35 deletions

View file

@ -6,23 +6,23 @@
// Status Field flags...
#define IO_STATUS_DIGITAL_IN 0x01 // Pin is configured as a digital input, with no pull up.
#define IO_STATUS_DIGITAL_OUT 0x02 // Pin is configured as a digital output
#define IO_STATUS_ANALOG_IN 0x04 // Pin is Analog in
#define IO_STATUS_ANALOG_OUT 0x08 // Pin is Analog out (not currently possible)
#define IO_STATUS_ANALOG_IN 0x04 // Pin is Analog in
#define IO_STATUS_ANALOG_OUT 0x08 // Pin is Analog out
#define IO_STATUS_TOUCH_IN 0x10 // Pin is a makey-makey style touch sensor
#define IO_STATUS_EVENTBUS_ENABLED 0x80 // Pin is will generate events on change
//#defines for each edge connector pin
#define MICROBIT_PIN_P0 P0_3 //P0 is the left most pad (ANALOG/DIGITAL) used to be P0_3 on green board
#define MICROBIT_PIN_P1 P0_2 //P1 is the middle pad (ANALOG/DIGITAL)
#define MICROBIT_PIN_P1 P0_2 //P1 is the middle pad (ANALOG/DIGITAL)
#define MICROBIT_PIN_P2 P0_1 //P2 is the right most pad (ANALOG/DIGITAL) used to be P0_1 on green board
#define MICROBIT_PIN_P3 P0_4 //COL1 (ANALOG/DIGITAL)
#define MICROBIT_PIN_P4 P0_17 //BTN_A
#define MICROBIT_PIN_P5 P0_5 //COL2 (ANALOG/DIGITAL)
#define MICROBIT_PIN_P3 P0_4 //COL1 (ANALOG/DIGITAL)
#define MICROBIT_PIN_P4 P0_17 //BTN_A
#define MICROBIT_PIN_P5 P0_5 //COL2 (ANALOG/DIGITAL)
#define MICROBIT_PIN_P6 P0_12 //COL9
#define MICROBIT_PIN_P7 P0_11 //COL8
#define MICROBIT_PIN_P8 P0_18 //PIN 18
#define MICROBIT_PIN_P9 P0_10 //COL7
#define MICROBIT_PIN_P10 P0_6 //COL3 (ANALOG/DIGITAL)
#define MICROBIT_PIN_P10 P0_6 //COL3 (ANALOG/DIGITAL)
#define MICROBIT_PIN_P11 P0_26 //BTN_B
#define MICROBIT_PIN_P12 P0_20 //PIN 20
#define MICROBIT_PIN_P13 P0_23 //SCK
@ -36,7 +36,7 @@
/**
* Pin capabilities enum.
* Pin capabilities enum.
* Used to determine the capabilities of each Pin as some can only be digital, or can be both digital and analogue.
*/
enum PinCapability{
@ -45,7 +45,7 @@ enum PinCapability{
PIN_CAPABILITY_TOUCH = 0x04,
PIN_CAPABILITY_AD = PIN_CAPABILITY_DIGITAL | PIN_CAPABILITY_ANALOG,
PIN_CAPABILITY_ALL = PIN_CAPABILITY_DIGITAL | PIN_CAPABILITY_ANALOG | PIN_CAPABILITY_TOUCH
};
/**
@ -56,56 +56,56 @@ enum PinCapability{
class MicroBitPin : public MicroBitComponent
{
/**
* Unique, enumerated ID for this component.
* Unique, enumerated ID for this component.
* Used to track asynchronous events in the event bus.
*/
void *pin; // The mBed object looking after this pin at any point in time (may change!).
PinCapability capability;
/**
* Disconnect any attached mBed IO from this pin.
* Used only when pin changes mode (i.e. Input/Output/Analog/Digital)
*/
void disconnect();
public:
PinName name; // mBed pin name of this pin.
/**
* Constructor.
* Constructor.
* Create a Button representation with the given ID.
* @param id the ID of the new Pin object.
* @param name the pin name for this MicroBitPin instance to represent
* @param capability the capability of this pin.
*
*
* Example:
* @code
* @code
* MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_BOTH);
* @endcode
*/
MicroBitPin(int id, PinName name, PinCapability capability);
/**
* Configures this IO pin as a digital output (if necessary) and sets the pin to 'value'.
* @param value 0 (LO) or 1 (HI)
* @return MICROBIT_OK on success, MICROBIT_INVALID_PARAMETER if value is out of range, or MICROBIT_NOT_SUPPORTED
* if the given pin does not have digital capability.
*
*
* Example:
* @code
* @code
* MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_BOTH);
* P0.setDigitalValue(1); // P0 is now HI
* @endcode
*/
int setDigitalValue(int value);
/**
* Configures this IO pin as a digital input (if necessary) and tests its current value.
* @return 1 if this input is high, 0 if input is LO, or MICROBIT_NOT_SUPPORTED if the given pin does not have analog capability.
*
*
* Example:
* @code
* @code
* MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_BOTH);
* P0.getDigitalValue(); // P0 is either 0 or 1;
* @endcode
@ -124,9 +124,9 @@ class MicroBitPin : public MicroBitComponent
/**
* Configures this IO pin as an analogue input (if necessary and possible).
* @return the current analogue level on the pin, in the range 0 - 1024, or MICROBIT_NOT_SUPPORTED if the given pin does not have analog capability.
*
*
* Example:
* @code
* @code
* MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_BOTH);
* P0.getAnalogValue(); // P0 is a value in the range of 0 - 1024
* @endcode
@ -160,14 +160,14 @@ class MicroBitPin : public MicroBitComponent
/**
* Configures this IO pin as a makey makey style touch sensor (if necessary) and tests its current debounced state.
* @return 1 if pin is touched, 0 if not, or MICROBIT_NOT_SUPPORTED if this pin does not support touch capability.
*
*
* Example:
* @code
* @code
* MicroBitPin P0(MICROBIT_ID_IO_P0, MICROBIT_PIN_P0, PIN_CAPABILITY_ALL);
* if(P0.isTouched())
* {
* uBit.display.clear();
* }
* }
* @endcode
*/
int isTouched();
@ -176,19 +176,35 @@ class MicroBitPin : public MicroBitComponent
* Configures the PWM period of the analog output to the given value.
*
* @param period The new period for the analog output in milliseconds.
* @return MICROBIT_OK on success, or MICROBIT_NOT_SUPPORTED if the
* @return MICROBIT_OK on success, or MICROBIT_NOT_SUPPORTED if the
* given pin is not configured as an analog output.
*/
*/
int setAnalogPeriod(int period);
/**
* Configures the PWM period of the analog output to the given value.
*
* @param period The new period for the analog output in microseconds.
* @return MICROBIT_OK on success, or MICROBIT_NOT_SUPPORTED if the
* @return MICROBIT_OK on success, or MICROBIT_NOT_SUPPORTED if the
* given pin is not configured as an analog output.
*/
*/
int setAnalogPeriodUs(int period);
/**
* Retrieves the PWM period of the analog output.
*
* @return the period on success, or MICROBIT_NOT_SUPPORTED if the
* given pin is not configured as an analog output.
*/
int getAnalogPeriodUs();
/**
* Retrieves the PWM period of the analog output.
*
* @return the period on success, or MICROBIT_NOT_SUPPORTED if the
* given pin is not configured as an analog output.
*/
int getAnalogPeriod();
};
#endif

View file

@ -147,7 +147,7 @@ int MicroBitPin::setAnalogValue(int value)
//perform a write with an extra check! :)
if(((DynamicPwm *)pin)->getPinName() == name)
((DynamicPwm *)pin)->write(level);
return ((DynamicPwm *)pin)->write(level);
return MICROBIT_OK;
}
@ -257,8 +257,7 @@ int MicroBitPin::setAnalogPeriodUs(int period)
if (!(status & IO_STATUS_ANALOG_OUT))
return MICROBIT_NOT_SUPPORTED;
((DynamicPwm *)pin)->setPeriodUs(period);
return MICROBIT_OK;
return ((DynamicPwm *)pin)->setPeriodUs(period);
}
/**
@ -272,3 +271,28 @@ int MicroBitPin::setAnalogPeriod(int period)
{
return setAnalogPeriodUs(period*1000);
}
/**
* Retrieves the PWM period of the analog output.
*
* @return the period on success, or MICROBIT_NOT_SUPPORTED if the
* given pin is not configured as an analog output.
*/
int MicroBitPin::getAnalogPeriodUs()
{
if (!(status & IO_STATUS_ANALOG_OUT))
return MICROBIT_NOT_SUPPORTED;
return ((DynamicPwm *)pin)->getPeriodUs();
}
/**
* Retrieves the PWM period of the analog output.
*
* @return the period on success, or MICROBIT_NOT_SUPPORTED if the
* given pin is not configured as an analog output.
*/
int MicroBitPin::getAnalogPeriod()
{
return getAnalogPeriodUs()/1000;
}