int code_break = 0; int Ctrl_On = 0; int Alt_On = 0; int Maj_On = 0; int echo = 1; char tampon_clav[taille_buffer]; char *curr_read; char *curr_write;

Documents pareils
1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.


Introduction au langage C

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Java Licence Professionnelle CISII,

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Programme Compte bancaire (code)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Projet de programmation (IK3) : TP n 1 Correction

Introduction à l algorithmique et à la programmation M1102 CM n 3

Programmer en JAVA. par Tama

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

DNS Server RPC Interface buffer overflow. Céline COLLUMEAU Nicolas BODIN

Conventions d écriture et outils de mise au point

Brefs rappels sur la pile et le tas (Stack. / Heap) et les pointeurs

Langage Éric Guérin 5 octobre 2010

TP2 : tableaux dynamiques et listes chaînées

OS Réseaux et Programmation Système - C5

clavier espagnol Figure 1 - deux types de claviers AZERTY ou QWERTY

as Architecture des Systèmes d Information

RACCOURCIS CLAVIERS. DEFINITION : Une «combinaison de touches» est un appui simultané sur plusieurs touches.

Corrigé des exercices sur les références

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Programmation C++ (débutant)/instructions for, while et do...while

Le prototype de la fonction main()

Programmation système de commandes en C

Algorithmique et Programmation, IMA

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Plan du cours. Historique du langage Nouveautés de Java 7

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Derrière toi Une machine virtuelle!

La programmation des PIC en C. Les fonctions, les interruptions.

ACTIVITÉ DE PROGRAMMATION

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INITIATION A LA PROGRAMMATION

Chapitre 1 : La gestion dynamique de la mémoire

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Vers du matériel libre

Package Java.util Classe générique

Programmation en langage C

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Claude Delannoy. 3 e édition C++

UE C avancé cours 1: introduction et révisions

TRAVAUX PRATIQUES Programmation Système Langage C / Système UNIX. 2 e année Génie Informatique

Les structures. Chapitre 3

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TD3: tableaux avancées, première classe et chaînes

INF 321 : mémento de la syntaxe de Java

Une introduction à Java

SUPPORT DE COURS. Langage C

COURS et TP DE LANGAGE C++

Skype (v2.5) Protocol Data Structures (French) Author : Ouanilo MEDEGAN

Programmation avec des objets : Cours 7. Menu du jour

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Introduction à la programmation concurrente

Réalisation d un réseau de capteurs de température sans fil basé sur le protocole ZigBee

Le langage C. Séance n 4

Programmation C. J.-F. Lalande. 15 novembre 2012

Java Licence Professionnelle CISII,

Cours de programmation avancée. Le langage C. Université du Luxembourg

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Apprendre à manipuler le clavier Médiathèque de Bussy Saint-Georges APPRENDRE A MANIPULER LE CLAVIER

Composition d un ordinateur :

Langage Java. Classe de première SI

Documentation SecurBdF

3IS - Système d'exploitation linux - Programmation système

Initiation. àl algorithmique et à la programmation. en C

Tout savoir sur le clavier

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Les structures de données. Rajae El Ouazzani

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE JAVA

Les arbres binaires de recherche

Les processus légers : threads. Système L3, /31

Notions fondamentales du langage C# Version 1.0

Assurance Qualité. Cours de génie logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 23/04/2007

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Rappels Entrées -Sorties

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Le Langage C++ Patrick TRAU - ULP IPST version du 02/10/05

IUT ANNECY Département Mesures Physiques Cours d informatique Initiation au langage C

INTRODUCTION À L INFORMATIQUE. Etsup 2012 Florian JACQUES

Comment sélectionner des sommets, des arêtes et des faces avec Blender?

IFT Systèmes d exploitation - TP n 1-20%

Dis papa, c est quoi un bus logiciel réparti?

Transcription:

