master
Andrew Johnson 6 years ago
parent ae8e652197
commit 8331a61b12

@ -1,4 +1,5 @@
use magic;
use libc::c_void;
pub enum OverrideCode {
IssueOverride = 1,
@ -40,6 +41,44 @@ pub fn toErrorCode(i: i32) -> ErrorCode {
}
}
pub struct AuthorizedSession
{
session: *const c_void
}
pub fn authorize_override() -> Result<AuthorizedSession,ErrorCode> {
let session = unsafe {
magic::issue_override_code(OverrideCode::IssueOverride as i32);
magic::poll_override_session()
};
let session = AuthorizedSession {
session: session
};
check_error(session)
}
pub fn authorize_privileged() -> Result<AuthorizedSession,ErrorCode> {
let session = unsafe {
magic::issue_override_code(OverrideCode::IssuePrivileged as i32);
magic::poll_physical_override_privileged_session()
};
let session = AuthorizedSession {
session: session
};
check_error(session)
}
pub fn authorize_admin() -> Result<AuthorizedSession,ErrorCode> {
let session = unsafe {
magic::issue_override_code(OverrideCode::IssueAdmin as i32);
magic::poll_physical_override_admin_session()
};
let session = AuthorizedSession {
session: session
};
check_error(session)
}
pub fn reset_state()
{
unsafe {
@ -47,13 +86,13 @@ pub fn reset_state()
}
}
pub fn check_error() -> Result<(),ErrorCode>
pub fn check_error<T>(t: T) -> Result<T,ErrorCode>
{
let err = unsafe {
magic::poll_override_error()
};
if err==0 {
Result::Ok(())
Result::Ok(t)
} else {
Result::Err(toErrorCode(err))
}
@ -64,7 +103,7 @@ pub fn input_floor(floor: i32) -> Result<(),ErrorCode>
unsafe {
magic::override_input_floor(floor);
}
check_error()
check_error(())
}
pub fn manual_mode() -> Result<(),ErrorCode>
@ -72,7 +111,7 @@ pub fn manual_mode() -> Result<(),ErrorCode>
unsafe {
magic::override_manual_mode();
}
check_error()
check_error(())
}
pub fn normal_mode() -> Result<(),ErrorCode>
@ -80,7 +119,7 @@ pub fn normal_mode() -> Result<(),ErrorCode>
unsafe {
magic::override_normal_mode();
}
check_error()
check_error(())
}
pub fn flash(pattern: i32) -> Result<(),ErrorCode>
@ -88,21 +127,21 @@ pub fn flash(pattern: i32) -> Result<(),ErrorCode>
unsafe {
magic::elevator_display_flash(pattern);
}
check_error()
check_error(())
}
pub fn toggle_light(light_id: i32) -> Result<(),ErrorCode>
{
unsafe {
magic::elevator_display_toggle_light(light_id);
}
check_error()
check_error(())
}
pub fn set_light_color(light_id: i32, color: i32) -> Result<(),ErrorCode>
{
unsafe {
magic::elevator_display_set_light_color(light_id, color);
}
check_error()
check_error(())
}
pub fn is_override() -> bool
@ -126,15 +165,3 @@ pub fn is_admin() -> bool
}
}
/*
extern {
pub fn issue_override_code(code: c_int);
pub fn poll_override_code() -> c_int;
pub fn poll_override_input_floor() -> c_int;
pub fn poll_override_error() -> c_int;
pub fn poll_override_session() -> *const c_void;
pub fn free_override_session(session: *const c_void);
pub fn poll_physical_override_privileged_session() -> *const c_void;
pub fn poll_physical_override_admin_session() -> *const c_void;
}
*/

@ -3,4 +3,3 @@ extern crate libc;
mod magic;
mod admin;
mod tests;

@ -8,7 +8,7 @@ fn authorize_override() {
assert!(admin::is_override());
}
assert(!admin::is_override());
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
fn authorize_privileged() {
@ -18,7 +18,7 @@ fn authorize_privileged() {
assert(admin::is_privileged());
}
assert(!admin::is_privileged());
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
fn issue_admin_code() {
@ -28,7 +28,7 @@ fn issue_admin_code() {
assert(admin::is_admin());
}
assert(!admin::is_admin());
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
@ -36,21 +36,21 @@ fn double_override_failure() {
admin::reset_state();
let session = admin::authorize_override().ok();
assert!(admin::authorize_override().err().is_some());
assert!(!admin::check_error().is_ok());
assert!(!admin::check_error(()).is_ok());
}
#[test]
fn double_privileged_failure() {
admin::reset_state();
let session = admin::authorize_privileged().ok();
assert!(admin::authorize_privileged().err().is_some());
assert!(!admin::check_error().is_ok());
assert!(!admin::check_error(()).is_ok());
}
#[test]
fn double_admin_failure() {
admin::reset_state();
let session = admin::authorize_admin().ok();
assert!(admin::authorize_admin().err().is_some());
assert!(!admin::check_error().is_ok());
assert!(!admin::check_error(()).is_ok());
}
#[test]
@ -62,7 +62,7 @@ fn clone_override() {
assert!(admin::is_override());
}
assert!(!admin::is_override());
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
fn clone_privileged() {
@ -73,7 +73,7 @@ fn clone_privileged() {
assert!(admin::is_privileged());
}
assert!(!admin::is_privileged());
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
fn clone_admin() {
@ -84,7 +84,7 @@ fn clone_admin() {
assert!(admin::is_admin());
}
assert!(!admin::is_admin());
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
@ -95,7 +95,7 @@ fn input_floor() {
admin::input_floor(2).ok();
}
assert!(!admin::is_admin());
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
@ -106,7 +106,7 @@ fn manual_mode() {
admin::manual_mode().ok();
}
assert!(!admin::is_admin());
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
@ -117,7 +117,7 @@ fn normal_mode() {
admin::normal_mode().ok();
}
assert!(!admin::is_admin());
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
@ -127,7 +127,7 @@ fn flash() {
assert!(!admin::is_privileged());
assert!(!admin::is_admin());
admin::flash(222).ok();
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
@ -137,7 +137,7 @@ fn toggle_light() {
assert!(!admin::is_privileged());
assert!(!admin::is_admin());
admin::toggle_light(7).ok();
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
@ -147,26 +147,26 @@ fn set_light_color() {
assert!(!admin::is_privileged());
assert!(!admin::is_admin());
admin::set_light_color(33, 123).ok();
assert!(admin::check_error().is_ok());
assert!(admin::check_error(()).is_ok());
}
#[test]
fn deny_input_floor() {
admin::reset_state();
admin::input_floor(2).err();
assert!(!admin::check_error().is_ok());
assert!(!admin::check_error(()).is_ok());
}
#[test]
fn deny_manual_mode() {
admin::reset_state();
admin::manual_mode().err();
assert!(!admin::check_error().is_ok());
assert!(!admin::check_error(()).is_ok());
}
#[test]
fn deny_normal_mode() {
admin::reset_state();
admin::normal_mode().err();
assert!(!admin::check_error().is_ok());
assert!(!admin::check_error(()).is_ok());
}

Loading…
Cancel
Save