@@ -231,6 +231,7 @@ static void print_help(char* cmd)
231231
232232static void lsgpio (struct options_setting * setting )
233233{
234+ setting -> no_release_pins = 1 ;
234235 struct board_info * board = get_board (setting -> board );
235236 if (board == NULL )
236237 return ;
@@ -248,6 +249,7 @@ static void lsgpio(struct options_setting* setting)
248249
249250static void lsboard (struct options_setting * setting )
250251{
252+ setting -> no_release_pins = 1 ;
251253 printf ("\nlist of supported board model:\n\n" );
252254 for (int i = 0 ; i < num_of_boards ; i ++ )
253255 {
@@ -375,6 +377,7 @@ void free_gpio(struct gpio_device* gpio)
375377
376378static void ptc_set_target_temperature (struct options_setting * setting )
377379{
380+ setting -> no_release_pins = 1 ;
378381 struct board_info * board = get_board (setting -> board );
379382 if (board == NULL )
380383 return ;
@@ -451,6 +454,7 @@ static void ptc_set_target_temperature(struct options_setting *setting)
451454
452455static void ptc_set_current_temperature (struct options_setting * setting )
453456{
457+ setting -> no_release_pins = 1 ;
454458 struct board_info * board = get_board (setting -> board );
455459 if (board == NULL )
456460 return ;
@@ -489,6 +493,7 @@ static void ptc_set_current_temperature(struct options_setting *setting)
489493
490494static void ptc_get_temperature (struct options_setting * setting ) //
491495{
496+ setting -> no_release_pins = 1 ;
492497 struct board_info * board = get_board (setting -> board );
493498 if (board == NULL )
494499 return ;
@@ -523,6 +528,7 @@ static void ptc_get_temperature(struct options_setting *setting) //
523528
524529static void ptc_get_is_stable (struct options_setting * setting ) //
525530{
531+ setting -> no_release_pins = 1 ;
526532 struct board_info * board = get_board (setting -> board );
527533 if (board == NULL )
528534 return ;
@@ -564,6 +570,7 @@ static void ptc_get_is_stable(struct options_setting *setting) //
564570
565571static void ptc_get_is_enable (struct options_setting * setting ) //
566572{
573+ setting -> no_release_pins = 1 ;
567574 struct board_info * board = get_board (setting -> board );
568575 if (board == NULL )
569576 return ;
@@ -605,6 +612,7 @@ static void ptc_get_is_enable(struct options_setting *setting) //
605612
606613static void get_temp (struct options_setting * setting )//
607614{
615+ setting -> no_release_pins = 1 ;
608616 struct board_info * board = get_board (setting -> board );
609617 if (board == NULL )
610618 return ;
@@ -699,7 +707,7 @@ static void set_gpio(struct options_setting* setting)
699707 if (status )
700708 printf ("set gpio failed, error = 0x%x\n" , status );
701709 else
702- printf ("set gpio successfully\n" );
710+ printf ("%s gpio set to %d successfully\n" , setting -> gpio_name , setting -> output_state );
703711
704712 //hold time
705713 msleep (setting -> hold );
@@ -1620,6 +1628,7 @@ static int eeprom(struct options_setting* setting)
16201628 void * head = NULL ;
16211629 void * end_point ;
16221630 int j = 0 ;
1631+ setting -> no_release_pins = 1 ;
16231632
16241633 struct board_info * board = get_board (setting -> board );
16251634 if (board == NULL )
@@ -1790,6 +1799,7 @@ static char catch_input_char_block()
17901799static void monitor (struct options_setting * setting )
17911800{
17921801 signal (SIGINT , handle_sigint );
1802+ setting -> no_release_pins = 1 ;
17931803 struct board_info * board = get_board (setting -> board );
17941804 if (board == NULL ) {
17951805 // printf("entered board model are not supported.\n");
@@ -3184,6 +3194,7 @@ char *iso8601(char *local_time)
31843194static int server_monitor (struct options_setting * setting )
31853195{
31863196 signal (SIGINT , handle_sigint );
3197+ setting -> no_release_pins = 1 ;
31873198 struct board_info * board = get_board (setting -> board );
31883199 if (board == NULL ) {
31893200 // printf("entered board model are not supported.\n");
@@ -4049,6 +4060,7 @@ static int lsftdi(struct options_setting* setting)
40494060
40504061
40514062 int board_num = 0 ;
4063+ setting -> no_release_pins = 1 ;
40524064 char location_id_str [MAX_NUMBER_OF_USB_DEVICES ][MAX_LOCATION_ID_LENGTH ];
40534065 if (!setting -> auto_find_board )
40544066 ft_list_devices (location_id_str , & board_num , LIST_DEVICE_MODE_PRINT );
@@ -4168,6 +4180,36 @@ void terminateBCU(void)
41684180 ft4232h_i2c_remove_all (enable_exit_handler );
41694181}
41704182
4183+ static int release_pins_before_exit (struct options_setting * setting )
4184+ {
4185+
4186+ if (setting -> no_release_pins )
4187+ {
4188+ return 0 ;
4189+ }
4190+
4191+ struct board_info * board = get_board (setting -> board );
4192+ if (board == NULL || !board -> gpio_on_exit )
4193+ {
4194+ return 0 ;
4195+ }
4196+
4197+ int i = 0 ;
4198+ while (board -> gpio_on_exit [i ].name != NULL )
4199+ {
4200+ if (i == 0 )
4201+ {
4202+ setting -> hold = 0 ;
4203+ printf ("\nReleasing pins before exit:\n" );
4204+ }
4205+ strcpy (setting -> gpio_name , board -> gpio_on_exit [i ].name );
4206+ setting -> output_state = board -> gpio_on_exit [i ].value ;
4207+ set_gpio (setting );
4208+ i ++ ;
4209+ }
4210+ return 1 ;
4211+ }
4212+
41714213int main (int argc , char * * argv )
41724214{
41734215 setbuf (stdin , NULL );
@@ -4534,9 +4576,16 @@ int main(int argc, char** argv)
45344576 else
45354577 {
45364578 printf ("%s is a invalid command\n\n" , cmd );
4579+ setting .no_release_pins = 1 ;
45374580 print_help (NULL );
45384581 }
45394582
4583+ // exit by setting required pins to a predefined state
4584+ if (!release_pins_before_exit (& setting ) && !setting .no_release_pins )
4585+ {
4586+ printf ("No pins release before exit required.\n" );
4587+ }
4588+
45404589 printf ("done\n" );
45414590 return 0 ;
45424591}
0 commit comments