📄 bjackview.cpp
字号:
{
TBuf<30> temp;
temp.Format(_L("%x:%x:%x:%x:%x:%x - "), btDevice[currentDeviceIndex].btDevAddr[0],
btDevice[currentDeviceIndex].btDevAddr[1], btDevice[currentDeviceIndex].btDevAddr[2],
btDevice[currentDeviceIndex].btDevAddr[3], btDevice[currentDeviceIndex].btDevAddr[4],
btDevice[currentDeviceIndex].btDevAddr[5]);
HBufC* dataBuffer = HBufC::NewL(theText.Length() + temp.Length());
dataBuffer->Des().Copy(temp);
dataBuffer->Des().Append(theText);
logHelper->updateLog(dataBuffer, 0, logType);
delete dataBuffer;
/*
TBuf<70> temp;
temp.Format(_L("%x:%x:%x:%x:%x:%x - "), btDevice[currentDeviceIndex].btDevAddr[0],
btDevice[currentDeviceIndex].btDevAddr[1], btDevice[currentDeviceIndex].btDevAddr[2],
btDevice[currentDeviceIndex].btDevAddr[3], btDevice[currentDeviceIndex].btDevAddr[4],
btDevice[currentDeviceIndex].btDevAddr[5]);
temp.Append(theText);
logHelper->updateLog(&temp, 0, logType);
*/
}
else
{
HBufC *dataBuffer = HBufC::NewL(theText.Length() + KMaxDeviceName + 3);
dataBuffer->Des().Copy(btDevice[currentDeviceIndex].btNames);
dataBuffer->Des().Append(_L(" - "));
dataBuffer->Des().Append(theText);
logHelper->updateLog(dataBuffer, 0, logType);
delete dataBuffer;
/*
TBuf<0x100 + 40> temp;
temp.Copy(btDevice[currentDeviceIndex].btNames);
temp.Append(_L(" - "));
temp.Append(theText);
logHelper->updateLog(&temp, 0, logType);
*/
}
}
void CScanner::rest(void)
{
if (firstRest)
{
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCOOLOFF);
logHelper->updateLog(dataBuffer, 0, CLogger::logDecays);
delete dataBuffer;
//TBuf<50> txt;
//CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCOOLOFF);
//logHelper->updateLog(&txt, 0, CLogger::logDecays);
scannerStatus = isRest;
firstRest = EFalse;
}
After(TIMER_GRANULARITY);
}
void CScanner::bluejackNextDevice(void)
{
if (getNextBTDeviceIndex())
{
if (obexClient)
{
delete obexClient;
obexClient = NULL;
}
iStatus = KRequestPending;
if (btDevice[currentDeviceIndex].obexPort == -1)
{
scannerStatus = isOBEXSearch;
obexRetries = OBEX_RETRIES;
obexSearcher.start(&iStatus, &(btDevice[currentDeviceIndex].btDevAddr));
SetActive();
}
else
{
// This is a hack... :(
obexSearcher.RFCOMMPort = btDevice[currentDeviceIndex].obexPort;
scannerStatus = isOBEXSearch;
RunL();
}
}
else
{
currentNoDeviceAttempts++;
if (*localProxSweepOnce == EFalse)
{
if (currentNoDeviceAttempts > *localNoDeviceAttempts)
{
currentNoDeviceAttempts = 0;
startRestTime.HomeTime();
currentNoDevicePause = *localNoDevicePause;
firstRest = ETrue;
rest();
}
else
doRealScan();
}
else
{
stopScan();
SetToolbarButtonState();
}
}
}
void CScanner::SetToolbarButtonState()
{
CEikButtonGroupContainer* toolbar = CEikonEnv::Static()->AppUiFactory()->ToolBar();
if (toolbar != NULL)
{
CEikCommandButton* button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejackStop));
if (button != NULL)
{
if (!IsActive())
{
button->SetDimmed(ETrue);
button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejack));
button->SetDimmed(EFalse);
button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejackOne));
button->SetDimmed(EFalse);
}
else
{
button->SetDimmed(EFalse);
button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejack));
button->SetDimmed(ETrue);
button = (CEikCommandButton*)(toolbar->ControlOrNull(cmdBluejackOne));
button->SetDimmed(ETrue);
}
CEikonEnv::Static()->AppUiFactory()->ToolBar()->DrawNow();
}
}
}
void CScanner::RunL()
{
static_cast<CSMan2AppUi*>(CEikonEnv::Static()->EikAppUi())->updateBJackIcon(ETrue);
if (scannerStatus == isRest)
{
TTime currentTime;
TTimeIntervalSeconds interval;
currentTime.HomeTime();
if (currentTime.SecondsFrom(startRestTime, interval) != 0)
interval = CONFIG_NO_DEVICE_PAUSE + 1;
if (interval.Int() >= currentNoDevicePause)
bluejackNextDevice();
else
rest();
}
else if (scannerStatus == isOBEXDisconnect)
{
timeoutCounter.stopTimer();
startRestTime.HomeTime();
currentNoDevicePause = STACK_COOLOFF_COUNTDOWN;
firstRest = ETrue;
rest();
}
else if (scannerStatus == isOBEXSend)
{
timeoutCounter.stopTimer();
if (iStatus == KErrNone)
{
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKSUCCESS);
logWithLookup(*dataBuffer, CLogger::logBluejack);
//TBuf<50> txt;
//CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKSUCCESS);
//logWithLookup(txt, CLogger::logBluejack);
if (*localShowSysMsg)
User::InfoPrint(*dataBuffer);
delete dataBuffer;
// Update the device's status and timer
btDevice[currentDeviceIndex].isBluejacked = statusValidBluejacked;
btDevice[currentDeviceIndex].lastBluejackedTime.HomeTime();
// Vibrate phone
if (*localVibrate)
myVibra->VibrationOn(1, 10, 3);
// Audio?
if (localAudioFile->Length() > 0)
playAudio();
}
else
{
TBuf<10> errNum;
errNum.Format(_L("%d"), iStatus);
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKERR);
dataBuffer = dataBuffer->ReAllocL(dataBuffer->Length() + 11);
dataBuffer->Des().Append(errNum);
logWithLookup(*dataBuffer, CLogger::logBluejack);
delete dataBuffer;
// If the bluejack failed, marked as a cached item
// and timestamp it
btDevice[currentDeviceIndex].isBluejacked = statusCached;
btDevice[currentDeviceIndex].lastBluejackedTime.HomeTime();
}
// Start the timeout counter
timeoutCounter.startTimer(this, configData->obexTimeout);
// Disconnect and restart
scannerStatus = isOBEXDisconnect;
iStatus = KRequestPending;
obexClient->Disconnect(iStatus);
SetActive();
}
else if (scannerStatus == isOBEXConnect)
{
timeoutCounter.stopTimer();
if (iStatus == KErrNone)
{
scannerStatus = isOBEXSend;
// Start the timeout counter
timeoutCounter.startTimer(this, configData->obexTimeout);
// Start OBEX Put
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKOBEXPUT);
logWithLookup(*dataBuffer, CLogger::logOBEX);
delete dataBuffer;
//TBuf<20> txt;
//CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKOBEXPUT);
//logWithLookup(txt, CLogger::logOBEX);
iStatus = KRequestPending;
obexClient->Put(*obexFile, iStatus);
SetActive();
}
else
{
TBuf<10> errNum;
errNum.Format(_L("%d"), iStatus);
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKOBEXCONNERR);
dataBuffer = dataBuffer->ReAllocL(dataBuffer->Length() + 11);
dataBuffer->Des().Append(errNum);
logWithLookup(*dataBuffer, CLogger::logOBEX);
delete dataBuffer;
/*
TBuf<30> errText,txt;
CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKOBEXCONNERR);
errText.Format(txt, iStatus);
logWithLookup(errText, CLogger::logOBEX);
*/
startRestTime.HomeTime();
currentNoDevicePause = STACK_COOLOFF_COUNTDOWN;
firstRest = ETrue;
// Mark device as cached and timestamp it
btDevice[currentDeviceIndex].isBluejacked = statusCached;
btDevice[currentDeviceIndex].lastBluejackedTime.HomeTime();
rest();
}
}
else if (scannerStatus == isOBEXSearch)
{
// I could have passed this via iStatus too.
if (obexSearcher.RFCOMMPort > -1)
{
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKOBEXFOUND);
logHelper->updateLog(dataBuffer, 0, CLogger::logOBEX);
delete dataBuffer;
/*
TBuf<30> txt;
CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKOBEXFOUND);
logWithLookup(txt, CLogger::logOBEX);
*/
btDevice[currentDeviceIndex].obexPort = obexSearcher.RFCOMMPort;
obexBTProtoInfo.iTransport.Copy(_L("RFCOMM"));
obexBTProtoInfo.iAddr.SetBTAddr(btDevice[currentDeviceIndex].btDevAddr);
obexBTProtoInfo.iAddr.SetPort(obexSearcher.RFCOMMPort);
if (obexClient)
{
delete obexClient;
obexClient = NULL;
}
obexClient = CObexClient::NewL(obexBTProtoInfo);
scannerStatus = isOBEXConnect;
iStatus = KRequestPending;
// Start the timeout counter
timeoutCounter.startTimer(this, configData->obexTimeout);
// Start OBEX connect
obexClient->Connect(iStatus);
SetActive();
}
else
{
TBuf<10> errNum;
errNum.Format(_L("%d"), iStatus);
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKOBEXSEARCHERR);
dataBuffer = dataBuffer->ReAllocL(dataBuffer->Length() + 11);
dataBuffer->Des().Append(errNum);
logWithLookup(*dataBuffer, CLogger::logOBEX);
delete dataBuffer;
/*
TBuf<30> errText, txt;
CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKOBEXSEARCHERR);
errText.Format(txt, iStatus);
logWithLookup(errText, CLogger::logOBEX);
*/
if (obexRetries > 0)
{
obexRetries--;
iStatus = KRequestPending;
scannerStatus = isOBEXSearch;
obexSearcher.start(&iStatus, &(btDevice[currentDeviceIndex].btDevAddr));
SetActive();
}
else
{
startRestTime.HomeTime();
currentNoDevicePause = STACK_COOLOFF_COUNTDOWN;
firstRest = ETrue;
// Remove device from list
btDevice[currentDeviceIndex].isBluejacked = statusNoDevice;
rest();
}
}
}
else if (scannerStatus == isShutdown)
{
stopScan();
}
else if (scannerStatus == isInquiring)
{
// Found a device?
if (iStatus == KErrNone)
{
TBTSockAddr iBTSockAddr(nameEntry().iAddr);
insertAndUpdateBTList(iBTSockAddr.BTAddr(), nameEntry().iName);
/*
btDevAddr[numBTFound] = iBTSockAddr.BTAddr();
// Sometimes, corrupted memory comes back. Don't know why. We assume
// the first byte must be zero
if (btDevAddr[numBTFound][0] == 0)
{
if (resolveAction != KHostResInquiry)
btNames[numBTFound] = nameEntry().iName;
logWithLookup(_L("Found device"));
numBTFound++;
currentNoDeviceAttempts = 0;
}
*/
iStatus = KRequestPending;
hostResolver.Next(nameEntry, iStatus);
SetActive();
}
else
{
if (hostResolverOpen)
{
hostResolver.Close();
hostResolverOpen = EFalse;
}
/*
TBuf<50> txt;
CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKNODEVICES);
logHelper->updateLog(&txt, 0, CLogger::logScanning);
*/
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKNODEVICES);
logHelper->updateLog(dataBuffer, 0, CLogger::logScanning);
delete dataBuffer;
currentDeviceIndex = -1;
bluejackNextDevice();
}
}
}
TBool CScanner::getNextBTDeviceIndex(void)
{
for (int i = (currentDeviceIndex + 1); i < MAX_BTDEV_ADDR; i++)
{
if (btDevice[i].isBluejacked == statusValidNotBluejacked)
{
currentDeviceIndex = i;
return ETrue;
}
}
currentDeviceIndex = -1;
return EFalse;
}
// Returns TRUE if this device was inserted into the list (i.e. new device) else FALSE
TBool CScanner::insertAndUpdateBTList(TBTDevAddr btDevAddr, TBTDeviceName btDevName)
{
TInt cacheIndexToOverwrite = -1;
TBool isExist = EFalse;
TBool isInserted = EFalse;
TTime currentTime;
TTimeIntervalSeconds interval, oldInterval;
//TBuf<50> txt;
nameEntry().iName.Copy(btDevName);
// Need to be fair to all devices. So take a snapshot of time here rather than in each
// loop iteration
currentTime.HomeTime();
// First, make sure this device does not exist in the list.
for (int i = 0; i < MAX_BTDEV_ADDR; i++)
{
// Check if we found the device before. This means the device entry is either:
// - a non-bluejacked device
// - bluejacked but waiting for decay; OR
// - a cached entry
// In either case, it means we shouldn't insert anything into the array
if (btDevice[i].btDevAddr == btDevAddr)
{
// Is this a device that was found before?
if (btDevice[i].isBluejacked == statusValidNotBluejacked)
{
isExist = ETrue;
currentDeviceIndex = i;
/*
CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCACHED);
logWithLookup(txt, CLogger::logScanning);
*/
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCACHED);
logWithLookup(*dataBuffer, CLogger::logScanning);
delete dataBuffer;
break;
// We can leave the obex port in its unknown state. getNextBluejackDevice()
// will take care of it
}
// Check if it was bluejacked but waiting for decay
else if (btDevice[i].isBluejacked == statusValidBluejacked)
{
if (currentTime.SecondsFrom(btDevice[i].lastBluejackedTime, interval) != 0)
interval = -1;
// Decay still not expired?
if (interval.Int() < configData->decayTime)
{
isExist = ETrue;
// Generate a log entry
currentDeviceIndex = i;
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCACHEDECAY);
logWithLookup(*dataBuffer, CLogger::logScanning);
delete dataBuffer;
//CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCACHEDECAY);
//logWithLookup(txt, CLogger::logScanning);
break;
}
// This means its decay time is up!
else
{
isExist = ETrue;
currentDeviceIndex = i;
/*
CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCACHED);
logWithLookup(txt, CLogger::logScanning);
*/
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCACHED);
logWithLookup(*dataBuffer, CLogger::logScanning);
delete dataBuffer;
btDevice[i].isBluejacked = statusValidNotBluejacked;
break;
}
}
// A cached entry?
else if (btDevice[i].isBluejacked == statusCached)
{
isExist = ETrue;
// Generate a log entry
currentDeviceIndex = i;
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_BJACKCACHED);
logWithLookup(*dataBuffer, CLogger::logScanning);
delete dataBuffer;
/*
CEikonEnv::Static()->ReadResource(txt, R_TBUF_BJACKCACHED);
logWithLookup(txt, CLogger::logScanning);
*/
// Reset the item's status to be a newly found item
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -