2525#include "pinmatrix.h"
2626#include "rng.h"
2727
28- static char pinmatrix_perm [10 ] = "XXXXXXXXX" ;
28+ static char pinmatrix_perm [11 ] = "XXXXXXXXX" ;
2929
3030void pinmatrix_draw (const char * text ) {
3131 const BITMAP * bmp_digits [10 ] = {
@@ -37,21 +37,23 @@ void pinmatrix_draw(const char *text) {
3737 if (text ) {
3838 oledDrawStringCenterAdapter (OLED_WIDTH / 2 , 0 , text , FONT_STANDARD );
3939 }
40- const int w = bmp_digit0 .width , h = bmp_digit0 .height , pad = 2 ;
40+ const int w = bmp_digit0 .width , h = bmp_digit0 .height , pad = 1 ;
41+ int k = 0 ;
4142 for (int i = 0 ; i < 3 ; i ++ ) {
4243 for (int j = 0 ; j < 3 ; j ++ ) {
4344 // use (2 - j) instead of j to achieve 789456123 layout
44- int k = pinmatrix_perm [i + (2 - j ) * 3 ] - '0' ;
45+ k = pinmatrix_perm [i + (2 - j ) * 3 ] - '0' ;
4546 oledDrawBitmap ((OLED_WIDTH - 3 * w - 2 * pad ) / 2 + i * (w + pad ),
46- OLED_HEIGHT - 3 * h - 2 * pad + j * (h + pad ),
47+ OLED_HEIGHT - 4 * h - 3 * pad + j * (h + pad ),
4748 bmp_digits [k ]);
4849 }
4950 }
50- for (int i = 0 ; i < 3 ; i ++ ) {
51- // 36 is the maximum pixels used for a pin matrix pixel row
52- // but we use 56 pixels to add some extra
53- oledSCAInside (12 + i * (h + pad ), 12 + i * (h + pad ) + h - 1 , 56 , 38 ,
54- OLED_WIDTH - 38 );
51+ k = pinmatrix_perm [9 ] - '0' ;
52+ oledBox (27 , 52 , 101 , 64 , true);
53+ oledDrawBitmap (52 , 52 , bmp_digits [k ]);
54+ for (int i = 0 ; i < 4 ; i ++ ) {
55+ oledSCAInside (13 + i * (h + pad ), 13 + i * (h + pad ) + h - 1 , 76 , 27 ,
56+ OLED_WIDTH - 27 );
5557 }
5658 oledRefresh ();
5759}
@@ -60,8 +62,9 @@ void pinmatrix_start(const char *text) {
6062 for (int i = 0 ; i < 9 ; i ++ ) {
6163 pinmatrix_perm [i ] = '1' + i ;
6264 }
63- pinmatrix_perm [9 ] = 0 ;
64- random_permute (pinmatrix_perm , 9 );
65+ pinmatrix_perm [9 ] = '0' ;
66+ pinmatrix_perm [10 ] = 0 ;
67+ random_permute (pinmatrix_perm , 10 );
6568 pinmatrix_draw (text );
6669}
6770
@@ -70,7 +73,8 @@ secbool pinmatrix_done(bool clear, char *pin) {
7073 secbool ret = sectrue ;
7174 while (pin && pin [i ]) {
7275 k = pin [i ] - '1' ;
73- if (k >= 0 && k <= 8 ) {
76+ if (k == -1 ) k = 9 ;
77+ if (k >= 0 && k <= 9 ) {
7478 pin [i ] = pinmatrix_perm [k ];
7579 } else {
7680 pin [i ] = 'X' ;
0 commit comments