|
|
|
@ -227,6 +227,7 @@ HGLibDeviceImpl::HGLibDeviceImpl()
|
|
|
|
|
m_eventParam = NULL;
|
|
|
|
|
m_imageFunc = NULL;
|
|
|
|
|
m_imageParam = NULL;
|
|
|
|
|
m_statusCode = SANE_STATUS_GOOD;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGLibDeviceImpl::~HGLibDeviceImpl()
|
|
|
|
@ -384,11 +385,11 @@ HGBool HGLibDeviceImpl::GetSN(HGChar* sn, HGUInt maxLen)
|
|
|
|
|
|
|
|
|
|
std::string serialNum;
|
|
|
|
|
unsigned int serialNumLen = 0;
|
|
|
|
|
if (SANE_STATUS_NO_MEM == sane_io_control(m_devHandle, IO_CTRL_CODE_GET_SERIAL, NULL, &serialNumLen)
|
|
|
|
|
&& serialNumLen)
|
|
|
|
|
m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_SERIAL, NULL, &serialNumLen);
|
|
|
|
|
if (SANE_STATUS_NO_MEM == m_statusCode && serialNumLen)
|
|
|
|
|
{
|
|
|
|
|
serialNum.resize(serialNumLen);
|
|
|
|
|
sane_io_control(m_devHandle, IO_CTRL_CODE_GET_SERIAL, &serialNum[0], &serialNumLen);
|
|
|
|
|
m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_SERIAL, &serialNum[0], &serialNumLen);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (serialNum.empty() || maxLen < serialNum.size() + 1)
|
|
|
|
@ -411,11 +412,11 @@ HGBool HGLibDeviceImpl::GetFWVersion(HGChar* fwVersion, HGUInt maxLen)
|
|
|
|
|
|
|
|
|
|
std::string versionNum;
|
|
|
|
|
unsigned int versionNumLen = 0;
|
|
|
|
|
if (SANE_STATUS_NO_MEM == sane_io_control(m_devHandle, IO_CTRL_CODE_GET_HARDWARE_VERSION, NULL, &versionNumLen)
|
|
|
|
|
&& versionNumLen)
|
|
|
|
|
m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_HARDWARE_VERSION, NULL, &versionNumLen);
|
|
|
|
|
if (SANE_STATUS_NO_MEM == m_statusCode && versionNumLen)
|
|
|
|
|
{
|
|
|
|
|
versionNum.resize(versionNumLen);
|
|
|
|
|
sane_io_control(m_devHandle, IO_CTRL_CODE_GET_HARDWARE_VERSION, &versionNum[0], &versionNumLen);
|
|
|
|
|
m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_HARDWARE_VERSION, &versionNum[0], &versionNumLen);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (versionNum.empty() || maxLen < versionNum.size() + 1)
|
|
|
|
@ -439,7 +440,7 @@ HGBool HGLibDeviceImpl::SetParam(HGUInt option, const HGVoid* data)
|
|
|
|
|
|
|
|
|
|
HGBool ret = HGFALSE;
|
|
|
|
|
SANE_Int num_dev_options = 0;
|
|
|
|
|
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
|
|
|
for (int i = 1; i < num_dev_options; ++i)
|
|
|
|
|
{
|
|
|
|
|
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
|
|
|
@ -457,26 +458,30 @@ HGBool HGLibDeviceImpl::SetParam(HGUInt option, const HGVoid* data)
|
|
|
|
|
SANE_Char* value = (SANE_Char*)GetOptionEnumValue(*(HGUInt*)data);
|
|
|
|
|
if (NULL != value)
|
|
|
|
|
{
|
|
|
|
|
if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, value, NULL))
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, value, NULL);
|
|
|
|
|
if (SANE_STATUS_GOOD == m_statusCode)
|
|
|
|
|
ret = HGTRUE;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if (SANE_TYPE_INT == desp->type)
|
|
|
|
|
{
|
|
|
|
|
SANE_Int value = (SANE_Int)(*(HGInt*)data);
|
|
|
|
|
if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL))
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL);
|
|
|
|
|
if (SANE_STATUS_GOOD == m_statusCode)
|
|
|
|
|
ret = HGTRUE;
|
|
|
|
|
}
|
|
|
|
|
else if (SANE_TYPE_FIXED == desp->type)
|
|
|
|
|
{
|
|
|
|
|
SANE_Fixed value = SANE_FIX(*(HGDouble*)data);
|
|
|
|
|
if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL))
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL);
|
|
|
|
|
if (SANE_STATUS_GOOD == m_statusCode)
|
|
|
|
|
ret = HGTRUE;
|
|
|
|
|
}
|
|
|
|
|
else if (SANE_TYPE_BOOL == desp->type)
|
|
|
|
|
{
|
|
|
|
|
SANE_Bool value = (SANE_Bool)(*(HGBool*)data);
|
|
|
|
|
if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL))
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, &value, NULL);
|
|
|
|
|
if (SANE_STATUS_GOOD == m_statusCode)
|
|
|
|
|
ret = HGTRUE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -496,7 +501,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count)
|
|
|
|
|
std::vector<DeviceParamsGroup> devParams;
|
|
|
|
|
|
|
|
|
|
SANE_Int num_dev_options = 0;
|
|
|
|
|
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
|
|
|
for (int i = 1; i < num_dev_options; ++i)
|
|
|
|
|
{
|
|
|
|
|
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
|
|
|
@ -516,7 +521,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count)
|
|
|
|
|
else if (SANE_TYPE_STRING == desp->type)
|
|
|
|
|
{
|
|
|
|
|
char value[256] = { 0 };
|
|
|
|
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL);
|
|
|
|
|
|
|
|
|
|
DeviceParam devParam;
|
|
|
|
|
devParam.option = name;
|
|
|
|
@ -539,7 +544,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count)
|
|
|
|
|
else if (SANE_TYPE_INT == desp->type)
|
|
|
|
|
{
|
|
|
|
|
SANE_Int value = 0;
|
|
|
|
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
|
|
|
|
|
DeviceParam devParam;
|
|
|
|
|
devParam.option = name;
|
|
|
|
@ -568,7 +573,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count)
|
|
|
|
|
else if (SANE_TYPE_FIXED == desp->type)
|
|
|
|
|
{
|
|
|
|
|
SANE_Word value = 0;
|
|
|
|
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
|
|
|
|
|
DeviceParam devParam;
|
|
|
|
|
devParam.option = name;
|
|
|
|
@ -597,7 +602,7 @@ HGLibDeviceParamGroup* HGLibDeviceImpl::GetParamGroupList(HGUInt* count)
|
|
|
|
|
else if (SANE_TYPE_BOOL == desp->type)
|
|
|
|
|
{
|
|
|
|
|
SANE_Bool value = 0;
|
|
|
|
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
|
|
|
|
|
DeviceParam devParam;
|
|
|
|
|
devParam.option = name;
|
|
|
|
@ -702,7 +707,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option)
|
|
|
|
|
|
|
|
|
|
HGLibDeviceParam* param = NULL;
|
|
|
|
|
SANE_Int num_dev_options = 0;
|
|
|
|
|
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
|
|
|
for (int i = 1; i < num_dev_options; ++i)
|
|
|
|
|
{
|
|
|
|
|
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
|
|
|
@ -721,7 +726,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option)
|
|
|
|
|
if (SANE_TYPE_STRING == desp->type)
|
|
|
|
|
{
|
|
|
|
|
char value[256] = { 0 };
|
|
|
|
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, value, NULL);
|
|
|
|
|
|
|
|
|
|
devParam.valueType = HGLIB_OPTION_VALUETYPE_ENUM;
|
|
|
|
|
devParam.stringValue = value;
|
|
|
|
@ -739,7 +744,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option)
|
|
|
|
|
else if (SANE_TYPE_INT == desp->type)
|
|
|
|
|
{
|
|
|
|
|
SANE_Int value = 0;
|
|
|
|
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
|
|
|
|
|
devParam.valueType = HGLIB_OPTION_VALUETYPE_INT;
|
|
|
|
|
devParam.intValue = (int)value;
|
|
|
|
@ -763,7 +768,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option)
|
|
|
|
|
else if (SANE_TYPE_FIXED == desp->type)
|
|
|
|
|
{
|
|
|
|
|
SANE_Word value = 0;
|
|
|
|
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
|
|
|
|
|
devParam.valueType = HGLIB_OPTION_VALUETYPE_DOUBLE;
|
|
|
|
|
devParam.doubleValue = SANE_UNFIX(value);
|
|
|
|
@ -787,7 +792,7 @@ HGLibDeviceParam* HGLibDeviceImpl::GetParam(HGUInt option)
|
|
|
|
|
else if (SANE_TYPE_BOOL == desp->type)
|
|
|
|
|
{
|
|
|
|
|
SANE_Bool value = 0;
|
|
|
|
|
sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_GET_VALUE, &value, NULL);
|
|
|
|
|
|
|
|
|
|
devParam.valueType = HGLIB_OPTION_VALUETYPE_BOOL;
|
|
|
|
|
devParam.boolValue = (bool)value;
|
|
|
|
@ -916,7 +921,7 @@ HGBool HGLibDeviceImpl::ResetParam()
|
|
|
|
|
HGBool ret = HGFALSE;
|
|
|
|
|
|
|
|
|
|
SANE_Int num_dev_options = 0;
|
|
|
|
|
sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, 0, SANE_ACTION_GET_VALUE, &num_dev_options, NULL);
|
|
|
|
|
for (int i = 1; i < num_dev_options; ++i)
|
|
|
|
|
{
|
|
|
|
|
const SANE_Option_Descriptor* desp = sane_get_option_descriptor(m_devHandle, i);
|
|
|
|
@ -929,7 +934,8 @@ HGBool HGLibDeviceImpl::ResetParam()
|
|
|
|
|
|
|
|
|
|
if (0 == strcmp(SANE_STD_OPT_NAME_RESTORE, name) && SANE_TYPE_BUTTON == desp->type)
|
|
|
|
|
{
|
|
|
|
|
if (SANE_STATUS_GOOD == sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, NULL, NULL))
|
|
|
|
|
m_statusCode = sane_control_option(m_devHandle, i, SANE_ACTION_SET_VALUE, NULL, NULL);
|
|
|
|
|
if (SANE_STATUS_GOOD == m_statusCode)
|
|
|
|
|
ret = HGTRUE;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
@ -942,8 +948,8 @@ HGBool HGLibDeviceImpl::IsPaperOn()
|
|
|
|
|
{
|
|
|
|
|
SANE_Bool isOn = SANE_FALSE;
|
|
|
|
|
unsigned int len = sizeof(SANE_Bool);
|
|
|
|
|
SANE_Status status = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_PAPER_ON, &isOn, &len);
|
|
|
|
|
if (SANE_STATUS_GOOD == status && isOn)
|
|
|
|
|
m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_PAPER_ON, &isOn, &len);
|
|
|
|
|
if (SANE_STATUS_GOOD == m_statusCode && isOn)
|
|
|
|
|
return HGTRUE;
|
|
|
|
|
return HGFALSE;
|
|
|
|
|
}
|
|
|
|
@ -952,8 +958,8 @@ HGInt HGLibDeviceImpl::GetStatus()
|
|
|
|
|
{
|
|
|
|
|
SANE_Bool isOn = SANE_FALSE;
|
|
|
|
|
unsigned int len = sizeof(SANE_Bool);
|
|
|
|
|
SANE_Status status = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_PAPER_ON, &isOn, &len);
|
|
|
|
|
if (SANE_STATUS_GOOD == status)
|
|
|
|
|
m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_GET_PAPER_ON, &isOn, &len);
|
|
|
|
|
if (SANE_STATUS_GOOD == m_statusCode)
|
|
|
|
|
return isOn ? 1 : 0;
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
@ -962,8 +968,8 @@ HGBool HGLibDeviceImpl::Restart()
|
|
|
|
|
{
|
|
|
|
|
SANE_Power stat = SANE_POWER_RESTART;
|
|
|
|
|
unsigned int len = sizeof(SANE_Power);
|
|
|
|
|
SANE_Status status = sane_io_control(m_devHandle, IO_CTRL_CODE_SET_POWER_LEVEL, &stat, &len);
|
|
|
|
|
if (SANE_STATUS_GOOD == status)
|
|
|
|
|
m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_SET_POWER_LEVEL, &stat, &len);
|
|
|
|
|
if (SANE_STATUS_GOOD == m_statusCode)
|
|
|
|
|
return HGTRUE;
|
|
|
|
|
return HGFALSE;
|
|
|
|
|
}
|
|
|
|
@ -972,8 +978,8 @@ HGBool HGLibDeviceImpl::ShutDown()
|
|
|
|
|
{
|
|
|
|
|
SANE_Power stat = SANE_POWER_SHUTDOWN;
|
|
|
|
|
unsigned int len = sizeof(SANE_Power);
|
|
|
|
|
SANE_Status status = sane_io_control(m_devHandle, IO_CTRL_CODE_SET_POWER_LEVEL, &stat, &len);
|
|
|
|
|
if (SANE_STATUS_GOOD == status)
|
|
|
|
|
m_statusCode = sane_io_control(m_devHandle, IO_CTRL_CODE_SET_POWER_LEVEL, &stat, &len);
|
|
|
|
|
if (SANE_STATUS_GOOD == m_statusCode)
|
|
|
|
|
return HGTRUE;
|
|
|
|
|
return HGFALSE;
|
|
|
|
|
}
|
|
|
|
@ -1001,8 +1007,8 @@ HGBool HGLibDeviceImpl::StartScan(HGLibDeviceScanEventFunc eventFunc, HGPointer
|
|
|
|
|
m_imageParam = imageParam;
|
|
|
|
|
m_scanning = HGTRUE;
|
|
|
|
|
|
|
|
|
|
SANE_Status status = sane_start(m_devHandle);
|
|
|
|
|
if (SANE_STATUS_GOOD != status)
|
|
|
|
|
m_statusCode = sane_start(m_devHandle);
|
|
|
|
|
if (SANE_STATUS_GOOD != m_statusCode)
|
|
|
|
|
{
|
|
|
|
|
m_scanning = HGFALSE;
|
|
|
|
|
m_eventFunc = NULL;
|
|
|
|
@ -1062,6 +1068,11 @@ HGBool HGLibDeviceImpl::StopScanAsyn()
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGInt HGLibDeviceImpl::GetOperateCode()
|
|
|
|
|
{
|
|
|
|
|
return m_statusCode;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const char* HGLibDeviceImpl::GetGroupName(HGUInt group)
|
|
|
|
|
{
|
|
|
|
|
if (group > HGLIB_GROUP_NAME_PAPERFEEDING)
|
|
|
|
|