You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Adjusting for generic graphic drivers
* adjusting
* adjusting to remove warnings
* adjusting pragma
* fixing pragma
* Add exclude rules for enums
@Ellerbach check this out on how to exclude enums that are not used in native.
With this they are not added to the stubs.
I'm not familiar with the code, so please check if any of these should indeed be there. And, of course, do add all the others that don't need to be there.
---------
Co-authored-by: José Simões <[email protected]>
Copy file name to clipboardExpand all lines: README.md
+170Lines changed: 170 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -58,6 +58,176 @@ Note that depending on your target, especially for ESP32, you may have to setup
58
58
59
59
As you can see it is possible as well not to define the backlight pin. It is the same for the rest pins. Both can be set to -1. Note that in most of the cases, both are connected and needed. In the case of the M5 Stick, the backlight pin is managed thru an AXP192. If you don't switch on the backlight pin, your screen will always be black. It is important to check how this pin can be switched on.
60
60
61
+
## Using generic graphic SPI drivers
62
+
63
+
It's now possible to use generic graphic SPI drivers. It does require to build an image with the `Generic_SPI.cpp` driver. Once the image is flashed on the device, you can give the driver commands directly from a class in managed code. When building with a specific driver, the generic driver will be ignored even if you provide it.
64
+
65
+
Here is an example based on the ST7735S driver, we've been using enum for the registers:
66
+
67
+
```csharp
68
+
privateenumSt7735
69
+
{
70
+
NOP=0x00,
71
+
SOFTWARE_RESET=0x01,
72
+
POWER_STATE=0x10,
73
+
Sleep_Out=0x11,
74
+
Invertion_Off=0x20,
75
+
Invertion_On=0x21,
76
+
Gamma_Set=0x26,
77
+
Display_OFF=0x28,
78
+
Display_ON=0x29,
79
+
Column_Address_Set=0x2A,
80
+
Page_Address_Set=0x2B,
81
+
Memory_Write=0x2C,
82
+
Colour_Set=0x2D,
83
+
Memory_Read=0x2E,
84
+
Partial_Area=0x30,
85
+
Memory_Access_Control=0x36,
86
+
Pixel_Format_Set=0x3A,
87
+
Memory_Write_Continue=0x3C,
88
+
Write_Display_Brightness=0x51,
89
+
Frame_Rate_Control_Normal=0xB1,
90
+
Frame_Rate_Control_2=0xB2,
91
+
Frame_Rate_Control_3=0xB3,
92
+
Invert_On=0xB4,
93
+
Display_Function_Control=0xB6,
94
+
Entry_Mode_Set=0xB7,
95
+
Power_Control_1=0xC0,
96
+
Power_Control_2=0xC1,
97
+
Power_Control_3=0xC2,
98
+
Power_Control_4=0xC3,
99
+
Power_Control_5=0xC4,
100
+
VCOM_Control_1=0xC5,
101
+
VCOM_Control_2=0xC7,
102
+
Power_Control_A=0xCB,
103
+
Power_Control_B=0xCF,
104
+
Positive_Gamma_Correction=0xE0,
105
+
Negative_Gamma_Correction=0XE1,
106
+
Driver_Timing_Control_A=0xE8,
107
+
Driver_Timing_Control_B=0xEA,
108
+
Power_On_Sequence=0xED,
109
+
Enable_3G=0xF2,
110
+
Pump_Ratio_Control=0xF7,
111
+
Power_Control_6=0xFC,
112
+
};
113
+
114
+
[Flags]
115
+
privateenumSt7735Orientation
116
+
{
117
+
MADCTL_MH=0x04, // sets the Horizontal Refresh, 0=Left-Right and 1=Right-Left
118
+
MADCTL_ML=0x10, // sets the Vertical Refresh, 0=Top-Bottom and 1=Bottom-Top
119
+
MADCTL_MV=0x20, // sets the Row/Column Swap, 0=Normal and 1=Swapped
120
+
MADCTL_MX=0x40, // sets the Column Order, 0=Left-Right and 1=Right-Left
121
+
MADCTL_MY=0x80, // sets the Row Order, 0=Top-Bottom and 1=Bottom-Top
// And finally initialize the driver and the screen
200
+
varinit=DisplayControl.Initialize(
201
+
displaySpiConfig,
202
+
screenConfig,
203
+
1024);
204
+
```
205
+
206
+
Note that the initialization commands are mandatory. The rest of the commands are not mandatory. Now, some may be needed for a good usage of your driver.
207
+
208
+
All commands are following the same rule:
209
+
210
+
- (byte)GraphicDriverCommandType.Command, N, n0, n1, nN-1
211
+
- (byte)GraphicDriverCommandType.Sleep, T
212
+
213
+
Where N is the number of bytes to send as a command, meaning the first element n0 is always a command and then the bytes from n1 to nN-1.
214
+
215
+
It is as well possible to insert sleep time where T represent a set of 10 milliseconds. So to wait 50 milliseconds, T must be 5.
216
+
217
+
### Availability of drivers
218
+
219
+
Different drivers for different screens are available as nuget.
220
+
221
+
Prefer the native implementation when it's available. Use the generic one when you don't have the competencies to rebuild your own image or you want to adjust the native driver.
222
+
223
+
The generic driver is also a great way to test and implement new drivers. It does not require to rebuild an image every time you want to test something new instead, you just adjust your managed code.
224
+
225
+
### Generic display driver limitations
226
+
227
+
The main limitation is related to the way all those SPI drivers are working with a notion of commands and data sent after with the exact same behavior to flash a buffer. If your driver is not following this pattern, there are changes that this will not work.
228
+
229
+
There is the possibility to add more behaviors like flashing directly buffers or adjust the way things are working. Please open issues or provide a PR to improve all this.
230
+
61
231
## Feedback and documentation
62
232
63
233
For documentation, providing feedback, issues and finding out how to contribute please refer to the [Home repo](https://github.com/nanoframework/Home).
0 commit comments