Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
My change to fix the import warning was merged into master.
|
|
Corrects this warning:
DDHidLib/lib/DDHidQueue.m:27:9: warning: non-portable path
to file '"DDHidEvent.h"'; specified path differs in case from file name on disk
[-Wnonportable-include-path]
#import "DDHIdEvent.h"
^~~~~~~~~~~~~~
"DDHidEvent.h"
1 warning generated.
I had made the change locally a long time ago, but it's now committed
and published publicly.
|
|
|
|
Generated with `make pkg`.
|
|
|
|
|
|
|
|
|
|
Builds a tar archive of the executable and man pages with the current
software version in the name. The version is extracted from the `main.m`
file.
|
|
|
|
Get the version from `main.m`.
|
|
This describes the syntax of the `mappings.dkmap` file.
|
|
Learned that files should be described in the man page.
|
|
|
|
Prevent the man page from always building even without changes to the
input file.
|
|
Include the Aquatic Prime copyright notice as stipulated by its license.
|
|
Include the program's launchd plist in the man page.
|
|
|
|
Describe the `timeout` configuration option.
|
|
|
|
Used the wrong terminator, '`' instead of '''.
|
|
|
|
Now that I think about it, a daemon would execute in the background, not
take over the shell. But whatever, not going to change that now when I'm
about to release the program.
|
|
Make it faster to try out the program by providing copy-pastable
commands to get a sample config.
`HOME` needs two `$` to escape it from the Python templater.
|
|
|
|
Script to extract the names of special keys like `<VolumeUp>` from
`parser.rs`.
Need these for the mappings syntax manual.
|
|
The release build is 1.5 Mb, while the archive is 1.1 Mb. Not sure what
additional optimisations Xcode applies when it archives, but clearly
that's the build we should be distributing.
|
|
* Remove `dome-key-map/target/debug` from Release library search paths.
This was causing the Release build to link against the debug version
of dome-key-map, resulting in a 25 Mb binary.
* Strip debug symbols
* Turn on link-time optimisation
This takes the Release binary down to 1.5 Mb.
Added an `archive` target to the Makefile. This does additional
optimisations (maybe stripping symbols?), and gives us a final binary
size of 1.1 Mb. Much better.
|
|
We don't need these functions any more now that key simulation is
handled by the Rust library. The files can be safely removed.
|
|
Fixes parse error when the mappings file starts with blank lines or
comment lines.
|
|
Split the targets into more logical sections.
|
|
We'll stick the binary and man pages in this directory for packaging.
|
|
Set 'DerivedData' path in `xcodebuild` to give us a local build
directory.
Doing this because when the 'Debug', or 'Release' directories in
'Build/Products/' don't exist, Make doesn't build our recipes. Make
seems to prefer local files, and I don't imagine the wildcard in the
path does us any favours.
When I changed the DerivedData path, I ended up with this error:
In file included from DomeKey/DomeKey/HeadphoneKey.m:9:
DomeKey/DomeKey/HeadphoneKey.h:10:9: fatal error:
'DDHidLib/DDHidAppleMikey.h' file not found
#import <DDHidLib/DDHidAppleMikey.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Couldn't figure out what the problem was, and what changed there when I
changed the DerivedData directory. So I just fixed it in the only way I
could think of: adding the DDHidLib 'lib' directory to
`HEADER_SEARCH_PATHS` and updating the `#import` to point to the new
location.
We also create a release target in this commit, which gives us a release
build of the program.
|
|
|
|
|
|
Don't need this any more.
|
|
In the daemon, we should print a log message when the mappings file gets
reloaded. This allows you to follow along in the log file.
|
|
Use our own custom error formatter. I think `NSLog` messages get sent to
syslog in a release build. This allows us to format the error messages
the way we want and ensure they get printed to stderr.
|
|
A new function to print to stderr prefixed with a timestamp. The idea is
to make the printed line's format match the Rust logger's.
The Rust logger prints timestamps like this:
2018-11-04T03:16:31.938+01:00
`teprintf` does:
2018-11-04T15:02:21+0100
Unfortunately, I wasn't able to reproduce it exactly. It's missing the
milliseconds because I didn't want to deal with using `gettimeofday`,
and the time zone format isn't right because I didn't know how to format
it easily with a colon.
Resources:
Getting the time in C:
https://stackoverflow.com/questions/9596945/how-to-get-appropriate-timestamp-in-c-for-logs#9596994
Variadic functions in C:
https://stackoverflow.com/questions/205529/passing-variable-number-of-arguments-around
Getting milliseconds in C:
https://stackoverflow.com/questions/10192903/time-in-milliseconds#10192994
https://stackoverflow.com/questions/3673226/how-to-print-time-in-format-2009-08-10-181754-811
https://stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c
Concatenating strings in C:
https://stackoverflow.com/questions/308695/how-do-i-concatenate-const-literal-strings-in-c#308712
https://stackoverflow.com/questions/8465006/how-do-i-concatenate-two-strings-in-c
|
|
|
|
Otherwise, the error messages only get printed in the daemon process'
output. Much more convenient to print the error messages directly after
running the command with `--reload-mappings`.
|
|
Previously I got the inter-process communication set up, but left the
work of actually reloading the mappings into memory for later. That
later is now.
Make `Mappings` solely responsible for loading and reloading mappings.
What used to be in `HeadphoneKey` for this has now been moved.
HeadphoneKey:
* Store a reference to a `Mappings` instance
* Load mappings using the `Mappings` API instead of calling
`dome_key_state_load_map_group()` directly.
* Move the call to `observeReloadNotification` here from `main()`. Made
more sense to me to have it with the other related mappings setup
method calls.
* Move the `_state` variable into `Mappings`, since that's where it's
used most. Get it from an accessor in the one spot we need it.
Mappings:
* Make `observeReloadNotification` an instance method. While not
necessary, since I decided to call it in `HeadphoneKey` after
initialising `_mappings` and calling `reloadMappings`, I figured it
made sense to call the method on the instance.
* Make `reloadMappings` both an instance method and a class method. Made
sense to call it on the instance since we instantiate `Mappings` just
before calling it in `HeadphoneKey`. But we also need to be able to
call it from `reload_mappings`, the C function, which has no knowledge
of the `Mappings` instance. That's why we make it a class method also.
* Add a `_state` static variable. Not ideal. Would rather have an
instance variable, but this value needs to be accessible from the
`reload_mappings` C function, which doesn't have access to instance
variables.
|
|
Doesn't make sense to have this in the `HeadphoneKey` initialiser. Since
it's something that needs to be done near the start of the program, move
it into `main()`.
|