Welcome to mirror list, hosted at ThFree Co, Russian Federation.

metacom.c - github.com/ClusterM/ibutton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a02aaf32be34d99bd44c2c3ab2c97250d9575b9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <avr/io.h>
#include "defines.h"
#include "ibutton.h"
#include "bits.h"
#include "metacom.h"
#include "onewire.h"

inline void metacom_send_byte(uint8_t data)
{
	uint8_t b;
	for (b = 0; b < 8; b++)
	{
		if (data & (1UL<<b))
		{
			ONEWIRE_MASTER_TX_OFF;
			ONEWIRE_WAIT(METACOM_T*2/3); // 1
			ONEWIRE_MASTER_TX_ON;
			ONEWIRE_WAIT(METACOM_T/3);
		} else {
			ONEWIRE_MASTER_TX_OFF;
			ONEWIRE_WAIT(METACOM_T/3); // 0
			ONEWIRE_MASTER_TX_ON;
			ONEWIRE_WAIT(METACOM_T*2/3);
			// Тут не надо отпускать TX перед посылкой следующего пакета
		}
	}
}

void metacom_send(unsigned char* key)
{
	ONEWIRE_MASTER_TX(METACOM_T); // Синхронизирующий бит
	
	ONEWIRE_WAIT(METACOM_T/3); // 0
	ONEWIRE_MASTER_TX(METACOM_T*2/3);

	ONEWIRE_WAIT(METACOM_T*2/3); // 1
	ONEWIRE_MASTER_TX(METACOM_T/3);

	ONEWIRE_WAIT(METACOM_T/3); // 0
	ONEWIRE_MASTER_TX(METACOM_T*2/3);
	
	int b;
	for (b = 0; b < 4; b++)
	{
	/*
		speedup_leds();
		*/
		update_leds();
		metacom_send_byte(key[b]);
	}
}