From b7c24caf503cd3d2cc1b540ba82d9b6880e2a817 Mon Sep 17 00:00:00 2001 From: Yury Vostrenkov Date: Fri, 21 Feb 2020 08:28:02 +0300 Subject: [PATCH] Fixed copying joystick buttons data to HID report --- Inc/common_defines.h | 2 +- Inc/main.h | 2 +- MDK-ARM/FreeJoy.bin | Bin 21520 -> 21508 bytes MDK-ARM/FreeJoy.uvoptx | 6 +++--- Src/analog.c | 10 ++++++---- Src/buttons.c | 14 ++++++++------ Src/stm32f10x_it.c | 6 +++--- 7 files changed, 22 insertions(+), 18 deletions(-) diff --git a/Inc/common_defines.h b/Inc/common_defines.h index 49f982c..1c62a6c 100644 --- a/Inc/common_defines.h +++ b/Inc/common_defines.h @@ -11,7 +11,7 @@ //#define DEBUG -#define FIRMWARE_VERSION 0x1334 // v1.3.3b4 +#define FIRMWARE_VERSION 0x1335 // v1.3.3b5 #define USED_PINS_NUM 30 // constant for BluePill and BlackPill boards #define MAX_AXIS_NUM 8 // max 8 #define MAX_BUTTONS_NUM 128 // power of 2, max 128 diff --git a/Inc/main.h b/Inc/main.h index 6166318..0b4cab7 100644 --- a/Inc/main.h +++ b/Inc/main.h @@ -18,7 +18,7 @@ static const app_config_t init_config = { - .firmware_version = 0x1334, // do not change + .firmware_version = 0x1335, // do not change /* Name of device in devices dispatcher diff --git a/MDK-ARM/FreeJoy.bin b/MDK-ARM/FreeJoy.bin index 4651268d3bb7cbe5f5f616d9a177e1e437c4b346..689a863778daeaf5491367aaadd3ccb2564ae25a 100644 GIT binary patch delta 3352 zcmZ8j3v^V)8J@YhyZ7!Z*}Rj@Cfr@f3qleSgg^{z9^C8(!jc%Y6cFf99<3>>s02K8 z6GV*A1W$DoqU@hF`b?-iJ|C?B9yXVaO-+c4` z|NJ}i&p)@L7jNsu6(eTESukSXD@E+{QxMw+vN{g2p*qB(|NDi?5F0U%^HXOaR?}Hg zs;*B(tUtALjtOt?>`Y7;u10J*_*2@F8pQ6b>6}y2xrpxkQLp}?9o-@F*KwcJvqWEKdo0qS)fRMY|~BL$XEFfPYWE)NI5# zq*hy`?UJ#DwYe&n7jXg!X(!ofO&`a{ z2>p??0dAem%&of5>s@Ozdsn_D)u2`;;oQXqnl1}3iyK1!aA-Q(t75+S&LNAY5bf=$ ziuvw5;ME~b$2Vk+&f?DYj$8fB-s9&`?78AVJi>iFH)L0(l!N+jx317!=(#gKqP;L{ z#Jx5t$5;y->cG9n<}U(0lL1+1VP0U0l!6q0BR7vz$Xnn&U|0K|#auD+9mC~;6f|ch z7WfF>i}@O`ni-(zDHo+riL5I!JaK*zzt@X})$;TFyQEy7kGsjk`d=FKP64qW`)Inw z7sHY-^f~oO-Xne#7w`u`6``rBS07b!!H+-T4Fkw~>>+ zpaeaC6mgDGBa8#zuCmvV3PYuP#5Yocx_W%E=#`KlD52p&#yrSMi;Oih zDPdbw8O>^OFw{9)m4cr%-x*{J%saLL_*<~-`33JjF0~F! zhh^su7D(}~SEZVjcNof(2N-*yFFr0I>@c4kWb z-2n*|Fdo{$@kZv=uy}jxmqgQ;KGqq$U%LX17Ad4^*j6O>QwA z?vRQsjhd;RfhskOPct!|ac0U-%qvXHxpBt&6VrH?N&ksSxXT!UnRF_@<)qr8SYexn z@xaBlm-B7Q$AdO{$r0mpw~}=W=gGI~_MwSWT%4e%4d3FZwU-V2B=NV6q>t`U{^Wi{RPD-t9xeG^b zeyTFgQIh@9<+>mfwp`U?2+91Wq#e=2c)?YyS4*mqlM-sPnOpM?U&yFOTyv&6Cx3!d zpfyfGrF9BatW#k0%Xm3=@-oBZ%+nVyQ^GklWV-QR zNF?(f`~oS>nu<4&Rav=s1$iF&`D7p~Lst!~tk6*~nEm98#Rs z;7`XEV5$LY`?#*NqkT#oz|0<-jmMJ!PX|kg15nWzTZ9X{lsNj#Q-RAS5pIndUTv;7 znf%)FAiihlq$LAq{Sb8CvNd213lD{+ja49okP+LE9@~18hp34kV5&t;1}AM+L}7Lc zzC1K9J2wV@NSgC9<9`)pEqOc^-iEhWk%i=qJPV#YG@Q3Vg?}?Nt#B7jwJ_v#$!y4i zq1e*X%5dnPGow^~YD8Cup@N0QZ$m0xc|o|E;>xh7i{t~>6QUhqab74aW({e|H{oPw z*eU$3AuOH^Vm{R#7Fn2jfV_5ZJw8f)xOa=;`_OuUqQc@wz|%wPE4o$Gwlt!xKIkq! zV67kMhvy$6M8bO#%A4gG$6ZoXd_9!mU{|th>(;iKOm(lk*in`99lO@PvY9vb_L;-t zo(QrS{0Ye5&jIh-g9g79$zn_ZbK511wo5Z?$ZG7%aeB zF=#C;)l3>37W@*~;3&`JCVltqZZ?UEItyZyh^YMUgWkO;i**Jd-UQTY$U#b&>4Br6jgv1+U>4IGMOLxc51=V~d ztPv8=2QARMgIjqEZv%8Xm=FCI!3G|AXL>_oI7suf*D|Ji2QY@&kzgxd;|Pf#2dkl9 z6|4mAV6YPK(lOj0oC|pI82)px0#}NxlE3VN#Th2+mL@0 z>N#ZnwuMlu;RYBFv{zB&iG>rO6zyDiJtlJpeDEt1poIR&AeL@ItYWYy9ibMoyYZ&m zk*QB&-!G-L>5I*6i4QiEvI!;^Tas_;W=r;&wz4If#O%~0){v6HT3FLWIx&)z#QrNe zgS|wX+Gx`gwCNaKSz=4HH%?~5rUh(CPU3!C%5kQ%Y>CN4eUjg5`m9Nl@}}vM`O38g U6s=AwpkipcT+QslnUJ99-=pAERR910 delta 3268 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 TRzuOMl&O@0rb|`KK5YIEXm~n5 diff --git a/MDK-ARM/FreeJoy.uvoptx b/MDK-ARM/FreeJoy.uvoptx index 20c01e6..87c6327 100644 --- a/MDK-ARM/FreeJoy.uvoptx +++ b/MDK-ARM/FreeJoy.uvoptx @@ -154,8 +154,8 @@ 2 0 1 -
536875064
- 1 +
536874876
+ 0 0 1 1 @@ -163,7 +163,7 @@ 1 - &buttons_data[0] + buttons_data[4]==0 diff --git a/Src/analog.c b/Src/analog.c index 33ddb3e..0419ebd 100644 --- a/Src/analog.c +++ b/Src/analog.c @@ -516,8 +516,7 @@ void AxesProcess (app_config_t * p_config) } } - // disable data updating from IRQ - NVIC_DisableIRQ(TIM1_UP_IRQn); + for (uint8_t i=0; iaxis_config[i].out_enabled) out_axis_data[i] = tmp[i]; else out_axis_data[i] = 0; + // restore IRQ + NVIC_EnableIRQ(TIM1_UP_IRQn); } - // restore IRQ - NVIC_EnableIRQ(TIM1_UP_IRQn); + } diff --git a/Src/buttons.c b/Src/buttons.c index 4ae4c99..db75d9c 100644 --- a/Src/buttons.c +++ b/Src/buttons.c @@ -654,14 +654,11 @@ void ButtonsReadLogical (app_config_t * p_config) } } - // disable data updating from IRQ - NVIC_DisableIRQ(TIM1_UP_IRQn); // convert data to report format for (int i=0;i>3] &= ~(1 << (i & 0x07)); - + // buttons is mapped to shift if (i == p_config->shift_config[0].button || i == p_config->shift_config[1].button || @@ -682,7 +679,14 @@ void ButtonsReadLogical (app_config_t * p_config) if (!is_button_to_axis) { + // disable data updating from IRQ + NVIC_DisableIRQ(TIM1_UP_IRQn); + + buttons_data[(i & 0xF8)>>3] &= ~(1 << (i & 0x07)); buttons_data[(i & 0xF8)>>3] |= (buttons_state[i].current_state << (i & 0x07)); + + // restore IRQ + NVIC_EnableIRQ(TIM1_UP_IRQn); } } @@ -720,8 +724,6 @@ void ButtonsReadLogical (app_config_t * p_config) break; } } - // restore IRQ - NVIC_EnableIRQ(TIM1_UP_IRQn); } /** diff --git a/Src/stm32f10x_it.c b/Src/stm32f10x_it.c index d370f32..d5b581e 100644 --- a/Src/stm32f10x_it.c +++ b/Src/stm32f10x_it.c @@ -40,9 +40,6 @@ /* Private variables ---------------------------------------------------------*/ volatile int32_t millis =0, joy_millis=0; extern app_config_t config; -joy_report_t joy_report; -uint8_t btn_num = 0; -uint8_t physical_buttons_data[MAX_BUTTONS_NUM]; /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ @@ -201,6 +198,9 @@ void TIM3_IRQHandler(void) void TIM1_UP_IRQHandler(void) { + uint8_t btn_num = 0; + uint8_t physical_buttons_data[MAX_BUTTONS_NUM]; + joy_report_t joy_report; if (TIM_GetITStatus(TIM1, TIM_IT_Update)) {