00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef SMIINTERFACE_H
00020 #define SMIINTERFACE_H
00021
00022
00023 #include "smbios/compat.h"
00024
00025 #include <iostream>
00026 #include <memory>
00027
00028
00029 #include "smbios/types.h"
00030
00031 #include "smbios/IFactory.h"
00032 #include "smbios/IException.h"
00033
00034
00035 #include "smbios/config/abi_prefix.hpp"
00036
00037 namespace smi
00038 {
00040
00042
00043 DECLARE_EXCEPTION( SmiException );
00044 DECLARE_EXCEPTION_EX( InvalidSmiMode, smi, SmiException );
00045 DECLARE_EXCEPTION_EX( ParameterError, smi, SmiException );
00046 DECLARE_EXCEPTION_EX( UnhandledSmi, smi, SmiException );
00047 DECLARE_EXCEPTION_EX( UnsupportedSmi, smi, SmiException );
00048 DECLARE_EXCEPTION_EX( SmiExecutedWithError, smi, SmiException );
00049 DECLARE_EXCEPTION_EX( PasswordVerificationFailed, smi, SmiException );
00050 DECLARE_EXCEPTION_EX( ConfigError, smi, SmiException );
00051
00052
00053 class ISmi;
00054
00055
00056 class SmiFactory : public virtual factory::IFactory
00057 {
00058 public:
00059 enum { RAW_SMI, DELL_CALLING_INTERFACE_SMI_RAW, DELL_CALLING_INTERFACE_SMI,};
00060
00061 static SmiFactory *getFactory();
00062 virtual ~SmiFactory() throw();
00063 virtual std::auto_ptr<ISmi> makeNew(u8 type) = 0;
00064 protected:
00065 SmiFactory();
00066 };
00067
00068 class ISmi
00069 {
00070 public:
00071 explicit ISmi();
00072
00073
00074 virtual void execute() = 0;
00075 virtual u8 *getBufferPtr() = 0;
00076 virtual void setBufferSize(size_t newSize) = 0;
00077 virtual void setCommandIOMagic( u16 address, u8 code ) = 0;
00078
00079 virtual ~ISmi();
00080 };
00081
00082 class IDellCallingInterfaceSmi : virtual public ISmi
00083 {
00084 public:
00085 explicit IDellCallingInterfaceSmi();
00086
00087 virtual void setClass( u16 newClass ) = 0;
00088 virtual void setSelect( u16 newSelect ) = 0;
00089 virtual void setArg( u8 argNumber, u32 argValue ) = 0;
00090 virtual u32 getRes( u8 resNumber ) const = 0;
00091 virtual void setArgAsPhysicalAddress( u8 argNumber, u32 bufferOffset ) = 0;
00092
00093 virtual ~IDellCallingInterfaceSmi();
00094 };
00095
00096 enum {cbARG1 = 0, cbARG2 = 1, cbARG3 = 2, cbARG4 = 3};
00097 enum {cbRES1 = 0, cbRES2 = 1, cbRES3 = 2, cbRES4 = 3};
00098
00099
00100
00101
00102 void doSimpleCallingInterfaceSmi(u16 smiClass, u16 select, const u32 args[4], u32 res[4]);
00103 std::auto_ptr<smi::IDellCallingInterfaceSmi> setupCallingInterfaceSmi(u16 smiClass, u16 select, const u32 args[4]);
00104 u32 getAuthenticationKey(const std::string &password);
00105
00106 enum password_format_enum { PW_FORMAT_UNKNOWN, PW_FORMAT_SCAN_CODE, PW_FORMAT_ASCII };
00107 password_format_enum getPasswordFormat();
00108
00109 std::string getServiceTag();
00110 void setServiceTag(const std::string &password, const std::string &newTag);
00111 std::string getAssetTag();
00112 void setAssetTag(const std::string &password, const std::string &newTag);
00113
00114 u32 readNVStorage (u32 location, u32 *minValue, u32 *maxValue);
00115 u32 readBatteryModeSetting(u32 location, u32 *minValue, u32 *maxValue);
00116 u32 readACModeSetting (u32 location, u32 *minValue, u32 *maxValue);
00117 u32 readSystemStatus(u32 *failingSensorHandle);
00118
00119 u32 writeNVStorage (const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00120 u32 writeBatteryModeSetting(const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00121 u32 writeACModeSetting (const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00122
00123 void getDisplayType(u32 &type, u32 &resolution, u32 &memSizeX256kb);
00124 void getPanelResolution(u32 &horiz, u32 &vert);
00125 void getActiveDisplays(u32 &bits);
00126 void setActiveDisplays(u32 &bits);
00127
00128 void getPropertyOwnershipTag(char *tagBuf, size_t size);
00129 void setPropertyOwnershipTag(const std::string password, const char *newTag, size_t size);
00130
00131
00132 extern const int Bluetooth_Devices_Disable;
00133 extern const int Bluetooth_Devices_Enable;
00134 extern const int Cellular_Radio_Disable;
00135 extern const int Cellular_Radio_Enable;
00136 extern const int WiFi_Locator_Disable;
00137 extern const int WiFi_Locator_Enable;
00138 extern const int Wireless_LAN_Disable;
00139 extern const int Wireless_LAN_Enable;
00140 extern const int Wireless_Switch_Bluetooth_Control_Disable;
00141 extern const int Wireless_Switch_Bluetooth_Control_Enable;
00142 extern const int Wireless_Switch_Cellular_Control_Disable;
00143 extern const int Wireless_Switch_Cellular_Control_Enable;
00144 extern const int Wireless_Switch_Wireless_LAN_Control_Disable;
00145 extern const int Wireless_Switch_Wireless_LAN_Control_Enable;
00146
00147
00148 extern const int Radio_Transmission_Enable;
00149 extern const int Radio_Transmission_Disable;
00150 extern const int Wireless_Device_Disable;
00151 extern const int Wireless_Device_App_Control;
00152 extern const int Wireless_Device_App_Or_Hotkey_Control;
00153
00154 enum radioNum { WLAN_RADIO_NUM=1, BLUETOOTH_RADIO_NUM=2, WWAN_RADIO_NUM=3 };
00155 void wirelessRadioControl(bool enable, bool boot, bool runtime, int enable_token, int disable_token, int radioNum, std::string password);
00156
00157 enum { WLAN_SWITCH_CTL=1, BLUETOOTH_SWITCH_CTL=2, WWAN_SWITCH_CTL=4, LOCATOR_SWITCH_CTL=5 };
00158 void wirelessSwitchControl(bool enable, bool boot, bool runtime, int enable_token, int disable_token, int switchNum, std::string password);
00159
00160 enum radioStatusCode { STATUS_ENABLED, STATUS_DISABLED, STATUS_NOT_PRESENT, STATUS_UNSUPPORTED, STATUS_UNKNOWN };
00161 radioStatusCode wirelessRadioStatus(radioNum which, std::ostream &cout=std::cout, u32 defRes2=0);
00162 }
00163
00164
00165 #include "smbios/config/abi_suffix.hpp"
00166
00167 #endif