crashtest-r0ket/misc/openbeacon/lpc13xx/openbeacon-usb2/src/bluetooth.c

88 lines
2.6 KiB
C

/***************************************************************
*
* OpenBeacon.org - Bluetooth related functions
*
* Copyright 2010 Milosch Meriac <meriac@openbeacon.de>
*
***************************************************************
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include <openbeacon.h>
#include "bluetooth.h"
#define CPU_WAKEUP_BLT_PORT 1
#define CPU_WAKEUP_BLT_PIN 3
#define CPU_BLT_WAKEUP_PORT 2
#define CPU_BLT_WAKEUP_PIN 0
#define CPU_ON_OFF_BLT_PORT 1
#define CPU_ON_OFF_BLT_PIN 0
static const char *bt_init_strings[] = {
"SEC=3,2,2,04,0000",
"SLN=17,OpenBeacon USB II",
"RLS=1101,13,Debug Console,01,000000",
"DIS=3",
"AAC=1",
"SCR"
};
#define BT_INIT_STRINGS_COUNT ((int)(sizeof(bt_init_strings)/sizeof(bt_init_strings[0])))
void
bt_init (uint8_t enabled)
{
int bt_init_pos = 0;
/* Init UART for Bluetooth module without RTS/CTS */
UARTInit (115200, 0);
/* fake CTS for now */
GPIOSetDir (1, 5, 1);
GPIOSetValue (1, 5, 0);
/* Set CPU_WAKEUP_BLT port pin to output */
LPC_IOCON->ARM_SWDIO_PIO1_3 = 1;
GPIOSetDir (CPU_WAKEUP_BLT_PORT, CPU_WAKEUP_BLT_PIN, 1);
GPIOSetValue (CPU_WAKEUP_BLT_PORT, CPU_WAKEUP_BLT_PIN, enabled ? 1 : 0);
/* Set CPU_BLT_WAKEUP port pin to input */
LPC_IOCON->PIO2_0 = 0;
GPIOSetDir (CPU_BLT_WAKEUP_PORT, CPU_BLT_WAKEUP_PIN, 0);
GPIOSetValue (CPU_BLT_WAKEUP_PORT, CPU_BLT_WAKEUP_PIN, 0);
/* Set CPU_ON-OFF_BLT port pin to output */
LPC_IOCON->JTAG_TMS_PIO1_0 = 1;
GPIOSetDir (CPU_ON_OFF_BLT_PORT, CPU_ON_OFF_BLT_PIN, 1);
GPIOSetValue (CPU_ON_OFF_BLT_PORT, CPU_ON_OFF_BLT_PIN, enabled ? 1 : 0);
/* iterate through all bt_init_strings if activated */
if (enabled)
while (bt_init_pos <= BT_INIT_STRINGS_COUNT)
{
/* wait for CR */
while (UARTCount)
if (UARTBuffer[--UARTCount] == '\n')
{
/* emmpty buffers */
UARTCount = 0;
/* output next init string */
if (bt_init_pos < BT_INIT_STRINGS_COUNT)
debug_printf ("AT+J%s\n", bt_init_strings[bt_init_pos]);
bt_init_pos++;
}
}
}