Why, when calling open("/dev/tty-2",O_RDWR);
is the open file number 268435355 (eg -1+2^28)? Is this a normal sized number to output from open() call on a real-time operating system (like android DSP side)? It seems too large.
DSP processor running Qualcomm Real-Time OS. Other processor running Linaro Linux.
Pertinent output from mini-dm
, DSP (digital signal processor) runtime debugger:
Running mini-dm version: 3.0
Device found with Product ID 0x9025. Continuing...
mini-dm is waiting for a DMSS connection...
DMSS is connected. Running mini-dm...
[08500/03] 00:40.640 HAP:63:HAP_debug_v2 weak ref not found, return _rtld_sym_zero@_rtld_objmain 0294 symbol.c
[08500/03] 00:40.640 HAP:63:HAP_debug_v2 weak ref not found, return _rtld_sym_zero@_rtld_objmain 0294 symbol.c
[08500/02] 00:40.640 HAP:63:Opening serial port 0062 helloworld_dsp.c
[08500/00] 00:40.640 configuring UART for 4-wire mode, DAL id: 0x2001005 0852 DalUart.c
[08500/02] 00:40.641 HAP:63:Opened serial port number 268435455 0065 helloworld_dsp.c
[08500/02] 00:40.641 HAP:63:Closing serial port 0075 helloworld_dsp.c
[08500/02] 00:40.641 HAP:63:Successfully closed serial port number 268435455 0078 helloworld_dsp.c
[08500/02] 00:40.641 HAP:63:Opening serial port 0062 helloworld_dsp.c
[08500/02] 00:40.642 HAP:63:workaround: reopening an existing serial port 0351 serial.c
[08500/02] 00:40.642 HAP:63:Opened serial port number 268435455 0065 helloworld_dsp.c
[08500/02] 00:40.642 HAP:63:Beginning serial read 0123 helloworld_dsp.c
[08500/02] 00:40.642 HAP:63:/dev/tty-2 read bytes [0]: 0129 helloworld_dsp.c
[08500/02] 00:40.642 HAP:63:Closing serial port 0075 helloworld_dsp.c
[08500/02] 00:40.642 HAP:63:Successfully closed serial port number 268435455 0078 helloworld_dsp.c
Pertinent DSP code:
int example_interface_serial_open()
{
LOG_INFO("Opening serial port");
serial_fds[0] = open(serial_path[0],O_RDWR);
if (serial_fds[0] >= SUCCESS) {
LOG_INFO("Opened serial port number %d", serial_fds[0]);
} else {
//FIXME log error!
LOG_INFO("Error opening serial port");
serial_fds[0] = ERROR;
}
return serial_fds[0];
}
int example_interface_serial_close(int fd) {
LOG_INFO("Closing serial port");
if (!close(fd)) {
LOG_INFO("Successfully closed serial port number %d", fd);
} else {
LOG_INFO("Error closing serial port");
fd = ERROR;
}
return fd;
}
int example_interface_serial_read(int fd) {
int res = SUCCESS;
char rx_buffer[SERIAL_SIZE_OF_DATA_BUFFER];
unsigned int num_bytes_read;
int active_devices = 0;
int runs, i;
LOG_INFO("Beginning serial read");
memset(rx_buffer, 0, SERIAL_SIZE_OF_DATA_BUFFER);
num_bytes_read = read(fd, rx_buffer,
SERIAL_SIZE_OF_DATA_BUFFER);
LOG_INFO("%s read bytes [%d]: %s",
serial_path[0], num_bytes_read, rx_buffer);
if (res < SUCCESS) {
LOG_INFO("Closing file %s",
serial_path[0]);
close(fd);
fd = ERROR;
}
return fd;
}
Edit: including definition of LOG_INFO()
/****************************************************************************
* Copyright (C) 2015 Mark Charlebois. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name ATLFlight nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __hexagon__
// Debug output on the aDSP
#include <HAP_farf.h>
#define LOG_INFO(...) FARF(ALWAYS, __VA_ARGS__);
#define LOG_ERR(...) FARF(ALWAYS, __VA_ARGS__);
#define LOG_DEBUG(...) FARF(MEDIUM, __VA_ARGS__);
#else
// Debug output on the apps processor
#include <stdio.h>
#define LOG_INFO(...) do{ printf(__VA_ARGS__); printf("\n"); } while (0)
#define LOG_ERR(...) do{ printf(__VA_ARGS__); printf("\n"); } while (0)
#define LOG_DEBUG(...) do{ printf(__VA_ARGS__); printf("\n"); } while (0)
#endif
#ifdef __cplusplus
}
#endif
Output of
int i=-1; LOG_INFO("%d\n",1);
DSP-side:
[08500/02] 02:27.822 HAP:24639: -1 0063 helloworld_dsp.c
Linux-side:
-1
From a developer of the device:
Quirky! :P