#include "appels_systeme.h" #include "clavier.h" #include "debug.h" #include "interruptions.h" /* pour l'acquittement au intc */ #include "console.h" #include "processus.h" #include "schedule.h" /*clavier.c *driver pour le clavier *detaillant les fonctions principales en rapport avec le clavier *le 02/06/10 par Pierre */ #define ADR_BASE 0x7f800000 /* a changer, ou pas */ /* variable globale : derniere touche enfoncée*/ char CLAV_GLOB; int code_break = 0; int Ctrl_On = 0; int Alt_On = 0; int Maj_On = 0; int echo = 1; char tampon_clav[taille_buffer]; char *curr_read; char *curr_write; char PS2_traduction(char c) { switch (c) { case 0x1C : return 0x61; case 0x32 : return 0x62; case 0x21 : return 0x63; case 0x23 : return 0x64; case 0x24 : return 0x65; case 0x2B : return 0x66; case 0x34 : return 0x67; case 0x33 : return 0x68; case 0x43 : return 0x69; case 0x3B : return 0x6A; case 0x42 : return 0x6B; case 0x4B : return 0x6C; case 0x3A : return 0x6D; case 0x31 : return 0x6E; case 0x44 : return 0x6F; case 0x4D : return 0x70; case 0x15 : return 0x71; case 0x2D : return 0x72; case 0x1B : return 0x73; case 0x2C : return 0x74; case 0x3C : return 0x75; case 0x2A : return 0x76; case 0x1D : return 0x77; case 0x22 : return 0x78; //a //b //c //d //e //f //g //h //i //j //k //l //m //n //o //p //q //r //s //t //u //v //w //x -1-

case 0x35 : return 0x79; //y case 0x1A : return 0x7A; //z //les chiffres maintenant case 0x45 : return 0x30; //0 case 0x16 : return 0x31; //1 case 0x1E : return 0x32; //2 case 0x26 : return 0x33; //3 case 0x25 : return 0x34; //4 case 0x2E : return 0x35; //5 case 0x36 : return 0x36; //6 case 0x3D : return 0x37; //7 case 0x3E : return 0x38; //8 case 0x46 : return 0x39; //9 /* Ponctuation */ case 0x0E : return 0x60; //accentgrave case 0x55 : return 0x3D; //= case 0x5C : return 0x5C; //antislash case 0x54 : return 0x5B; // [ case 0x52 : return 0x27; //' case 0x4E : return 0x2D; //- case 0x4C : return 0x3B; //; case 0x41 : return 0x2C; //, case 0x49 : return 0x2E; //. case 0x4A : return 0x2F; // / case 0x5B : return 0x5D; // ] /* Controle */ case 0x66 : return 0x7F; //<- (BKSP) //louche, faut renvoyer le signal DEL... case 0x0D : return 0x09; //TAB case 0x29 : return 0x20; //SPACE case 0x5A : return 0x0D; //ENTER case 0x08 : return 0x1B; //ESC /* Clavier Numerique (sans le /, trop penible a implementer)*/ case 0x7C : return 0x2B; //+ case 0x79 : return 0x0D; //enter case 0x84 : return 0x2D; // - case 0x71 : return 0x2E; //. case 0x70 : return 0x30; //0 case 0x69 : return 0x31; //1 case 0x72 : return 0x32; //2 case 0x7A : return 0x33; //3 case 0x6B : return 0x34; //4 case 0x73 : return 0x35; //5 case 0x74 : return 0x36; //6 case 0x6C : return 0x37; //7 case 0x75 : return 0x38; //8 case 0x7D : return 0x39; //9-2-

