// Wraps DiscoverDevices() to provide a Python method interface. // Arguments: // - boolean value of whether to perform name lookup // // Returns list of (address, name, (service,major,minor)) tuples detailing the // found devices. static PyObject* LightBlue_DiscoverDevices(PyObject* self, PyObject* args) { bool lookupNames; if (!PyArg_ParseTuple(args, "b", &lookupNames)) return NULL; // run the discovery TDeviceDataList devDataList; TInt err = DiscoverDevices(&devDataList, lookupNames); if (err) return SPyErr_SetFromSymbianOSErr(err); // put the results into a python list TInt i; TDeviceData *devData; TBuf8<6*2+5> addrString; PyObject *addrList = PyList_New(0); // python list to hold results for( i=0; i<devDataList.Count(); i++ ) { devData = devDataList[i]; // convert address to string DevAddressToString(devData->iDeviceAddr, addrString); PyObject *devValues; if (lookupNames) { THostName name = devData->iDeviceName; devValues = Py_BuildValue("(s#u#(iii))", addrString.Ptr(), addrString.Length(), // s# - address name.Ptr(), name.Length(), // u# - name devData->iServiceClass, // i - service class devData->iMajorClass, // i - major class devData->iMinorClass // i - minor class ); } else { devValues = Py_BuildValue("(s#O(iii))", addrString.Ptr(), addrString.Length(), // s# - address Py_None, devData->iServiceClass, // i - service class devData->iMajorClass, // i - major class devData->iMinorClass // i - minor class ); } // add tuple to list PyList_Append(addrList, devValues); } devDataList.ResetAndDestroy(); return addrList; }
NS_IMETHODIMP sbCDDeviceMarshall::BeginMonitoring() { nsresult rv; NS_ENSURE_STATE(mCDDeviceService); NS_ASSERTION(IsMonitoring(), "BeginMonitoring() called after StopMonitoring()!"); rv = mCDDeviceService->RegisterListener(this); NS_ENSURE_SUCCESS(rv, rv); rv = DiscoverDevices(); NS_ENSURE_SUCCESS(rv, rv); return NS_OK; }