From 4d0aa92f5533e74af2e5a4395e8c466cf0b0e5a3 Mon Sep 17 00:00:00 2001 From: Marc Poulhiès Date: Wed, 27 Jul 2022 11:56:29 +0200 Subject: ada: modifiers, layers and regular keys are working Still need to add timings as currently the processor is looping full speed, which may cause some lost events as the USB only polls at the frequency advertised in the descriptor (few ms). --- firmware/ada/alire.toml | 26 ++++++++++--------------- firmware/ada/pouetpouet.gpr | 2 +- firmware/ada/src/pouetpouet.adb | 43 +++++++++++++++++++++++++---------------- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/firmware/ada/alire.toml b/firmware/ada/alire.toml index 70b31fd..9f3e5b7 100644 --- a/firmware/ada/alire.toml +++ b/firmware/ada/alire.toml @@ -8,27 +8,21 @@ maintainers-logins = ["dkm"] executables = ["pouetpouet"] - -# [[pins]] # Added by alr -# usb_embedded = { url='https://github.com/Fabien-Chouteau/usb_embedded' } - -##/mnt/barryallen/dkm/git/ada-embedded/usb_embedded' } -[[depends-on]] -click = "~0.1.0-dev" -[[pins]] -click = { url='https://github.com/dkm/click' } - [configuration.values] atomic.backend = "armv6m" cortex_m.core = "m0" [[depends-on]] +click = "~0.1.0-dev" usb_embedded = "~0.3.0-dev" -[[pins]] -usb_embedded = { url='https://github.com/Fabien-Chouteau/usb_embedded' } -[[depends-on]] -gnat_arm_elf = "^11.2" -[[depends-on]] +gnat_arm_elf = "^12" stm32f0x2_hal = "~0.0.0" + +# [build-profiles] +# stm32f0x2_hal = "development" +# click = "development" + [[pins]] -stm32f0x2_hal = { url='https://github.com/dkm/stm32f0x2_hal-ada' } +click = { url='https://github.com/dkm/click' } +usb_embedded = { url='https://github.com/dkm/usb_embedded' } +stm32f0x2_hal = { url='https://github.com/dkm/stm32f0x2_hal-ada.git' } \ No newline at end of file diff --git a/firmware/ada/pouetpouet.gpr b/firmware/ada/pouetpouet.gpr index 78bd5ad..42830d6 100644 --- a/firmware/ada/pouetpouet.gpr +++ b/firmware/ada/pouetpouet.gpr @@ -13,7 +13,7 @@ project Pouetpouet is for Main use ("pouetpouet.adb"); package Compiler is - for Default_Switches ("Ada") use Pouetpouet_Config.Ada_Compiler_Switches & ("-gnatX"); + for Default_Switches ("Ada") use Pouetpouet_Config.Ada_Compiler_Switches & ("-gnatX", "-gnat2022", "-g3"); end Compiler; package Binder is diff --git a/firmware/ada/src/pouetpouet.adb b/firmware/ada/src/pouetpouet.adb index 78f04ed..babe362 100644 --- a/firmware/ada/src/pouetpouet.adb +++ b/firmware/ada/src/pouetpouet.adb @@ -4,9 +4,6 @@ with STM32.GPIO; use STM32.GPIO; -- Not yet used. -- with STM32.Timers; use STM32.Timers; --- with USB.HAL.Device; --- with USB.Device.Serial; - with USB; use USB; with USB.Device.HID.Keyboard; with USB.Device; use USB.Device; @@ -31,7 +28,7 @@ procedure Pouetpouet is := [PA0, PA1, PB13, PB12, PB14, PB15, PA15, PB3, PB4, PB5, PB8, PB9]; package TestClick is new Click (5 ,ColR, RowR, GPIO_Point, - Ct, Rt, Cols, Rows, 2); + Ct, Rt, Cols, Rows, 2, Logging.Log); use TestClick; Bepo_Layout : constant Layout := @@ -60,8 +57,18 @@ procedure Pouetpouet is use type USB.Device.Init_Result; USB_Status : USB.Device.Init_Result; + procedure Dump_Events (Es : Events) is + begin + for E of Es loop + Log (" - " + & (if E.Evt = Press then "P " else "R ") + & E.Row'Image & ":" & E.Col'Image); + end loop; + end Dump_Events; + begin - Init; + + Testclick.Init; if not USB_Stack.Register_Class (HID_Class'Unchecked_Access) then raise Fatal_Error with "Failed to register USB Serial device class"; @@ -88,7 +95,7 @@ begin -- Enable_Interrupt (Timer_1, Timer_Update_Interrupt); -- Enable (Timer_1); - Log ("STARTING"); + Log ("STARTING FW"); for Row of Keys.Rows loop Enable_Clock (Row); @@ -112,26 +119,28 @@ begin USB_Stack.Poll; declare - Evts : constant Events := Get_Events (Get_Matrix); + Evts : constant Events := Get_Events; begin -- FIXME: dot notation possible in GCC12 - Register_Events (Bepo_Layout, Evts); + if Evts'Length > 0 then + Dump_Events(Evts); + Register_Events (Bepo_Layout, Evts); + end if; + Tick (Bepo_Layout); - for KC of Key_Codes (Bepo_Layout) loop - -- Log ("(" & Evt.Evt'Image & ", " & Evt.Col'Image & ", " - -- & Evt.Row'Image & ") = " - -- & Key_Code_T'Enum_Rep (Bepo_Layout (Evt.Row, Evt.Col).C)'Image); + for KC of Get_Key_Codes loop + Log ("Got 1 keycode to push : " & Key_Code_T'Enum_Rep (KC)'Image); if HID_Class.Ready then - -- if Evt.Evt = Press then - -- HID_Class.Push_Key_Code - -- (Key_Code_T'Enum_Rep (Bepo_Layout (Evt.Row, Evt.Col).C)); HID_Class.Push_Key_Code (Key_Code_T'Enum_Rep (KC)); - - -- end if; end if; end loop; + + for M of Get_Modifiers loop + HID_Class.Set_Modifier (M, True); + end loop; + HID_Class.Send_Report (UDC); end; -- Delay_Cycles (72); -- cgit v1.2.3