 Okay, so aside from the kind of the, you know, the requirements and characteristics of connected devices, specifically we're going to talk about WISOX. What is a WISOX? What does a WISOX do? What, you know, components does it have? And we'll give a quick example of one such device utilizing these wireless SOCs. And after a little bit of interaction to hardware, again Yvonne is going to talk about the OpenWRT. But it's a fairly complex process and it's a fairly complex project and we only have 15-20 minutes. So there's a lot of text on the slides. It's meant to be a reference thing you can get back to, or later in the pub we can talk more about the individual details that you might be interested in. So again this is what I was trying to talk about earlier. You could look at the connected device ecosystem in three aspects. You have things. Again, these could be small microcontrollers, you know, Linux class devices. And gateways are generally, again, Linux class devices. So the WISOX, or the WISOX devices I'm going to talk about today are mainly used in these first two categories and services, it's fluffy clouds, so we're not that interested in that at the moment. So a WISOX is a wireless system-on-chip device. Generally it's just like a normal system-on-chip device with some sort of wireless capability bolted onto it. And the specific class of devices that we're going to talk about today are the Wi-Fi 802.11 class radios integrated with MIPS or small ARM cores. MIPS is not dead, MIPS is very much alive, especially in this category of devices. These devices generally have external RAM, external, you know, SPI flash or some kind of storage device that you can bolt on. They're not like microcontrollers, they can run Linux fairly comfortably, just mainline Linux, they don't have to go through any special patches or anything. And the kind of companies that produce these chips are big semiconductor companies. The likes of Qualcomm, Atheros, MediaTek, Rallink, you know, there are quite a lot of different chips that they produce, but if you look at all of them, they pretty much are the same thing. So, and also like connected devices, IoT, etc., they kind of, they're marketing folks have realized this and they market these chips for Internet of Thing applications. They don't specify which thing it is, but at least they have it in their data sheets now, so we're all good. So, a generic architecture for one of these devices looks a bit like this. Small diagrams, big room, sorry about that, but generally it's a processor core, it's a MIPS core generally, and a whole bunch of interfaces, everything from SPI to PCI Express, right? So, this is not Arduino, this is not like, you know, your microcontroller class devices, you can bolt on anything to these. And you'll also notice, I don't know if it's visible, but you'll also notice that there's a Wi-Fi, kind of like a WLAN chip or component bolted onto the peripheral bus on this. So, really with just this chip and a couple of support components, you have an embedded Linux system. And this is generally what you will find inside your home router or home gateway or, you know, those kind of devices. Again, interfaces, SPI, I2S, PWM, PCI Express, USB, like big boy interfaces alongside the true embedded interfaces. So, one example device is this little guy here, it's the, well, it's this guy. This is like wildly popular and people have been using this for their own projects and realistically, if you're only producing, say, a hundred of something, it really doesn't make sense to go for a full custom, you know, why so class board? Because these things are expensive in small volumes and manufacturing is a bit difficult. I'll touch on that in a bit as well. So, this guy is, he can be buy this for around 15 pounds, it's very cheap. And it's based on the Qualcomm Atheros AR9331. Actually, this ship is sold, it was just Atheros back then, but Qualcomm then both Atheros. If you look at the components inside this, it's the YSOC itself, the AR9331, just here. On top there, you can see the RAM. It's an external DDR memory. And the other red rectangle over there is the SPI flash. So, really, you have three main chips and some YSOCs even come with embedded storage and embedded RAM as well. But you're probably much better off just adding external components because the kind of on-die or on-package, sorry, RAM and storage are generally fairly small. And aside from that, it's just the usual like Ethernet, Jag, USB, power circuitry and all that stuff. So, these devices are designed to be integrated in very high-volume applications with very low bomb costs. Now, unfortunately, this is not like the Atmega328. You can't just go to RS, Peter's here. So, if you can, you can't just go to RS and buy a single concierge of these things. You can source these from questionable supplies. So, I got this from a market vendor in Shenzhen or you can go to AliExpress and order these things. But the problem is these are, it's a dual-row QFN with 140 or somewhat odd pins. So, you can't really do much with them. And even though you're really good at soldering or you had the setup to manufacture boards with this, they require a certain specific manufacturing step which is called the factory and calibration process. And that requires some very expensive, you know, hardware and a whole bunch of stuff that I can't talk about. So, really for like producing boards at home or small quantities, these are terrible to work with. But at the same time, if you're doing any commercial projects with these, they're great because, again, the bomb cost is very low and these are very capable devices. So, there is a solution to this though. So, if you're manufacturing, say, a couple of thousand of these things, it's very easy. You go find a factory that is geared up to do the factory calibration, etc. And they can just turn out boards. This is very easy. But if you're manufacturing very small to kind of medium scale, you go with these modules or actually on the top right corner, that's inside of the TP-Link thing here. So, there are a whole bunch of companies that will sell you the Y-Soc itself with some external SPI flash and RAM. And when you buy these, they will have already have gone through the factory and calibration process. And you can just integrate these into your products. And also, some of these companies are actually now realizing the potential for doing medium scale runs for companies who are not set up to manufacture with these kind of devices as well. So, you could go with the module-based approach and these modules are very cheap, by the way. You can develop your prototype and even small quantity manufacturing can be based on these. And then once you reach a certain scale, it might make sense to go and talk to these companies and say, hey, can you produce a couple hundred for me? And then once you reach thousands, you can just go and find a factory that will do this for you. And that's the hardware part of the talk. We're now going to talk a bit about, or rather Ivan is going to talk a bit about the OpenWRT side of things. And yeah, so let's switch over. Okay, so my name is Ivan and today I'm going to talk about OpenWRT and specifically I'm going to focus on which benefits some of the advantages that using OpenWRT can bring to developing new IoT products. First question is how many of you have used OpenWRT before? Okay, so what is OpenWRT? It's an embedded Linux distribution that you can customize for OpenWRT development environment, which is a self-contained environment that also includes cross-compilation tool chains, generate cross-compilation tool chains as well as root file systems. It's available for a lot of architecture and it has great support for a lot of packages. So the good thing is that most of those packages come with some patches, so some of these packages have been patched for architectures they have problem with. So these are great advantages instead of using your try to take your desktop Linux distribution into unembedded systems. So I can save you some hair developing unembedded systems basically. This is the main OpenWRT configuration interface where you can select features and most of Linux hackers can recognize this interface since the OpenWRT menu config is based on the Linux and you can click on it. And you can select functionalities in the target system for instance here we select the ARNF321 which is the SOHC for the TP-Link board on my top before. Yeah this one and we can also select the profile for specific for this board that will pick up the right device tree. So the software is in dividing categories and you can easily include that just using new space it will put a store like the Linux channel exit and build and you will have a finger image with all the custom software there. So you can also compile your own software on OpenWRT it's quite easy to do what you need to do basically is write an OpenWRT Mac file for the package you want to build. This is an example for an award that basically this will override the combination variables of your Mac file like cc and cflux and we'll use the right key compiler. So there is also a good support for several interpreters such as Erlang, Java, P2P, Python and so on. So one of the main issues when you develop an embedded Linux environment an embedded Linux product is dealing with the configuration files. For instance for the configuration files of all the programs running on your distribution. For instance if you want to configure some functionality at runtime let's say you have a web interface and you want to to adapt some configuration files based on the user input you need to basically parse those files and in order to match the format it's quite a bit tricky. So OpenWRT solves this problem in a very elegant way called UCLA. Basically it's a unified configuration interface that unifies all the files in a single folder and all those configuration files will have the same syntax. So basically you know it will be easier to configure your software. Even if it was mainly created for the OpenWRT software there are no bindings for 30-part programs as well so they have been made compatible with the UCI as well. So this is a syntax for UCI configuration files and we can see an example here. This is a network configuration file where you basically can configure the interface with a look back. You can have a specific interface, a protocol, a PR address, a network, same for LAN. You have the internet interface and so on. This is another example. This is a system configuration file where you can specifically install the hostname, the term the list of entity servers you want to use and choose if you want to enable that feature or not. So UCI, even if you can configure the UCI configuration files using your own editor that is not practical when you want to do that through a script. So for this reason there is a command line utility that allows you to modify the entries in the configuration files such as in the reverse if something went wrong and commit to definitely when everything is okay in the hash. Thank you. So another issue in developing a medelinks product is when you want to know the status of, general status of your system if you want for instance know which IP address your internet interface has or the uptime or many other things what you need to do. Basically it's parsing the output of if config or think about you want to retrieve a list of wireless network available. You need to parse like a unwconfig, unwpsli, that can be quite complicated besides the error problem. So UBAS is basically a demo where the demo registers and they set their functions, their namespaces and the functionalities and the procedures that they provide. This is the command line tool for UBAS. We will see probably list and call. With a list you can list all the namespaces registered inside UBAS. So for instance you can read your role, you can also configure UCI and in case you want to know more information about your line interface you can install the procedures available for the line interface and you can bring that up and down and you can even get the status. The best thing is that the communication happens in JSON format. So you need you get basically information in that format which is much nicer to parse since it is also unified. So UBAS is the way to go if you want to reduce your custom software to the UBAS. And there are also bindings for UBAS and it is also possible to expose shell scripts and functionalities in UBAS. Other examples can be found in OpenWRT-VT. Another important very nice feature is the UBAS plugin for HTTP which is the OpenWRT web server. So basically that plugin allows you to call UBAS functionality over HTTP with the JSON LPC specification. So you basically have to do an authentication. You can use the the user in your system, in your new system. You authenticate with username password, you get a token, you use the token to perform UBAS operations in UBAS. So this can be really nice for instance let's say you want to retrieve over all the Wi-Fi networks available from your the access point you are developing or your new T-Product right and you get a list already formatted in JSON without parsing anything or writing any CGI or PHP back-end right. So when we got if you want to get sort with OpenWRT you can use the main trying tree that is the development tree. So it might be a stable and useful if you need some functionalities that are not in the stable tree or some SOC that is not in the stable tree and it has been recently added and it is not in the stable tree. And the stable tree right now is a cost calmer and you can just scroll the repo, read the read me and you are ready to start. And that's it. Thank you.