Bonjour,
Voilà j'ai développé un driver série pour un pda à l'aide de platform Builder (le code est mis plus bas). Le problème est que lors du "build" j'ai des erreurs. Quelqu'un peut-il m'aider?? merci d'avance et meilleures salutations
Steve
Voici le log et le code plus bas :
LOG :
--------------------Configuration: Emulator: x86_Release--------------------
Starting Build: set WINCEREL=1&&build
==============
BUILD: [Thrd:Sequence:Type ] Message
BUILD: [00:0000000000ROGC ] Checking for \WINCE500\sdk\bin\i386\srccheck.exe.
BUILD: [00:0000000001ROGC ] SrcCheck exit code: 0 (dec).
BUILD: [00:0000000002ROGC ] Compile and Link for x86.
BUILD: [00:0000000003ROGC ] Loading C:\WINCE500\PBWorkspaces\monpremierOS\my_serial_driver\Build.dat.
BUILD: [00:0000000004ROGC ] Done.
BUILD: [00:0000000005ROGC ] Computing include file dependencies:
BUILD: [00:0000000006ROGC ] Checking for SDK include directory: C:\WINCE500\sdk\ce\inc.
BUILD: [00:0000000007ROGC ] Scan \WINCE500\PBWorkspaces\monpremierOS\my_serial_driver\
BUILD: [00:0000000010ROGC ] Linking \WINCE500\PBWorkspaces\monpremierOS\my_serial_driver\ directory.
[#ff2a00]BUILD: [01:0000000017:ERRORE] NMAKE : U1073: don't know how to make 'C:\WINCE500\PBWorkspaces\monpremierOS\WINCE500\Emulator_x86\cesysgen\sdk\lib\x86\retail\coredll.lib;'
BUILD: [01:0000000019:ERRORE] NMAKE.EXE -i -c BUILDMSG=Stop. LINKONLY=1 NOPASS0=1 MAKEDLL=1 failed - rc = 2[/#ff2a00]
BUILD: [00:0000000020ROGC ] Files Warnings Errors
BUILD: [00:0000000021ROGC ] Midl 0 0 0
BUILD: [00:0000000022ROGC ] Resource 0 0 0
BUILD: [00:0000000023ROGC ] Message 0 0 0
BUILD: [00:0000000024ROGC ] Precomp Header 0 0 0
BUILD: [00:0000000025ROGC ] C/Cpp/Cxx 0 0 0
BUILD: [00:0000000026ROGC ] Assembler 0 0 0
BUILD: [00:0000000027ROGC ] Static Libraries 0 0 0
BUILD: [00:0000000028ROGC ] Dll's 0 0 0
BUILD: [00:0000000029ROGC ] Exe's 0 0 0
BUILD: [00:0000000030ROGC ] Resx 0 0 0
BUILD: [00:0000000031ROGC ] Csharp Targets 0 0 0
BUILD: [00:0000000032ROGC ] Other 0 0 2
BUILD: [00:0000000033ROGC ]
BUILD: [00:0000000034ROGC ] Total 0 0 2
BUILD: [00:0000000035ROGC ]
BUILD: [00:0000000036ROGC ] 0 Warnings, 2 Errors
Build for Windows CE (Release) (Built on Apr 22 2004 10:38:01)
File names: Build.log Build.wrn Build.err Build.dat
monpremierOS - 2 error(s), 0 warning(s)
Et voici le code :
#include "stdafx.h"
#include <windows.h>
#include <wdm.h>
// constante de récupération du code du IOCTL 'PUTC'
#define IOCTL_PUTC CTL_CODE(FILE_DEVICE_UNKNOWN,2048, METHOD_BUFFERED, FILE_ANY_ACCESS)
// constante de récupération du code du IOCTL 'GETC'
#define IOCTL_GETC CTL_CODE(FILE_DEVICE_UNKNOWN,2049, METHOD_BUFFERED, FILE_ANY_ACCESS)
// constante de récupération du code du IOCTL 'GET_RX_STATUS'
#define IOCTL_GET_RX_STATUS CTL_CODE(FILE_DEVICE_UNKNOWN,2050,METHOD_BUFFERED, FILE_ANY_ACCESS)
// constantes servant à initialiser les statuts du driver
#define comLineControl 3
#define comDivisorLow 0
#define comDivisorHigh 1
#define comFIFOControl 2
#define comIntEnable 1
#define comModemControl 4
#define comLineStatus 5
#define comTxBuffer 0
#define comRxBuffer 0
// constantes d'erreur
#define LS_TSR_EMPTY 0x40
#define LS_THR_EMPTY 0x20
#define LS_RX_BREAK 0x10
#define LS_RX_FRAMING_ERR 0x08
#define LS_RX_PARITY_ERR 0x04
#define LS_RX_OVERRRUN 0x02
#define LS_RX_DATA_READY 0x01
#define LS_RX_ERRORS (LS_RX_FRAMING_ERR | LS_RX_PARITY_ERR | LS_RX_OVERRRUN)
// entrée de la dll
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return TRUE;
}
// fonction d'initialisation du driver
DWORD MSD_Init(DWORD dwContext)
{
// adresse du port série
PUCHAR IoPortBase;
// valeur de retour
DWORD dwRet;
switch((int)dwContext)
{
case 1:
IoPortBase = ((PUCHAR)0x03F8);
dwRet = 1;
RETAILMSG(1,(TEXT("SERIAL: MSD_Init MSD1\n")));
break;
case 2:
IoPortBase = ((PUCHAR)0x02F8);
dwRet = 2;
RETAILMSG(1,(TEXT("SERIAL: MSD_Init MSD2\n")));
break;
default:
IoPortBase = ((PUCHAR)0x03F8);
dwRet = 1;
RETAILMSG(1,(TEXT("SERIAL: MSD_Init MSD1 (default)\n")));
break;
}
// initialisation du statut du driver
WRITE_PORT_UCHAR(IoPortBase+comLineControl, 0x80);
WRITE_PORT_UCHAR(IoPortBase+comDivisorLow,0x0C);
WRITE_PORT_UCHAR(IoPortBase+comDivisorHigh, 0x00);
WRITE_PORT_UCHAR(IoPortBase+comFIFOControl, 0x00);
WRITE_PORT_UCHAR(IoPortBase+comLineControl, 0x03);
WRITE_PORT_UCHAR(IoPortBase+comIntEnable, 0x00);
WRITE_PORT_UCHAR(IoPortBase+comModemControl,0x03);
return dwRet;
}
// fonction de désinitialisation du driver
BOOL MSD_Deinit(DWORD hDeviceContext)
{
// affichage d'un message de deboggage montrant que l'on est entré dans la fonction de desinitialisation
RETAILMSG(1,(TEXT("SERIAL: MSD_Deinit\n")));
return TRUE;
}
// fonction d'ouverture de flux vers le driver
DWORD MSD_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode)
{
// adresse du port série
PUCHAR IoPortBase;
// valeur de retour
DWORD dwRet;
switch((int)hDeviceContext)
{
case 1:
IoPortBase = ((PUCHAR)0x03F8);
dwRet = 100;
RETAILMSG(1,(TEXT("SERIAL: MSD_Open MSD1\n")));
break;
case 2:
IoPortBase = ((PUCHAR)0x02F8);
dwRet = 200;
RETAILMSG(1,(TEXT("SERIAL: MSD_Open MSD2\n")));
break;
default:
IoPortBase = ((PUCHAR)0x03F8);
dwRet = 100;
RETAILMSG(1,(TEXT("SERIAL: MSD_Open MSD1 (default)\n")));
break;
}
// vidage du buffer de reception si necessaire
while ((READ_PORT_UCHAR(IoPortBase + comLineStatus) & LS_RX_DATA_READY) == 1)
{
// tant qu'il y a un caractère, on le lit
READ_PORT_UCHAR(IoPortBase + comRxBuffer);
}
return dwRet;
}
// fonction de fermeture du flux ouvert vers le driver
BOOL MSD_Close(DWORD hOpenContext)
{
// affichage d'un message de deboggage montrant que l'on est entré dans la fonction de fermeture du driver
RETAILMSG(1,(TEXT("SERIAL: MSD_Close\n")));
return TRUE;
}
// fonction d'appel aux contrôles fournis par le driver
BOOL MSD_IOControl(DWORD hOpenContext,
DWORD dwCode,
PBYTE pBufIn,
DWORD dwLenIn,
PBYTE pBufOut,
DWORD dwLenOut,
PDWORD pdwActualOut)
{
// adresse du port série
PUCHAR IoPortBase;
switch((int)hOpenContext)
{
case 100:
IoPortBase = ((PUCHAR)0x03F8);
break;
case 200:
IoPortBase = ((PUCHAR)0x02F8);
break;
default:
IoPortBase = ((PUCHAR)0x03F8);
break;
}
// en fonction de ce que l'on demande au driver
switch(dwCode)
{
// si l'on veut écrire un caractère
case IOCTL_PUTC:
// on attend tant qu'il n'y a rien à lire
while(!(READ_PORT_UCHAR(IoPortBase + comLineStatus)& LS_THR_EMPTY));
// on ecrit à l'adresse pBufIn ce qui vient d'être lu
WRITE_PORT_UCHAR(IoPortBase + comTxBuffer, *pBufIn);
break;
// si l'on veut lire un caractère
case IOCTL_GETC:
// ecriture du caractère à envoyer à l'adresse pBufOut
*pBufOut = READ_PORT_UCHAR(IoPortBase + comRxBuffer);
*pdwActualOut = 1;
break;
// si l'on veut lire le statut du driver
case IOCTL_GET_RX_STATUS:
// écriture du statut du driver à l'adresse pBufOut
*pBufOut=(READ_PORT_UCHAR(IoPortBase + comLineStatus) & LS_RX_DATA_READY);
*pdwActualOut = 1;
break;
} //fin du switch
return TRUE;
}
// fonction de traitement d'extinction
void MSD_PowerDown(DWORD hDeviceContext)
{
// affichage d'un message de deboggage montrant que l'on est entré dans la fonction d'extinction
RETAILMSG(1,(TEXT("SERIAL: MSD_PowerDown\n")));
}
// fonction de traitement de demarrage
void MSD_PowerUp(DWORD hDeviceContext)
{
// affichage d'un message de deboggage montrant que l'on est entré dans la fonction de demarrage
RETAILMSG(1,(TEXT("SERIAL: MSD_PowerUp\n")));
}
// fonction de traitement de lecture de message
DWORD MSD_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count)
{
// valeur de retour
DWORD dwRet = 0;
// affichage d'un message de deboggage montrant que l'on est entré dans la fonction de lecture
RETAILMSG(1,(TEXT("SERIAL: MSD_Read\n")));
return dwRet;
}
// fonction de traitement d'écriture de message
DWORD MSD_Write(DWORD hOpenContext, LPCVOID pSourceBytes, DWORD NumberOfBytes)
{
// valeur de retour
DWORD dwRet = 0;
// affichage d'un message de deboggage montrant que l'on est entré dans la fonction d'écriture
RETAILMSG(1,(TEXT("SERIAL: MSD_Write\n")));
return dwRet;
}
// fonction de position
DWORD MSD_Seek(DWORD hOpenContext, long Amount, DWORD Type)
{
// valeur de retour
DWORD dwRet = 0;
// affichage d'un message de deboggage montrant que l'on est entré dans la fonction de recherche
RETAILMSG(1,(TEXT("SERIAL: MSD_Seek\n")));
return dwRet;
}
Partager