我正在尝试从连接到主机模式的Android手机的USB设备中获取一些数据.我能够向它发送数据,但读取失败.
我已经看了几个 例子,尽我所能,但我没有任何USB通信经验,虽然现在我知道了一点,而且我已经坚持了这个,我不得不承认.
我对端点配置不太熟悉,但我知道我的设备使用CDC类型的通信方法,并且输出(从电话到设备)和输入都被注册.
这是使用连接到手机的唯一设备来管理USB连接的整个班级,它没有以任何方式完成,但我希望在我继续前进之前让阅读部分工作.
public class UsbCommunicationManager
{
static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
UsbManager usbManager;
UsbDevice usbDevice;
UsbInterface intf = null;
UsbEndpoint input, output;
UsbDeviceConnection connection;
PendingIntent permissionIntent;
Context context;
byte[] readBytes = new byte[64];
public UsbCommunicationManager(Context context)
{
this.context = context;
usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
// ask permission from user to use the usb device
permissionIntent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_USB_PERMISSION), 0);
IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
context.registerReceiver(usbReceiver, filter);
}
public void connect()
{
// …Run Code Online (Sandbox Code Playgroud) 我在使用Google Play商店时遇到问题,该商店坚持认为我的应用程序受0设备支持.我已经尝试过在SO和其他地方找到的所有解决方案.这不是关于apk不活动,它被激活是默认的,我甚至尝试停用并重新激活它.
我已经在我的Galaxy Nexus上测试了它并且效果很好,没有理由它与每个Android设备都不兼容......
这是我的清单文件:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature
android:name="android.hardware.accelerometer"
android:required="true" />
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false" />
Run Code Online (Sandbox Code Playgroud)
完整的项目源可以在这里找到:https://github.com/Nurgak/Android-Bluetooth-Remote-Control,因为它是开源的.
这就是我在Google Play上看到的内容.

这5个特征是
android.hardware.ACCELEROMETER
android.hardware.BLUETOOTH
android.hardware.CAMERA
android.hardware.camera.AUTOFOCUS
android.hardware.TOUCHSCREEN
Run Code Online (Sandbox Code Playgroud)
和4个权限
android.permission.BLUETOOTH
android.permission.BLUETOOTH_ADMIN
android.permission.CAMERA
android.permission.INTERNET
Run Code Online (Sandbox Code Playgroud)
我也非常对他们的支持感到震惊,我只是得到了通用的"嘿,你看过我们的常见问题吗?" 回复电子邮件.
我正在寻找一种方法来检测蓝牙设备发生后立即断开(最多1秒),通常是在"设备太远"的情况下.目前我可以BroadcastReceiver通过获取a 来检测它BluetoothDevice.ACTION_ACL_DISCONNECTED,但是需要大约20秒才能触发......自己设置超时会更快,但我认为应该有一种方法可以在较低级别执行此操作.
我正在制作一个虚拟现实应用程序,摄像机应该检测到面部,找到它们并在摄像机预览中显示它们的位置.
我知道有3种方法可以做到,我想尽可能快地使用GLSurfaceView(根据这篇文章),但是目前我正在尝试使用相机用于预览的相同 SurfaceView.我的回调onFaceDetection就是这样:
public class MyActivity extends Activity implements SurfaceHolder.Callback, Camera.FaceDetectionListener {
Camera camera;
SurfaceView svPreview;
SurfaceHolder previewHolder;
TextView tvInfo;
Paint red;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
svPreview = (SurfaceView) findViewById(R.id.svPreview);
tvInfo = (TextView) findViewById(R.id.tvInfo);
red = new Paint();
red.setStyle(Paint.Style.STROKE);
red.setStrokeWidth(3);
previewHolder = svPreview.getHolder();
previewHolder.addCallback(this);
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder arg0) {
camera = Camera.open();
try {
camera.setDisplayOrientation(90);
camera.setFaceDetectionListener(this);
camera.setPreviewDisplay(previewHolder);
}
catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceChanged(SurfaceHolder holder, …Run Code Online (Sandbox Code Playgroud) 我正在制作一个简单的体素引擎(想想Minecraft),目前我正在摆脱被遮挡的面孔以获得一些宝贵的fps.我在OpenGL中没有经过很多实验,也不太了解glColorMask魔法是如何工作的.
这就是我所拥有的:
// new and shiny
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// this one goes without saying
glEnable(GL_DEPTH_TEST);
// I want to see my code working, so fill the mask
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
// fill the z-buffer, or whatever
glDepthFunc(GL_LESS);
glColorMask(0,0,0,0);
glDepthMask(GL_TRUE);
// do a first draw pass
world_display();
// now only show lines, so I can see the occluded lines do not display
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
// I guess the error is somewhere here
glDepthFunc(GL_LEQUAL);
glColorMask(1,1,1,1);
glDepthMask(GL_FALSE);
// do a second draw pass …Run Code Online (Sandbox Code Playgroud) 我正在使用C++和OpenGL(àlaMinecraft)制作一个体素引擎,并且使用ATI X1600无法在我的3GHz上获得不错的fps ...我完全没有想法.
当我在屏幕上有大约12000个立方体时,它会降到20fps以下 - 可悲.
到目前为止,我的优化是:视锥体剔除,背面剔除(通过OpenGL的glEnable(GL_CULL_FACE)),引擎只绘制可见面(当然除了剔除面)并且它们在八叉树中.
我试过VBO,我不喜欢它们,它们不会显着增加fps.
Minecraft的引擎如何如此之快......我在10000立方体中挣扎,而Minecraft可以在更高的fps下轻松绘制.
有任何想法吗?
我正在制作一个Minecraft克隆作为我的第一个OpenGL项目,我被困在盒子选择部分.选择可靠的盒子的最佳方法是什么?
我一直在研究一些AABB算法,但是没有一个能够很好地解释它们到底做了什么(尤其是超级调整的算法)并且我不想使用我不理解的东西.
由于世界是由立方体组成的,我使用八叉树来消除光线投射计算的一些压力,基本上我唯一需要的是这个函数:
float cube_intersect(Vector ray, Vector origin, Vector min, Vector max)
{
//???
}
Run Code Online (Sandbox Code Playgroud)
光线和原点很容易获得
Vector ray, origin, point_far;
double mx, my, mz;
gluUnProject(viewport[2]/2, viewport[3]/2, 1.0, (double*)modelview, (double*)projection, viewport, &mx, &my, &mz);
point_far = Vector(mx, my, mz);
gluUnProject(viewport[2]/2, viewport[3]/2, 0.0, (double*)modelview, (double*)projection, viewport, &mx, &my, &mz);
origin = Vector(mx, my, mz);
ray = point_far-origin;
Run Code Online (Sandbox Code Playgroud)
min和max是立方体的对角.
考虑到我必须检查的立方体数量,即使是八叉树,我也不确定这是否是正确的方法.
我也试过gluProject,它有效,但非常不可靠,并没有给我选择的立方体面.
编辑
所以这就是我所做的:用光线计算太空中的位置:
float t = 0;
for(int i=0; i<10; i++)
{
Vector p = ray*t+origin;
while(visible octree)
{
if(p inside …Run Code Online (Sandbox Code Playgroud) 我正在从头开始编写一个简单的JavaScript 3D引擎,使用Canvas和像原始文件一样的盒子(例如Minecraft).我正在实施尽可能多的优化,到目前为止,我已经背面剔除和隐藏面部遮挡,但我无法弄清楚如何做截头剔除最佳方式.
我已经尝试过2D剔除,但这有一个我无法解决的具体问题:如果一个4点平面的单个顶点出现在相机后面,它仍然被绘制但完全失真(我认为x和y坐标是相反的) - 看图像.
我开始认为如果不使用更复杂的数学和渲染序列,这还没有真正的解决方案.


我试图限制2D屏幕内的顶点x和y坐标,只要4个顶点中至少有一个仍在屏幕内(见下文),但这完全扭曲了方形面(虽然我想我可以去更多花哨的数学和其他三角形).

我有一些OpenGL的经验,它完全不同的东西,所以这甚至不是一个问题.
我有没有机会在不拔头发的情况下修理它?
最终的解决方案是在进行2D投影然后进行屏幕剪裁之前,在3D中针对近剪裁平面测试8个顶点中的每一个.
这是第二个剪切步骤,第一个是使用半径的边界球来测试框是否完全位于剪切平面的后面sqrt(3/2)*boxSideLength.
额外的三角形(在这种情况下实际上是点)太复杂和数学密集,这个解决方案并不完美但非常漂亮.
我正在为我的HTML5游戏制作导出功能,我目前的保存方法是游戏数据的粗略序列化,然后:
// this is Javascript
var gameData = "abc"; // this is actually a HUGE string of over 2MB
try
{
document.location = "data:text/octet-stream,"+encodeURIComponent(JSON.stringify(gameData));
}
catch(e)
{
console.log(e);
}
Run Code Online (Sandbox Code Playgroud)
From:使用HTML5/Javascript生成并保存文件
我不介意我不能将它用于大字符串,但我希望它能生成警告,通知此方法不起作用,不幸的是Chrome(16)崩溃而没有捕获该异常.
有没有更好的方法来实现这种出口,对我来说重要的是让它在本地工作.FileAPI将是一个更好的解决方案,但不能在本地工作.
我正在编写一个应用程序,用我的Android手机通过蓝牙控制我的机器人,一切顺利,数据得到回应和验证,但我在协议上遇到了一些麻烦,特别是我希望机器人的轮子在发送时转动一个命令,如s,10,100或s,-30,-10...(以百分比表示的值).
我的问题是,当我想在我的Arduino的解析我的车轮转速命令我必须解析最多4分开bytes来int,例如s,-100,-100使我的机器人全速倒退,但我要如何解析这个,所以我可以打电话setSpeed(left, right);与left和right平等到-100?
我知道我可以单独分析每个字节并将它们放在一起得到一个整数,但它不是很优雅,而且可能已经有了更好的解决方案,不幸的是我还没有找到它.
这是我用于解析命令的Arduino函数:
void parseCommand(char* command, int* returnValues)
{
// parsing state machine
byte i = 2, j = 0, sign = 0;
int temp = 0;
while(*(command + i) != '\0')
{
switch(*(command + i))
{
case ',':
returnValues[j++] = sign?-temp:temp;
sign = 0;
temp = 0;
break;
case '-':
sign = 1;
break;
default:
temp = temp …Run Code Online (Sandbox Code Playgroud) 我想使用OpenCV检测一个对象,它与场景中的其他元素明显不同,因为它是灰色的.这很好,因为我可以用R == G == B进行测试,并且它允许独立于亮度,但是逐像素地进行测试很慢.
有没有更快的方法来检测灰色的东西?也许有一个OpenCV方法可以进行R == G == B测试... cv2.inRange颜色阈值处理,它不是我想要的.
我为此拉了我的头发,这个查询出了什么问题:
SELECT COUNT(id), *
FROM location
WHERE country = '$country'
AND LCASE(namenodiacritics) LIKE LCASE('%$locname%')
ORDER BY name ASC
Run Code Online (Sandbox Code Playgroud)
我是否允许在单个查询中使用COUNT(id)和*?
我一直收到这个错误:
您的SQL语法有错误; 查看与您的MySQL服务器版本相对应的手册,以便在'*FROM位置附近使用正确的语法WHERE country ='AQ'和LCASE(namenodiacritics)LIKE LCASE('%%''在第1行
奇怪的是它适用于"SELECT COUNT(id)FROM ..."以及"SELECT*FROM ...".
我正在尝试使用我用相机拍摄的样本创建一个xml文件.这是一个测试运行,我把相机对着窗户,让它每隔30秒拍一张照片,然后经过一段时间.我现在有大约200张照片(仅用于小型测试),但我无法再进一步了.
我做了一个选择工具来挑选图片上的汽车(边界框),如果没有,则将图片标记为底片.以下是应用程序的两个示例:

然后,应用程序将标记的对象保存在positive.txt文件中,如下所示,跳过未标记的图片或标记为否定的图片:
/samples/img_0000.jpg 1 74 66 34 30
/samples/img_0001.jpg 2 78 69 31 25 218 129 61 38
/samples/img_0003.jpg 1 83 72 21 21
/samples/img_0005.jpg 1 76 65 19 17
/samples/img_0006.jpg 1 127 112 37 24
/samples/img_0007.jpg 2 83 72 22 21 127 112 36 22
...
Run Code Online (Sandbox Code Playgroud)
负片图片只是保存到negative.txt文件中,如下所示:
/samples/img_0002.jpg
/samples/img_0004.jpg
/samples/img_0024.jpg
/samples/img_0026.jpg
...
Run Code Online (Sandbox Code Playgroud)
最后我尝试运行haar训练算法/usr/bin/opencv_haartraining -data samples -vec positive.txt -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode …