@@ -14,15 +14,15 @@ uint16_t pWidth = 1500;
1414int8_t  dir  =  1 ;
1515
1616enum  Modes  {
17-     Manual ,
1817    Center ,
18+     Manual ,
1919    Auto ,
2020};
2121
2222const  char *  const  modes_text [Auto  +  1 ] =  {
23-     "Manual" ,
2423    "Center" ,
25-     "Auto" ,
24+     "Manual" ,
25+     " Auto" ,
2626};
2727
2828uint8_t  mode  =  Manual ;
@@ -37,7 +37,7 @@ typedef struct {
3737    InputEvent  input ;
3838} ServoTesterEvent ;
3939
40- static  void  draw_callback (Canvas *  canvas , void *  ctx ) {
40+ static  void  servotester_draw_callback (Canvas *  canvas , void *  ctx ) {
4141    UNUSED (ctx );
4242
4343    char  temp_str [36 ];
@@ -51,16 +51,6 @@ static void draw_callback(Canvas* canvas, void* ctx) {
5151    canvas_draw_line (canvas , 14 , 30 , 14 , 20 );
5252    canvas_draw_line (canvas , 114 , 30 , 114 , 20 );
5353
54-     /* 
55-         14-1000 
56-         104-2000 
57- 
58- 
59- 
60-         (pWidth-1000)/10+10 === 0-1 
61-          
62- 
63-     */ 
6454    canvas_draw_frame (canvas , (pWidth  -  1000 ) / 10.2  +  14 , 20 , 3 , 10 );
6555
6656    snprintf (temp_str , sizeof (temp_str ), "%i us" , pWidth );
@@ -70,21 +60,21 @@ static void draw_callback(Canvas* canvas, void* ctx) {
7060    canvas_draw_str (canvas , 50 , 50 , modes_text [mode ]);
7161}
7262
73- static  void  input_callback (InputEvent *  input_event , void *  ctx ) {
63+ static  void  servotester_input_callback (InputEvent *  input_event , void *  ctx ) {
7464    furi_assert (ctx );
7565    FuriMessageQueue *  event_queue  =  ctx ;
7666    ServoTesterEvent  event  =  {.type  =  EventTypeInput , .input  =  * input_event };
7767    furi_message_queue_put (event_queue , & event , FuriWaitForever );
7868}
7969
80- static  void  timer_callback (FuriMessageQueue *  event_queue ) {
70+ static  void  servotester_timer_callback (FuriMessageQueue *  event_queue ) {
8171    furi_assert (event_queue );
8272
8373    ServoTesterEvent  event  =  {.type  =  EventTypeTick };
8474    furi_message_queue_put (event_queue , & event , 0 );
8575}
8676
87- void  setServoPWM (uint32_t  freq , uint32_t  compare ) {
77+ void  servotester_set_servo_pwm (uint32_t  freq , uint32_t  compare ) {
8878    uint32_t  freq_div  =  64000000LU  / freq ;
8979    uint32_t  prescaler  =  freq_div  / 0x10000LU ;
9080    uint32_t  period  =  freq_div  / (prescaler  +  1 );
@@ -94,8 +84,8 @@ void setServoPWM(uint32_t freq, uint32_t compare) {
9484    LL_TIM_OC_SetCompareCH1 (TIM1 , compare );
9585}
9686
97- void  updatePwm () {
98-     setServoPWM (DEFAULT_FREQ , pWidth  *  3.2 );
87+ void  servotester_update_pwm () {
88+     servotester_set_servo_pwm (DEFAULT_FREQ , pWidth  *  3.2 );
9989}
10090
10191int32_t  servotester_app (void *  p ) {
@@ -108,64 +98,67 @@ int32_t servotester_app(void* p) {
10898    ViewPort *  view_port  =  view_port_alloc ();
10999
110100    // callbacks init 
111-     view_port_draw_callback_set (view_port , draw_callback , NULL );
112-     view_port_input_callback_set (view_port , input_callback , event_queue );
101+     view_port_draw_callback_set (view_port , servotester_draw_callback , NULL );
102+     view_port_input_callback_set (view_port , servotester_input_callback , event_queue );
113103
114104    Gui *  gui  =  furi_record_open (RECORD_GUI );
115105    gui_add_view_port (gui , view_port , GuiLayerFullscreen );
116106
117-     FuriTimer *  timer  =  furi_timer_alloc (timer_callback , FuriTimerTypePeriodic , event_queue );
107+     // Timer for automatic mode 
108+     FuriTimer *  timer  = 
109+         furi_timer_alloc (servotester_timer_callback , FuriTimerTypePeriodic , event_queue );
118110    furi_timer_start (timer , 5 );
119111
120112    //GPIO init 
121-     furi_hal_power_enable_otg ();
122-     furi_hal_pwm_start (FuriHalPwmOutputIdTim1PA7 , 50 , 4 );
123-     setServoPWM (DEFAULT_FREQ , pWidth  *  3.2 );
113+     furi_hal_power_enable_otg ();  // Turn 5V 
114+     furi_hal_pwm_start (FuriHalPwmOutputIdTim1PA7 , 50 , 4 );  // Init Tim1 
115+     servotester_set_servo_pwm (DEFAULT_FREQ , pWidth  *  3.2 );  // set our PWM 
124116
125117    while (1 ) {
126118        furi_check (furi_message_queue_get (event_queue , & event , FuriWaitForever ) ==  FuriStatusOk );
127119        if (event .type  ==  EventTypeInput ) {
128120            if (event .input .key  ==  InputKeyBack ) {
129-                 furi_hal_power_disable_otg ();
130-                 furi_hal_pwm_stop (FuriHalPwmOutputIdTim1PA7 );
131121                break ;
132122            } else  if (event .input .key  ==  InputKeyOk ) {
133123                if (event .input .type  ==  InputTypeRelease ) {
134124                    if (mode  ==  Auto ) {
135-                         mode  =  Manual ;
125+                         mode  =  Center ;
136126                    } else  {
137127                        mode ++ ;
138128                    }
139129
140130                    if (mode  ==  Center ) {
141131                        pWidth  =  1500 ;
142-                         updatePwm ();
132+                         servotester_update_pwm ();
143133                    }
144134                }
145135            } else  if (event .input .key  ==  InputKeyLeft ) {
146136                if (pWidth  >  1000 ) pWidth -- ;
147-                 updatePwm ();
137+                 servotester_update_pwm ();
148138            } else  if (event .input .key  ==  InputKeyRight ) {
149139                if (pWidth  <  2000 ) pWidth ++ ;
150-                 updatePwm ();
140+                 servotester_update_pwm ();
151141            } else  if (event .input .key  ==  InputKeyDown ) {
152142                if (pWidth  >= 1010 ) pWidth  -=  10 ;
153-                 updatePwm ();
143+                 servotester_update_pwm ();
154144            } else  if (event .input .key  ==  InputKeyUp ) {
155145                if (pWidth  <= 1990 ) pWidth  +=  10 ;
156-                 updatePwm ();
146+                 servotester_update_pwm ();
157147            }
158148        } else  if (event .type  ==  EventTypeTick ) {
159149            if (mode  ==  Auto ) {
160150                pWidth  +=  dir ;
161151                if (pWidth  >  1990  ||  pWidth  <  1010 ) {
162152                    dir  =  dir  *  -1 ;
163153                }
164-                 updatePwm ();
154+                 servotester_update_pwm ();
165155            }
166156        }
167157    }
168158
159+     furi_hal_power_disable_otg ();
160+     furi_hal_pwm_stop (FuriHalPwmOutputIdTim1PA7 );
161+ 
169162    furi_timer_free (timer );
170163    furi_message_queue_free (event_queue );
171164
0 commit comments