8     if(sscanf(values, 
"%hu,%hu", &x, &y) != 2){
 
   10         if(sscanf(values, 
"%hu", &x) == 1)
 
   12         else if(!strncmp(values, 
"off", 3))
 
   19     if((x == 0 || y == 0) && !disable)
 
   22     int left = strlen(stages);
 
   23     int position = 0, field = 0;
 
   25     while(position < left && sscanf(stages + position, 
"%2[^,]%n", stagename, &field) == 1){
 
   27         if(sscanf(stagename, 
"%hhu", &stagenum) && stagenum < 
DPI_COUNT){
 
   31                 mode->
dpi.
x[stagenum] = 0;
 
   32                 mode->
dpi.
y[stagenum] = 0;
 
   35                 mode->
dpi.
x[stagenum] = x;
 
   36                 mode->
dpi.
y[stagenum] = y;
 
   39         if(stages[position += field] == 
',')
 
   46     if(sscanf(stage, 
"%hhu", &stagenum) != 1)
 
   55     if(sscanf(height, 
"%hhu", &heightnum) != 1)
 
   63     if(!strcmp(enable, 
"on"))
 
   65     if(!strcmp(enable, 
"off"))
 
   71     const int BUFFER_LEN = 100;
 
   72     char* 
buffer = malloc(BUFFER_LEN);
 
   77         snprintf(buffer + length, BUFFER_LEN - length, length == 0 ? 
"%d%n" : 
" %d%n", i, &newlen);
 
   81             snprintf(buffer + length, BUFFER_LEN - length, 
":off%n", &newlen);
 
   83             snprintf(buffer + length, BUFFER_LEN - length, 
":%u,%u%n", dpi->
x[i], dpi->
y[i], &newlen);
 
   96             && !memcmp(lastdpi, newdpi, 
sizeof(
dpiset)))
 
  104         *(
ushort*)(data_pkt + 5) = newdpi->
x[i];
 
  105         *(
ushort*)(data_pkt + 7) = newdpi->
y[i];
 
  112         { 0x07, 0x13, 0x05, 0, newdpi->
enabled },
 
  113         { 0x07, 0x13, 0x02, 0, newdpi->
current },
 
  114         { 0x07, 0x13, 0x03, 0, newdpi->
lift },
 
  115         { 0x07, 0x13, 0x04, 0, newdpi->
snap, 0x05 }
 
  117     if(!
usbsend(kb, data_pkt[0], 4))
 
  120     memcpy(lastdpi, newdpi, 
sizeof(
dpiset));
 
  129         *(
ushort*)(data_pkt + 5) = dpi->
x[i];
 
  130         *(
ushort*)(data_pkt + 7) = dpi->
y[i];
 
  141         { 0x07, 0x13, 0x05, 1, dpi->
enabled },
 
  142         { 0x07, 0x13, 0x02, 1, dpi->
current },
 
  143         { 0x07, 0x13, 0x03, 1, dpi->
lift },
 
  144         { 0x07, 0x13, 0x04, 1, dpi->
snap, 0x05 }
 
  146     if(!
usbsend(kb, data_pkt[0], 4))
 
  155         { 0x0e, 0x13, 0x05, 1, },
 
  156         { 0x0e, 0x13, 0x02, 1, },
 
  157         { 0x0e, 0x13, 0x03, 1, },
 
  158         { 0x0e, 0x13, 0x04, 1, }
 
  161     for(
int i = 0; i < 4; i++){
 
  162         if(!
usbrecv(kb, data_pkt[i], in_pkt[i]))
 
  164         if(memcmp(in_pkt[i], data_pkt[i], 4)){
 
  175     dpi->
lift = in_pkt[2][4];
 
  178     dpi->
snap = !!in_pkt[3][4];
 
  185         if(!
usbrecv(kb, data_pkt, in_pkt))
 
  187         if(memcmp(in_pkt, data_pkt, 4)){
 
  192         dpi->
x[i] = *(
ushort*)(in_pkt + 5);
 
  193         dpi->
y[i] = *(
ushort*)(in_pkt + 7);
 
void cmd_dpi(usbdevice *kb, usbmode *mode, int dummy, const char *stages, const char *values)
 
void cmd_lift(usbdevice *kb, usbmode *mode, int dummy1, int dummy2, const char *height)
 
int savedpi(usbdevice *kb, dpiset *dpi, lighting *light)
 
#define ckb_err(fmt, args...)
 
int updatedpi(usbdevice *kb, int force)
 
void cmd_snap(usbdevice *kb, usbmode *mode, int dummy1, int dummy2, const char *enable)
 
void cmd_dpisel(usbdevice *kb, usbmode *mode, int dummy1, int dummy2, const char *stage)
 
#define usbrecv(kb, out_msg, in_msg)
usbrecv macro is used to wrap _usbrecv() with debugging information (file and lineno) ...
 
Definitions for using USB interface. 
 
char * printdpi(const dpiset *dpi, const usbdevice *kb)
 
#define usbsend(kb, messages, count)
usbsend macro is used to wrap _usbsend() with debugging information (file and lineno) ...
 
int loaddpi(usbdevice *kb, dpiset *dpi, lighting *light)