diff --git a/backend/genesys.c b/backend/genesys.c index 24dd341ea..5caf37657 100644 --- a/backend/genesys.c +++ b/backend/genesys.c @@ -655,16 +655,29 @@ sanei_genesys_read_valid_words (Genesys_Device * dev, unsigned int *words) uint8_t value; DBG (DBG_proc, "sanei_genesys_read_valid_words\n"); - - RIE (sanei_genesys_read_register (dev, 0x44, &value)); - *words = value; - RIE (sanei_genesys_read_register (dev, 0x43, &value)); - *words += (value * 256); - RIE (sanei_genesys_read_register (dev, 0x42, &value)); - if (dev->model->asic_type == GENESYS_GL646) - *words += ((value & 0x03) * 256 * 256); + if (dev->model->asic_type == GENESYS_GL847) + { + RIE (sanei_genesys_read_register (dev, 0x42, &value)); + *words=(value & 0x03); + RIE (sanei_genesys_read_register (dev, 0x43, &value)); + *words=*words*256+value; + RIE (sanei_genesys_read_register (dev, 0x44, &value)); + *words=*words*256+value; + RIE (sanei_genesys_read_register (dev, 0x45, &value)); + *words=*words*256+value; + } else - *words += ((value & 0x0f) * 256 * 256); + { + RIE (sanei_genesys_read_register (dev, 0x44, &value)); + *words = value; + RIE (sanei_genesys_read_register (dev, 0x43, &value)); + *words += (value * 256); + RIE (sanei_genesys_read_register (dev, 0x42, &value)); + if (dev->model->asic_type == GENESYS_GL646) + *words += ((value & 0x03) * 256 * 256); + else + *words += ((value & 0x0f) * 256 * 256); + } DBG (DBG_proc, "sanei_genesys_read_valid_words: %d words\n", *words); return SANE_STATUS_GOOD; diff --git a/backend/genesys_devices.c b/backend/genesys_devices.c index 55dc54920..f4a347b09 100644 --- a/backend/genesys_devices.c +++ b/backend/genesys_devices.c @@ -759,8 +759,8 @@ static Genesys_Motor Motor[] = { 1, 1, {{{ - 3500, - 1300, + 2343, /* first value of a recorded motor slope */ + 534, /* last value of recorded slope table */ 60, 0.8, }, diff --git a/backend/genesys_gl646.h b/backend/genesys_gl646.h index c51f99377..5dc372553 100644 --- a/backend/genesys_gl646.h +++ b/backend/genesys_gl646.h @@ -107,6 +107,7 @@ #define REG05_DPIHW_600 0x00 #define REG05_DPIHW_1200 0x40 #define REG05_DPIHW_2400 0x80 +#define REG05_DPIHW_4800 0xc0 #define REG05_GMMTYPE 0x30 #define REG05_GMM14BIT 0x10 #define REG05_GMMENB 0x08 diff --git a/backend/genesys_gl847.c b/backend/genesys_gl847.c index 8a4fdbad6..d6e27da86 100644 --- a/backend/genesys_gl847.c +++ b/backend/genesys_gl847.c @@ -44,6 +44,25 @@ #include "genesys_gl847.h" +static void +dump_regs (Genesys_Register_Set * reg) +{ + static int scan = 0; + size_t i; + + fprintf (stderr, + "==================== SCAN %03d STATUS =================\n", scan); + for (i = 0; i < GENESYS_GL847_MAX_REGS; i++) + { + if (reg[i].address != 0) + { + fprintf (stderr, "R%02x=0x%02x\n", reg[i].address, reg[i].value); + } + } + fprintf (stderr, + "==================== SCAN STATUS END =============================\n"); +} + /**************************************************************************** Low level function ****************************************************************************/ @@ -132,6 +151,7 @@ gl847_bulk_write_register (Genesys_Device * dev, SANE_Status status = SANE_STATUS_GOOD; size_t i; + dump_regs (reg); for (i = 0; i < elems && status == SANE_STATUS_GOOD; i++) { if (reg[i].address != 0) @@ -150,6 +170,7 @@ gl847_bulk_write_register (Genesys_Device * dev, * Read bulk data (e.g. scanned data) * first read is rounded to a multiple of 512 bytes, last read fetches the * remainder XXX STEF XXX check rounded is ASIC work not software + * addr is always 0x10000000 */ static SANE_Status gl847_bulk_read_data (Genesys_Device * dev, uint8_t addr, @@ -164,10 +185,13 @@ gl847_bulk_read_data (Genesys_Device * dev, uint8_t addr, if (len == 0) return SANE_STATUS_GOOD; - outdata[0] = addr & 0xff; - outdata[1] = ((addr >> 8) & 0xff); - outdata[2] = ((addr >> 16) & 0xff); - outdata[3] = ((addr >> 24) & 0xff); + /* XXX STEF XXX do it cleaner later */ + addr=0x10000000; + + outdata[0] = 0; + outdata[1] = 0; + outdata[2] = 0; + outdata[3] = 0x10; outdata[4] = (size & 0xff); outdata[5] = ((size >> 8) & 0xff); outdata[6] = ((size >> 16) & 0xff); @@ -190,6 +214,12 @@ gl847_bulk_read_data (Genesys_Device * dev, uint8_t addr, size = BULKIN_MAXSIZE; else size = len; + /* XXX STEF XXX */ + if(size>=512) + { + size /= 512; + size *= 512; + } DBG (DBG_io2, "gl847_bulk_read_data: trying to read %lu bytes of data\n", @@ -394,7 +424,7 @@ gl847_init_registers (Genesys_Device * dev) /* fill register startup values */ SETREG (0x01, 0x82); - SETREG (0x02, 0x18); + SETREG (0x02, 0xAA); SETREG (0x03, 0x50); SETREG (0x04, 0x12); SETREG (0x05, 0x80); @@ -404,7 +434,7 @@ gl847_init_registers (Genesys_Device * dev) SETREG (0x0a, 0x00); SETREG (0x0b, 0x01); SETREG (0x0c, 0x02); - SETREG (0x0d, 0x0d); + SETREG (0x0d, REG0D_CLRMCNT); SETREG (0x10, 0x00); SETREG (0x11, 0x00); SETREG (0x12, 0x00); @@ -417,7 +447,7 @@ gl847_init_registers (Genesys_Device * dev) SETREG (0x19, 0xff); SETREG (0x1a, 0x34); SETREG (0x1b, 0x00); - SETREG (0x1c, 0x00); + SETREG (0x1c, 0x02); SETREG (0x1d, 0x04); SETREG (0x1e, 0x10); SETREG (0x1f, 0x04); @@ -498,7 +528,7 @@ gl847_init_registers (Genesys_Device * dev) /* initalize calibration reg */ memcpy (dev->calib_reg, dev->reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); DBG (DBG_proc, "gl847_init_registers completed\n"); } @@ -782,20 +812,16 @@ gl847_init_motor_regs (Genesys_Device * dev, Genesys_Register_Set * reg, unsigne memset (fast_slope_table, 0xff, 512); - gl847_send_slope_table (dev, 0, fast_slope_table, 256); - gl847_send_slope_table (dev, 1, fast_slope_table, 256); - gl847_send_slope_table (dev, 2, fast_slope_table, 256); - gl847_send_slope_table (dev, 3, fast_slope_table, 256); - gl847_send_slope_table (dev, 4, fast_slope_table, 256); - - if (action == MOTOR_ACTION_FEED || action == MOTOR_ACTION_GO_HOME) { /* FEED and GO_HOME can use fastest slopes available */ fast_slope_steps = 256; - fast_exposure = sanei_genesys_exposure_time2 (dev, dev->motor.base_ydpi / 4, 0, /*step_type */ + fast_exposure = sanei_genesys_exposure_time2 (dev, + dev->motor.base_ydpi / 4, + 0, /*step_type */ 0, /*last used pixel */ - 0, 0); + 0, + 0); DBG (DBG_info, "gl847_init_motor_regs : fast_exposure=%d pixels\n", fast_exposure); @@ -809,13 +835,14 @@ gl847_init_motor_regs (Genesys_Device * dev, Genesys_Register_Set * reg, unsigne } fast_slope_time = sanei_genesys_create_slope_table3 (dev, - fast_slope_table, 256, + fast_slope_table, + 256, fast_slope_steps, 0, fast_exposure, - dev->motor.base_ydpi / - 4, &fast_slope_steps, - &fast_exposure, 0); + dev->motor.base_ydpi / 4, &fast_slope_steps, + &fast_exposure, + 0); feedl = feed_steps - fast_slope_steps * 2; use_fast_fed = 1; @@ -865,49 +892,61 @@ HOME_FREE: 3 r->value = 0; r = sanei_genesys_get_address (reg, 0x27); r->value = 0; - ICI - r = sanei_genesys_get_address (reg, 0x02); - r->value &= ~0x01; /*LONGCURV OFF */ - r->value &= ~0x80; /*NOT_HOME OFF */ + + /* set REG 02 */ + /* ref 94, res 1e */ + r = sanei_genesys_get_address (reg, REG02); + r->value &= ~REG02_LONGCURV; + r->value &= ~REG02_HOMENEG; - r->value |= 0x10; + r->value |= REG02_MTRPWR; if (action == MOTOR_ACTION_GO_HOME) - r->value |= 0x06; + r->value |= (REG02_MTRREV | REG02_NOTHOME); else - r->value &= ~0x06; + r->value &= ~(REG02_MTRREV | REG02_HOMENEG); if (use_fast_fed) - r->value |= 0x08; + r->value |= REG02_FASTFED; else - r->value &= ~0x08; + r->value &= ~REG02_FASTFED; if (flags & MOTOR_FLAG_AUTO_GO_HOME) - r->value |= 0x20; + r->value |= REG02_AGOHOME; else - r->value &= ~0x20; + r->value &= ~REG02_AGOHOME; - r->value &= ~0x40; + r->value &= ~REG02_ACDCDIS; + status = gl847_send_slope_table (dev, 1, fast_slope_table, 256); + status = gl847_send_slope_table (dev, 2, fast_slope_table, 256); status = gl847_send_slope_table (dev, 3, fast_slope_table, 256); + status = gl847_send_slope_table (dev, 4, fast_slope_table, 256); + status = gl847_send_slope_table (dev, 5, fast_slope_table, 256); if (status != SANE_STATUS_GOOD) return status; r = sanei_genesys_get_address (reg, 0x67); - r->value = 0x3f; + r->value = REG67_MTRPWM; r = sanei_genesys_get_address (reg, 0x68); - r->value = 0x3f; + r->value = REG68_FASTPWM; r = sanei_genesys_get_address (reg, 0x21); - r->value = 0; + r->value = 0x00; r = sanei_genesys_get_address (reg, 0x24); + r->value = 0x00; + + r = sanei_genesys_get_address (reg, 0x60); + r->value = 0; + + r = sanei_genesys_get_address (reg, 0x63); r->value = 0; r = sanei_genesys_get_address (reg, 0x69); - r->value = 0; + r->value = 0x08; r = sanei_genesys_get_address (reg, 0x6a); r->value = (fast_slope_steps >> 1) + (fast_slope_steps & 1); @@ -1269,6 +1308,8 @@ gl847_get_dpihw (Genesys_Device * dev) return 1200; if ((r->value & REG05_DPIHW) == REG05_DPIHW_2400) return 2400; + if ((r->value & REG05_DPIHW) == REG05_DPIHW_4800) + return 4800; return 0; } @@ -1284,9 +1325,13 @@ gl847_init_optical_regs_off (Genesys_Device * dev, Genesys_Register_Set * reg) DBG (DBG_proc, "gl847_init_optical_regs_off : start\n"); - r = sanei_genesys_get_address (reg, 0x01); + r = sanei_genesys_get_address (reg, REG01); r->value &= ~REG01_SCAN; + r = sanei_genesys_get_address (reg, REG05); + r->value &= ~REG05_DPIHW; + r->value |= REG05_DPIHW_2400; + DBG (DBG_proc, "gl847_init_optical_regs_off : completed. \n"); return SANE_STATUS_GOOD; } @@ -2267,7 +2312,7 @@ gl847_start_action (Genesys_Device * dev) static SANE_Status gl847_stop_action (Genesys_Device * dev) { - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS + 1]; + Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; SANE_Status status; uint8_t val40; unsigned int loop; @@ -2296,7 +2341,7 @@ gl847_stop_action (Genesys_Device * dev) memset (local_reg, 0, sizeof (local_reg)); memcpy (local_reg, dev->reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); gl847_init_optical_regs_off (dev, local_reg); @@ -2304,8 +2349,7 @@ gl847_stop_action (Genesys_Device * dev) status = gl847_bulk_write_register (dev, local_reg, GENESYS_GL847_MAX_REGS); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, - "%s: Failed to bulk write registers: %s\n", __FUNCTION__, + DBG (DBG_error, "%s: failed to bulk write registers: %s\n", __FUNCTION__, sane_strstatus (status)); return status; } @@ -2367,7 +2411,7 @@ gl847_get_paper_sensor (Genesys_Device * dev, SANE_Bool * paper_loaded) static SANE_Status gl847_eject_document (Genesys_Device * dev) { - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS + 1]; + Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; SANE_Status status; uint8_t val; SANE_Bool paper_loaded; @@ -2407,8 +2451,7 @@ gl847_eject_document (Genesys_Device * dev) return SANE_STATUS_IO_ERROR; } - memcpy (local_reg, dev->reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + memcpy (local_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); gl847_init_optical_regs_off (dev, local_reg); @@ -2703,25 +2746,6 @@ gl847_detect_document_end (Genesys_Device * dev) return SANE_STATUS_GOOD; } -static void -dump_regs (Genesys_Register_Set * reg) -{ - static int scan = 0; - size_t i; - - fprintf (stderr, - "==================== SCAN %03d STATUS =================\n", scan); - for (i = 0; i < GENESYS_GL847_MAX_REGS; i++) - { - if (reg[i].address != 0) - { - fprintf (stderr, "R%02x=0x%02x\n", reg[i].address, reg[i].value); - } - } - fprintf (stderr, - "==================== SCAN STATUS END ============================="); -} - /* Send the low-level scan command */ /* todo : is this that useful ? */ static SANE_Status @@ -2743,8 +2767,8 @@ gl847_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg, local_reg[1].value = sanei_genesys_read_reg_from_set (reg, 0x01) | REG01_SCAN; /* set scan bit */ /* to clear SCANCNT */ - local_reg[2].address = 0x0d; - local_reg[2].value = 0x01; + local_reg[2].address = REG0D; + local_reg[2].value = REG0D_CLRLNCNT; local_reg[3].address = 0x0f; if (start_motor) @@ -2803,7 +2827,7 @@ gl847_end_scan (Genesys_Device * dev, Genesys_Register_Set * reg, static SANE_Status gl847_feed (Genesys_Device * dev, int steps) { - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS + 1]; + Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; SANE_Status status; uint8_t val; int loop; @@ -2821,8 +2845,7 @@ gl847_feed (Genesys_Device * dev, int steps) memset (local_reg, 0, sizeof (local_reg)); - memcpy (local_reg, dev->reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + memcpy (local_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); gl847_init_optical_regs_off (dev, local_reg); @@ -2883,7 +2906,7 @@ gl847_feed (Genesys_Device * dev, int steps) static SANE_Status gl847_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home) { - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS + 1]; + Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; SANE_Status status; uint8_t val; @@ -2935,8 +2958,7 @@ gl847_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home) } } - memcpy (local_reg, dev->reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + memcpy (local_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); gl847_init_optical_regs_off (dev, local_reg); @@ -2973,7 +2995,7 @@ gl847_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home) if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl847_slow_back_home: Failed to read home sensor: %s\n", + "gl847_slow_back_home: failed to read home sensor: %s\n", sane_strstatus (status)); return status; } @@ -3008,7 +3030,7 @@ gl847_search_start_position (Genesys_Device * dev) int size; SANE_Status status; uint8_t *data; - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS + 1]; + Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; int steps; int pixels = 600; @@ -3017,8 +3039,7 @@ gl847_search_start_position (Genesys_Device * dev) DBG (DBG_proc, "gl847_search_start_position\n"); memset (local_reg, 0, sizeof (local_reg)); - memcpy (local_reg, dev->reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + memcpy (local_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); /* sets for a 200 lines * 600 pixels */ /* normal scan with no shading */ @@ -3091,8 +3112,7 @@ gl847_search_start_position (Genesys_Device * dev) } /* update regs to copy ASIC internal state */ - memcpy (dev->reg, local_reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + memcpy (dev->reg, local_reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); /*TODO: find out where sanei_genesys_search_reference_point stores information, and use that correctly*/ @@ -3938,7 +3958,7 @@ gl847_offset_calibration (Genesys_Device * dev) if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl847_offset_calibration: Failed to setup frontend: %s\n", + "gl847_offset_calibration: failed to setup frontend: %s\n", sane_strstatus (status)); return status; } @@ -4316,8 +4336,7 @@ gl847_init_regs_for_warmup (Genesys_Device * dev, DBG (DBG_proc, "sanei_gl847_warmup_lamp\n"); - memcpy (local_reg, dev->reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + memcpy (local_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); /* okay.. these should be defaults stored somewhere */ dev->frontend.gain[0] = 0x00; @@ -4370,7 +4389,7 @@ gl847_init_regs_for_warmup (Genesys_Device * dev, static SANE_Status sanei_gl847_repark_head (Genesys_Device * dev) { - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS + 1]; + Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; SANE_Status status; DBG (DBG_proc, "sanei_gl847_repark_head\n"); @@ -4387,7 +4406,7 @@ sanei_gl847_repark_head (Genesys_Device * dev) /* toggle motor flag, put an huge step number and redo move backward */ status = gl847_slow_back_home (dev, 1); - DBG (DBG_proc, "gl847_park_head: completed\n"); + DBG (DBG_proc, "gl847_repark_head: completed\n"); return status; } @@ -4573,7 +4592,7 @@ gl847_init (Genesys_Device * dev) size_t size; DBG_INIT (); - DBG (DBG_proc, "gl847_init\n"); + DBG (DBG_proc, "gl847_init: start\n"); dev->scanhead_position_in_steps = 0; @@ -4743,8 +4762,7 @@ gl847_init (Genesys_Device * dev) return status; } - memcpy (dev->calib_reg, dev->reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + memcpy (dev->calib_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); /* Set powersaving (default = 15 minutes) */ RIE (gl847_set_powersaving (dev, 15)); @@ -4794,7 +4812,7 @@ gl847_search_strip (Genesys_Device * dev, SANE_Bool forward, SANE_Bool black) { unsigned int pixels, lines, channels; SANE_Status status; - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS + 1]; + Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; size_t size; uint8_t *data; int steps, depth, dpi; @@ -4838,8 +4856,7 @@ gl847_search_strip (Genesys_Device * dev, SANE_Bool forward, SANE_Bool black) } dev->scanhead_position_in_steps = 0; - memcpy (local_reg, dev->reg, - (GENESYS_GL847_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); + memcpy (local_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); status = gl847_init_scan_regs (dev, local_reg, diff --git a/backend/genesys_gl847.h b/backend/genesys_gl847.h index 2491b1829..fbdeee49f 100644 --- a/backend/genesys_gl847.h +++ b/backend/genesys_gl847.h @@ -62,6 +62,7 @@ #include "../include/_stdint.h" #include "genesys.h" +#define REG01 0x01 #define REG01_CISSET 0x80 #define REG01_DOGENB 0x40 #define REG01_DVDSET 0x20 @@ -71,6 +72,7 @@ #define REG01_SHDAREA 0x02 #define REG01_SCAN 0x01 +#define REG02 0x02 #define REG02_NOTHOME 0x80 #define REG02_ACDCDIS 0x40 #define REG02_AGOHOME 0x20 @@ -95,10 +97,12 @@ #define REG04S_AFEMOD 4 +#define REG05 0x05 #define REG05_DPIHW 0xc0 #define REG05_DPIHW_600 0x00 #define REG05_DPIHW_1200 0x40 #define REG05_DPIHW_2400 0x80 +#define REG05_DPIHW_4800 0xc0 #define REG05_MTLLAMP 0x30 #define REG05_GMMENB 0x08 #define REG05_MTLBASE 0x03 @@ -143,6 +147,13 @@ #define REG0B_48MHZ 0x60 #define REG0B_60MHZ 0x80 +#define REG0D 0x0d +#define REG0D_FULLSTP 0x10 +#define REG0D_SEND 0x80 +#define REG0D_CLRMCNT 0x04 +#define REG0D_CLRDOCJM 0x02 +#define REG0D_CLRLCNT 0x01 + #define REG0D_CLRLNCNT 0x01 #define REG16_CTRLHI 0x80 diff --git a/backend/genesys_low.h b/backend/genesys_low.h index a2ba01b56..66afe6fed 100644 --- a/backend/genesys_low.h +++ b/backend/genesys_low.h @@ -246,8 +246,7 @@ Genesys_Color_Order; #define GENESYS_GL847 847 #define GENESYS_GL848 848 -/*135 registers for gl841 + 1 null-reg*/ -#define GENESYS_MAX_REGS 136 +#define GENESYS_MAX_REGS 256 #define DAC_WOLFSON_UMAX 0 #define DAC_WOLFSON_ST12 1 @@ -582,8 +581,8 @@ struct Genesys_Device SANE_String calib_file; Genesys_Model *model; - Genesys_Register_Set reg[GENESYS_MAX_REGS]; - Genesys_Register_Set calib_reg[GENESYS_MAX_REGS]; + Genesys_Register_Set reg[256]; + Genesys_Register_Set calib_reg[256]; Genesys_Settings settings; Genesys_Frontend frontend; Genesys_Sensor sensor;