Esempio n. 1
0
static inline void sendMessage(device_data_zeitschaltuhr *p, uint8_t zustandToSend)
{
	canix_frame message;
	
		message.src = canix_selfaddr();
		message.dst = HCAN_MULTICAST_CONTROL;
		message.proto = HCAN_PROTO_SFP;
		message.data[0] = HCAN_SRV_HES;
	message.data[1] = zustandToSend;
		message.data[2] = p->config.power_gruppe;
		message.size    = 3;
		canix_frame_send(&message);
}
Esempio n. 2
0
void send_log(uint8_t data, uint8_t data2)
{
	canix_frame answer;

	answer.src = canix_selfaddr();
	answer.dst = 40;
	answer.proto = HCAN_PROTO_SFP;
	answer.data[0] = 21;
	answer.data[1] = data;
	answer.data[2] = data2;
	answer.size = 3;
	canix_frame_send(&answer);
	delay(1);
}
Esempio n. 3
0
void canix_syslog_P(uint8_t prio, const char *fmt, ...)
{
	if (canix_debug_level >= prio)
	{
		canix_frame message;
		uint8_t s_counter, payload_counter;
		char s[128];
		va_list ap;

		va_start(ap, fmt);
		vsnprintf_P(s, sizeof(s)-2, fmt, ap);
		va_end(ap);

		// An das Ende ein Retrun Zeichen anhaengen; somit kann die
		// empfangende Seite erkennen, wann die Meldung beendet ist.
		//
		// Hier benoetigen wir keinen Laengen-Check, da wir oben
		// sizeof(s)-2 verwendet haben.
		strcat(s,"\n");

		message.src = canix_selfaddr();
		message.dst = HCAN_MULTICAST_SYSLOG;
		message.proto = HCAN_PROTO_SYSLOG;

		s_counter = 0;

		message.data[0] = prio;
		payload_counter = 1;

		while (s_counter < strlen(s))
		{
			wdt_reset();

			while ((payload_counter < 8) && (s_counter < strlen(s)))
			{
				message.data[payload_counter++] = s[s_counter++];
			}

			message.size = payload_counter;
			payload_counter = 0;
			canix_frame_send(&message);
		}

		canix_sleep_100th(1);
	}
}
Esempio n. 4
0
void canix_SFP_HMS_handler(const canix_frame *frame)
{
	canix_frame answer;

	answer.src = canix_selfaddr();
	answer.dst = frame->src;
	answer.proto = HCAN_PROTO_SFP;
	answer.data[0] = HCAN_SRV_HMS;


	switch (frame->data[1])
	{
		case HCAN_HMS_PING_REQUEST :
			answer.data[1] = HCAN_HMS_PING_REPLAY;
			answer.size = 2;
			canix_frame_send(&answer);
			break;
		case HCAN_HMS_DEVICE_STATE_REQUEST :
			answer.data[1] = HCAN_HMS_DEVICE_STATE_REPLAY;
			answer.data[2] = HCAN_HMS_DEV_STATE_APPLICATION;
			answer.size = 3;
			canix_frame_send(&answer);
			break;
		case HCAN_HMS_DEVICE_RESET :
			canix_reset();
			break;
		case HCAN_HMS_DEVICE_TYPE_REQUEST :
			answer.data[1] = HCAN_HMS_DEVICE_TYPE_REPLAY;
#if defined (__AVR_ATmega8__)
			answer.data[2] = 0;
#elif defined (__AVR_ATmega32__)
			answer.data[2] = 1;
#elif defined (__AVR_ATmega644__)
			answer.data[2] = 2;
#endif
			answer.data[3] = eeprom_read_byte((uint8_t *)EEPR_BOARD_TYPE);
			answer.size = 4;
			canix_frame_send(&answer);
			break;
		case HCAN_HMS_INTERNAL_EEPROM_WRITE :
			{
				// only write to eeprom, if the value changed !
				uint8_t read = 
					eeprom_read_byte((uint8_t *)(frame->data[2] |
								(frame->data[3] << 8)));

				if (read != frame->data[4])
					eeprom_write_byte((uint8_t *)(frame->data[2] |
								(frame->data[3] << 8)), frame->data[4]);

				answer.data[1] = HCAN_HMS_INTERNAL_EEPROM_WRITE_ACK;
				answer.size = 2;
				canix_frame_send(&answer);
			}
			break;
		case HCAN_HMS_INTERNAL_EEPROM_READ_REQUEST :
			answer.data[1] = HCAN_HMS_INTERNAL_EEPROM_READ_REPLAY;
			answer.data[2] = eeprom_read_byte((uint8_t *)(frame->data[2] |
						(frame->data[3] << 8)));
			answer.size = 3;
			canix_frame_send(&answer);
			break;
		case HCAN_HMS_INTERNAL_EEPROM_READ_BULK_REQUEST :
			{
				uint16_t address;
				address = frame->data[2] | (frame->data[3] << 8);
				answer.data[1] = HCAN_HMS_INTERNAL_EEPROM_READ_BULK_REPLAY;
				answer.data[2] = eeprom_read_byte((uint8_t*) (address + 0));
				answer.data[3] = eeprom_read_byte((uint8_t*) (address + 1));
				answer.data[4] = eeprom_read_byte((uint8_t*) (address + 2));
				answer.data[5] = eeprom_read_byte((uint8_t*) (address + 3));
				answer.data[6] = eeprom_read_byte((uint8_t*) (address + 4));
				answer.data[7] = eeprom_read_byte((uint8_t*) (address + 5));
				answer.size = 8;
				canix_frame_send(&answer);
			}
			break;
		case HCAN_HMS_UPTIME_QUERY :
			answer.size = 6;
			answer.data[1] = HCAN_HMS_UPTIME_REPLAY;
			answer.data[2] = canix_rtc_clock.uptime_sec >> 24;
			answer.data[3] = canix_rtc_clock.uptime_sec >> 16;
			answer.data[4] = canix_rtc_clock.uptime_sec >> 8;
			answer.data[5] = canix_rtc_clock.uptime_sec;
			canix_frame_send(&answer);
			break;
		case HCAN_HMS_SYSLOG_LEVEL_SET :
#ifdef CANIX_SYSLOG
			canix_set_syslog_level(frame->data[2]);
			eeprom_write_byte((uint8_t *)EEPR_DEBUG_LEVEL, frame->data[2]);
#endif
			break;
		case HCAN_HMS_BUILD_VERSION_QUERY :
			answer.data[1] = HCAN_HMS_BUILD_VERSION_REPLAY;
			answer.data[2] = 
#include <buildver> 
				>> 8;
			answer.data[3] = 
#include <buildver>
				;
			answer.size = 4;
			canix_frame_send(&answer);
			break;
		case HCAN_HMS_CAN_EC_QUERY :
			{
				uint16_t ec = can_error_counters();
				answer.data[1] = HCAN_HMS_CAN_EC_REPLAY;
				answer.data[2] = ec >> 8;
				answer.data[3] = ec;
				answer.size = 4;
				canix_frame_send(&answer);
			}
			break;
		case HCAN_HMS_RX_RECEIVED_QUERY :
			{
				answer.data[1] = HCAN_HMS_RX_RECEIVED_REPLAY;
				answer.data[2] = canix_rx_received >> 24;
				answer.data[3] = canix_rx_received >> 16;
				answer.data[4] = canix_rx_received >> 8;
				answer.data[5] = canix_rx_received;
				answer.size = 6;
				canix_frame_send(&answer);
			}
			break;
		case HCAN_HMS_RX_LOST_QUERY :
			{
				answer.data[1] = HCAN_HMS_RX_LOST_REPLAY;
				answer.data[2] = canix_rx_lost >> 24;
				answer.data[3] = canix_rx_lost >> 16;
				answer.data[4] = canix_rx_lost >> 8;
				answer.data[5] = canix_rx_lost;
				answer.size = 6;
				canix_frame_send(&answer);
			}
			break;
		case HCAN_HMS_TX_SENT_QUERY :
			{
				answer.data[1] = HCAN_HMS_TX_SENT_REPLAY;
				answer.data[2] = canix_tx_sent >> 24;
				answer.data[3] = canix_tx_sent >> 16;
				answer.data[4] = canix_tx_sent >> 8;
				answer.data[5] = canix_tx_sent;
				answer.size = 6;
				canix_frame_send(&answer);
			}
			break;
		case HCAN_HMS_TX_DROPPED_QUERY :
			{
				answer.data[1] = HCAN_HMS_TX_DROPPED_REPLAY;
				answer.data[2] = canix_tx_dropped >> 24;
				answer.data[3] = canix_tx_dropped >> 16;
				answer.data[4] = canix_tx_dropped >> 8;
				answer.data[5] = canix_tx_dropped;
				answer.size = 6;
				canix_frame_send(&answer);
			}
			break;
		case HCAN_HMS_RX_TX_STATS_RESET : 
			{
				canix_rx_received = 0;
				canix_rx_lost = 0;
				canix_tx_sent = 0;
				canix_tx_dropped = 0;
			}
			break;
	}
}