Just in time for everyone to get their gorgeous new flircs, the software has been updated to a new major release, v2.0.0While everything generally will look and feel the same, there are substantial changes under the hood. The GUI and Firmware will be refreshed very frequently, and in doing so, I am looking to hire someone that can help with the front end and push forward new ideas/products.One of the most exciting new features about the new Flirc is that it we no longer need any windows drivers. No more bullshit with windows and zadig, it's just going to work. This was done by using a custom HID device and sending data over Report IDs. But it's so much cooler than that. Months were spent architecting a solution that is abstracted away from the hardware and away from the physical transport. What this means is that we can send packets and data to a device, regardless of weather the physical transport is USB, Bluetooth, Wifi, Serial, I2C, etc. The device just needs a supported stub, and everything just works.Below is a snippet of some firmware code. This is just awesome. Before, when we wanted to talk to the firmware, we'd have to hijack a bunch of USB crap and everytime we wanted to add a new command, it would be a ton of work on both the host and the device. The below essentially instantiates a command called get version. Every time a new command is received on the device, the handlers are iterated through, and run if found, run. The best part about all of this, is that the code below doesn't care if the USB packet handler called it, or some other transport. Why this is important will be clear down the line as we release new products.int getversion(pkt_t *request, pkt_t *response, struct dev_t *dev)
{
((struct version_t *)response->data)->major_version = 3;
((struct version_t *)response->data)->minor_version = 3;
((struct version_t *)response->data)->patch_version = 0;
((struct version_t *)response->data)->scm_hash = SCMSHORT;
strcpy((char *)&((struct version_t *)response->data)->type,
build_type);
return 0;
}
DECLARE_PKT_HANDLER(getversion);
int checkapp(pkt_t *request, pkt_t *response, struct dev_t *dev)
{
if (dev->check_app() != 0) {
return BOOTLOADER_RESPONSE_STATUS_FAIL;
}
return 0;
}
DECLARE_PKT_HANDLER(checkapp);
The new flirc and software fully embraces this philosophy of portable code. The entire firmware is architected using a modular approach. All the code that makes flirc, flirc, is done in ANSI portable C, completely done outside the notion of the hardware that it's running on. The firmware was over a year of planning and can run on hardware outside the processor chosen. We can switch on a whim's notice if needed.I will also be working on solidifying and publishing the API, and fixing up various aspects of the site that have been lagging.Just a note, that the sparkle self updater on mac is currently broken. I currently believe this is due to an incompatibility in Sierra, and I will need to update the embedded library. I will be looking at this shortly.Also currently not up to date are the statically compiled linux builds. These will be posted within the next 24 hours. The ubuntu, linux, and mac releases are all the latest. Write in for any trouble here:http://www.flirc.tv/contact