Add new FSM event on camera recognition done.
"EV_JAWS_DONE" : "",
"EV_LIFT_DONE" : "",
+ "EV_CAMERA_DONE" : "",
"EV_SWITCH_STRATEGY" : "",
"EV_MOTION_DONE" : "Previously submitted motion is finished",
switch (info->status) {
case NEW_DATA: {
- if (instance->info && (instance->info != last_response)) {
+ if (instance->data_valid && instance->data_valid != last_response) {
ROBOT_LOCK(camera_result);
- robot.target_valid = instance->info;
+ robot.target_valid = instance->target_valid;
ROBOT_UNLOCK(camera_result);
FSM_SIGNAL(MAIN, EV_CAMERA_DONE, NULL);
}
- last_response = instance->info;
+ last_response = instance->data_valid;
break;
}
case DEADLINE:
{
switch(FSM_EVENT) {
case EV_ENTRY:
- /*TODO
- - start camera recognition
- - if valid, touch target, else return target_valid = false
- - load target
- - return target_loaded = true
- */
- robot.target_valid = false;
+ act_camera_recognize(robot.target_color);
FSM_TIMER(1000);
break;
case EV_TIMER:
+ FSM_TIMER(1000);
+ break;
+ case EV_CAMERA_DONE:
+ act_camera_off();
+ if (robot.target_valid) {
+ DBG_PRINT_EVENT("camera: Target valid!");
+ FSM_TRANSITION(get_target_turn);
+ } else {
+ robot.target_loaded = false;
+ SUBFSM_RET(NULL);
+ }
+ break;
+ case EV_EXIT:
+ break;
+ }
+}
+
SUBFSM_RET(NULL);
break;
case EV_START:
octet x;
octet y;
- octet info;
+ boolean data_valid;
+ boolean target_valid;
error error;
};
};