• 0
    • Free Overnight Shipping for $1499!
    • Shopping Cart is Empty

Symbol SE955 laser scan engine can be configured to support and disable certain barcode types. There are two ways to set it up. One is to scan the corresponding device barcode, and the other is set by SSI (simple serial interface). The following is the setting method of Symbol SEE955 through SSI serial port.

After the Symbol SE955 is powered on, it can be set to send corresponding parameters. Symbol recommends setting temporary parameters. Setting permanent parameters will damage the flash inside Symbol SE955 laser scan engine. After the flash is damaged, the SE955 will not be used, for example, a laser with a point, the normal situation is a line. Flash life is limited, please be cautious. The temporary setting will be lost after the laser scan engine is powered off. It must be set once every time the power is turned on. Therefore, it is recommended to write the parameters that need to be set to the registry, and read it from the registry after each power-on.

Attach the basic code of the setup, please read the comments section carefully (Please modify some code according to your own platform to achieve):

static CHAR wakeup[]                    =            {0x00};
 
//2's complement sum of message contents excluding checksum.
static size_t __CheckSum(CHAR data[],size_t d_size)
{
    size_t count=0;
    size_t sum=0;
 
    if(data == NULL || d_size <= 0)
    {
        return 0;
    }
 
    while(d_size--)
    {
        sum+=(data[d_size] & 0xFF);
    }
    return ((~sum)+1);
}
//store params to register,when power off
int SetScannerSetValueToLocal(void *data,size_t len)
{
#ifdef WINCE
    HKEY hk;
    ULONG dw=REG_BINARY,dwDisp;
    ULONG dwSize=sizeof(dw);
    CHAR param[1024]={0};
    size_t iRetVal=0;
 
    assert(data!=NULL && len>0);
 
    if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\SCANDev\\SETTING"),0,0,&hk))
    {
        if(RegQueryValueEx(hk,_T("Value"),0,&dw,(LPBYTE)param,&dwSize)==ERROR_SUCCESS)
        {
            RegDeleteValue(hk,_T("Value"));
            RegSetValueEx(hk,_T("Value"),0,dw,(LPBYTE)data,len);
        }else
        {
            iRetVal=-1;
        }
    }else
    {
        if(ERROR_SUCCESS == RegCreateKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\SCANDev\\SETTING"), 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hk, &dwDisp))
        {
            RegSetValueEx(hk,_T("Value"),0,dw,(LPBYTE)data,len);
        }else
        {
            iRetVal=-1;
        }
    }
 
    RegCloseKey(hk);
 
    return iRetVal;
#endif
}
 
static void __GetScannerSetValueFromLocal(void *data,size_t in_len,size_t * out_len)
{
#ifdef WINCE
    HKEY hk;
    ULONG dw=REG_BINARY;
    ULONG dwSize=sizeof(dw);
    CHAR param[1024]={0};
 
    if(ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\SCANDev\\SETTING"),0,0,&hk))
    {
        if(RegQueryValueEx(hk,_T("Value"),0,&dw,(LPBYTE)param,&dwSize)==ERROR_SUCCESS)
        {
            if(dwSize <=0)
            {
                return;
            }else
            {
                memcpy(data,param,dwSize);
                *out_len=dwSize;
            }
        }
    }
 
    RegCloseKey(hk);
#endif /*end of macro WINCE*/
}
 
//when scanner engine power on,you can call this function
static size_t SetParamValues(void)
{
#ifdef WINCE
    size_t check_sum=0;
    CHAR param_list[1024]={0};
    size_t count=0;
    size_t len=0,i=0;
    CHAR buffer[4096]={0};
    //Attention!!! Temporary change - lost when power removed
    //Failure to meet these conditions can corrupt the scan engine's memory.
    //must be 0x00,0xFF,not is 0x01,0xFF
    CHAR temp[]={0xC6,0x04,0x00,0xFF};
 
    __GetScannerSetValueFromLocal(param_list,sizeof(param_list),&count);
 
    if(param_list == NULL || count <= 0)
    {
        return -1;
    }
 
    len=sizeof(temp)/sizeof(CHAR);
 
    buffer[0]=((count+len+1)&0xFF);                //length
 
    memcpy(buffer+1,temp,len);
    memcpy(buffer+len+1,param_list,count);
 
    check_sum=__CheckSum(buffer,len+count+1);
    buffer[len+count+1]=((check_sum>>8)&0xFF);    //height byte
    buffer[len+count+2]=(check_sum&0xFF);        //low byte
 
    write_com_data(wakeup,sizeof(wakeup));
 
    _Sleep(100);    //change from 70 to 100ms waiting for scanner wakeup
 
    write_com_data(buffer,len+count+3);            //Length: 1 byte,CheckSum: 2 byte
    return 0;
#endif /*end of macro WINCE*/
}

The API of Write_com_data is platform-dependent, and please modifies it according to its own platform.