コード例 #1
0
ファイル: bw_i2c.c プロジェクト: glocklueng/AVR
/**
 * @ingroup I2C
 * Prints the identification string.
 * @param device_info
 */
void bw_i2c_read_id(const device_info_t *device_info) {
	char cmd[] = { BW_PORT_READ_ID_STRING };
	char buf[BW_ID_STRING_LENGTH];
	FUNC_PREFIX(i2c_setSlaveAddress(device_info->slave_address >> 1));
#ifdef __AVR_ARCH__
#else
	bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500);
#endif
	FUNC_PREFIX(i2c_write(cmd, sizeof(cmd) / sizeof(char)));
	FUNC_PREFIX(i2c_read(buf, BW_ID_STRING_LENGTH));
	printf("[%s]\n", buf);
}
コード例 #2
0
ファイル: mcp7941x.c プロジェクト: glockwork/rpidmx512
void inline static mcp7941x_setup(void) {
	FUNC_PREFIX(i2c_setSlaveAddress(i2c_mcp7941x_slave_address));
#ifdef __AVR_ARCH__
#else
	bcm2835_i2c_setClockDivider(BCM2835_I2C_CLOCK_DIVIDER_2500);
#endif
}
コード例 #3
0
ファイル: mcp7941x.c プロジェクト: glockwork/rpidmx512
/**
 *  @ingroup I2C-RTC
 *
 * @param t
 */
void mcp7941x_set_date_time(const struct rtc_time *t) {
	char reg[] =  {0,0,0,0,0,0,0};

	reg[MCP7941X_RTCC_TCR_SECONDS] = DEC2BCD(t->tm_sec & 0x7f);
	reg[MCP7941X_RTCC_TCR_MINUTES] = DEC2BCD(t->tm_min & 0x7f);
	reg[MCP7941X_RTCC_TCR_HOURS]   = DEC2BCD(t->tm_hour & 0x1f);
	reg[MCP7941X_RTCC_TCR_DAY]     = DEC2BCD(t->tm_wday & 0x07);
	reg[MCP7941X_RTCC_TCR_DATE]    = DEC2BCD(t->tm_mday & 0x3f);
	reg[MCP7941X_RTCC_TCR_MONTH]   = DEC2BCD(t->tm_mon & 0x1f);
	reg[MCP7941X_RTCC_TCR_YEAR]    = DEC2BCD(t->tm_year);

	reg[MCP7941X_RTCC_TCR_SECONDS] |=  MCP7941X_RTCC_BIT_ST;
	reg[MCP7941X_RTCC_TCR_DAY] |= MCP7941X_RTCC_BIT_VBATEN;

	char data[8];
	data[0] = MCP7941X_RTCC_TCR_SECONDS;
	data[1] = reg[0];
	data[2] = reg[1];
	data[3] = reg[2];
	data[4] = reg[3];
	data[5] = reg[4];
	data[6] = reg[5];
	data[7] = reg[6];
	
	mcp7941x_setup();
	
	FUNC_PREFIX(i2c_write(data, sizeof(data)/sizeof(char)));
}
コード例 #4
0
ファイル: bw_spi_lcd.c プロジェクト: Crazykitten352/rpidmx512
/**
 * @ingroup SPI-LCD
 *
 * @param device_info
 */
void bw_spi_lcd_cls(const device_info_t *device_info) {
	char cmd[] = { (char) 0x00, (char) BW_PORT_WRITE_CLEAR_SCREEN, (char) ' ' };
	cmd[0] = (char) device_info->slave_address;

	lcd_spi_setup(device_info);
	FUNC_PREFIX(spi_writenb(cmd, sizeof(cmd) / sizeof(cmd[0])));
	udelay(BW_LCD_SPI_BYTE_WAIT_US);
}
コード例 #5
0
ファイル: mcp7941x.c プロジェクト: glockwork/rpidmx512
/**
 *  @ingroup I2C-RTC
 *
 * @param t
 */
