Search in sources :

Example 1 with PebbleMorpheuzSampleProvider

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

the class AppMessageHandlerMorpheuz method handleMessage.

@Override
public GBDeviceEvent[] handleMessage(ArrayList<Pair<Integer, Object>> pairs) {
    int ctrl_message = 0;
    GBDeviceEventSleepMonitorResult sleepMonitorResult = null;
    for (Pair<Integer, Object> pair : pairs) {
        if (Objects.equals(pair.first, keyTransmit)) {
            sleepMonitorResult = new GBDeviceEventSleepMonitorResult();
            sleepMonitorResult.smartalarm_from = smartalarm_from;
            sleepMonitorResult.smartalarm_to = smartalarm_to;
            sleepMonitorResult.alarm_gone_off = alarm_gone_off;
            sleepMonitorResult.recording_base_timestamp = recording_base_timestamp;
            ctrl_message |= CTRL_TRANSMIT_DONE;
        } else if (pair.first.equals(keyGoneoff)) {
            alarm_gone_off = (int) pair.second;
            LOG.info("got gone off: " + alarm_gone_off / 60 + ":" + alarm_gone_off % 60);
            ctrl_message |= CTRL_DO_NEXT | CTRL_GONEOFF_DONE;
        } else if (pair.first.equals(keyPoint)) {
            if (recording_base_timestamp == -1) {
                // we have no base timestamp but received points, stop this
                ctrl_message = CTRL_VERSION_DONE | CTRL_GONEOFF_DONE | CTRL_TRANSMIT_DONE | CTRL_SET_LAST_SENT;
            } else {
                int index = ((int) pair.second >> 16);
                int intensity = ((int) pair.second & 0xffff);
                LOG.info("got point:" + index + " " + intensity);
                if (index >= 0) {
                    try (DBHandler db = GBApplication.acquireDB()) {
                        Long userId = DBHelper.getUser(db.getDaoSession()).getId();
                        Long deviceId = DBHelper.getDevice(getDevice(), db.getDaoSession()).getId();
                        PebbleMorpheuzSampleProvider sampleProvider = new PebbleMorpheuzSampleProvider(getDevice(), db.getDaoSession());
                        PebbleMorpheuzSample sample = new PebbleMorpheuzSample(recording_base_timestamp + index * 600, deviceId, userId, intensity);
                        sample.setProvider(sampleProvider);
                        sampleProvider.addGBActivitySample(sample);
                    } catch (Exception e) {
                        LOG.error("Error acquiring database", e);
                    }
                }
                ctrl_message |= CTRL_SET_LAST_SENT | CTRL_DO_NEXT;
            }
        } else if (pair.first.equals(keyFrom)) {
            smartalarm_from = (int) pair.second;
            LOG.info("got from: " + smartalarm_from / 60 + ":" + smartalarm_from % 60);
            ctrl_message |= CTRL_SET_LAST_SENT | CTRL_DO_NEXT;
        } else if (pair.first.equals(keyTo)) {
            smartalarm_to = (int) pair.second;
            LOG.info("got to: " + smartalarm_to / 60 + ":" + smartalarm_to % 60);
            ctrl_message |= CTRL_SET_LAST_SENT | CTRL_DO_NEXT;
        } else if (pair.first.equals(keyVersion)) {
            int version = (int) pair.second;
            LOG.info("got version: " + ((float) version / 10.0f));
            ctrl_message |= CTRL_VERSION_DONE;
        } else if (pair.first.equals(keyBase)) {
            // fix timestamp
            TimeZone tz = SimpleTimeZone.getDefault();
            recording_base_timestamp = (int) pair.second - (tz.getOffset(System.currentTimeMillis())) / 1000;
            LOG.info("got base: " + recording_base_timestamp);
            ctrl_message |= CTRL_SET_LAST_SENT | CTRL_DO_NEXT;
        } else if (pair.first.equals(keyAutoReset)) {
            ctrl_message |= CTRL_SET_LAST_SENT | CTRL_DO_NEXT;
        } else if (pair.first.equals(keySnoozes)) {
            ctrl_message |= CTRL_SNOOZES_DONE | CTRL_DO_NEXT;
        } else if (pair.first.equals(keyFault)) {
            LOG.info("fault code: " + (int) pair.second);
            ctrl_message |= CTRL_DO_NEXT;
        } else {
            LOG.info("unhandled key: " + pair.first);
        }
    }
    // always ack
    GBDeviceEventSendBytes sendBytesAck = new GBDeviceEventSendBytes();
    sendBytesAck.encodedBytes = mPebbleProtocol.encodeApplicationMessageAck(mUUID, mPebbleProtocol.last_id);
    // sometimes send control message
    GBDeviceEventSendBytes sendBytesCtrl = null;
    if (ctrl_message > 0) {
        sendBytesCtrl = new GBDeviceEventSendBytes();
        sendBytesCtrl.encodedBytes = encodeMorpheuzMessage(keyCtrl, ctrl_message);
    }
    // ctrl and sleep monitor might be null, thats okay
    return new GBDeviceEvent[] { sendBytesAck, sendBytesCtrl, sleepMonitorResult };
}
Also used : GBDeviceEvent(nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent) PebbleMorpheuzSample(nodomain.freeyourgadget.gadgetbridge.entities.PebbleMorpheuzSample) IOException(java.io.IOException) JSONException(org.json.JSONException) PebbleMorpheuzSampleProvider(nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleMorpheuzSampleProvider) DBHandler(nodomain.freeyourgadget.gadgetbridge.database.DBHandler) TimeZone(java.util.TimeZone) SimpleTimeZone(java.util.SimpleTimeZone) JSONObject(org.json.JSONObject) GBDeviceEventSendBytes(nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes) GBDeviceEventSleepMonitorResult(nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSleepMonitorResult)

Aggregations

IOException (java.io.IOException)1 SimpleTimeZone (java.util.SimpleTimeZone)1 TimeZone (java.util.TimeZone)1 DBHandler (nodomain.freeyourgadget.gadgetbridge.database.DBHandler)1 GBDeviceEvent (nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEvent)1 GBDeviceEventSendBytes (nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSendBytes)1 GBDeviceEventSleepMonitorResult (nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventSleepMonitorResult)1 PebbleMorpheuzSampleProvider (nodomain.freeyourgadget.gadgetbridge.devices.pebble.PebbleMorpheuzSampleProvider)1 PebbleMorpheuzSample (nodomain.freeyourgadget.gadgetbridge.entities.PebbleMorpheuzSample)1 JSONException (org.json.JSONException)1 JSONObject (org.json.JSONObject)1