void	InitSwDrivers(void)
{
	SPI_HandleTypeDef hspi1;

	// Main Grid Area
	// init selectors
	HAL_GPIO_WritePin(GPIOG, SWBNKENA_Pin, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOG, SWBNKA_Pin|SWBNKB_Pin|SWBNKC_Pin|SWBNKSEL_Pin, GPIO_PIN_RESET);

	//encoders area
	//init chip selects
	HAL_GPIO_WritePin(GPIOF, SB_CS3_Pin, GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin|SB_CS2_Pin, GPIO_PIN_SET);
	HAL_GPIO_WritePin(SB_CS4_GPIO_Port, SB_CS4_Pin, GPIO_PIN_SET);

	// init encoder expanders
	// enable interrupts on the expander pins
	uint8_t	tx_data[8];

	tx_data[0] = 0x40;
	tx_data[1] = 0x00;	// start at IODIRA
	tx_data[2] = 0xFF;	//IODIRA
	tx_data[3] = 0xFF;	//IODIRB
	tx_data[4] = 0x00;	//IOPOLA
	tx_data[5] = 0x00;	//IOPOLB
	tx_data[6] = 0xCC;	//GPINTENA
	tx_data[7] = 0x1B;	//GPINTGPB

	// do the transaction
	HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin, GPIO_PIN_RESET);	// enable selector output
	HAL_SPI_Transmit(&hspi1, &tx_data[0], 8, HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin, GPIO_PIN_SET);	// disable selector output

	HAL_GPIO_WritePin(GPIOB, SB_CS2_Pin, GPIO_PIN_RESET);	// enable selector output
	HAL_SPI_Transmit(&hspi1, tx_data, 8, HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOB, SB_CS2_Pin, GPIO_PIN_SET);	// disable selector output

	HAL_GPIO_WritePin(GPIOB, SB_CS3_Pin, GPIO_PIN_RESET);	// enable selector output
	HAL_SPI_Transmit(&hspi1, tx_data, 8, HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOB, SB_CS3_Pin, GPIO_PIN_SET);	// disable selector output
	HAL_Delay(5);

	tx_data[2] = 0xD8;
	tx_data[3] = 0x1B;

	HAL_GPIO_WritePin(GPIOB, SB_CS4_Pin, GPIO_PIN_RESET);	// enable selector output
	HAL_SPI_Transmit(&hspi1, tx_data, 6, HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOB, SB_CS4_Pin, GPIO_PIN_SET);	// disable selector output
	HAL_Delay(5);

	tx_data[0] = 0x40;
	tx_data[1] = 0x0A;		// IOCON
	tx_data[2] = 0x44;		// connect irq pins, open drain output
	tx_data[3] = 0x44;

	// do the transaction
	HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin, GPIO_PIN_RESET);	// enable selector output
	HAL_SPI_Transmit(&hspi1, tx_data, 4, HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOB, SB_CS1_Pin, GPIO_PIN_SET);	// disable selector output
	HAL_Delay(5);

	HAL_GPIO_WritePin(GPIOB, SB_CS2_Pin, GPIO_PIN_RESET);	// enable selector output
	HAL_SPI_Transmit(&hspi1, tx_data, 4, HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOB, SB_CS2_Pin, GPIO_PIN_SET);	// disable selector output
	HAL_Delay(5);

	HAL_GPIO_WritePin(GPIOB, SB_CS3_Pin, GPIO_PIN_RESET);	// enable selector output
	HAL_SPI_Transmit(&hspi1, tx_data, 4, HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOB, SB_CS3_Pin, GPIO_PIN_SET);	// disable selector output
	HAL_Delay(5);

	HAL_GPIO_WritePin(GPIOB, SB_CS4_Pin, GPIO_PIN_RESET);	// enable selector output
	HAL_SPI_Transmit(&hspi1, tx_data, 4, HAL_MAX_DELAY);
	HAL_GPIO_WritePin(GPIOB, SB_CS4_Pin, GPIO_PIN_SET);	// disable selector output
	HAL_Delay(5);

	/*
	// set up switch handler
	btnTest=&btnScan;
	btnDown=&btnDwns;
	btnUp=&btnUps;
	btnHold=&btnHolds;
	SetSwitchHoldParams(0,167);			//setup length button hold time for ~1 sec
*/
}