Debug challenge 2013

Congratulations! You have just been hired for your first job in a dynamic company which designs and builds state-of-the-art embedded systems. This is your first day at work, and you have already been given a top-priority assignment.

Bob has been hired a few weeks ago. He was performing well until he electrocuted himself while analyzing the design of a competitor new toy named “my first electric chair, for kids”. Unfortunately, he was working on your company flagship project, and the distributors come and visit tomorrow to get their hands on your first prototype in order to decide whether they will fill their stores with your product or not. If they do, everyone at your company is going to be very rich (except people hired since less than 3 months ago), and if they don’t, the chances of the company going bankrupt in a few months are somewhere between 0.99 and 1.

Bob was a solo programmer who did not see the point of using a revision control system, since all the revisions were in his head or somewhere in editor backup files. He kept regular backups on his own USB key, which is now a melted piece of garbage still located in what used to be Bob’s trousers pockets. One company executive who had heard about a system called git created a repository and put Bob’s current code in it. Your job is now to work from this repository and make sure your bosses are getting rich.

The chief executive officer gives you a quick talk about what the new product is going to do:

  • Its internal temperature is displayed on the second line of a 2×16 LCD display.
  • The left switch can be used to switch between Celcius and Farenheit modes.
  • The first line of the LCD display scrolls permanently and indicates how to switch between the two (°C and °F) modes.
  • The backlight display will stay on for 10 seconds when the systems starts, then for 3 seconds each time the right switch is used.
  • Some chirping sounds (a double one when the board starts, a single one when the user presses the left switch) can be heard.

You are starting to realize how innovative this product is: no other product on the market displays only its internal temperature, and you have not heard of anyone working on one. Your bosses are probably geniuses and visionaries at the same time.

Since the executives do not want you to reproduce Bob’s unfortunate accident, at least not until the product has been put in the stores, they give you a few simple directions that you must follow. If you do fail in following those rules, not only you will not get payed for what you did but also you will forfeit an entire month of salary. The rules are:

  • You are not allowed to play with any electrical chair, be it a real one or a toy, unless your code is provingly working well and has been checked it in Git.
  • You must fix the bugs one at a time, each one in its own commit with a clear message explaining what the problem was. Also, your git must be correctly configured to display your name and a valid email address in the author field.
  • Your job is to fix the bugs, not rewrite  the code. Don’t forget, Bob was trusted by the executives, and you are not. However, once all the bugs have been fixed, you are allowed to rewrite some expressions that you would find unclear by prefixing the git commit message with “Refactoring: ” (without the quotes). You will probably get a bonus for every piece of code you make clearer.
  • You must push your changes into a branch named after your first name in lower case and without accents, with an hyphen between parts if your first name has several parts. For example, “Marie-Séraphine Trabalda” would use “marie-seraphine”.
  • You are not allowed to push into the master branch. This one is reserved for the CTO, even though he has to learn how to use git. Pushing into the master branch would be equivalent to walk on the CTO finest carpet with dirty rainboots after a visit to the nearest pig farm.
  • To prove that you stayed a full day, you are not allowed to push into your branch before being told to do so. Once given the authorization to push, you will have five minutes until the central repository is considered sealed, and products will be manufactured using your code as present in this repository.

You were told that Bob often said that his code was either perfect or better than perfect. That should be an easy task.

And there, you begin the challenge by cloning, and your journey starts here…

Communication challenge 2013


Ce « communication challenge » a pour but de vous faire développer une application en un temps limité afin de mettre en œuvre vos connaissances acquises lors des cours et des travaux pratiques.

Un quizz vous sera présenté en 802.15.4, et vous devez trouver un moyen d’y répondre (en 802.15.4 également).

La note sera déterminée :

  • à partir de vos résultats lors du quizz, ce qui nécessite que vous soyez en mesure d’y répondre ;
  • du code qui se trouvera dans vos dépôt git à la fin du challenge.

Un quizz est composé de 10 questions, chacune accompagnée de quatre réponses possibles.