void mcp7941x_get_date_time(struct rtc_time *t) {
	char cmd[]  = {MCP7941X_RTCC_TCR_SECONDS};
	char reg[] =  {0,0,0,0,0,0,0};

	mcp7941x_setup();

	FUNC_PREFIX(i2c_write(cmd, sizeof(cmd)/sizeof(char)));
	FUNC_PREFIX(i2c_read(reg, sizeof(reg)/sizeof(char)));

	t->tm_sec  = BCD2DEC(reg[MCP7941X_RTCC_TCR_SECONDS] & 0x7f);
	t->tm_min  = BCD2DEC(reg[MCP7941X_RTCC_TCR_MINUTES] & 0x7f);
	t->tm_hour = BCD2DEC(reg[MCP7941X_RTCC_TCR_HOURS] & 0x3f);
	t->tm_wday = BCD2DEC(reg[MCP7941X_RTCC_TCR_DAY] & 0x07);
	t->tm_mday = BCD2DEC(reg[MCP7941X_RTCC_TCR_DATE] & 0x3f);
	t->tm_mon  = BCD2DEC(reg[MCP7941X_RTCC_TCR_MONTH] & 0x1f);
	t->tm_year = BCD2DEC(reg[MCP7941X_RTCC_TCR_YEAR]);
}
コード例 #6
0
ファイル: bw_spi_relay.c プロジェクト: glocklueng/OpenILDA
/**
 * @ingroup SPI-DO
 *
 * @param device_info
 * @param mask
 */
inline static void bw_spi_relay_fsel_mask(const device_info_t *device_info, const uint8_t mask) {
	char cmd[3];
	cmd[0] = device_info->slave_address;
	cmd[1] = BW_PORT_WRITE_IO_DIRECTION;
	cmd[2] = mask;
	relay_spi_setup(device_info);
	FUNC_PREFIX(spi_writenb(cmd, sizeof(cmd) / sizeof(char)));
	udelay(BW_RELAY_SPI_BYTE_WAIT_US);
}
コード例 #7
0
ファイル: bw_spi_relay.c プロジェクト: glocklueng/OpenILDA
/**
 * @ingroup SPI-DO
 *
 * @param device_info
 * @param pins
 */
void bw_spi_relay_output(const device_info_t *device_info, const uint8_t pins) {
	char cmd[3];
	cmd[0] = device_info->slave_address;
	cmd[1] = BW_PORT_WRITE_SET_ALL_OUTPUTS;
	cmd[2] = pins;
	relay_spi_setup(device_info);
	FUNC_PREFIX(spi_writenb(cmd, sizeof(cmd) / sizeof(char)));
	udelay(BW_RELAY_SPI_BYTE_WAIT_US);
}
コード例 #8
0
ファイル: bw_spi_lcd.c プロジェクト: Crazykitten352/rpidmx512
/**
 * @ingroup SPI-LCD
 *
 * @param device_info
 * @param line
 * @param pos
 */
void bw_spi_lcd_set_cursor(const device_info_t *device_info, const uint8_t line, const uint8_t pos) {
	char cmd[] = { (char) 0x00, (char) BW_PORT_WRITE_MOVE_CURSOR, (char) 0x00 };
	cmd[0] = (char) device_info->slave_address;
	cmd[2] = (char) (((line & 0x03) << 5) | (pos & 0x1f));

	lcd_spi_setup(device_info);
	FUNC_PREFIX(spi_writenb(cmd, sizeof(cmd) / sizeof(cmd[0])));
	udelay(BW_LCD_SPI_BYTE_WAIT_US);
}
コード例 #9
0
ファイル: bw_spi_lcd.c プロジェクト: Crazykitten352/rpidmx512
/**
 * @ingroup SPI-LCD
 *
 * @param device_info
 * @param value
 */
void bw_spi_lcd_get_contrast(const device_info_t *device_info, uint8_t *value) {
	char cmd[] = { (char) 0x00, (char) BW_PORT_READ_CURRENT_CONTRAST, (char) 0x00 };
	cmd[0] = (char) (device_info->slave_address | 1);

	lcd_spi_setup(device_info);
	FUNC_PREFIX(spi_transfern(cmd, sizeof(cmd) / sizeof(char)));
	udelay(BW_LCD_SPI_BYTE_WAIT_US);
	*value = (uint8_t)cmd[2];
}
コード例 #10
0
ファイル: bw_spi_lcd.c プロジェクト: Crazykitten352/rpidmx512
/**
 * @ingroup SPI-LCD
 *
 * @param device_info
 * @param value
 */
void bw_spi_lcd_set_backlight(const device_info_t *device_info,	const uint8_t value) {
	char cmd[] = { (char) 0x00, (char) BW_PORT_WRITE_SET_BACKLIGHT, (char) 0x00 };
	cmd[0] = (char) device_info->slave_address;
	cmd[2] = (char) value;

	lcd_spi_setup(device_info);
	FUNC_PREFIX(spi_writenb(cmd, sizeof(cmd) / sizeof(cmd[0])));
	udelay(BW_LCD_SPI_BYTE_WAIT_US);
}
コード例 #11
0
ファイル: bw_spi_dio.c プロジェクト: glocklueng/OpenILDA
/**
 * @ingroup SPI-DIO
 *
 * @param device_info
 * @return
 */
