2.0.4 StateObjects LVRecState
Talk2this wiki
Parent:http://magiclantern.wikia.com/wiki/2.0.4_AJ
Related Page: Event Dispatch tasks
Related Page2: Tasks
Sister page: State Objects
See also: ValSubLists http://magiclantern.wikia.com/wiki/2.0.4_ValSubLists
And there's more: 2.0.4 StateObjects LVRecState
The info below was acquired by sampling state information at 18 times a second.
(ie some of the other states could briefly have been visited ... but only brielfly)
LV state
LV_state 0->2->3->4->2->3->4 (wizzes around). 5% in state 2, 20% in state 4, 75% in state 3. Sometimes (0.1% A state is entered)
When you press magnify LV_state briefly enters -> A -> and -> B -> states
On returning from recording a movie -> C (saving movie to disc) -> D -> back to 2,3,4
LVRec_state
LVRec_state is Zero until Record is pressed: 0 -> briefly to 3 -> 2 (stays here while recording ) -> (then when you stop recording) 6 (stays here until movie saved) -> 0
If you press 'Take photo' button on camera -> 5 ->
Contents |
2.0.4 StateObjects for LiveView: "LVRecState" and "LVState"
Edit
| Pointer to 32 Byte StateObject | List of pairs of Value, Subroutine | Keh? | ValSub Pairs | Total Inputs | Total States |
|---|---|---|---|---|---|
| aAJ_0x44FC_LV_0x2C_LV_StateObj | aAJ_0xFFC79630_LV_VarSubList |
"LVState" Live View State (Not record) |
Inputs x States 23 x 14 = 322 | 23 | 14 |
| aAJ_0x44FC_LV_0x30_LVRec_StateObj | aAJ_0xFFC7A040_LVRec_VarSubList |
"LVRecState" Live View Record State | 7 x 7 = 49 | 7 | 7 |
----- "LVRecState" changing Current_state -----
Edit
+------------------------------+
| AJ_LVREC_CallNextState() | at 0xFF8DAF8C
+------------------------------+
int R0 = LiveViewMgr_struct [ptr to huge 0x29D8 LVMgr struct]
int R1 = "LVRecState" StateObj [ie aAJ_0x44FC_LiveView_struct_0x30_LVRec_StateObj]
int R2 = input [0..6]
Basic logic:
Next_State = [ aAJ_0xFFC7A040_LVRec_VarSubList + 8 x (7 x input + "LVRecState"_cur_state) ]
Next_Sub() = [0x04 + [ aAJ_0xFFC7A040_LVRec_VarSubList + 8 x (7 x input + "LVRecState"_cur_state) ]
Set "LVRecState".CurState = Next_State
Then BR Next_sub() [There's a little table at the Bottom of the State Objects page to show how this is physically listed in memory]
"LVRecState" State Machine as its stored in Memory
Edit
And so if I list the "LVRecState" VarSubList as a matrix with 7 x 7 we can see how the state machine works.
|
Input=0 |
Next State |
Next Sub() |
Input=1
STOP |
Next State |
Next
| |
|---|---|---|---|---|---|---|
| 0 | 3 | AJ_LDR_R0_with_LVState_StateObj() | 1 | 0 | AJ_LVREC_LV_is_already_stopped_n_MovieRecorder_StateMachine() | |
| 0 | 1 | AJ_lvError_ILLEGAL_Event() | 1 | 0 | AJ_LVREC_LV_is_already_stopped_n_MovieRecorder_StateMachine() | |
| 0 | 2 | AJ_lvError_ILLEGAL_Event() | 1 | 1 | AJ_LDR_R0_with_LVState_StateObj() | |
| 0 | 3 | AJ_lvError_ILLEGAL_Event() | 1 | 3 | AJ_lvError_ILLEGAL_Event() | |
| 0 | 4 | AJ_lvError_ILLEGAL_Event() | 1 | 0 | AJ_LVREC_LV_is_already_stopped_n_MovieRecorder_StateMachine() | |
| 0 | 5 | AJ_lvError_ILLEGAL_Event() | 1 | 1 | AJ_LVREC_lvCompleteThumbnail() | |
| 0 | 6 | AJ_lvError_ILLEGAL_Event() | 1 | 1 | AJ_LVREC_lvCompleteThumbnail() |
.
|
Input Guess RESUME |
Next State |
Next Sub() |
Input |
Next State |
Next
| |
|---|---|---|---|---|---|---|
| 2 | 0 | AJ_lvError_ILLEGAL_Event() | 3 | 0 | AJ_LDR_R0_with_LVState_StateObj() | |
| 2 | 1 | AJ_lvError_ILLEGAL_Event() | 3 | 1 | AJ_lvError_ILLEGAL_Event() | |
| 2 | 2 | AJ_lvError_ILLEGAL_Event() | 3 | 6 | AJ_LV_create_task_class() | |
| 2 | 3 | AJ_lvError_ILLEGAL_Event() | 3 | 6 | AJ_LV_create_task_class() | |
| 2 | 4 | AJ_lvError_ILLEGAL_Event() | 3 | 6 | AJ_LVREC_lvIllegalStop() | |
| 2 | 5 | AJ_calls_AJ_JudgeStartLV_n_LVREC_send_MVR_EV_RecRESUME() | 3 | 5 | AJ_lvError_ILLEGAL_Event() | |
| 2 | 6 | AJ_lvError_ILLEGAL_Event() | 3 | 6 | AJ_lvError_ILLEGAL_Event() |
.
|
Input=4 Guess FACE DETECT |
Next State |
Next Sub() |
Input=5 guess CHANGE DISPLAY |
Next State |
Next
| |
|---|---|---|---|---|---|---|
| 4 | 0 | AJ_lvError_ILLEGAL_Event() | 5 | 0 | AJ_lvError_ILLEGAL_Event() | |
| 4 | 0 | AJ_calls_LiveView_n_FaceDetect() | 5 | 0 | AJ_lvError_ILLEGAL_Event() | |
| 4 | 2 | AJ_lvError_ILLEGAL_Event() | 5 | 2 | AJ_lvError_ILLEGAL_Event() | |
| 4 | 3 | AJ_lvError_ILLEGAL_Event() | 5 | 2 | AJ_calls_PROP_LIVE_VIEW_VIEWTYPE_SELECT() | |
| 4 | 4 | AJ_lvError_ILLEGAL_Event() | 5 | 4 | AJ_lvError_ILLEGAL_Event() | |
| 4 | 5 | AJ_lvError_ILLEGAL_Event() | 5 | 5 | AJ_lvError_ILLEGAL_Event() | |
| 4 | 6 | AJ_lvError_ILLEGAL_Event() | 5 | 6 | AJ_lvError_ILLEGAL_Event() |
.
|
Input=6 Guess SUSPEND |
Next State |
Next Sub() |
|---|---|---|
| 6 | 0 | AJ_lvError_ILLEGAL_Event() |
| 6 | 0 | AJ_lvError_ILLEGAL_Event() |
| 6 | 4 | AJ_LVREC_Send_MVR_EV_RECSUSPEND() |
| 6 | 4 | AJ_LVREC_Send_MVR_EV_RECSUSPEND() |
| 6 | 4 | AJ_lvError_ILLEGAL_Event() |
| 6 | 4 | AJ_LVREC_Send_MVR_EV_RECSUSPEND() |
| 6 | 6 | AJ_lvError_ILLEGAL_Event() |
"LVRecState" State Machine listed from the perspective of current State.
Edit
.
Current_state = 0 = INITIAL = RECORD_NOT_ACTIVE
| input |
Next State |
Next Sub() |
|---|---|---|
| 0 |
3 = READY_TO_RECORD | AJ_LDR_R0_with_LVState_StateObj() |
| 1 = STOP | 0 | AJ_LVREC_LV_is_already_stopped_n_MovieRecorder_StateMachine() |
| 2 = RESUME | 0 | AJ_lvError_ILLEGAL_Event() |
| 3= STOP_RECORDING | 0 |
AJ_LDR_R0_with_LVState_StateObj() |
| 4 = FACE DETECT | 0 | AJ_lvError_ILLEGAL_Event() |
| 5 = START_RECORDING | 0 | AJ_lvError_ILLEGAL_Event() |
| 6 = SUSPEND | 0 | AJ_lvError_ILLEGAL_Event() |
.
Current_state = 1 = STOPPED?
| input |
Next State |
Next Sub() |
|---|---|---|
| 0 | 1 | AJ_lvError_ILLEGAL_Event() |
| 1 = STOP | 0 = INITIAL | AJ_LVREC_LV_is_already_stopped_n_MovieRecorder_StateMachine() |
| 2 = RESUME | 1 | AJ_lvError_ILLEGAL_Event() |
| 3= STOP_RECORDING | 1 | AJ_lvError_ILLEGAL_Event() |
| 4 = FACE DETECT | 0 = INITIAL | AJ_calls_LiveView_n_FaceDetect() |
| 5 = START_RECORDING | 0 = INITIAL | AJ_lvError_ILLEGAL_Event() |
| 6 = SUSPEND | 0 = INITIAL | AJ_lvError_ILLEGAL_Event() |
.
Current_state = 2 = RECORDING
| input |
Next State |
Next Sub() |
|---|---|---|
| 0 | 2 | AJ_lvError_ILLEGAL_Event() |
| 1 = STOP | 1 | AJ_LDR_R0_with_LVState_StateObj() |
| 2 = RESUME | 2 | AJ_lvError_ILLEGAL_Event() |
| 3= STOP_RECORDING | 6 = SAVE_MOVIE_TO_CF | AJ_LV_create_task_class() |
| 4 = FACE DETECT | 2 | AJ_lvError_ILLEGAL_Event() |
| 5 = START_RECORDING | 2 | AJ_lvError_ILLEGAL_Event() |
| 6 = SUSPEND | 4 = SUSPENDED | AJ_LVREC_Send_MVR_EV_RECSUSPEND |
.
Current_state = 3 = READY_TO_RECORD (Here Briefly before going to State = 2)
| input |
Next State |
Next Sub() |
|---|---|---|
| 0 | 3 | AJ_lvError_ILLEGAL_Event() |
| 1 = STOP | 3 | AJ_lvError_ILLEGAL_Event() |
| 2 = RESUME | 3 | AJ_lvError_ILLEGAL_Event() |
| 3 = STOP_RECORDING | 6 = SAVE_MOVIE_TO_CF | AJ_LV_create_task_class() |
| 4 = FACE DETECT | 3 = READY_TO_RECORD | AJ_lvError_ILLEGAL_Event() |
| 5 = START_RECORDING | 2 = RECORDING | AJ_calls_PROP_LIVE_VIEW_VIEWTYPE_SELECT() |
| 6 = SUSPEND | 4 = SUSPENDED | AJ_LVREC_Send_MVR_EV_RECSUSPEND() |
.
Current_state = 4 = SUSPENDED
| input |
Next State |
Next Sub() |
|---|---|---|
| 0 | 4 | AJ_lvError_ILLEGAL_Event() |
| 1 = STOP | 0 = INITIAL | AJ_LVREC_LV_is_already_stopped_n_MovieRecorder_StateMachine() |
| 2 = RESUME | 4 | AJ_lvError_ILLEGAL_Event() |
| 3 = STOP_RECORDING | 6 = SAVE_MOVIE_TO_CF | AJ_LVREC_lvIllegalStop() |
| 4 = FACE DETECT | 4 | AJ_lvError_ILLEGAL_Event() |
| 5 = START_RECORDING | 4 | AJ_lvError_ILLEGAL_Event() |
| 6 = SUSPEND | 4 | AJ_lvError_ILLEGAL_Event() |
.
Current_state = 5 = TAKE_PHOTO (ie in the middle of a Movie)
| input |
Next State |
Next Sub() |
|---|---|---|
| 0 | 5 | AJ_lvError_ILLEGAL_Event() |
| 1 = STOP | 1 = STOPPED? | AJ_LVREC_lvCompleteThumbnail() |
| 2 = RESUME | 3 = READY_TO_RECORD | AJ_calls_AJ_JudgeStartLV_n_LVREC_send_MVR_EV_RecRESUME() |
| 3= RECORD_BUTTON | 5 | AJ_lvError_ILLEGAL_Event() |
| 4 = FACE DETECT | 5 | AJ_lvError_ILLEGAL_Event() |
| 5 = START_RECORDING | 5 | AJ_lvError_ILLEGAL_Event() |
| 6 = SUSPEND | 4= SUSPENDED | AJ_LVREC_Send_MVR_EV_RECSUSPEND() |
.
Current_state = 6 = SAVE MOVIE TO CF (in this state before returning to state 0).
| input |
Next State |
Next Sub() |
|---|---|---|
| 0 | 6 | AJ_lvError_ILLEGAL_Event() |
| 1 = STOP | 1 = STOPPED? | AJ_LVREC_lvCompleteThumbnail() |
| 2 = RESUME | 6 | AJ_lvError_ILLEGAL_Event() |
| 3= STOP_RECORDING | 6 | AJ_lvError_ILLEGAL_Event() |
| 4 = FACE DETECT | 6 | AJ_lvError_ILLEGAL_Event() |
| 5 = START_RECORDING | 6 | AJ_lvError_ILLEGAL_Event() |
| 6 = SUSPEND | 6 | AJ_lvError_ILLEGAL_Event() |
.