Search in sources :

Example 1 with PebbleMisfitSampleProvider

use of nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleMisfitSampleProvider in project Gadgetbridge by Freeyourgadget.

the class AppMessageHandlerMisfit method handleMessage.

@Override
public GBDeviceEvent[] handleMessage(ArrayList<Pair<Integer, Object>> pairs) {
    GBDevice device = getDevice();
    for (Pair<Integer, Object> pair : pairs) {
        switch(pair.first) {
            case KEY_INCOMING_DATA_BEGIN:
                LOG.info("incoming data start");
                break;
            case KEY_INCOMING_DATA_END:
                LOG.info("incoming data end");
                break;
            case KEY_INCOMING_DATA:
                byte[] data = (byte[]) pair.second;
                ByteBuffer buf = ByteBuffer.wrap(data);
                buf.order(ByteOrder.LITTLE_ENDIAN);
                int timestamp = buf.getInt();
                int key = buf.getInt();
                int samples = (data.length - 8) / 2;
                if (samples <= 0) {
                    break;
                }
                if (mPebbleProtocol.mFwMajor < 3) {
                    timestamp -= SimpleTimeZone.getDefault().getOffset(timestamp * 1000L) / 1000;
                }
                Date startDate = new Date((long) timestamp * 1000L);
                Date endDate = new Date((long) (timestamp + samples * 60) * 1000L);
                LOG.info("got data from " + startDate + " to " + endDate);
                int totalSteps = 0;
                PebbleMisfitSample[] misfitSamples = new PebbleMisfitSample[samples];
                try (DBHandler db = GBApplication.acquireDB()) {
                    PebbleMisfitSampleProvider sampleProvider = new PebbleMisfitSampleProvider(device, db.getDaoSession());
                    Long userId = DBHelper.getUser(db.getDaoSession()).getId();
                    Long deviceId = DBHelper.getDevice(getDevice(), db.getDaoSession()).getId();
                    for (int i = 0; i < samples; i++) {
                        short sample = buf.getShort();
                        misfitSamples[i] = new PebbleMisfitSample(timestamp + i * 60, deviceId, userId, sample & 0xffff);
                        misfitSamples[i].setProvider(sampleProvider);
                        int steps = misfitSamples[i].getSteps();
                        totalSteps += steps;
                        LOG.info("got steps for sample " + i + " : " + steps + "(" + Integer.toHexString(sample & 0xffff) + ")");
                    }
                    LOG.info("total steps for above period: " + totalSteps);
                    sampleProvider.addGBActivitySamples(misfitSamples);
                } catch (Exception e) {
                    LOG.error("Error acquiring database", e);
                    return null;
                }
                break;
            default:
                LOG.info("unhandled key: " + pair.first);
                break;
        }
    }
    // always ack
    GBDeviceEventSendBytes sendBytesAck = new GBDeviceEventSendBytes();
    sendBytesAck.encodedBytes = mPebbleProtocol.encodeApplicationMessageAck(mUUID, mPebbleProtocol.last_id);
    return new GBDeviceEvent[] { sendBytesAck };
}
Also used : GBDeviceEvent(nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent) ByteBuffer(java.nio.ByteBuffer) Date(java.util.Date) GBDevice(nodomain.freeyourgadget.gadgetbridge.impl.GBDevice) DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) PebbleMisfitSampleProvider(nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleMisfitSampleProvider) GBDeviceEventSendBytes(nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes) PebbleMisfitSample(nodomain.freeyourgadget.gadgetbridge.entities.PebbleMisfitSample)

Aggregations

ByteBuffer (java.nio.ByteBuffer)1 Date (java.util.Date)1 DBHandler (nodomain.freeyourgadget.gadgetbridge.database.DBHandler)1 GBDeviceEvent (nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent)1 GBDeviceEventSendBytes (nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes)1 PebbleMisfitSampleProvider (nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleMisfitSampleProvider)1 PebbleMisfitSample (nodomain.freeyourgadget.gadgetbridge.entities.PebbleMisfitSample)1 GBDevice (nodomain.freeyourgadget.gadgetbridge.impl.GBDevice)1