Search in sources :

Example 6 with Device

use of nodomain.freeyourgadget.gadgetbridge.entities.Device in project Gadgetbridge by Freeyourgadget.

the class AbstractDeviceCoordinator method deleteDevice.

@Override
public void deleteDevice(final GBDevice gbDevice) throws GBException {
    LOG.info("will try to delete device: " + gbDevice.getName());
    if (gbDevice.isConnected() || gbDevice.isConnecting()) {
        GBApplication.deviceService().disconnect();
    }
    try (DBHandler dbHandler = GBApplication.acquireDB()) {
        DaoSession session = dbHandler.getDaoSession();
        Device device = DBHelper.findDevice(gbDevice, session);
        if (device != null) {
            deleteDevice(gbDevice, device, session);
            QueryBuilder<?> qb = session.getDeviceAttributesDao().queryBuilder();
            qb.where(DeviceAttributesDao.Properties.DeviceId.eq(device.getId())).buildDelete().executeDeleteWithoutDetachingEntities();
            session.getDeviceDao().delete(device);
        } else {
            LOG.info("device to delete not found in db: " + gbDevice);
        }
    } catch (Exception e) {
        throw new GBException("Error deleting device: " + e.getMessage(), e);
    }
}
Also used : DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) BluetoothDevice(android.bluetooth.BluetoothDevice) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) GBException(nodomain.freeyourgadget.gadgetbridge.GBException) GBException(nodomain.freeyourgadget.gadgetbridge.GBException) DaoSession(nodomain.freeyourgadget.gadgetbridge.entities.DaoSession)

Example 7 with Device

use of nodomain.freeyourgadget.gadgetbridge.entities.Device in project Gadgetbridge by Freeyourgadget.

the class EntitiesTest method testDeviceAttributes.

@Test
public void testDeviceAttributes() throws Exception {
    GBDevice dummyGBDevice = createDummyGDevice("00:00:00:00:02");
    dummyGBDevice.setFirmwareVersion("1.0");
    Device deviceOld = DBHelper.getDevice(dummyGBDevice, daoSession);
    assertNotNull(deviceOld);
    List<DeviceAttributes> attrListOld = deviceOld.getDeviceAttributesList();
    assertEquals(1, attrListOld.size());
    assertEquals("1.0", attrListOld.get(0).getFirmwareVersion1());
    assertEquals("1.0", DBHelper.getDeviceAttributes(deviceOld).getFirmwareVersion1());
    // some time passes, firmware update occurs
    Thread.sleep(2 * 1000);
    dummyGBDevice.setFirmwareVersion("2.0");
    Device deviceNew = DBHelper.getDevice(dummyGBDevice, daoSession);
    assertNotNull(deviceNew);
    List<DeviceAttributes> attrListNew = deviceNew.getDeviceAttributesList();
    assertEquals(2, attrListNew.size());
    assertEquals("2.0", attrListNew.get(0).getFirmwareVersion1());
    assertEquals("1.0", attrListNew.get(1).getFirmwareVersion1());
    assertEquals("2.0", DBHelper.getDeviceAttributes(deviceNew).getFirmwareVersion1());
}
Also used : GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) DeviceAttributes(nodomain.freeyourgadget.gadgetbridge.entities.DeviceAttributes) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) Test(org.junit.Test)

Example 8 with Device

use of nodomain.freeyourgadget.gadgetbridge.entities.Device in project Gadgetbridge by Freeyourgadget.

the class SampleProviderTest method testSamples.

