void Remote::event() { switch(bt.event) { case BT_EVENT_DISCONNECT: notify.unWatch(&remote_notify); // stop all active notifications //debug(STR("REMOTE::EVENT: Disconnected\r\n")); connected = 0; break; case BT_EVENT_CONNECT: connected = 1; //debug(STR("REMOTE::EVENT: Connected\r\n")); request(REMOTE_MODEL); break; case BT_EVENT_DATA: switch(bt.dataId) { case REMOTE_STATUS: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_SEND && bt.dataSize == sizeof(timer_status)) memcpy(&status, bt.data, bt.dataSize); if(bt.dataType == REMOTE_TYPE_NOTIFY_WATCH) notify.watch(REMOTE_STATUS, (void *)&timer.status, sizeof(timer.status), &remote_notify); if(bt.dataType == REMOTE_TYPE_NOTIFY_UNWATCH) notify.unWatch(REMOTE_STATUS, &remote_notify); break; case REMOTE_PROGRAM: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_SEND && bt.dataSize == sizeof(program)) memcpy(¤t, bt.data, bt.dataSize); if(bt.dataType == REMOTE_TYPE_SET && bt.dataSize == sizeof(program)) { memcpy((void*)&timer.current, bt.data, bt.dataSize); menu.refresh(); } if(bt.dataType == REMOTE_TYPE_NOTIFY_WATCH) notify.watch(REMOTE_PROGRAM, (void *)&timer.current, sizeof(timer.current), &remote_notify); if(bt.dataType == REMOTE_TYPE_NOTIFY_UNWATCH) notify.unWatch(REMOTE_PROGRAM, &remote_notify); break; case REMOTE_BATTERY: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_SEND) memcpy(&battery, bt.data, bt.dataSize); if(bt.dataType == REMOTE_TYPE_NOTIFY_WATCH) notify.watch(REMOTE_BATTERY, (void *)&battery_percent, sizeof(battery_percent), &remote_notify); if(bt.dataType == REMOTE_TYPE_NOTIFY_UNWATCH) notify.unWatch(REMOTE_BATTERY, &remote_notify); break; case REMOTE_START: if(bt.dataType == REMOTE_TYPE_REQUEST) send(timer.running ? REMOTE_START : REMOTE_STOP, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_SEND) running = 1; if(bt.dataType == REMOTE_TYPE_SET) runHandler(FR_KEY, 1); if(bt.dataType == REMOTE_TYPE_NOTIFY_WATCH) notify.watch(REMOTE_START, (void *)&timer.running, sizeof(timer.running), &remote_notify); if(bt.dataType == REMOTE_TYPE_NOTIFY_UNWATCH) notify.unWatch(REMOTE_START, &remote_notify); break; case REMOTE_STOP: if(bt.dataType == REMOTE_TYPE_REQUEST) send(timer.running ? REMOTE_START : REMOTE_STOP, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_SEND) running = 0; if(bt.dataType == REMOTE_TYPE_SET) timerStop(FR_KEY, 1); if(bt.dataType == REMOTE_TYPE_NOTIFY_WATCH) notify.watch(REMOTE_START, (void *)&timer.running, sizeof(timer.running), &remote_notify); if(bt.dataType == REMOTE_TYPE_NOTIFY_UNWATCH) notify.unWatch(REMOTE_START, &remote_notify); break; case REMOTE_BULB_START: if(bt.dataType == REMOTE_TYPE_SET) timer.bulbStart(); break; case REMOTE_BULB_END: if(bt.dataType == REMOTE_TYPE_SET) timer.bulbEnd(); break; case REMOTE_CAPTURE: if(bt.dataType == REMOTE_TYPE_SET) timer.capture(); break; case REMOTE_MODEL: if(bt.dataType == REMOTE_TYPE_REQUEST) send(REMOTE_MODEL, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_SEND) memcpy(&model, bt.data, bt.dataSize); break; case REMOTE_FIRMWARE: case REMOTE_BT_FW_VERSION: case REMOTE_PROTOCOL_VERSION: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); break; case REMOTE_CAMERA_FPS: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_NOTIFY_WATCH) notify.watch(REMOTE_CAMERA_FPS, (void *)&conf.cameraFPS, sizeof(conf.cameraFPS), &remote_notify); if(bt.dataType == REMOTE_TYPE_NOTIFY_UNWATCH) notify.unWatch(REMOTE_CAMERA_FPS, &remote_notify); break; case REMOTE_CAMERA_MAKE: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_NOTIFY_WATCH) notify.watch(REMOTE_CAMERA_MAKE, (void *)&conf.cameraMake, sizeof(conf.cameraMake), &remote_notify); if(bt.dataType == REMOTE_TYPE_NOTIFY_UNWATCH) notify.unWatch(REMOTE_CAMERA_MAKE, &remote_notify); break; case REMOTE_DEBUG: if(bt.dataType == REMOTE_TYPE_SEND) { bt.data[bt.dataSize] = 0; debug_remote(bt.data); } break; case REMOTE_ISO: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_SET && bt.dataSize == sizeof(uint8_t)) { uint8_t tmp; memcpy((void*)&tmp, bt.data, bt.dataSize); camera.setISO(tmp); } break; case REMOTE_APERTURE: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_SET && bt.dataSize == sizeof(uint8_t)) { uint8_t tmp; memcpy((void*)&tmp, bt.data, bt.dataSize); camera.setAperture(tmp); } break; case REMOTE_SHUTTER: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_SET && bt.dataSize == sizeof(uint8_t)) { uint8_t tmp; memcpy((void*)&tmp, bt.data, bt.dataSize); camera.setShutter(tmp); } break; case REMOTE_THUMBNAIL: if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); break; case REMOTE_VIDEO: if(bt.dataType == REMOTE_TYPE_SET && bt.dataSize == sizeof(uint8_t)) { uint8_t tmp; memcpy((void*)&tmp, bt.data, bt.dataSize); if(tmp) camera.videoStart(); else camera.videoStop(); } if(bt.dataType == REMOTE_TYPE_SEND && bt.dataSize == sizeof(uint8_t)) { uint8_t tmp; memcpy((void*)&tmp, bt.data, bt.dataSize); if(tmp) recording = true; else recording = false; } if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_NOTIFY_WATCH) notify.watch(REMOTE_VIDEO, (void *)&camera.recording, sizeof(camera.recording), &remote_notify); if(bt.dataType == REMOTE_TYPE_NOTIFY_UNWATCH) notify.unWatch(REMOTE_VIDEO, &remote_notify); break; case REMOTE_LIVEVIEW: if(bt.dataType == REMOTE_TYPE_SET && bt.dataSize == sizeof(uint8_t)) { uint8_t tmp; memcpy((void*)&tmp, bt.data, bt.dataSize); if(tmp) camera.liveView(tmp); } if(bt.dataType == REMOTE_TYPE_SEND && bt.dataSize == sizeof(uint8_t)) { uint8_t tmp; memcpy((void*)&tmp, bt.data, bt.dataSize); if(tmp) modeLiveView = true; else modeLiveView = false; } if(bt.dataType == REMOTE_TYPE_REQUEST) send(bt.dataId, REMOTE_TYPE_SEND); if(bt.dataType == REMOTE_TYPE_NOTIFY_WATCH) notify.watch(REMOTE_LIVEVIEW, (void *)&camera.modeLiveView, sizeof(camera.modeLiveView), &remote_notify); if(bt.dataType == REMOTE_TYPE_NOTIFY_UNWATCH) notify.unWatch(REMOTE_LIVEVIEW, &remote_notify); break; default: return; } bt.event = BT_EVENT_NULL; break; } requestActive = 0; }
volatile char cableRelease(char key, char first) { static char status; //, cable; if(first) { status = 0; //cable = 0; lcd.cls(); menu.setTitle(TEXT("Cable Remote")); menu.setBar(TEXT("Bulb"), TEXT("Photo")); lcd.update(); timer.half(); } if(key == FL_KEY) { if(status != 1) { status = 1; lcd.eraseBox(8, 18, 8 + 6 * 11, 26); lcd.writeString(8, 18, TEXT("(BULB OPEN)")); timer.bulbStart(); lcd.update(); } else { status = 0; lcd.eraseBox(8, 18, 8 + 6 * 11, 26); timer.bulbEnd(); lcd.update(); } } else if(key == FR_KEY && status != 1) { status = 0; lcd.eraseBox(8, 18, 8 + 6 * 11, 26); timer.capture(); lcd.update(); } else if(key != 0) { status = 0; lcd.eraseBox(8, 18, 8 + 6 * 11, 26); timer.half(); lcd.update(); } /* if(timer.cableIsConnected()) { if(cable == 0) { cable = 1; lcd.writeStringTiny(6, 28, TEXT("Cable Connected")); lcd.update(); } } else { if(cable == 1) { cable = 0; lcd.eraseBox(6, 28, 6 + 15 * 5, 36); lcd.update(); } } */ if(key == LEFT_KEY) { timer.off(); return FN_CANCEL; } return FN_CONTINUE; }