예제 #1
0
void RDMSubDeviceBwLcd::UpdateEvent(TRDMSubDeviceUpdateEvent tUpdateEvent) {
	if (tUpdateEvent == RDM_SUBDEVICE_UPDATE_EVENT_DMX_STARTADDRESS) {
		DisplayChannels();
		for (unsigned i = 0; i < BW_LCD_MAX_CHARACTERS - 1; i++) { // Leave H, D, % at the end
			m_aText[i] = ' ';
		}
		bw_spi_lcd_text_line_2(&m_tDeviceInfo, m_aText, BW_LCD_MAX_CHARACTERS - 1); // Leave H, D, % at the end
		return;
	} else if (tUpdateEvent == RDM_SUBDEVICE_UPDATE_EVENT_PERSONALITY) {
		DisplayUpdatePersonality();
		if (m_aText[2] != ' ') {
			switch (GetPersonalityCurrent()) {
			case 1:
				DataHex(m_Data, m_nLength);
				break;
			case 2:
				DataDec(m_Data, m_nLength);
				break;
			case 3:
				DataPct(m_Data, m_nLength);
				break;
			default:
				break;
			}
		}

		bw_spi_lcd_text_line_2(&m_tDeviceInfo, m_aText, BW_LCD_MAX_CHARACTERS);
	}
}
예제 #2
0
void RDMSubDeviceBwLcd::Stop(void) {
	if(!m_IsStarted) {
		return;
	}

	m_IsStarted = false;

	bw_spi_lcd_text_line_2(&m_tDeviceInfo, s_aLine, BW_LCD_MAX_CHARACTERS - 1); // Leave H, D, % at the end
}
예제 #3
0
void RDMSubDeviceBwLcd::Start(void) {
	if (m_IsStarted) {
		return;
	}

	m_IsStarted = true;

	DisplayChannels();

	for (unsigned i = 0; i < BW_LCD_MAX_CHARACTERS; i++) {
		m_aText[i] = ' ';
	}

	DisplayUpdatePersonality();

	bw_spi_lcd_text_line_2(&m_tDeviceInfo, m_aText, BW_LCD_MAX_CHARACTERS);
}
예제 #4
0
bool RDMSubDeviceBwLcd::Initialize(void) {
	const bool IsConnected = bw_spi_lcd_start(&m_tDeviceInfo);

	if (IsConnected) {
		for (unsigned i = 0; i < BW_LCD_MAX_CHARACTERS; i++) {
			m_aText[i] = ' ';
		}
		bw_spi_lcd_text_line_1(&m_tDeviceInfo, m_aText, BW_LCD_MAX_CHARACTERS);
		bw_spi_lcd_text_line_2(&m_tDeviceInfo, m_aText, BW_LCD_MAX_CHARACTERS);
	}

#ifndef NDEBUG
	printf("%s:%s IsConnected=%d\n", __FILE__, __FUNCTION__, (int) IsConnected);
#endif

	return IsConnected;
}
예제 #5
0
void RDMSubDeviceBwLcd::Data(const uint8_t* pData, uint16_t nLength) {
	const uint16_t nDmxStartAddress = GetDmxStartAddress();
	bool IsDataChanged = false;

	nLength = MIN(nLength, DMX_FOOTPRINT);
	nLength = MIN(nLength, 513 - nDmxStartAddress);

	const uint8_t* p = &pData[nDmxStartAddress-1];

	for (unsigned i = 0; (i < sizeof(m_Data)) && (i < nLength); i++) {
		if (m_Data[i] != p[i]) {
			IsDataChanged = true;
		}
		m_Data[i] = p[i];
	}

	if (!IsDataChanged) {
		return;
	}

	m_nLength = nLength;

	switch (GetPersonalityCurrent()) {
		case 1:
			DataHex(p, nLength);
			break;
		case 2:
			DataDec(p, nLength);
			break;
		case 3:
			DataPct(p, nLength);
			break;
		default:
			break;
	}

	bw_spi_lcd_text_line_2(&m_tDeviceInfo, m_aText, BW_LCD_MAX_CHARACTERS - 1);
}
예제 #6
0
파일: main.c 프로젝트: glocklueng/AVR
int main(void)
{
	device_info_t device_info;

	UART_BEGIN();

	device_info.slave_address = BW_LCD_DEFAULT_SLAVE_ADDRESS;

	/** SPI **/
	printf("bw_spi_lcd_start\n");
	bw_spi_lcd_start(&device_info);

	printf("bw_spi_read_id\n");
	bw_spi_read_id(&device_info);

	printf("bw_spi_lcd_reinit\n");
	bw_spi_lcd_reinit(&device_info);

	uint8_t backlight;
	printf("bw_spi_lcd_get_backlight := ");
	bw_spi_lcd_get_backlight(&device_info, &backlight);

	printf("%d\n", backlight);

	uint8_t contrast;
	printf("bw_spi_lcd_get_contrast := ");
	bw_spi_lcd_get_contrast(&device_info,&contrast);

	printf("%d\n", contrast);

	printf("bw_spi_lcd_cls\n");
	bw_spi_lcd_cls(&device_info);

	printf("bw_spi_lcd_text_line_1\n");
	bw_spi_lcd_text_line_1(&device_info, "AVR Atmel", 9);

	printf("bw_spi_lcd_text_line_2\n");
	bw_spi_lcd_text_line_2(&device_info, "Arduino Uno", 11);

	/** I2C **/
	printf("bw_i2c_lcd_start\n");
	bw_i2c_lcd_start(BW_LCD_DEFAULT_SLAVE_ADDRESS);

	printf("bw_i2c_read_id\n");
	bw_i2c_read_id(&device_info);

	printf("bw_i2c_lcd_reinit\n");
	bw_i2c_lcd_reinit();

	printf("bw_i2c_lcd_cls\n");
	bw_i2c_lcd_cls();

	printf("bw_i2c_lcd_text_line_1\n");
	bw_i2c_lcd_text_line_1("AVR Atmel", 9);

	/** RTC **/
	struct rtc_time tm_rtc;
	printf("mcp7941x_start\n");
	mcp7941x_start(0x00);

	printf("mcp7941x_get_date_time\n");
	mcp7941x_get_date_time(&tm_rtc);

	printf("%.2d:%.2d:%.2d %.2d-%.2d-%.2d\n", tm_rtc.tm_hour, tm_rtc.tm_min, tm_rtc.tm_sec, tm_rtc.tm_mday, tm_rtc.tm_mon, tm_rtc.tm_year);

	device_info.slave_address = BW_DIO_DEFAULT_SLAVE_ADDRESS;

	printf("bw_i2c_dio_start\n");
	bw_i2c_dio_start(&device_info);

	printf("bw_i2c_read_id\n");
	bw_i2c_read_id(&device_info);

	printf("bw_i2c_dio_fsel_mask\n");
	bw_i2c_dio_fsel_mask(&device_info, 0x7F);

	char buf[9];
	while (1)
	{
		mcp7941x_get_date_time(&tm_rtc);
		sprintf(buf, "%.2d:%.2d:%.2d", tm_rtc.tm_hour, tm_rtc.tm_min, tm_rtc.tm_sec);
		bw_i2c_lcd_text_line_2(buf, 8);

		device_info.slave_address = BW_DIO_DEFAULT_SLAVE_ADDRESS;
		bw_i2c_dio_output(&device_info, BW_DIO_PIN_IO0 | BW_DIO_PIN_IO2 | BW_DIO_PIN_IO4 | BW_DIO_PIN_IO6);
		_delay_ms(500);

		bw_i2c_dio_output(&device_info, BW_DIO_PIN_IO1 | BW_DIO_PIN_IO3 | BW_DIO_PIN_IO5);
		_delay_ms(500);
	}
}