@Test
public void testSamples() {
    MiBandSampleProvider sampleProvider = new MiBandSampleProvider(dummyGBDevice, daoSession);
    User user = DBHelper.getUser(daoSession);
    assertNotNull(user);
    assertNotNull(user.getId());
    Device device = DBHelper.getDevice(dummyGBDevice, daoSession);
    assertNotNull(device);
    MiBandActivitySample s1 = createSample(sampleProvider, MiBandSampleProvider.TYPE_ACTIVITY, 100, 10, 70, 1000, user, device);
    sampleProvider.addGBActivitySample(s1);
    // add again, should not throw or fail
    sampleProvider.addGBActivitySample(s1);
    MiBandActivitySample s2 = createSample(sampleProvider, MiBandSampleProvider.TYPE_ACTIVITY, 200, 20, 80, 1030, user, device);
    sampleProvider.addGBActivitySample(s2);
    MiBandActivitySample s3 = createSample(sampleProvider, MiBandSampleProvider.TYPE_DEEP_SLEEP, 1200, 10, 62, 4030, user, device);
    MiBandActivitySample s4 = createSample(sampleProvider, MiBandSampleProvider.TYPE_LIGHT_SLEEP, 2000, 10, 60, 4030, user, device);
    sampleProvider.addGBActivitySamples(new MiBandActivitySample[] { s3, s4 });
    // first checks for irrelevant timestamps => no samples
    List<MiBandActivitySample> samples = sampleProvider.getAllActivitySamples(0, 0);
    assertEquals(0, samples.size());
    samples = sampleProvider.getAllActivitySamples(-1, 1);
    assertEquals(0, samples.size());
    samples = sampleProvider.getAllActivitySamples(1, -1);
    assertEquals(0, samples.size());
    // now specific activity kinds
    samples = sampleProvider.getActivitySamples(0, 0);
    assertEquals(0, samples.size());
    samples = sampleProvider.getActivitySamples(-1, 1);
    assertEquals(0, samples.size());
    samples = sampleProvider.getActivitySamples(1, -1);
    assertEquals(0, samples.size());
    // and sleep
    samples = sampleProvider.getSleepSamples(0, 0);
    assertEquals(0, samples.size());
    samples = sampleProvider.getSleepSamples(-1, 1);
    assertEquals(0, samples.size());
    samples = sampleProvider.getSleepSamples(1, -1);
    assertEquals(0, samples.size());
    // finally checks for existing timestamps
    List<MiBandActivitySample> allSamples = sampleProvider.getAllActivitySamples(0, 10000);
    assertEquals(4, allSamples.size());
    List<MiBandActivitySample> activitySamples = sampleProvider.getActivitySamples(0, 10000);
    assertEquals(2, activitySamples.size());
    List<MiBandActivitySample> sleepSamples = sampleProvider.getSleepSamples(0, 10000);
    assertEquals(2, sleepSamples.size());
    // now with more strict time ranges
    allSamples = sampleProvider.getAllActivitySamples(0, 1300);
    assertEquals(3, allSamples.size());
    activitySamples = sampleProvider.getActivitySamples(10, 150);
    assertEquals(1, activitySamples.size());
    sleepSamples = sampleProvider.getSleepSamples(1500, 2500);
    assertEquals(1, sleepSamples.size());
}
Also used : User(nodomain.freeyourgadget.gadgetbridge.entities.User) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) MiBandSampleProvider(nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandSampleProvider) MiBandActivitySample(nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample) Test(org.junit.Test)

Example 9 with Device

use of nodomain.freeyourgadget.gadgetbridge.entities.Device in project Gadgetbridge by Freeyourgadget.

the class FetchActivityOperation method flushActivityDataHolder.

/**
     * empty the local buffer for activity data, arrange the values received in groups of three and
     * store them in the DB
     */
private void flushActivityDataHolder() {
    if (activityStruct == null) {
        LOG.debug("nothing to flush, struct is already null");
        return;
    }
    int bpm = getBytesPerMinuteOfActivityData();
    LOG.debug("flushing activity data samples: " + activityStruct.activityDataHolderProgress / bpm);
    byte category, intensity, steps, heartrate = 0;
    try (DBHandler dbHandler = GBApplication.acquireDB()) {
        MiBandSampleProvider provider = new MiBandSampleProvider(getDevice(), dbHandler.getDaoSession());
        User user = DBHelper.getUser(dbHandler.getDaoSession());
        Device device = DBHelper.getDevice(getDevice(), dbHandler.getDaoSession());
        int minutes = 0;
        try {
            int timestampInSeconds = (int) (activityStruct.activityDataTimestampProgress.getTimeInMillis() / 1000);
            if ((activityStruct.activityDataHolderProgress % bpm) != 0) {
                throw new IllegalStateException("Unexpected data, progress should be multiple of " + bpm + ": " + activityStruct.activityDataHolderProgress);
            }
            int numSamples = activityStruct.activityDataHolderProgress / bpm;
            MiBandActivitySample[] samples = new MiBandActivitySample[numSamples];
            for (int i = 0; i < activityStruct.activityDataHolderProgress; i += bpm) {
                category = activityStruct.activityDataHolder[i];
                intensity = activityStruct.activityDataHolder[i + 1];
                steps = activityStruct.activityDataHolder[i + 2];
                if (hasExtendedActivityData) {
                    heartrate = activityStruct.activityDataHolder[i + 3];
                //                        LOG.debug("heartrate received: " + (heartrate & 0xff));
                }
                MiBandActivitySample sample = getSupport().createActivitySample(device, user, timestampInSeconds, provider);
                sample.setRawIntensity(intensity & 0xff);
                sample.setSteps(steps & 0xff);
                sample.setRawKind(category & 0xff);
                sample.setHeartRate(heartrate & 0xff);
                samples[minutes] = sample;
                if (LOG.isDebugEnabled()) {
                    LOG.debug("sample: " + samples[minutes]);
                }
                // next minute
                minutes++;
                timestampInSeconds += 60;
            }
            provider.addGBActivitySamples(samples);
        } finally {
            activityStruct.bufferFlushed(minutes);
        }
    } catch (Exception ex) {
        GB.toast(getContext(), ex.getMessage(), Toast.LENGTH_LONG, GB.ERROR, ex);
    }
}
Also used : DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) User(nodomain.freeyourgadget.gadgetbridge.entities.User) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) MiBandSampleProvider(nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandSampleProvider) MiBandActivitySample(nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample) IOException(java.io.IOException)

