mirror of https://github.com/ARMmbed/mbed-os.git
Update BLE, fix sleep and open-drain LEDs in MAX326xx
MAX32630FTHR gets BLE, uses timer peripheral 5 for HCI timing libexactLE update for 610,620 Fixup hal_sleep and hal_deepsleep for 620 LEDn outputs now forced to open-drainpull/4398/head
parent
692d9055b1
commit
3a4138369d
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
|
* Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
@ -52,10 +52,10 @@
|
||||||
#include "hci_vs.h"
|
#include "hci_vs.h"
|
||||||
|
|
||||||
/* Number of WSF buffer pools */
|
/* Number of WSF buffer pools */
|
||||||
#define WSF_BUF_POOLS 4
|
#define WSF_BUF_POOLS 5
|
||||||
|
|
||||||
/*! Free memory for pool buffers. */
|
/*! Free memory for pool buffers. */
|
||||||
static uint8_t mainBufMem[768];
|
static uint8_t mainBufMem[1040];
|
||||||
|
|
||||||
/*! Default pool descriptor. */
|
/*! Default pool descriptor. */
|
||||||
static wsfBufPoolDesc_t mainPoolDesc[WSF_BUF_POOLS] =
|
static wsfBufPoolDesc_t mainPoolDesc[WSF_BUF_POOLS] =
|
||||||
|
@ -63,24 +63,52 @@ static wsfBufPoolDesc_t mainPoolDesc[WSF_BUF_POOLS] =
|
||||||
{ 16, 8 },
|
{ 16, 8 },
|
||||||
{ 32, 4 },
|
{ 32, 4 },
|
||||||
{ 64, 2 },
|
{ 64, 2 },
|
||||||
{ 128, 2 }
|
{ 128, 2 },
|
||||||
|
{ 272, 1 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Store the Event signalling */
|
||||||
|
bool isEventsSignaled = false;
|
||||||
|
|
||||||
/*! WSF handler ID */
|
/*! WSF handler ID */
|
||||||
wsfHandlerId_t maximHandlerId;
|
wsfHandlerId_t maximHandlerId;
|
||||||
static volatile int reset_complete;
|
static volatile int reset_complete;
|
||||||
|
|
||||||
|
#ifdef BLE_HCI_UART
|
||||||
|
static DigitalIn _rts(BT_CTS);
|
||||||
|
static DigitalIn _cts(BT_RTS);
|
||||||
|
static DigitalIn _clk(BT_CLK);
|
||||||
|
static DigitalOut _shutdown(BT_RST, 0);
|
||||||
|
static Serial _uart(BT_TX, BT_RX, 115200);
|
||||||
|
#else
|
||||||
/* Current mbed SPI API does not support HW slave selects. Configured in HCI driver. */
|
/* Current mbed SPI API does not support HW slave selects. Configured in HCI driver. */
|
||||||
static DigitalOut _csn(HCI_CSN, 1);
|
static DigitalOut _csn(HCI_CSN, 1);
|
||||||
static SPI _spi(HCI_MOSI, HCI_MISO, HCI_SCK, HCI_CSN);
|
static SPI _spi(HCI_MOSI, HCI_MISO, HCI_SCK, HCI_CSN);
|
||||||
static DigitalOut _rst(HCI_RST, 0);
|
static DigitalOut _rst(HCI_RST, 0);
|
||||||
static InterruptIn _irq(HCI_IRQ);
|
static InterruptIn _irq(HCI_IRQ);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The singleton which represents the MaximBLE transport for the BLE.
|
* The singleton which represents the MaximBLE transport for the BLE.
|
||||||
*/
|
*/
|
||||||
static MaximBLE deviceInstance;
|
static MaximBLE deviceInstance;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function will signal to the user code by calling signalEventsToProcess.
|
||||||
|
* It is registered and called into the Wsf Stack.
|
||||||
|
*/
|
||||||
|
void wsf_mbed_ble_signal_event(void)
|
||||||
|
{
|
||||||
|
if (isEventsSignaled == false) {
|
||||||
|
isEventsSignaled = true;
|
||||||
|
deviceInstance.signalEventsToProcess(::BLE::DEFAULT_INSTANCE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* BLE-API requires an implementation of the following function in order to
|
* BLE-API requires an implementation of the following function in order to
|
||||||
* obtain its transport handle.
|
* obtain its transport handle.
|
||||||
|
@ -240,16 +268,20 @@ ble_error_t MaximBLE::init(BLE::InstanceID_t instanceID, FunctionPointerWithCont
|
||||||
maximHandlerId = WsfOsSetNextHandler(maximHandler);
|
maximHandlerId = WsfOsSetNextHandler(maximHandler);
|
||||||
|
|
||||||
/* init HCI */
|
/* init HCI */
|
||||||
|
#ifdef BLE_HCI_UART
|
||||||
|
hciDrvInit(BT_TX, BT_RST, BT_CLK);
|
||||||
|
#else
|
||||||
_irq.disable_irq();
|
_irq.disable_irq();
|
||||||
_irq.rise(hciDrvIsr);
|
_irq.rise(hciDrvIsr);
|
||||||
_irq.fall(NULL);
|
_irq.fall(NULL);
|
||||||
hciDrvInit(HCI_CSN, HCI_RST, HCI_IRQ);
|
hciDrvInit(HCI_CSN, HCI_RST, HCI_IRQ);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Register for stack callbacks */
|
/* Register for stack callbacks */
|
||||||
DmRegister(DmCback);
|
DmRegister(DmCback);
|
||||||
DmConnRegister(DM_CLIENT_ID_APP, DmCback);
|
DmConnRegister(DM_CLIENT_ID_APP, DmCback);
|
||||||
AttConnRegister(AppServerConnCback);
|
AttConnRegister(AppServerConnCback);
|
||||||
|
|
||||||
/* Reset the device */
|
/* Reset the device */
|
||||||
reset_complete = 0;
|
reset_complete = 0;
|
||||||
DmDevReset();
|
DmDevReset();
|
||||||
|
@ -301,12 +333,15 @@ void MaximBLE::waitForEvent(void)
|
||||||
|
|
||||||
void MaximBLE::processEvents()
|
void MaximBLE::processEvents()
|
||||||
{
|
{
|
||||||
callDispatcher();
|
if (isEventsSignaled) {
|
||||||
|
isEventsSignaled = false;
|
||||||
|
callDispatcher();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaximBLE::timeoutCallback(void)
|
void MaximBLE::timeoutCallback(void)
|
||||||
{
|
{
|
||||||
// do nothing. just an interrupt for wake up.
|
wsf_mbed_ble_signal_event();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaximBLE::callDispatcher(void)
|
void MaximBLE::callDispatcher(void)
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -115,7 +115,7 @@ void hal_deepsleep(void)
|
||||||
|
|
||||||
// Deep Sleep is not working properly on Revisions A3 and earlier
|
// Deep Sleep is not working properly on Revisions A3 and earlier
|
||||||
if (part_rev <= REVISION_A3) {
|
if (part_rev <= REVISION_A3) {
|
||||||
sleep();
|
hal_sleep();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ void hal_deepsleep(void)
|
||||||
// Do not enter Deep Sleep if connected to VBUS
|
// Do not enter Deep Sleep if connected to VBUS
|
||||||
if (MXC_USB->dev_intfl & MXC_F_USB_DEV_INTFL_VBUS_ST) {
|
if (MXC_USB->dev_intfl & MXC_F_USB_DEV_INTFL_VBUS_ST) {
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
sleep();
|
hal_sleep();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
|
* Copyright (C) 2016-2017 Maxim Integrated Products, Inc., All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
@ -144,6 +144,10 @@ typedef enum {
|
||||||
OWM = P4_0,
|
OWM = P4_0,
|
||||||
|
|
||||||
// BTLE Module hardwired
|
// BTLE Module hardwired
|
||||||
|
BT_TX = P0_0,
|
||||||
|
BT_RX = P0_1,
|
||||||
|
BT_RTS = P0_2,
|
||||||
|
BT_CTS = P0_3,
|
||||||
BT_RST = P1_6,
|
BT_RST = P1_6,
|
||||||
BT_CLK = P1_7,
|
BT_CLK = P1_7,
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -67,6 +67,13 @@ void gpio_init(gpio_t *obj, PinName name)
|
||||||
|
|
||||||
void gpio_mode(gpio_t *obj, PinMode mode)
|
void gpio_mode(gpio_t *obj, PinMode mode)
|
||||||
{
|
{
|
||||||
|
#ifdef OPEN_DRAIN_LEDS
|
||||||
|
if ((obj->name == LED1) || (obj->name == LED2) ||
|
||||||
|
(obj->name == LED3) || (obj->name == LED4)) {
|
||||||
|
mode = OpenDrain;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
obj->mode = mode;
|
obj->mode = mode;
|
||||||
pin_mode(obj->name, mode);
|
pin_mode(obj->name, mode);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2060,10 +2060,11 @@
|
||||||
"MAX32630FTHR": {
|
"MAX32630FTHR": {
|
||||||
"inherits": ["Target"],
|
"inherits": ["Target"],
|
||||||
"core": "Cortex-M4F",
|
"core": "Cortex-M4F",
|
||||||
"macros": ["__SYSTEM_HFX=96000000", "TARGET=MAX32630", "TARGET_REV=0x4132"],
|
"macros": ["__SYSTEM_HFX=96000000", "TARGET=MAX32630", "TARGET_REV=0x4132", "BLE_HCI_UART", "OPEN_DRAIN_LEDS"],
|
||||||
"extra_labels": ["Maxim", "MAX32630"],
|
"extra_labels": ["Maxim", "MAX32630"],
|
||||||
"supported_toolchains": ["GCC_ARM", "IAR", "ARM"],
|
"supported_toolchains": ["GCC_ARM", "IAR", "ARM"],
|
||||||
"device_has": ["ANALOGIN", "ERROR_RED", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"],
|
"device_has": ["ANALOGIN", "ERROR_RED", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"],
|
||||||
|
"features": ["BLE"],
|
||||||
"release_versions": ["2", "5"]
|
"release_versions": ["2", "5"]
|
||||||
},
|
},
|
||||||
"EFM32": {
|
"EFM32": {
|
||||||
|
|
Loading…
Reference in New Issue