Ejemplo n.º 1
0
void iso_pdu1_rx(iso_m *m_receive)
{
	iso_m m;
	byte i;
	byte da;
	pgn request_pgn;
	
	if (m_receive->bits.pf1 == PF1(ISO_REQUEST_PGN) && 
			m_receive->bits.pf2 == PF2(ISO_REQUEST_PGN)) {
		da = m_receive->bits.ps1<<7 | m_receive->bits.ps2;
		if (da == 255 || da == source_address){
			
			// something has been requested of us
			//m_receive->bits.data = &m_receive+4;
			request_pgn.byte_pgn[0] = 0;
			request_pgn.byte_pgn[1] = *((byte *) m_receive+6);
			request_pgn.byte_pgn[2] = *((byte *) m_receive+5);
			request_pgn.byte_pgn[3] = *((byte *) m_receive+4);
			
			//request_pgn = (byte *) m_receive+1;
			putc1(0xab);
			putc1(0xab);
			//puts1(m_receive, 7,0);
			//puts1((byte *) m_receive+1,6,0);
			puts1(request_pgn.byte_pgn, 4,0);
			switch (request_pgn.dw_pgn) {
			case ((dword) ADDRESS_CLAIM_PGN):
				toggle_led(LED2);
				address_claim_message();
				break;
			case ((dword) PRODUCT_INFORMATION_PGN):
				toggle_led(LED1); 
				break;
			}
		}
	}
	
	// if address claim and this source address, then send out a new address claim
	if (m_receive->bits.sa == source_address) {
		// quick first check
		m.bits.priority = 6;
		ISO_M(ADDRESS_CLAIM_PGN);
		
		if (m_receive->dw_id == m.dw_id) {
			// if my name < received name I get to keep my source address
			for(i=0;i<ADDRESS_CLAIM_PGN_LENGTH;i++) {
				if (name[i] < m_receive->bits.data[i])
					break;
				if (name[i] > m_receive->bits.data[i]) {
					generate_new_source_address();
					break;
				}
				if (i == ADDRESS_CLAIM_PGN_LENGTH-1)
					generate_new_source_address();
			}
			address_claim_message();
		}
	}
}
Ejemplo n.º 2
0
void print_to_serial(byte *can_buf)
{
	byte data_length;
	byte i;

	
	data_length = (can_buf[12]&0xF) + 4; // 4 bytes for id field
	
/*	if (ascii_out) {
		rprintf("%02X", data_length);
		for(i=0;i<data_length;i++)
			rprintf("%02X", can_buf[i]);
		rprintf("\n");
	} else {*/
//		putc1(0xAB);
//		putc1(0xCD);
		putc1(data_length);
		puts1(can_buf, (int) data_length,0);		// from the id field forward through the bytes
		putcontrol1(NEWLINE_AND_LINEFEED);
//	}

}
Ejemplo n.º 3
0
void f(void *s){
	int i;
	for(i = 0; i < N; i++){
		puts1((char*)s);
	}
}