mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2024-12-28 09:58:30 +01:00
If BT is off, ask user to turn it on only once. If cancels, warn that
it must be turned on, and don't attempt to turn it on again. This prevents BTLib from repeatedly asking for permission to turn BT on.
This commit is contained in:
parent
2bba51f95a
commit
0b0143fa92
5 changed files with 59 additions and 22 deletions
|
@ -129,8 +129,8 @@
|
|||
#endif
|
||||
|
||||
#ifdef XWFEATURE_BLUETOOTH
|
||||
{ "STR_BT_NOINIT", "Unable to initialize Bluetooth. "
|
||||
"Is it enabled?" },
|
||||
{ "STR_BT_NOINIT", "Bluetooth appears to be off. Please turn it "
|
||||
"on if you want Crosswords to use it." },
|
||||
#endif
|
||||
|
||||
{ "STR_ABOUT_CONTENT",
|
||||
|
|
|
@ -53,7 +53,7 @@ typedef enum {
|
|||
, PBTST_L2C_CONNECTED /* slave */
|
||||
} PBT_STATE;
|
||||
|
||||
#define PBT_MAX_ACTS 6 /* four wasn't enough */
|
||||
#define PBT_MAX_ACTS 8 /* six wasn't enough */
|
||||
#define HASWORK(s) ((s)->queueCur != (s)->queueNext)
|
||||
#define MAX_PACKETS 4
|
||||
|
||||
|
@ -125,7 +125,8 @@ static const BtLibSdpUuidType XWORDS_UUID = {
|
|||
{ 0x83, 0xe0, 0x87, 0xae, 0x4e, 0x18, 0x46, 0xbe,
|
||||
0x83, 0xe0, 0x7b, 0x3d, 0xe6, 0xa1, 0xc3, 0x3b } };
|
||||
|
||||
static PalmBTStuff* pbt_checkInit( PalmAppGlobals* globals );
|
||||
static PalmBTStuff* pbt_checkInit( PalmAppGlobals* globals,
|
||||
XP_Bool* userCancelled );
|
||||
static Err bpd_discover( PalmBTStuff* btStuff, BtLibDeviceAddressType* addr );
|
||||
static void pbt_setup_slave( PalmBTStuff* btStuff, const CommsAddrRec* addr );
|
||||
static void pbt_takedown_slave( PalmBTStuff* btStuff );
|
||||
|
@ -168,7 +169,7 @@ static void libMgmtCallback( BtLibManagementEventType* mEvent, UInt32 refCon );
|
|||
static void l2SocketCallback( BtLibSocketEventType* sEvent, UInt32 refCon );
|
||||
|
||||
XP_Bool
|
||||
palm_bt_init( PalmAppGlobals* globals, DataCb dataCb )
|
||||
palm_bt_init( PalmAppGlobals* globals, DataCb dataCb, XP_Bool* userCancelled )
|
||||
{
|
||||
XP_Bool inited;
|
||||
PalmBTStuff* btStuff;
|
||||
|
@ -177,7 +178,7 @@ palm_bt_init( PalmAppGlobals* globals, DataCb dataCb )
|
|||
|
||||
btStuff = globals->btStuff;
|
||||
if ( !btStuff ) {
|
||||
btStuff = pbt_checkInit( globals );
|
||||
btStuff = pbt_checkInit( globals, userCancelled );
|
||||
/* Should I start master/slave setup here? If not, how? */
|
||||
} else {
|
||||
pbt_reset( btStuff );
|
||||
|
@ -277,7 +278,7 @@ void
|
|||
palm_bt_addrString( PalmAppGlobals* globals, XP_BtAddr* btAddr,
|
||||
XP_BtAddrStr* str )
|
||||
{
|
||||
PalmBTStuff* btStuff = pbt_checkInit( globals );
|
||||
PalmBTStuff* btStuff = pbt_checkInit( globals, NULL );
|
||||
str->chars[0] = '\0';
|
||||
if ( !!btStuff ) {
|
||||
Err err;
|
||||
|
@ -298,7 +299,7 @@ palm_bt_browse_device( PalmAppGlobals* globals, XP_BtAddr* btAddr,
|
|||
|
||||
LOG_FUNC();
|
||||
|
||||
btStuff = pbt_checkInit( globals );
|
||||
btStuff = pbt_checkInit( globals, NULL );
|
||||
if ( NULL != btStuff ) {
|
||||
BtLibDeviceAddressType addr;
|
||||
Err err = bpd_discover( btStuff, &addr );
|
||||
|
@ -420,7 +421,8 @@ pbt_send_pending( PalmBTStuff* btStuff )
|
|||
|
||||
XP_S16
|
||||
palm_bt_send( const XP_U8* buf, XP_U16 len, const CommsAddrRec* addr,
|
||||
DataCb dataCb, OnConnCb connCb, PalmAppGlobals* globals )
|
||||
DataCb dataCb, OnConnCb connCb, PalmAppGlobals* globals,
|
||||
XP_Bool* userCancelled )
|
||||
{
|
||||
XP_S16 nSent = -1;
|
||||
PalmBTStuff* btStuff;
|
||||
|
@ -428,7 +430,7 @@ palm_bt_send( const XP_U8* buf, XP_U16 len, const CommsAddrRec* addr,
|
|||
PBT_PicoRole picoRole;
|
||||
XP_LOGF( "%s(len=%d)", __FUNCTION__, len);
|
||||
|
||||
btStuff = pbt_checkInit( globals );
|
||||
btStuff = pbt_checkInit( globals, userCancelled );
|
||||
if ( !!btStuff ) {
|
||||
if ( !btStuff->dataCb ) {
|
||||
btStuff->dataCb = dataCb;
|
||||
|
@ -807,9 +809,10 @@ pbt_takedown_slave( PalmBTStuff* btStuff )
|
|||
}
|
||||
|
||||
static PalmBTStuff*
|
||||
pbt_checkInit( PalmAppGlobals* globals )
|
||||
pbt_checkInit( PalmAppGlobals* globals, XP_Bool* userCancelledP )
|
||||
{
|
||||
PalmBTStuff* btStuff = globals->btStuff;
|
||||
XP_Bool userCancelled = XP_FALSE;
|
||||
if ( !btStuff ) {
|
||||
Err err;
|
||||
XP_U16 btLibRefNum;
|
||||
|
@ -818,6 +821,8 @@ pbt_checkInit( PalmAppGlobals* globals )
|
|||
if ( errNone == err ) {
|
||||
CALL_ERR( err, BtLibOpen, btLibRefNum, false );
|
||||
|
||||
userCancelled = err == btLibErrBluetoothOff;
|
||||
|
||||
/* BT is probably off if this fails */
|
||||
if ( errNone == err ) {
|
||||
btStuff = XP_MALLOC( globals->mpool, sizeof(*btStuff) );
|
||||
|
@ -836,6 +841,11 @@ pbt_checkInit( PalmAppGlobals* globals )
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( !!userCancelledP ) {
|
||||
*userCancelledP = userCancelled;
|
||||
}
|
||||
|
||||
return btStuff;
|
||||
} /* pbt_checkInit */
|
||||
|
||||
|
@ -1084,8 +1094,15 @@ connEnumToStr( BtLibAccessibleModeEnum mode )
|
|||
CASESTR(btLibNotAccessible);
|
||||
CASESTR(btLibConnectableOnly);
|
||||
CASESTR(btLibDiscoverableAndConnectable);
|
||||
case 0x0006:
|
||||
/* I've seen this on 68K even. Seems to happen when the other
|
||||
device changes roles (temporarily). */
|
||||
return "undoc_06";
|
||||
case 0x00F8: /* seen on ARM only */
|
||||
return "undoc_F8";
|
||||
default:
|
||||
XP_ASSERT(0);
|
||||
XP_LOGF( "%s: got 0x%x", __func__, mode );
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -50,14 +50,16 @@ typedef void (*DataCb)( PalmAppGlobals* globals,
|
|||
typedef void (*OnConnCb)( PalmAppGlobals* globals );
|
||||
|
||||
|
||||
XP_Bool palm_bt_init( PalmAppGlobals* globals, DataCb dataCb );
|
||||
XP_Bool palm_bt_init( PalmAppGlobals* globals, DataCb dataCb,
|
||||
XP_Bool* userCancelled );
|
||||
void palm_bt_close( PalmAppGlobals* globals );
|
||||
|
||||
void palm_bt_addrString( PalmAppGlobals* globals, XP_BtAddr* btAddr,
|
||||
XP_BtAddrStr* str );
|
||||
|
||||
XP_S16 palm_bt_send( const XP_U8* buf, XP_U16 len, const CommsAddrRec* addr,
|
||||
DataCb cb, OnConnCb connCb, PalmAppGlobals* globals );
|
||||
DataCb cb, OnConnCb connCb, PalmAppGlobals* globals,
|
||||
XP_Bool* userCancelled );
|
||||
|
||||
XP_Bool palm_bt_browse_device( PalmAppGlobals* globals, XP_BtAddr* btAddr,
|
||||
XP_UCHAR* out,XP_U16 len );
|
||||
|
|
|
@ -1619,8 +1619,9 @@ handleNilEvent( PalmAppGlobals* globals )
|
|||
&& (when <= TimGetTicks()) ) {
|
||||
palmFireTimer( globals, why );
|
||||
#ifdef XWFEATURE_BLUETOOTH
|
||||
} else if ( palm_bt_doWork( globals, &globals->btUIState ) ) {
|
||||
showConnState( globals );
|
||||
} else if ( (handled = palm_bt_doWork( globals, &globals->btUIState ) ),
|
||||
showConnState( globals ), handled ) {
|
||||
/* nothing to do */
|
||||
#endif
|
||||
} else if ( globals->timeRequested ) {
|
||||
globals->timeRequested = false;
|
||||
|
@ -3828,6 +3829,16 @@ palm_send_on_close( XWStreamCtxt* stream, void* closure )
|
|||
comms_send( globals->game.comms, stream );
|
||||
} /* palm_send_on_close */
|
||||
|
||||
#ifdef XWFEATURE_BLUETOOTH
|
||||
static void
|
||||
handleUserBTCancel( PalmAppGlobals* globals )
|
||||
{
|
||||
XP_ASSERT( !globals->userCancelledBT );
|
||||
globals->userCancelledBT = XP_TRUE;
|
||||
userErrorFromStrId( globals, STR_BT_NOINIT );
|
||||
}
|
||||
#endif
|
||||
|
||||
static XP_S16
|
||||
palm_send( const XP_U8* buf, XP_U16 len,
|
||||
const CommsAddrRec* addr, void* closure )
|
||||
|
@ -3850,11 +3861,12 @@ palm_send( const XP_U8* buf, XP_U16 len,
|
|||
#endif
|
||||
#ifdef XWFEATURE_BLUETOOTH
|
||||
case COMMS_CONN_BT:
|
||||
if ( !!globals->mainForm ) {
|
||||
if ( !!globals->mainForm && !globals->userCancelledBT ) {
|
||||
XP_Bool userCancelled;
|
||||
result = palm_bt_send( buf, len, addr, btDataHandler,
|
||||
btConnHandler, globals );
|
||||
if ( result < 0 ) {
|
||||
userErrorFromStrId( globals, STR_BT_NOINIT );
|
||||
btConnHandler, globals, &userCancelled );
|
||||
if ( userCancelled ) {
|
||||
handleUserBTCancel( globals );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -3976,10 +3988,13 @@ palm_util_addrChange( XW_UtilCtxt* uc, const CommsAddrRec* oldAddr,
|
|||
ip_addr_change( globals, oldAddr, newAddr );
|
||||
# endif
|
||||
# ifdef XWFEATURE_BLUETOOTH
|
||||
} else if ( isBT ) {
|
||||
} else if ( isBT && !globals->userCancelledBT ) {
|
||||
XP_Bool userCancelled;
|
||||
XP_ASSERT( !!globals->mainForm );
|
||||
if ( !palm_bt_init( globals, btDataHandler ) ) {
|
||||
userErrorFromStrId( globals, STR_BT_NOINIT );
|
||||
if ( !palm_bt_init( globals, btDataHandler, &userCancelled ) ) {
|
||||
if ( userCancelled ) {
|
||||
handleUserBTCancel( globals );
|
||||
}
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
|
|
@ -274,6 +274,9 @@ struct PalmAppGlobals {
|
|||
Boolean menuIsDown;
|
||||
XP_Bool newGameIsNew;
|
||||
XP_Bool runningOnPOSE; /* Needed for NetLibSelect */
|
||||
#ifdef XWFEATURE_BLUETOOTH
|
||||
XP_Bool userCancelledBT;
|
||||
#endif
|
||||
|
||||
GraphicsAbility able;
|
||||
XP_U16 prevScroll; /* for scrolling in 'ask' dialog */
|
||||
|
|
Loading…
Reference in a new issue