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 class IDellCallingInterfaceSmi
00053 {
00054 public:
00055 virtual ~IDellCallingInterfaceSmi();
00056
00057
00058 virtual void setClass( u16 newClass ) = 0;
00059 virtual void setSelect( u16 newSelect ) = 0;
00060 virtual void setArg( u8 argNumber, u32 argValue ) = 0;
00061 virtual u32 getRes( u8 resNumber ) const = 0;
00062 virtual void setArgAsPhysicalAddress( u8 argNumber, u32 bufferOffset ) = 0;
00063 virtual void setBufferSize(size_t size) = 0;
00064 virtual void setBufferContents(const u8 *, size_t size) = 0;
00065 virtual const u8 *getBufferPtr() = 0;
00066
00067 virtual void execute() = 0;
00068
00069 protected:
00070 explicit IDellCallingInterfaceSmi();
00071 };
00072
00073
00074 class SmiFactory : public virtual factory::IFactory
00075 {
00076 public:
00077 enum { DELL_CALLING_INTERFACE_SMI_RAW, DELL_CALLING_INTERFACE_SMI,};
00078
00079 static SmiFactory *getFactory();
00080 virtual ~SmiFactory() throw();
00081 virtual std::auto_ptr<IDellCallingInterfaceSmi> makeNew(u8 type) = 0;
00082 protected:
00083 SmiFactory();
00084 };
00085
00086 enum {cbARG1 = 0, cbARG2 = 1, cbARG3 = 2, cbARG4 = 3};
00087 enum {cbRES1 = 0, cbRES2 = 1, cbRES3 = 2, cbRES4 = 3};
00088
00089
00090
00091
00092 void doSimpleCallingInterfaceSmi(u16 smiClass, u16 select, const u32 args[4], u32 res[4]);
00093 std::auto_ptr<smi::IDellCallingInterfaceSmi> setupCallingInterfaceSmi(u16 smiClass, u16 select, const u32 args[4]);
00094 u32 getAuthenticationKey(const std::string &password);
00095
00096 enum password_format_enum { PW_FORMAT_UNKNOWN, PW_FORMAT_SCAN_CODE, PW_FORMAT_ASCII };
00097 password_format_enum getPasswordFormat();
00098
00099 #if 0
00100
00101 std::string getServiceTag();
00102 void setServiceTag(const std::string &password, const std::string &newTag);
00103 std::string getAssetTag();
00104 void setAssetTag(const std::string &password, const std::string &newTag);
00105 #endif
00106
00107 bool getPasswordStatus(u16 which);
00108
00109 u32 readNVStorage (u32 location, u32 *minValue, u32 *maxValue);
00110 u32 readBatteryModeSetting(u32 location, u32 *minValue, u32 *maxValue);
00111 u32 readACModeSetting (u32 location, u32 *minValue, u32 *maxValue);
00112 u32 readSystemStatus(u32 *failingSensorHandle);
00113
00114 u32 writeNVStorage (const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00115 u32 writeBatteryModeSetting(const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00116 u32 writeACModeSetting (const std::string &password, u32 location, u32 value, u32 *minValue, u32 *maxValue);
00117
00118 void getDisplayType(u32 &type, u32 &resolution, u32 &memSizeX256kb);
00119 void getPanelResolution(u32 &horiz, u32 &vert);
00120 void getActiveDisplays(u32 &bits);
00121 void setActiveDisplays(u32 &bits);
00122
00123 void getPropertyOwnershipTag(char *tagBuf, size_t size);
00124 void setPropertyOwnershipTag(const std::string password, const char *newTag, size_t size);
00125
00126
00127 extern const int Bluetooth_Devices_Disable;
00128 extern const int Bluetooth_Devices_Enable;
00129 extern const int Cellular_Radio_Disable;
00130 extern const int Cellular_Radio_Enable;
00131 extern const int WiFi_Locator_Disable;
00132 extern const int WiFi_Locator_Enable;
00133 extern const int Wireless_LAN_Disable;
00134 extern const int Wireless_LAN_Enable;
00135 extern const int Wireless_Switch_Bluetooth_Control_Disable;
00136 extern const int Wireless_Switch_Bluetooth_Control_Enable;
00137 extern const int Wireless_Switch_Cellular_Control_Disable;
00138 extern const int Wireless_Switch_Cellular_Control_Enable;
00139 extern const int Wireless_Switch_Wireless_LAN_Control_Disable;
00140 extern const int Wireless_Switch_Wireless_LAN_Control_Enable;
00141
00142
00143 extern const int Radio_Transmission_Enable;
00144 extern const int Radio_Transmission_Disable;
00145 extern const int Wireless_Device_Disable;
00146 extern const int Wireless_Device_App_Control;
00147 extern const int Wireless_Device_App_Or_Hotkey_Control;
00148
00149 enum radioNum { WLAN_RADIO_NUM=1, BLUETOOTH_RADIO_NUM=2, WWAN_RADIO_NUM=3 };
00150 void wirelessRadioControl(bool enable, bool boot, bool runtime, int enable_token, int disable_token, int radioNum, std::string password);
00151
00152 enum { WLAN_SWITCH_CTL=1, BLUETOOTH_SWITCH_CTL=2, WWAN_SWITCH_CTL=4, LOCATOR_SWITCH_CTL=5 };
00153 void wirelessSwitchControl(bool enable, bool boot, bool runtime, int enable_token, int disable_token, int switchNum, std::string password);
00154
00155 enum radioStatusCode { STATUS_ENABLED, STATUS_DISABLED, STATUS_NOT_PRESENT, STATUS_UNSUPPORTED, STATUS_UNKNOWN };
00156 radioStatusCode wirelessRadioStatus(radioNum which, std::ostream &cout=std::cout, u32 defRes2=0);
00157 }
00158
00159
00160 #include "smbios/config/abi_suffix.hpp"
00161
00162 #endif