uint8_t bw_spi_dio_start(device_info_t *device_info) {
#if !defined(BARE_METAL) && !defined(__AVR_ARCH__)
	if (bcm2835_init() != 1)
		return 1;
#endif
	FUNC_PREFIX(spi_begin());

	if (device_info->slave_address <= 0)
		device_info->slave_address = BW_DIO_DEFAULT_SLAVE_ADDRESS;

	return 0;
}
コード例 #12
0
ファイル: bw_spi_lcd.c プロジェクト: Crazykitten352/rpidmx512
/**
 * @ingroup SPI-LCD
 *
 * @param device_info
 * @param text
 * @param length
 */
void bw_spi_lcd_text(const device_info_t *device_info, const char *text, uint8_t length) {
	char data[BW_LCD_MAX_CHARACTERS + 2];
	uint8_t i;

	data[0] = (char) device_info->slave_address;
	data[1] = (char) BW_PORT_WRITE_DISPLAY_DATA;

	if (length > BW_LCD_MAX_CHARACTERS)
		length = BW_LCD_MAX_CHARACTERS;

	for (i = 0; i < length; i++)
		data[i + 2] = text[i];

	lcd_spi_setup(device_info);
	FUNC_PREFIX(spi_writenb(data, length + 2));
	udelay(BW_LCD_SPI_BYTE_WAIT_US);
}
コード例 #13
0
ファイル: mcp7941x.c プロジェクト: glockwork/rpidmx512
/**
 * @ingroup I2C-RTC
 *
 * @param slave_address
 * @return
 */
uint8_t mcp7941x_start (const uint8_t slave_address) {
#if !defined(BARE_METAL) && !defined(__AVR_ARCH__)
	if (bcm2835_init() != 1)
		return MCP7941X_ERROR;
#endif
	FUNC_PREFIX(i2c_begin());

	if (slave_address <= 0)
		i2c_mcp7941x_slave_address = MCP7941X_DEFAULT_SLAVE_ADDRESS;
	else
		i2c_mcp7941x_slave_address = slave_address;

	mcp7941x_setup();

	if (bcm2835_i2c_write(NULL, 0) == 0)
		return MCP7941X_OK;

	return MCP7941X_ERROR;
}
コード例 #14
0
ファイル: bw_spi_lcd.c プロジェクト: Crazykitten352/rpidmx512
/**
 * @ingroup SPI-LCD
 *
 * @param device_info
 * @return
 */
uint8_t bw_spi_lcd_start(device_info_t *device_info) {
#if !defined(BARE_METAL) && !defined(__AVR_ARCH__)
	if (bcm2835_init() != 1)
	return BW_LCD_ERROR;
#endif
	FUNC_PREFIX(spi_begin());

	if (device_info->slave_address == (uint8_t) 0) {
		device_info->slave_address = BW_LCD_DEFAULT_SLAVE_ADDRESS;
	}

	if (device_info->speed_hz == (uint32_t) 0) {
		device_info->speed_hz = (uint32_t) BW_LCD_SPI_SPEED_DEFAULT_HZ;
	} else if (device_info->speed_hz > (uint32_t) BW_LCD_SPI_SPEED_MAX_HZ) {
		device_info->speed_hz = (uint32_t) BW_LCD_SPI_SPEED_MAX_HZ;
	}
#ifdef __AVR_ARCH__
#else
	device_info->internal_clk_div = (uint16_t)((uint32_t) BCM2835_CORE_CLK_HZ / device_info->speed_hz);
#endif
	return BW_LCD_OK;
}
コード例 #15
0
ファイル: bw_spi_relay.c プロジェクト: glocklueng/OpenILDA
/**
 * @ingroup SPI-DO
 *
 */
void bw_spi_relay_end(void) {
	FUNC_PREFIX(spi_end());
}
コード例 #16
0
ファイル: bw_spi_lcd.c プロジェクト: Crazykitten352/rpidmx512
/**
 * @ingroup SPI-LCD
 *
 */
void bw_spi_lcd_end(void) {
	FUNC_PREFIX(spi_end());
}
コード例 #17
0
ファイル: mcp7941x.c プロジェクト: glockwork/rpidmx512
/**
 *  @ingroup I2C-RTC
 *
 */
void mcp7941x_end (void) {
	FUNC_PREFIX(i2c_end());
}
コード例 #18
0
ファイル: bw_spi_dio.c プロジェクト: glocklueng/OpenILDA
/**
 * @ingroup SPI-DIO
 *
 */
void bw_spi_dio_end(void) {
	FUNC_PREFIX(spi_end());
}