Red de conocimiento informático - Aprendizaje de programación - ¿Se puede programar el puerto serie en Mac?

¿Se puede programar el puerto serie en Mac?

1: Conocimientos básicos de programación de puertos serie.

En primer lugar, cada dispositivo serie conectado existe en forma de archivo en mac/linux. La ruta al archivo es /Dev (la carpeta dev en el directorio raíz). Cada archivo de dispositivo tiene un búfer de lectura y un búfer de escritura. Podemos leer la información que nos envía el dispositivo en el búfer de lectura y dar algunos comandos al dispositivo en el búfer de escritura. Sin embargo, el tamaño del búfer de lectura/escritura es seguro. Si el dispositivo escribe datos en el búfer de lectura rápidamente y nosotros leemos en el búfer lentamente, esto provocará que parte de nuestro contenido se sobrescriba, lo que provocará que nos falten algunos datos. Por lo tanto, también necesitamos configurar la velocidad del búfer de lectura y escritura del dispositivo, que es nuestra velocidad de baudios común.

2: Acerca de los archivos cu y tty en el directorio /Dev

El mismo dispositivo serie o dispositivo serie USB tendrá dos archivos en el directorio /Dev del mac. En realidad no hay mucha diferencia en los archivos, pero los lugares donde se usan son diferentes. tty puede verse como un legado de Linux/Unix, y cu puede verse como exclusivo de mac. Para operaciones generales de lectura y escritura, simplemente use cu. En algunas ocasiones especiales, se deben utilizar archivos tty. Por ejemplo, se utiliza para datos entrantes, esperando una señal CDC o el dispositivo no formula todos los protocolos de acuerdo con el estándar RS232.

3: Conectar y operar un dispositivo serie

Conectar y operar un dispositivo serie requiere cinco pasos.

a: primero identifique todos los dispositivos

b: obtenga la ruta al archivo del dispositivo serie

c: abra el puerto para su operación

d: operar el dispositivo (obtener la información que nos envía el dispositivo leyendo el búfer y dar comandos al dispositivo escribiendo el búfer)

e: cerrar el puerto.

Buscar dispositivo

mach_port_t masterPort;

io_iterator_t *matchingServices;

classexToMatch = IOServiceMatching(kIOSerialBSDServiceValue);

Detalles Cocoon Mi otro blog Encuentre dispositivos coincidentes en Mac

Obtenga la ruta del dispositivo serie

io_object_c modemService;

kern_return_t kernResult = KERN_FAILURE;

p>

BOOL ModemFound = false;

While((!modemFound) && (modemService = IOIteratorNext(matchingServices))) // matchingServices es el iterador del dispositivo obtenido anteriormente, consígalo uno por un dispositivo

{

CFTypeRefdeviceFilePathAsCFString;

deviceFilePathAsCFString = IORegistryEntryCreateCFProperty(modemService, CFSTR(kIOCalloutDeviceKey), kCFAllocatorDefault, 0); servicio de módem.

// Debe ser la ruta para obtener el archivo del dispositivo

if(deviceFilePathAsCFString)

{

Booleanresult;

result = CFStringGetCString( deviceFilePathAsCFString, deviceFilePath, maxpathSize, kCFStringEncodingASCII);

CFRelease(deviceFilePathAsCFString); // Codifica la ruta con kCFStringEncodingASCII y guárdala en devicePath

if(resultado) // el resultado es sí indicar éxito

{

printf("Ruta BSD:%s",deviceFilePath);

modemFound = true;

kernResult = KERN_SUCCESS;

}

}

printf("\n");

IOObjectRelease(modemService

<); p> }