Example 10 with Device

use of nodomain.freeyourgadget.gadgetbridge.entities.Device in project Gadgetbridge by Freeyourgadget.

the class PebblePairingActivity method getMatchingParentDeviceFromDB.

private GBDevice getMatchingParentDeviceFromDB(BluetoothDevice btDevice) {
    String expectedSuffix = btDevice.getName();
    expectedSuffix = expectedSuffix.replace("Pebble-LE ", "");
    expectedSuffix = expectedSuffix.replace("Pebble Time LE ", "");
    expectedSuffix = expectedSuffix.substring(0, 2) + ":" + expectedSuffix.substring(2);
    LOG.info("will try to find a Pebble with BT address suffix " + expectedSuffix);
    GBDevice gbDevice = null;
    try (DBHandler dbHandler = GBApplication.acquireDB()) {
        DaoSession session = dbHandler.getDaoSession();
        DeviceDao deviceDao = session.getDeviceDao();
        Query<Device> query = deviceDao.queryBuilder().where(DeviceDao.Properties.Type.eq(1), DeviceDao.Properties.Identifier.like("%" + expectedSuffix)).build();
        List<Device> devices = query.list();
        if (devices.size() == 0) {
            GB.toast("Please pair your non-LE Pebble before pairing the LE one", Toast.LENGTH_SHORT, GB.INFO);
            returnToPairingActivity();
            return null;
        } else if (devices.size() > 1) {
            GB.toast("Can not match this Pebble LE to a unique device", Toast.LENGTH_SHORT, GB.INFO);
            returnToPairingActivity();
            return null;
        }
        DeviceHelper deviceHelper = DeviceHelper.getInstance();
        gbDevice = deviceHelper.toGBDevice(devices.get(0));
        gbDevice.setVolatileAddress(btDevice.getAddress());
    } catch (Exception e) {
        GB.toast("Error retrieving devices from database", Toast.LENGTH_SHORT, GB.ERROR);
        returnToPairingActivity();
        return null;
    }
    return gbDevice;
}
Also used : DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) BluetoothDevice(android.bluetooth.BluetoothDevice) Device(nodomain.freeyourgadget.gadgetbridge.entities.Device) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) DeviceHelper(nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper) DeviceDao(nodomain.freeyourgadget.gadgetbridge.entities.DeviceDao) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) DaoSession(nodomain.freeyourgadget.gadgetbridge.entities.DaoSession)

Aggregations

Device (nodomain.freeyourgadget.gadgetbridge.entities.Device)14 GBDevice (nodomain.freeyourgadget.gadgetbridge.impl.GBDevice)12 DBHandler (nodomain.freeyourgadget.gadgetbridge.database.DBHandler)4 MiBandSampleProvider (nodomain.freeyourgadget.gadgetbridge.devices.miband.MiBandSampleProvider)3 DaoSession (nodomain.freeyourgadget.gadgetbridge.entities.DaoSession)3 MiBandActivitySample (nodomain.freeyourgadget.gadgetbridge.entities.MiBandActivitySample)3 User (nodomain.freeyourgadget.gadgetbridge.entities.User)3 Test (org.junit.Test)3 BluetoothDevice (android.bluetooth.BluetoothDevice)2 Property (de.greenrobot.dao.Property)2 IOException (java.io.IOException)2 GregorianCalendar (java.util.GregorianCalendar)2 DeviceAttributes (nodomain.freeyourgadget.gadgetbridge.entities.DeviceAttributes)2 DeviceDao (nodomain.freeyourgadget.gadgetbridge.entities.DeviceDao)2 NonNull (android.support.annotation.NonNull)1 Nullable (android.support.annotation.Nullable)1 Calendar (java.util.Calendar)1 GBException (nodomain.freeyourgadget.gadgetbridge.GBException)1 HPlusHealthActivityOverlay (nodomain.freeyourgadget.gadgetbridge.entities.HPlusHealthActivityOverlay)1 HPlusHealthActivitySample (nodomain.freeyourgadget.gadgetbridge.entities.HPlusHealthActivitySample)1