@@ -4,103 +4,73 @@ import { DeviceContext } from "../deviceContext";
4
4
import { ArduinoApp } from "./arduino" ;
5
5
import { IArduinoSettings } from "./arduinoSettings" ;
6
6
7
- export enum ProgrammerList {
8
- "AVR ISP" ,
9
- "AVRISP mkII" ,
10
- "USBtinyISP" ,
11
- "ArduinoISP" ,
12
- "ArduinoISP.org" ,
13
- "USBasp" ,
14
- "Parallel Programmer" ,
15
- "Arduino as ISP" ,
16
- "Arduino Gemma" ,
17
- "BusPirate as ISP" ,
18
- "Atmel STK500 development board" ,
19
- "Atmel JTAGICE3 (ISP mode)" ,
20
- "Atmel JTAGICE3 (JTAG mode)" ,
21
- "Atmel-ICE (AVR)" ,
22
- }
23
-
24
7
export class ProgrammerManager {
25
-
26
- private static _programmerManager : ProgrammerManager = null ;
27
-
28
- private _currentprogrammer : ProgrammerList ;
29
-
30
8
private _programmervalue : string ;
31
9
32
10
private _programmerStatusBar : vscode . StatusBarItem ;
33
11
12
+ // Static list of 'available' programmers. This should be repopulated by the currently selected board type.
13
+ private _availableProgrammers = {
14
+ "arduino:avrisp" : "AVR ISP" ,
15
+ "arduino:avrispmkii" : "AVRISP mkII" ,
16
+ "arduino:usbtinyisp" : "USBtinyISP" ,
17
+ "arduino:arduinoisp" : "ArduinoISP" ,
18
+ "arduino:usbasp" : "USBasp" ,
19
+ "arduino:parallel" : "Parallel Programmer" ,
20
+ "arduino:arduinoasisp" : "Arduino as ISP" ,
21
+ "arduino:usbGemma" : "Arduino Gemma" ,
22
+ "arduino:buspirate" : "BusPirate as ISP" ,
23
+ "arduino:stk500" : "Atmel STK500 development board" ,
24
+ "arduino:jtag3isp" : "Atmel JTAGICE3 (ISP mode)" ,
25
+ "arduino:jtag3" : "Atmel JTAGICE3 (JTAG mode)" ,
26
+ "arduino:atmel_ice" : "Atmel-ICE (AVR)" ,
27
+ } ;
28
+
34
29
constructor ( private _settings : IArduinoSettings , private _arduinoApp : ArduinoApp ) {
35
- this . _programmerStatusBar = vscode . window . createStatusBarItem ( vscode . StatusBarAlignment . Right , constants . statusBarPriority . PROGRAMMER ) ;
30
+ this . _programmerStatusBar = vscode . window . createStatusBarItem (
31
+ vscode . StatusBarAlignment . Right ,
32
+ constants . statusBarPriority . PROGRAMMER ,
33
+ ) ;
36
34
this . _programmerStatusBar . command = "arduino.selectProgrammer" ;
37
35
this . _programmerStatusBar . tooltip = "Select Programmer" ;
38
- this . _programmerStatusBar . text = "<Select Programmer>" ;
36
+ this . setProgrammerValue ( DeviceContext . getInstance ( ) . programmer ) ;
39
37
this . _programmerStatusBar . show ( ) ;
38
+ DeviceContext . getInstance ( ) . onDidChange ( ( ) => {
39
+ this . setProgrammerValue ( DeviceContext . getInstance ( ) . programmer ) ;
40
+ } ) ;
40
41
}
41
42
42
43
public get currentProgrammer ( ) : string {
43
44
return this . _programmervalue ;
44
45
}
45
46
46
47
public async selectProgrammer ( ) {
47
- const chosen : string | undefined = await vscode . window . showQuickPick ( Object . keys ( ProgrammerList )
48
- . filter ( ( key ) => {
49
- return ! isNaN ( Number ( ProgrammerList [ key ] ) ) ;
50
- } ) , { placeHolder : "Select programmer" } ) ;
48
+ const selectionItems = Object . keys ( this . _availableProgrammers ) . map (
49
+ ( programmer ) => ( {
50
+ label : this . getFriendlyName ( programmer ) ,
51
+ description : programmer ,
52
+ programmer } ) ) ;
53
+ const chosen = await vscode . window . showQuickPick ( selectionItems , {
54
+ placeHolder : "Select programmer" ,
55
+ } ) ;
51
56
if ( ! chosen ) {
52
57
return ;
53
58
}
54
- this . _currentprogrammer = ProgrammerList [ chosen ] ;
55
- this . getProgrammer ( this . _currentprogrammer ) ;
56
- this . _programmerStatusBar . text = chosen ;
59
+
60
+ this . setProgrammerValue ( chosen . programmer ) ;
57
61
const dc = DeviceContext . getInstance ( ) ;
58
- dc . programmer = chosen ;
62
+ dc . programmer = chosen . programmer ;
59
63
}
60
64
61
- public getProgrammer ( newProgrammer : ProgrammerList ) {
62
- switch ( newProgrammer ) {
63
- case ProgrammerList [ "AVR ISP" ] :
64
- this . _programmervalue = "arduino:avrisp" ;
65
- break ;
66
- case ProgrammerList [ "AVRISP mkII" ] :
67
- this . _programmervalue = "arduino:avrispmkii" ;
68
- break ;
69
- case ProgrammerList . USBtinyISP :
70
- this . _programmervalue = "arduino:usbtinyisp" ;
71
- break ;
72
- case ProgrammerList . ArduinoISP :
73
- this . _programmervalue = "arduino:arduinoisp" ;
74
- break ;
75
- case ProgrammerList . USBasp :
76
- this . _programmervalue = "arduino:usbasp" ;
77
- break ;
78
- case ProgrammerList [ "Parallel Programmer" ] :
79
- this . _programmervalue = "arduino:parallel" ;
80
- break ;
81
- case ProgrammerList [ "Arduino as ISP" ] :
82
- this . _programmervalue = "arduino:arduinoasisp" ;
83
- break ;
84
- case ProgrammerList [ "Arduino Gemma" ] :
85
- this . _programmervalue = "arduino:usbGemma" ;
86
- break ;
87
- case ProgrammerList [ "BusPirate as ISP" ] :
88
- this . _programmervalue = "arduino:buspirate" ;
89
- break ;
90
- case ProgrammerList [ "Atmel STK500 development board" ] :
91
- this . _programmervalue = "arduino:stk500" ;
92
- break ;
93
- case ProgrammerList [ "Atmel JTAGICE3 (ISP mode)" ] :
94
- this . _programmervalue = "arduino:jtag3isp" ;
95
- break ;
96
- case ProgrammerList [ "Atmel JTAGICE3 (JTAG mode)" ] :
97
- this . _programmervalue = "arduino:jtag3" ;
98
- break ;
99
- case ProgrammerList [ "Atmel-ICE (AVR)" ] :
100
- this . _programmervalue = "arduino:atmel_ice" ;
101
- break ;
102
- default :
103
- break ;
104
- }
65
+ private setProgrammerValue ( programmer : string | null ) {
66
+ this . _programmervalue = programmer ;
67
+ this . _programmerStatusBar . text = this . _programmervalue
68
+ ? this . getFriendlyName ( this . _programmervalue )
69
+ : "<Select Programmer>" ;
70
+ }
71
+
72
+ private getFriendlyName ( programmer : string ) : string {
73
+ const friendlyName = this . _availableProgrammers [ programmer ] ;
74
+ return friendlyName ? friendlyName : programmer ;
105
75
}
106
76
}
0 commit comments