1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
|
#include "SDK30.H"
#include "message.h"
#include "oem.h"
// Bitmaps definitions.
#include "Bmp\Swipe1.h"
#include "Bmp\Swipe2.h"
#include "Bmp\Swipe3.h"
.....
...
unsigned char P_Lire_drSV(unsigned char *code, unsigned char *contexte_cps, DATE *DateSyst, NO_SEGMENT mynoappli)
{
unsigned char stat;
unsigned char etat;
unsigned short cr;
/*DATE DateSyst;*/
/*unsigned char texte[2*16+1];*/
etat = 0x00;
/*read_date (&DateSyst);*/
/* Preparation du message de lecture de la carte SV */
ucEmissMessage[0] = 0x01;
ucEmissMessage[1] = 0x00;
ucEmissMessage[2] = 0x00;
ucEmissMessage[3] = 0x95;
ucEmissMessage[4] = 0x02;
ucEmissMessage[5] = 0x01;
memcpy(&ucEmissMessage[6],contexte_cps,LG_CONTEXTE);
memcpy(&ucEmissMessage[49],code,4); /* code porteur */
ucEmissMessage[53] = 0x20;
ucEmissMessage[54] = 0x20;
ucEmissMessage[55] = 0x20;
ucEmissMessage[56] = 0x20;
ucEmissMessage[57] = 0x20;
ucEmissMessage[58] = 0x20;
ucEmissMessage[59] = 0x20;
ucEmissMessage[60] = 0x20;
if (memcmp(&(DateSyst->annee),"50",2)<0)
memcpy(&ucEmissMessage[61],"20",2);
else
memcpy(&ucEmissMessage[61],"19",2);
memcpy(&ucEmissMessage[63],&(DateSyst->annee),2);
memcpy(&ucEmissMessage[65],&(DateSyst->mois),2);
memcpy(&ucEmissMessage[67],&(DateSyst->jour),2);
usLgEmissMessage=69;
/* Ouverture du lecteur carte, si necessaire */
if (stdcam0()==NULL)
fopen("CAM0","rw");
else
{
fclose(stdcam0());
fopen("CAM0","rw");
}
/* par defaut la carte */
cr=CAM0;
/* Etat du lecteur CAM0 */
status(stdcam0(),&stat);
/* pas de carte presente */
if (!(stat & CAM_PRESENT))
{
cr=0;
printf("%c CARTE VITALE\n ARRACHEE",0x1B);
ttestall(0,200);
}
/* Carte en butee */
if ((cr & CAM0))
{
/* Demande au gestionnaire d'executer l'ordre "Lecture droits Vitale"*/
APPLI_Dialogue(mynoappli,ucEmissMessage,usLgEmissMessage,ucRecepMessage,&usLgRecepMessage);
/* A la sortie de l'EI96, la carte Vitale est hors tension */
/* La fonction APPLI_Dialogue ferme le peripherique CAM0 */
if (ucRecepMessage[0] == 0x00)
{
/*print_debug("1");*/
#ifdef LABO
envoi_xmodem(ucRecepMessage+44,usLgRecepMessage-44,'V');
#endif
/*print_debug("2");*/
MAJ_Donnees_PS(ucRecepMessage, 44);
/* analyse espace mémoire disponible */
if (MAJ_Donnees_DroitsVitale(ucRecepMessage, usLgRecepMessage))
{
etat = 0x01;
}
}
else
{
int warning;
warning=0;
switch (ucRecepMessage[1])
{
case 0x01 :
printf("%c CARTE PS\n ABSENTE",0x1B);
warning=1;
break;
case 0x02 :
printf("%c CARTE PS\n BLOQUEE",0x1B);
warning=1;
break;
case 0x03 :
printf("%c CODE PORTEUR\n FAUX",0x1B);
warning=1;
break;
case 0x04 :
printf("%c CARTE PS\n INVALIDE",0x1B);
warning=1;
break;
case 0x05 :
printf("%c CARTE PS\n ARRACHEE",0x1B);
warning=1;
break;
case 0x07 :
printf("%c ERREUR ACCES\n CARTE PS",0x1B);
break;
case 0x11 :
printf("%c CARTE VITALE\n ABSENTE",0x1B);
break;
case 0x14 :
printf("%c CARTE VITALE\n NON VALIDE",0x1B);
break;
case 0x15 :
printf("%c CARTE VITALE\n ARRACHEE",0x1B);
break;
case 0x16 :
printf("%c CARTE VITALE\n NON AUTORISEE",0x1B);
break;
case 0x17 :
printf("%c ANOMALIE DATE\n ETM FAMILLE",0x1B);
warning=1;
break;
case 0x18 :
printf("%c ANOMALIE DATE\nETM BENEFICIAIRE",0x1B);
warning=1;
break;
case 0x22 :
printf("%c MESSAGE\n INCORRECT",0x1B);
break;
case 0x26 :
printf("%c CARTES\n INCOMPATIBLES",0x1B);
warning=1;
break;
case 0x30 :
printf("%c PROBLEME\n LECTEUR",0x1B);
break;
case 0x31 :
printf("%cDELAI DE FRAPPE\n ATTEINT",0x1B);
warning=1;
break;
}
ttestall (0, 300);
if (usLgRecepMessage==44)
MAJ_Donnees_PS(ucRecepMessage, 44);
#ifdef RAPIDO
if(warning) {
if (ucRecepMessage[0] == 0x03) {
printf("%cREMONTEE\nDONNEES ADM.",0x1B);
ttestall (0, 200);
#ifdef LABO
envoi_xmodem(ucRecepMessage+1+44,usLgRecepMessage-1-44,'V');
#endif
MAJ_Donnees_PS(ucRecepMessage+1, 44);
if (MAJ_Donnees_DroitsVitale(ucRecepMessage+1, usLgRecepMessage))
{
etat = 0x02;
}
} else {
printf("%cREMONTEE\nDONNEES ADM.",0x1B);
ttestall (0, 200);
MAJ_Donnees_PS(ucRecepMessage+1, 44);
/* analyse espace mémoire disponible */
if (MAJ_Donnees_DroitsVitale(ucRecepMessage , usLgRecepMessage)) {
etat = 0x02;
}
}
}
#endif
}
}
return etat;
} |
Partager