From f698fe389abad60dcc14253761c9904004172712 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Tue, 21 Feb 2017 18:50:37 +0100 Subject: [PATCH] [Update] Loop -> implemented information cache (action/current state/states) + loop minimum" [Todo] Implement loop function using actions/states [Done] Implemented first auth verification (if in list but no action check) --- lib/mfrc522/source/.loop.php.swp | Bin 0 -> 12288 bytes lib/mfrc522/source/loop.php | 196 +++++++++++++++++++++++++++++-- 2 files changed, 184 insertions(+), 12 deletions(-) create mode 100644 lib/mfrc522/source/.loop.php.swp diff --git a/lib/mfrc522/source/.loop.php.swp b/lib/mfrc522/source/.loop.php.swp new file mode 100644 index 0000000000000000000000000000000000000000..8bdfea5420d19e8e32743dca7b3336f94237d986 GIT binary patch literal 12288 zcmeI2+iM(E9LG<^*iJ8AT10(NPuu9s#AG*@##Wn68@Ejxn>LzFR1E7dJ9Bn(n#s&M z=S(k_+Ja9CK4@=V@ZEx-4`N&KK_8?DQUvjD5Ctz4tRN_U&&=#5X_^Xc5KCvsC!3iw z=XZYR`}>{Cl2hq?W@tCvnA<>b-ATyr?1Sg-{YfWZ>VzC{!|9GnXggC(3RS+q6~E`% zbs5wbcq4iI@*IQtZA?s|O1{QrPLbd&l)!VtM6Io%Vz|E*YB&!{pR*m;`cXg`nuV1&8u30^PGb)kwIa450AX6YyAX6Yy zAX6YyAXDI`RY2C4kR#~*EvW)0($6KAeWthBN2WlgK&C*ZK&C*ZK&C*ZK&C*ZK&C*Z zK&C*ZzzwK??Go}ezU=qi3g_|v|Hk+Ki+2$6EBF!o0M39!kLGTD@11;eE?Sz~LK9~m2gMLr|ePA(vgnSClfwSNY zcmtHcMsOdv8(dmJ$QR&q@E&*tL_mUJpo3*#DfoUlAzy(H!3l5(L_mT%2*4ij7}x|h zf=9t!;9CtofOo)2upbn`6W~G60{&PAf4~KB8oUNx1sv=GUEm(@*HXL-E`i^`Meq&y z44eaJ!7(rnwt^h!0Byho2GGI7;32RAEC)Z|M#x8CFW_Jp>;eyf`@!EWXdC&!XlJgMsz$ZKwO(y`)Xulj3BOFAwYj9#AdJll zT4DH`(U93L_iNOy+1#h_Z!ucyDbwAyZ`T;L9m%1LfnG@_lw#VVw9s9q#YyH&#T|+S z3n{!;r>m&Pg;cG887&L+GMy0$EeYN_#|~Ypw>p8#^jMB{vjV5&i30~~>J3^zltURr z^*RfU_>l^0Gn~nzf;cD~+w+Xl$oOb+yR~g-G^fuw@|D;%DFREYwkMEHixcRsS%D6# z+@-2}aIhNrNhs!~^r2=(D!o)53aYLG?Nt7>dbW^OtWbgak>@RrlgN)DpG$6g{3S+f zUQn?;y3Y=|UGW%Bwr@^JccX;6x)NZfPFGUWn&h&WXxQp3mnX__ zZbDg9o^3Gcfa_A`%kUtT0i<^(S?U+Gyh43dJMooQ4Z4;K!K87;7tKZ^JxL=|>>xE% zyn;xY^BZ#lUvfWUu@1^M7nTyyNS!w^d!=4?n{=q=tGR$zX)F_EVb~N@OKZT@y&~`} zm#J}JG^5keU#;N?rD3+mvtpdau^O;DmgtZe^|&94fo9QkI{nQu!-A>-w+^9DiP>e+ zr&P=+gNhi{jmp&OtSoc zvM&wKb*Ep`&VQDFSi6$^8z_zqjqJHf0y<2n4TefVwx5>j-XP|@k;-1?NMoQ_++HeK z!y`MeT-j=kO2!R_-2fIR-wwmUzWH|Q9DvsM*}rGMMJqQj4-$lNV@gd~ByRJX9K+X(=82qgZ)ox)2ZE>mT}99Y>(e z@l<@9YZ?#2*z#iR$U6UR#htf5z)BQh&#N{F>Ba!vp4ktmO;0L^ifp`!HH1p<@j`PJ zRdpNddGdEtmGm}MOxX?DixCf*75EOLmfAg87WPlMociIu<3%pZ Some RFID code + * + * @return user User info if found ; else NULL + * + */ + function auth($code){ + + global $f_auth; + + + /* (1) Goto first line */ + $f_auth->seek(0); + + /* (2) Parse each line */ + while( $f_auth->eof() ){ + + /* (3) Try to parse line */ + $parsed = json_decode($f_auth->fgets(), true); + + /* (3) Ignore if parse error */ + if( is_null($parsed) ) + continue; + + /* (4) If wrong code -> go to next */ + if( $parsed[0] != $code ) + continue; + + /* (5) return user info */ + return [ + 'id' => $parsed[1], + 'can' => $parsed[2] + ]; + + } + + /* (6) Return FALSE if not found */ + return null; + + } + + + + + + + + + + + + + - $last_card; - $times; function mfrc522_setup(){ + /* [0] Initialize global variables + =========================================================*/ + /* (1) File descriptiors */ + global $f_auth, $f_accesslog; + + /* (2) Caches */ + global $actions, $states, $state; + + + /* [1] Open file descriptors on useful files =========================================================*/ - $f_authlist = new SplFileObject(AUTH_LIST, 'r'); + /* (1) Read accesses */ + $f_auth = new SplFileObject(AUTH_LIST, 'r'); + $f_states = new SplFileObject(STATES_CONF, 'r'); + $f_actions = new SplFileObject(ACTIONS_CONF, 'r'); + $f_gstate = @file_get_contents(STATE_CONF); + + /* (2) Append accesses (logs) */ $f_accesslog = new SplFileObject(ACCESS_LOG, 'a'); - /* [2] Parse @authlist to cache [action]=>[rfid1, rfid2, ..] - =========================================================*/ - - /* [3] Initialize global variables + + /* [2] Parse ACTIONS and cache them =========================================================*/ - $last_card = null; - $times = 0; + /* (1) Parse each line */ + while( $f_actions->eof() ){ + + /* (2) Try to parse line */ + $parsed = json_decode($f_actions->fgets(), true); + + /* (2) Ignore if parse error */ + if( is_null($parsed) ) + continue; + + /* (3) Add key (timeout) to cache */ + if( !isset($actions[$parsed[0]] ) + $actions[$parsed[0]] = []; + + /* (4) Add entry to cache */ + $actions[$parsed[0]][] = [ + 'id' => $parsed[1], + 'prev' => $parsed[2], + 'next' => $parsed[3], + ]; + + } + + /* (5) Free file descriptor */ + $f_actions = null; + + + + /* [3] Parse STATES and cache them + =========================================================*/ + /* (1) Parse each line */ + while( $f_states->eof() ){ + + /* (2) Try to parse line */ + $parsed = json_decode($f_states->fgets(), true); + + /* (2) Ignore if parse error */ + if( is_null($parsed) ) + continue; + + /* (3) Add entry to cache */ + $states[] = $parsed; + + } + + /* (4) Free file descriptor */ + $f_states = null; + + + + /* [4] Cache global state + =========================================================*/ + /* (1) Check file */ + if( $f_gstate === false ) + return; + + /* (2) Remove external spaces */ + $f_gstate = preg_replace('@^\s+@', '', $f_gstate); + $f_gstate = preg_replace('@\s+$@', '', $f_gstate); + + /* (3) For each character create an entry */ + for( $c = 0 ; $c < strlen($f_gstate) ; $c++ ) + $state[] = $c; + } @@ -35,6 +180,11 @@ function mfrc522_loop(){ + /* [1] Load global variables + =========================================================*/ + global $last_user; + global $timeout; + /* [1] Wait for rfid card =========================================================*/ while( ($code=syscall(SOURCE_DIR.'/lib/mfrc522/read')) === false ); @@ -48,10 +198,32 @@ /* [2] Check for user in auth list =========================================================*/ + /* (0) CHECK FOR USER INFO IN AUTH LIST + ---------------------------------------------------------*/ + $user = auth($code); + + + /* (1) UNKNOWN USER -> reset count + ---------------------------------------------------------*/ + if( is_null($user) ){ + + $last_user = null; + $timeout = 1; + + + /* (2) KNOWN USER -> Manage timeout + ---------------------------------------------------------*/ + }else{ + + /* (1) If same as last -> increment @timeout */ + if( $last_user == $user['id'] ) + $timeout++; + + + + } - /* [3] Manage action (states) - =========================================================*/ /* [n] Wait for 0.5 s before reading again