00001 // Copyright (C) 2006 Pablo Mejia 00002 00003 00004 #ifndef CAJUN_EMC_VEHICLE_FRAME_H 00005 #define CAJUN_EMC_VEHICLE_FRAME_H 00006 00007 00008 #include "pcan_frame.H" 00009 00010 00011 namespace pcan 00012 { 00013 00014 00015 class vehicle_frame_t : public pcan_frame_t 00016 { 00017 protected: 00018 static unsigned const PRESENT_MASK = 0x01; 00019 static unsigned const BOOTED_MASK = 0x02; 00020 static unsigned const VALID_COIL_PULSE_MASK = 0x04; 00021 static unsigned const BRAKE_LIGHTS_MASK = 0x08; 00022 static unsigned const PARK_LIGHTS_MASK = 0x10; 00023 static unsigned const STEERING_SERVO_ENGAGED_MASK = 0x20; 00024 static unsigned const REMOTE_OFF_SWITCH_MASK = 0x40; 00025 static unsigned const IGNITION_MASK = 0x80; 00026 00027 static unsigned const SPEED_OFFSET = 1; 00028 00029 static unsigned const THROTTLE_CLUTCH_ENGAGED_MASK = 0x01; 00030 00031 static unsigned const GENERIC_LO_OFFSET = 3; 00032 static unsigned const GENERIC_HI_OFFSET = 4; 00033 static unsigned const BATTERY_1_VOLTAGE_OFFSET = 5; 00034 static unsigned const BATTERY_2_VOLTAGE_OFFSET = 6; 00035 static unsigned const COMMAND_OFFSET = 7; 00036 00037 public: 00038 vehicle_frame_t (pcan_frame_t const &frame_) : pcan_frame_t (frame_) {} 00039 00040 bool present () const 00041 { return (m_msg->DATA[0] & PRESENT_MASK) != 0; } 00042 bool booted () const 00043 { return (m_msg->DATA[0] & BOOTED_MASK) != 0; } 00044 bool valid_coil_pulse () const 00045 { return (m_msg->DATA[0] & VALID_COIL_PULSE_MASK) != 0; } 00046 bool brake_lights () const 00047 { return (m_msg->DATA[0] & BRAKE_LIGHTS_MASK) != 0; } 00048 bool park_lights () const 00049 { return (m_msg->DATA[0] & PARK_LIGHTS_MASK) != 0; } 00050 bool steering_servo_engaged () const 00051 { return (m_msg->DATA[0] & STEERING_SERVO_ENGAGED_MASK) != 0; } 00052 bool remote_off_switch () const 00053 { return (m_msg->DATA[0] & REMOTE_OFF_SWITCH_MASK) != 0; } 00054 bool ignition () const 00055 { return (m_msg->DATA[0] & IGNITION_MASK) != 0; } 00056 00057 double speed () const { return m_msg->DATA[SPEED_OFFSET] * 0.44704; } 00058 00059 bool throttle_clutch_engaged () const 00060 { 00061 return (m_msg->DATA[2] & THROTTLE_CLUTCH_ENGAGED_MASK) != 0; 00062 } 00063 00064 unsigned generic () const 00065 { 00066 return (m_msg->DATA[GENERIC_HI_OFFSET] << 8) | 00067 m_msg->DATA[GENERIC_LO_OFFSET]; 00068 } 00069 00070 double battery_1_voltage () const 00071 { return m_msg->DATA[BATTERY_1_VOLTAGE_OFFSET] * .1; } 00072 double battery_2_voltage () const 00073 { return m_msg->DATA[BATTERY_2_VOLTAGE_OFFSET] * .1; } 00074 00075 unsigned command () const { return m_msg->DATA[COMMAND_OFFSET]; } 00076 }; 00077 00078 00079 }; 00080 00081 00082 #endif