La communication avec le serveur de quizz se fait en mode 802.15.4 avec des adresses sur 16 bits. L’adresse du serveur est 0x5351 (correspondant aux lettres “SQ”, serveur de quizz). Il faut également configurer le PAN ID sur “SQ”. Comme lors du TP STM32, l’adresse de chaque participant sera composée avec le code ASCII de la première lettre du prénom en majuscules et celui de la première lettre du nom de famille en majuscules également.

Le dialogue aura la forme suivante

  1. Un client souhaitant commencer un quizz envoie le caractère 0x02 au serveur pour réaliser un quizz de test (pendant le développement) ou 0x01 pour un quizz noté.
    Attention : l’envoi d’un tel caractère termine un éventuel quizz en cours, et pour un quizz noté cela signifie que toutes les questions non répondues sont considérées comme ayant eu une mauvaise réponse. Il est donc conseillé d’utiliser 0x02 tant que vous n’êtes pas prêt à être noté.
  2. Le serveur répond en renvoyant trois fois ce même caractère (0x02 ou 0x01) pour indiquer qu’il a bien reçu votre demande. Cela vous permet également de vous resynchroniser avec le flux d’entrée. Si vous avez demandé un quizz noté et que vous avez dépassé la limite, le serveur vous répondra que vous êtes en mode test, puisque vous ne pouvez plus passer de quizz noté.
  3. Le serveur envoie alors la première question sous la forme suivante :
    • Un caractère donne l’identifiant de la question (appelons le id), qui n’a aucune signification particulière. Ce caractère sera compris entre 0x03 et 0x3F.
    • La question est transmise sous la forme d’une chaîne de 80 caractères au maximum, suivie du caractère \n.
    • Les quatre réponses sont transmises sous la forme d’une chaîne de 16 caractères au maximum chacune, chacune étant suivie du caractère \n.
  4. Le client doit transmettre sa réponse sous la forme d’un caractère répété trois fois. Ce caractère est composé de l’identifiant de la question (id) sur les 6 bits de poids fort, et de la réponse (entre 0 et 3, dans l’ordre d’arrivée des réponses possibles) sur les 2 bits de poids faible.
  5. Si moins de 10 questions ont été transmises, le processus reprend à l’étape 3. Sinon, il continue à l’étape suivante.
  6. Le serveur envoie la note obtenue sous la forme d’un octet contenant le score (entre 0 et 10) avec le bit de poids fort positionné. 0x80 correspond donc à 0/10, 0x8a correspond à 10/10.

Note : le caractère 0x00 peut être envoyé à tout moment au serveur, qui l’ignorera.

Déroulement des quizz

Vous pouvez passer des quizz en mode test autant de fois que vous le voulez.

Par contre, les quizz en mode noté ne peuvent être passés que 5 fois au maximum, et tout quizz commencé est décompté. Soyez certain de n’utiliser ce mode que lorsque vous êtes confiants que votre programme est fiable et se comportera correctement dans tous les cas possibles. La meilleure note des cinq premiers quizz passés en mode noté sera utilisée. N’hésitez pas à repasser en mode test si vous détectez ou soupçonnez un problème.

Bien entendu, les questions en mode test et noté peuvent être différentes.


  • Chaque question pouvant faire jusqu’à 80 caractères, il peut être nécessaire de prévoir une fonction de défilement sur l’afficheur LCD.
  • Chaque réponse pouvant faire jusqu’à 16 caractères, il peut être nécessaire de prévoir un dispositif de sélection de la réponse. Pour cela, vous avez la possibilité d’utiliser le potentiomètre et les boutons qui se trouvent sur vos cartes.
  • Il est totalement interdit de perturber le déroulement des tests pour les autres participants, de quelque manière que ce soit. Notamment, tout envoi de paquet en mode broadcast ou l’utilisation de l’adresse de quelqu’un d’autre sont totalement interdits et seront sanctionnés.
  • Comme mentionné ci-dessus, tout envoi de 0x01 consomme un quizz noté, même si aucune réponse n’est envoyée par la suite. Soyez prudents dans vos émissions.