2727#include <stdio.h>
2828#include <stdint.h>
2929
30- #include "etshal.h"
31- #include "user_interface.h"
3230#include "py/obj.h"
3331#include "py/mphal.h"
3432#include "modpyb.h"
35-
36- STATIC uint32_t disable_irq (void ) {
37- ets_intr_lock ();
38- return 0 ;
39- }
40-
41- STATIC void enable_irq (uint32_t i ) {
42- ets_intr_unlock ();
43- }
44-
45- STATIC void mp_hal_delay_us_no_irq (uint32_t us ) {
46- uint32_t start = system_get_time ();
47- while (system_get_time () - start < us ) {
48- }
49- }
50-
51- #define DELAY_US mp_hal_delay_us_no_irq
52-
53- #define TIMING_RESET1 (0)
54- #define TIMING_RESET2 (1)
55- #define TIMING_RESET3 (2)
56- #define TIMING_READ1 (3)
57- #define TIMING_READ2 (4)
58- #define TIMING_READ3 (5)
59- #define TIMING_WRITE1 (6)
60- #define TIMING_WRITE2 (7)
61- #define TIMING_WRITE3 (8)
62-
63- static int timings [] = {480 , 40 , 420 , 5 , 5 , 40 , 10 , 50 , 10 };
33+ #include "esponewire.h"
6434
6535STATIC mp_obj_t onewire_timings (mp_obj_t timings_in ) {
6636 mp_obj_t * items ;
6737 mp_obj_get_array_fixed_n (timings_in , 9 , & items );
6838 for (int i = 0 ; i < 9 ; ++ i ) {
69- timings [i ] = mp_obj_get_int (items [i ]);
39+ esp_onewire_timings [i ] = mp_obj_get_int (items [i ]);
7040 }
7141 return mp_const_none ;
7242}
7343STATIC MP_DEFINE_CONST_FUN_OBJ_1 (onewire_timings_obj , onewire_timings );
7444
7545STATIC mp_obj_t onewire_reset (mp_obj_t pin_in ) {
76- uint pin = mp_obj_get_pin (pin_in );
77- pin_set (pin , 0 );
78- DELAY_US (timings [TIMING_RESET1 ]);
79- uint32_t i = disable_irq ();
80- pin_set (pin , 1 );
81- DELAY_US (timings [TIMING_RESET2 ]);
82- int status = !pin_get (pin );
83- enable_irq (i );
84- DELAY_US (timings [TIMING_RESET3 ]);
85- return mp_obj_new_bool (status );
46+ return mp_obj_new_bool (esp_onewire_reset (mp_obj_get_pin (pin_in )));
8647}
8748STATIC MP_DEFINE_CONST_FUN_OBJ_1 (onewire_reset_obj , onewire_reset );
8849
89- STATIC int _onewire_readbit (uint pin ) {
90- pin_set (pin , 1 );
91- uint32_t i = disable_irq ();
92- pin_set (pin , 0 );
93- DELAY_US (timings [TIMING_READ1 ]);
94- pin_set (pin , 1 );
95- DELAY_US (timings [TIMING_READ2 ]);
96- int value = pin_get (pin );
97- enable_irq (i );
98- DELAY_US (timings [TIMING_READ3 ]);
99- return value ;
100- }
101-
10250STATIC mp_obj_t onewire_readbit (mp_obj_t pin_in ) {
103- return MP_OBJ_NEW_SMALL_INT (_onewire_readbit (mp_obj_get_pin (pin_in )));
51+ return MP_OBJ_NEW_SMALL_INT (esp_onewire_readbit (mp_obj_get_pin (pin_in )));
10452}
10553STATIC MP_DEFINE_CONST_FUN_OBJ_1 (onewire_readbit_obj , onewire_readbit );
10654
10755STATIC mp_obj_t onewire_readbyte (mp_obj_t pin_in ) {
10856 uint pin = mp_obj_get_pin (pin_in );
10957 uint8_t value = 0 ;
11058 for (int i = 0 ; i < 8 ; ++ i ) {
111- value |= _onewire_readbit (pin ) << i ;
59+ value |= esp_onewire_readbit (pin ) << i ;
11260 }
11361 return MP_OBJ_NEW_SMALL_INT (value );
11462}
11563STATIC MP_DEFINE_CONST_FUN_OBJ_1 (onewire_readbyte_obj , onewire_readbyte );
11664
117- STATIC void _onewire_writebit (uint pin , int value ) {
118- uint32_t i = disable_irq ();
119- pin_set (pin , 0 );
120- DELAY_US (timings [TIMING_WRITE1 ]);
121- pin_set (pin , value );
122- DELAY_US (timings [TIMING_WRITE2 ]);
123- pin_set (pin , 1 );
124- DELAY_US (timings [TIMING_WRITE3 ]);
125- enable_irq (i );
126- }
127-
12865STATIC mp_obj_t onewire_writebit (mp_obj_t pin_in , mp_obj_t value_in ) {
129- _onewire_writebit (mp_obj_get_pin (pin_in ), mp_obj_get_int (value_in ));
66+ esp_onewire_writebit (mp_obj_get_pin (pin_in ), mp_obj_get_int (value_in ));
13067 return mp_const_none ;
13168}
13269STATIC MP_DEFINE_CONST_FUN_OBJ_2 (onewire_writebit_obj , onewire_writebit );
@@ -135,7 +72,7 @@ STATIC mp_obj_t onewire_writebyte(mp_obj_t pin_in, mp_obj_t value_in) {
13572 uint pin = mp_obj_get_pin (pin_in );
13673 int value = mp_obj_get_int (value_in );
13774 for (int i = 0 ; i < 8 ; ++ i ) {
138- _onewire_writebit (pin , value & 1 );
75+ esp_onewire_writebit (pin , value & 1 );
13976 value >>= 1 ;
14077 }
14178 return mp_const_none ;
0 commit comments