default: return 0x00; //null void PS2_get() { char val; unsigned long* adr; char to_kb[2]; /* Acquittement au niveau du contrôleur */ *((unsigned long*)(intc_base_address + IAR)) = (*((unsigned long*)(intc_base_address + IAR))) 0x02; adr = (unsigned long*)(adr_base); /*on ne prend que l'octet qui nous interesse */ val = (char) *adr; /*la on a recupere le make code de la touche reste a le traduire */ if(code_break!= 1) { if(val == (char) 0xF0) { /*c'est le break code*/ code_break = 1; else { if( val == (char) 0x14) { /* la touche Ctrl est appuyée */ Ctrl_On = 1; else if( val == (char) 0x12 val == (char) 0x59) { /* la touche maj est enfoncée */ Maj_On = 1; else if( val == (char) 0x11) { /* la touche alt est enfoncée */ Alt_On = 1; else if(ctrl_on == 1) { if(val == (char) 0x21) { /*signal Ctrl + C, on coupe*/ to_kb[0] = (char) 0x03; to_kb[1] = '\0'; keyboard_data(to_kb); else { /*euh, c'est pas une combinaison programmée, ca! */ else if(maj_on == 1) { if(ps2_traduction(val) >= (char) 0x61 && PS2_traduction(val) <= (char ) 0x7A) { /*c'est un caractere a mettre en majuscule*/ to_kb[0] = PS2_traduction(val) - (char) 0x20; to_kb[1] = '\0'; keyboard_data(to_kb); else { /*euh, c'est pas une combinaison programmée, ca! */ else if(alt_on == 1) { -3-

/*Ici il faudra metre d'eventuels racourcis avec alt +...*/ else if((to_kb[0] = PS2_traduction(val))!= (char) 0x00) { /*cela correspond a une touche autonome */ to_kb[1] = '\0'; keyboard_data(to_kb); else { /*euh ben, elle est pas a utiliser cette touche*/ else { /*break est deja a 1 on le remet a 0 */ code_break = 0; /* et on remet enventuelement les _On a 0 */ if( val == (char) 0x14) { /* la touche Ctrl est appuyée */ Ctrl_On = 0; if( val == (char) 0x12 val == (char) 0x59) { /* la touche maj est enfoncée */ Maj_On = 0; if( val == (char) 0x11) { /* la touche alt est enfoncée */ Alt_On = 0; /* void keyboard_data(char* str) */ /* { */ /* int i = 0; */ /* while ((*(str + i)!= '\0')) { */ /* if (((curr_write + 1) == curr_read) */ /* ((curr_write + 1) == (curr_read + TAILLE_BUFFER))) { */ /* printf("le tampon est plein\n"); */ /* *curr_write = '\r'; */ /* if (echo) { */ /* cons_write("\r", 1); */ /* */ /* curr_write++; */ /* if ((curr_write == (tampon_clav + TAILLE_BUFFER))) { */ /* curr_write = tampon_clav; */ /* */ /* break; */ /* */ /* *curr_write = *(str + i); */ /* if (echo) { */ /* cons_write(str+i, 1); */ /* */ /* curr_write++; */ /* if ((curr_write == (tampon_clav + TAILLE_BUFFER))) { */ /* curr_write = tampon_clav; */ -4-

/* */ /* i++; */ /* */ /* */ int tampon_plein() { if((curr_write + 1 == curr_read) (curr_write == curr_read + TAILLE_BUFFER)) { return 1; else { return 0; void keyboard_data(char *str) { processus_t *p; CLAV_GLOB = *str; if(*(str) == 13) { /* c'est le caractère d'entrée */ *curr_write = '\r'; if (echo) { cons_write(str, 1); if ((p = queue_out(&p_attente_io, processus_t, files_globales))) { p->etat = ACTIVABLE; queue_add(p, &p_activables, processus_t, files_globales, priorite); schedule(); incr_tampon_write(); else if(tampon_plein() == 0) { *curr_write = *str; if (echo) { cons_write(str, 1); incr_tampon_write(); void incr_tampon_write() { curr_write++; if (curr_write > tampon_clav + TAILLE_BUFFER) { curr_write = tampon_clav; void incr_tampon_read() { curr_read++; if (curr_read > tampon_clav + TAILLE_BUFFER) { -5-

curr_read = tampon_clav; char get_clavier() { return CLAV_GLOB; -6-