int32_t cam_getFrameChirp(const uint8_t &type, const uint16_t &xOffset, const uint16_t &yOffset, const uint16_t &xWidth, const uint16_t &yWidth, Chirp *chirp) { return cam_getFrameChirpFlags(type, xOffset, yOffset, xWidth, yWidth, chirp); }
bool ButtonMachine::handleSignature() { uint32_t bt; bt = button(); if (m_ledPipe) // if ledpipe, grab frame, but don't flush { cam_getFrameChirpFlags(CAM_GRAB_M1R2, 0, 0, CAM_RES2_WIDTH, CAM_RES2_HEIGHT, g_chirpUsb, 0); ledPipe(); } else if (m_goto!=0) // else grab frame and flush cam_getFrameChirpFlags(CAM_GRAB_M1R2, 0, 0, CAM_RES2_WIDTH, CAM_RES2_HEIGHT, g_chirpUsb); switch(m_goto) { case 0: // wait for button press if (bt) { setTimer(&m_timer); led_setMaxCurrent(g_ledBrightness); // restore default brightness m_goto = 1; led_set(0); } break; case 1: // wait for button timeout if (!bt) m_goto = 0; else if (getTimer(m_timer)>BT_INITIAL_BUTTON_TIMEOUT) { if (cam_getAWB()) m_index = 1; else m_index = 0; setTimer(&m_timer); setLED(); m_goto = 2; } break; case 2: // wait and increment index if (!bt) { flashLED(3); setTimer(&m_timer); if (m_index==0) cam_setAWB(1); else m_ledPipe = true; m_goto = 3; } else if (getTimer(m_timer)>BT_INDEX_CYCLE_TIMEOUT) { setTimer(&m_timer); m_index++; if (m_index==CL_NUM_SIGNATURES+1) m_index = 0; setLED(); } break; case 3: // wait for button down if (bt) { setTimer(&m_timer); m_goto = 4; } else if (getTimer(m_timer)>BT_LIGHTPIPE_TIMEOUT) // abort reset(); break; case 4: // wait for button up if (!bt) { if (m_index==0) { cam_setAWB(0); flashLED(4); } else setSignature(); reset(); // done } else if (getTimer(m_timer)>BT_INITIAL_BUTTON_TIMEOUT) { if (m_index==0) cam_setAWB(0); reset(); m_goto = 5; } break; case 5: // wait for button up only if (!bt) reset(); break; default: reset(); } return m_goto!=0; }