mirror of https://github.com/EspoTek/Labrador.git
AVRdebug() added; control transfers can cope with IN buffers
This commit is contained in:
parent
ada5e6c0e6
commit
22224bfd6f
|
@ -307,6 +307,8 @@ void genericUsbDriver::setGain(double newGain){
|
||||||
|
|
||||||
void genericUsbDriver::avrDebug(void){
|
void genericUsbDriver::avrDebug(void){
|
||||||
usbSendControl(0xc0, 0xa0, 0, 0, sizeof(unified_debug), NULL);
|
usbSendControl(0xc0, 0xa0, 0, 0, sizeof(unified_debug), NULL);
|
||||||
|
|
||||||
|
qDebug() << "unified debug is of size" << sizeof(unified_debug);
|
||||||
/*
|
/*
|
||||||
#ifndef PLATFORM_ANDROID
|
#ifndef PLATFORM_ANDROID
|
||||||
unified_debug *udsPtr = (unified_debug *) inBuffer;
|
unified_debug *udsPtr = (unified_debug *) inBuffer;
|
||||||
|
|
|
@ -37,13 +37,13 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
|
||||||
uint16_t Value;
|
uint16_t Value;
|
||||||
uint16_t Index;
|
uint16_t Index;
|
||||||
uint16_t Length;
|
uint16_t Length;
|
||||||
unsigned char *LDATA;
|
|
||||||
|
|
||||||
//Interals
|
//Interals
|
||||||
unsigned char *controlBuffer;
|
unsigned char *controlBuffer;
|
||||||
|
|
||||||
//To export:
|
//To export:
|
||||||
unsigned char inBuffer[INPUT_BUFFER_SIZE];
|
mwSize dims[2] = {1,INPUT_BUFFER_SIZE};
|
||||||
|
unsigned char *out_ptr;
|
||||||
|
|
||||||
//Parse Inputs
|
//Parse Inputs
|
||||||
HANDLE_CHAR_RAW_IN = mxArrayToString(prhs[0]);
|
HANDLE_CHAR_RAW_IN = mxArrayToString(prhs[0]);
|
||||||
|
@ -67,14 +67,34 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
|
||||||
LENGTH_RAW_IN = mxArrayToString(prhs[6]);
|
LENGTH_RAW_IN = mxArrayToString(prhs[6]);
|
||||||
sscanf(LENGTH_RAW_IN, "%4x", &Length);
|
sscanf(LENGTH_RAW_IN, "%4x", &Length);
|
||||||
|
|
||||||
controlBuffer = mxGetData(prhs[7]);
|
//Allocate buffer memory if it's an IN transaction. Set it to an input pointer if it's an OUT.
|
||||||
|
if(Request & 0x80){
|
||||||
|
controlBuffer = mxMalloc(INPUT_BUFFER_SIZE);
|
||||||
|
} else controlBuffer = mxGetData(prhs[7]);
|
||||||
|
|
||||||
|
|
||||||
//Send the packet
|
//Send the packet
|
||||||
int error;
|
int error;
|
||||||
|
mexPrintf("Length = %hu\n", Length);
|
||||||
error = libusb_control_transfer(handle, RequestType, Request, Value, Index, controlBuffer, Length, 4000);
|
error = libusb_control_transfer(handle, RequestType, Request, Value, Index, controlBuffer, Length, 4000);
|
||||||
if(error<0){
|
if(error<0){
|
||||||
mexPrintf("Error number: %d\n", error);
|
mexPrintf("Error number: %d\n", error);
|
||||||
mexPrintf("libusb_control_transfer FAILED with error %s", libusb_error_name(error));
|
mexPrintf("libusb_control_transfer FAILED with error %s\n", libusb_error_name(error));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plhs[0] = mxCreateNumericArray(2, dims, mxUINT8_CLASS, mxREAL);
|
||||||
|
|
||||||
|
//Setup function output.
|
||||||
|
int n;
|
||||||
|
out_ptr = mxMalloc(INPUT_BUFFER_SIZE);
|
||||||
|
|
||||||
|
//Copy data , even if it's not an IN transaction.
|
||||||
|
for (n=0;n<INPUT_BUFFER_SIZE;n++){
|
||||||
|
out_ptr[n] = controlBuffer[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
plhs[0] = mxCreateNumericArray(2, dims, mxUINT8_CLASS, mxREAL);
|
||||||
|
mxSetData(plhs[0], out_ptr);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -1,6 +1,8 @@
|
||||||
clear all
|
clear all
|
||||||
clc
|
clc
|
||||||
|
|
||||||
|
#https://docs.google.com/document/d/1ZDO1RTarQTNB6Pdfi_T4YukL51oYan_kk_teb1cu6-o/edit?usp=sharing
|
||||||
|
|
||||||
__addpaths;
|
__addpaths;
|
||||||
__load_globals;
|
__load_globals;
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
@ -13,6 +15,10 @@ if(isequal(usb_handle, "0000000000000000"))
|
||||||
return;
|
return;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
fprintf("\nSending AVR Debug Command...\n");
|
||||||
|
fflush(stdout);
|
||||||
|
labrador_send_debug_command(usb_handle, usb_context);
|
||||||
|
|
||||||
fprintf("\nSetting Device Mode to 2 (Scope CH1 and CH2) with gain 8...\n");
|
fprintf("\nSetting Device Mode to 2 (Scope CH1 and CH2) with gain 8...\n");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
labrador_set_device_mode(usb_handle, usb_context, 2, 8);
|
labrador_set_device_mode(usb_handle, usb_context, 2, 8);
|
||||||
|
@ -36,4 +42,3 @@ labrador_set_psu_voltage(usb_handle, usb_context, 8.8);
|
||||||
fprintf("\nExiting Libusb...\n");
|
fprintf("\nExiting Libusb...\n");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
mex_usb_exit(usb_handle, usb_context);
|
mex_usb_exit(usb_handle, usb_context);
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
function [] = labrador_send_debug_command(usb_handle, usb_context);
|
||||||
|
|
||||||
|
SIZE_OF_UNIFIED_DEBUG = 27;
|
||||||
|
|
||||||
|
USB_Control_IN_data = mex_usb_send_control(usb_handle, usb_context, 'c0', 'a0', '0', '0', dec2hex(SIZE_OF_UNIFIED_DEBUG), []);
|
||||||
|
|
||||||
|
USB_Control_IN_data
|
||||||
|
|
||||||
|
debugtext = char(USB_Control_IN_data(1:9)) ;
|
||||||
|
trfcnt0 = uint16(USB_Control_IN_data(10)) + 255 * uint16(USB_Control_IN_data(11));
|
||||||
|
trfcnt1 = uint16(USB_Control_IN_data(12)) + 255 * uint16(USB_Control_IN_data(13));
|
||||||
|
medianTrfcnt = uint16(USB_Control_IN_data(14)) + 255 * uint16(USB_Control_IN_data(15));
|
||||||
|
outOfRange = uint16(USB_Control_IN_data(16)) + 255 * uint16(USB_Control_IN_data(17));
|
||||||
|
counter = uint16(USB_Control_IN_data(18)) + 255 * uint16(USB_Control_IN_data(19));
|
||||||
|
dma_ch0_cnt = uint16(USB_Control_IN_data(20)) + 255 * uint16(USB_Control_IN_data(21));
|
||||||
|
dma_ch1_cnt = uint16(USB_Control_IN_data(22)) + 255 * uint16(USB_Control_IN_data(23));
|
||||||
|
|
||||||
|
fprintf("debugtext = %s\ntrfcnt0 = %d\ntrfcnt1 = %d\nmedianTrfcnt = %d\noutOfRange = %d\ncounter = %d\ndma_ch0_cnt = %d\ndma_ch1_cnt = %d\n",debugtext, trfcnt0, trfcnt1, medianTrfcnt, outOfRange, counter, dma_ch0_cnt, dma_ch1_cnt);
|
Binary file not shown.
Loading…
Reference in New Issue