mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
Revert "(CR): ctwo: enable TOF phio tool"
This reverts commit 840ef5295c0b5c6edca8cbeaaa30793c797f64bb. This change is breaking several builds on Android T and U: Example: https://jenkins.mot.com/job/T2SR33_rhode-g_userdebug_mr_r-qsm2020_test-keys_continuous/ https://jenkins.mot.com/job/UTGN34_genevn-g_userdebug_ms_r-q8450_test-keys_continuous/ Error message: In file included from build/make/core/binary.mk:9: build/make/core/base_rules.mk:335: error: vendor/st/laser_daemon/vl53l1_test: MODULE.TARGET.EXECUTABLES.vl53l1_reg already defined by motorola/kernel/modules/drivers/input/misc/vl53l1_test. 06:28:17 ckati failed with: exit status 1 Change-Id: I5a253adf9c1be3d6a31e4d597b9a8ea269b2ec3f Reviewed-on: https://gerrit.mot.com/2660663 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Reviewed-by: Gilberto Gambugge Neto <gambugge@motorola.com> Submit-Approved: Gilberto Gambugge Neto <gambugge@motorola.com> Tested-by: Gilberto Gambugge Neto <gambugge@motorola.com>
This commit is contained in:
parent
ae81f70eca
commit
eccd8995b7
6 changed files with 1 additions and 7039 deletions
|
|
@ -2,7 +2,7 @@
|
|||
# Kbuild for the vl53L1 drivers.
|
||||
#
|
||||
|
||||
EXTRA_CFLAGS += -Wall -Wno-unused-but-set-variable
|
||||
EXTRA_CFLAGS += -Wall
|
||||
EXTRA_CFLAGS += -I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/include
|
||||
EXTRA_CFLAGS += -I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/drivers/input/misc/vl53L1_14_1_2/inc \
|
||||
-I$(ANDROID_BUILD_TOP)/motorola/kernel/modules/drivers/input/misc/vl53L1_14_1_2/ipp \
|
||||
|
|
|
|||
|
|
@ -1,50 +0,0 @@
|
|||
LOCAL_PATH:= $(call my-dir)
|
||||
|
||||
ifneq ($(findstring stmvl53l1.ko,$(BOARD_VENDOR_KERNEL_MODULES)),)
|
||||
VL53L1_BARE_DRV_INC += motorola/kernel/modules/drivers/input/misc/vl53L1
|
||||
VL53L1_BARE_DRV_INC += motorola/kernel/modules/drivers/input/misc/vl53L1/inc
|
||||
else ifneq ($(findstring stmvl53l3.ko,$(BOARD_VENDOR_KERNEL_MODULES)),)
|
||||
VL53L1_BARE_DRV_INC += motorola/kernel/modules/drivers/input/misc/vl53L1_14_1_2
|
||||
VL53L1_BARE_DRV_INC += motorola/kernel/modules/drivers/input/misc/vl53L1_14_1_2/inc
|
||||
else
|
||||
VL53L1_BARE_DRV_INC += kernel/msm-4.14/drivers/input/misc/vl53L1
|
||||
VL53L1_BARE_DRV_INC += kernel/msm-4.14/drivers/input/misc/vl53L1/inc
|
||||
endif
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := vl53l1_reg
|
||||
LOCAL_PROPRIETARY_MODULE := true
|
||||
LOCAL_C_INCLUDES += $(LOCAL_PATH)
|
||||
LOCAL_C_INCLUDES += $(VL53L1_BARE_DRV_INC)
|
||||
LOCAL_SRC_FILES := vl53l1_reg.c
|
||||
LOCAL_SHARED_LIBRARIES:=libc
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := vl53l1_iotest
|
||||
LOCAL_PROPRIETARY_MODULE := true
|
||||
LOCAL_C_INCLUDES += $(LOCAL_PATH)
|
||||
LOCAL_C_INCLUDES += $(VL53L1_BARE_DRV_INC)
|
||||
LOCAL_SRC_FILES := vl53l1_iotest.c
|
||||
LOCAL_SHARED_LIBRARIES:=libc
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
||||
ifneq ($(findstring stmvl53l3.ko,$(BOARD_VENDOR_KERNEL_MODULES)),)
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := phio
|
||||
LOCAL_PROPRIETARY_MODULE := true
|
||||
LOCAL_C_INCLUDES += $(LOCAL_PATH)
|
||||
LOCAL_C_INCLUDES += $(VL53L1_BARE_DRV_INC)
|
||||
LOCAL_SRC_FILES := phio_14_1_2.c
|
||||
LOCAL_SHARED_LIBRARIES := libc
|
||||
include $(BUILD_EXECUTABLE)
|
||||
else
|
||||
include $(CLEAR_VARS)
|
||||
LOCAL_MODULE := phio
|
||||
LOCAL_PROPRIETARY_MODULE := true
|
||||
LOCAL_C_INCLUDES += $(LOCAL_PATH)
|
||||
LOCAL_C_INCLUDES += $(VL53L1_BARE_DRV_INC)
|
||||
LOCAL_SRC_FILES := phio.c
|
||||
LOCAL_SHARED_LIBRARIES := libc
|
||||
include $(BUILD_EXECUTABLE)
|
||||
endif
|
||||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,278 +0,0 @@
|
|||
/**
|
||||
* IOCTL test
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "stmvl53l1_if.h"
|
||||
#include "stmvl53l1_internal_if.h"
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
|
||||
|
||||
|
||||
|
||||
#define timer_start(t) clock_gettime(CLOCK_MONOTONIC, t)
|
||||
|
||||
long timer_elapsed_us(struct timespec *pt){
|
||||
struct timespec now;
|
||||
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||
long delta = (now.tv_sec-pt->tv_sec) + (now.tv_nsec-pt->tv_nsec)/1000;
|
||||
if( now.tv_nsec-pt->tv_nsec < 0){
|
||||
delta+=1000000;
|
||||
}
|
||||
return delta;
|
||||
}
|
||||
|
||||
int stmvl53l1_reg_wr(int fd, int index, int len , void *data){
|
||||
struct stmvl53l1_register reg;
|
||||
int rc;
|
||||
reg.is_read = 0;
|
||||
reg.index = index;
|
||||
reg.cnt= len;
|
||||
if( len > 0)
|
||||
memcpy(reg.data.bytes, data, len);
|
||||
rc= ioctl(fd, VL53L1_IOCTL_REGISTER,®);
|
||||
if( rc == 0 ){
|
||||
return reg.status;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
int stmvl53l1_reg_rd(int fd, int index, int len , void *data){
|
||||
struct stmvl53l1_register reg;
|
||||
int rc;
|
||||
reg.is_read = 1;
|
||||
reg.index = index;
|
||||
reg.cnt = len;
|
||||
rc= ioctl(fd, VL53L1_IOCTL_REGISTER,®);
|
||||
if( rc == 0 ){
|
||||
if( len > 0 && len < 256 )
|
||||
memcpy(data, reg.data.bytes, len);
|
||||
return reg.status;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int test_check=0;
|
||||
int test_n_err=0;
|
||||
#define tfail( cond, msg, ...)\
|
||||
do{\
|
||||
test_check++;\
|
||||
if( cond ) {\
|
||||
printf("ERR %s line %d\t" msg "\n", __func__, __LINE__, ##__VA_ARGS__);\
|
||||
test_n_err++;\
|
||||
}\
|
||||
}while(0)
|
||||
|
||||
#define t_status(msg, ...)\
|
||||
do{\
|
||||
printf("STAT %s\t %d err out of %d " msg "\n", __func__, test_n_err, test_check, ##__VA_ARGS__ );\
|
||||
}while(0)
|
||||
|
||||
/** ewokplus cut 1.0 */
|
||||
const int random_wr_index = 0x16 ;
|
||||
const int random_sz= 0x8;
|
||||
|
||||
|
||||
|
||||
void reg_test_perf(int fd){
|
||||
int sz;
|
||||
// uint8_t wr_data[random_sz];
|
||||
uint8_t rd_data[256];
|
||||
int rc;
|
||||
// int data_ok;
|
||||
int n,i;
|
||||
struct timespec tstart;
|
||||
long v_min=0xFFFFFFFF, v_max=0;
|
||||
double sum;
|
||||
|
||||
#define N_LOOP_MAX 4096
|
||||
long Time[N_LOOP_MAX];
|
||||
int n_loops=N_LOOP_MAX;
|
||||
for( sz=1; sz<256; sz*=2){
|
||||
for( n=0; n<n_loops; n++ ){
|
||||
timer_start(&tstart);
|
||||
rc = stmvl53l1_reg_rd(fd, 0x0, sz, rd_data);
|
||||
if( rc ){
|
||||
break;
|
||||
}
|
||||
Time[n]=timer_elapsed_us(&tstart);
|
||||
}
|
||||
if( rc ==0 ){
|
||||
printf("size %d timing result\n", sz);
|
||||
sum=0;
|
||||
v_min=0x7FFFFFFF;
|
||||
v_max=0;
|
||||
|
||||
for( i=0; i<n_loops; i++){
|
||||
sum+=Time[i];
|
||||
v_max = Time[i] > v_max ? Time[i]:v_max;
|
||||
v_min = Time[i] < v_min ? Time[i]:v_min;
|
||||
printf("%ld\n", Time[i]);
|
||||
}
|
||||
printf("sz %d min %d max %d avg %.0lf all timing in us\n", sz,
|
||||
(int)v_min , (int)v_max, (double)sum/n_loops);
|
||||
}
|
||||
|
||||
}
|
||||
//no_off:
|
||||
t_status("");
|
||||
}
|
||||
|
||||
void reg_test_random(int fd){
|
||||
int sz;
|
||||
uint8_t wr_data[random_sz];
|
||||
uint8_t rd_data[random_sz];
|
||||
int rc;
|
||||
int data_ok;
|
||||
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index, 0, rd_data);
|
||||
tfail( rc == 0 ," wr 0 length must fail");
|
||||
|
||||
rc = stmvl53l1_reg_rd(fd, random_wr_index, 0, rd_data);
|
||||
tfail( rc == 0 ," rd 0 length must fail");
|
||||
|
||||
memset(wr_data, 0xFF, sizeof(wr_data));
|
||||
for( sz = 1 ; sz < random_sz; sz++ ){
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index, sz, wr_data);
|
||||
tfail(rc !=0 , "wr sz %d", sz );
|
||||
if( rc )
|
||||
continue;
|
||||
|
||||
rc = stmvl53l1_reg_rd(fd, random_wr_index, sz, rd_data);
|
||||
tfail( rc != 0 , "rd sz %d", sz );
|
||||
if( rc )
|
||||
continue;
|
||||
|
||||
data_ok =memcmp(wr_data, rd_data, sz);
|
||||
tfail(data_ok!=0, "FF sz %d data mismacth", sz );
|
||||
}
|
||||
for( sz=0; sz< (int)sizeof(wr_data); sz++)
|
||||
wr_data[sz] =sz;
|
||||
|
||||
for( sz = 1 ; sz < random_sz; sz++ ){
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index, sz, wr_data);
|
||||
tfail(rc !=0 , "wr sz %d", sz );
|
||||
if( rc )
|
||||
continue;
|
||||
|
||||
rc = stmvl53l1_reg_rd(fd, random_wr_index, sz, rd_data);
|
||||
tfail(rc !=0 , "wr sz %d", sz );
|
||||
if( rc )
|
||||
continue;
|
||||
|
||||
data_ok =memcmp(wr_data, rd_data, sz);
|
||||
tfail(data_ok!=0, "addr test sz %d data mismacth", sz );
|
||||
}
|
||||
|
||||
// offset test
|
||||
memset(wr_data, 0, sizeof(wr_data));
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index, sz, wr_data);
|
||||
tfail(rc!=0, "addr test sz %d data mismacth", sz );
|
||||
goto no_off;
|
||||
int offset,i;
|
||||
for( sz=1; sz <= 4; sz*=2){
|
||||
for( offset = 0 ; offset <= random_sz/2; offset++ ){
|
||||
for( i=0; i<sz; sz++)
|
||||
wr_data[offset+i]=offset+i+sz;
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index+offset, sz, &wr_data[offset]);
|
||||
tfail(rc !=0 , "off wr%d sz %d", offset , sz );
|
||||
if( rc )
|
||||
break;
|
||||
// read back full chunk
|
||||
rc = stmvl53l1_reg_rd(fd, random_wr_index, sizeof(wr_data), rd_data);
|
||||
tfail(rc !=0 , "off wr %d sz %d", offset, sz );
|
||||
if( rc )
|
||||
break;
|
||||
|
||||
data_ok = memcmp(wr_data, rd_data, sizeof(wr_data));
|
||||
tfail(data_ok!=0, "off %d z %d data mismacth", offset, sz);
|
||||
if( data_ok )
|
||||
break;
|
||||
}
|
||||
}
|
||||
no_off:
|
||||
t_status("");
|
||||
}
|
||||
|
||||
|
||||
struct test_t {
|
||||
int mask_bit_no;
|
||||
void(*f_test)(int);
|
||||
const char *name;
|
||||
};
|
||||
struct test_t tests[]={
|
||||
{
|
||||
.f_test = reg_test_random,
|
||||
.name = "reg_test_random"
|
||||
},
|
||||
|
||||
{
|
||||
.f_test = reg_test_perf,
|
||||
.name = "reg_test_perf"
|
||||
},
|
||||
};
|
||||
|
||||
static void help(void)
|
||||
{
|
||||
int i;
|
||||
fprintf(stderr, "Usage: vl53l1_iotest test_mask\n");
|
||||
fprintf(stderr, "testlist :\n");
|
||||
for( i=0; i<(int)ARRAY_SIZE(tests);i++){
|
||||
fprintf(stderr, "test #%d 0x%08X %s\n", i, 1<<i,
|
||||
tests[i].name);
|
||||
}
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int fd;
|
||||
// struct stmvl53l1_register reg;
|
||||
char *end;
|
||||
// int rc;
|
||||
int i;
|
||||
int test_mask;
|
||||
int n_run;
|
||||
|
||||
if (argc < 2) {
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fd = open("/dev/" VL53L1_MISC_DEV_NAME ,O_RDWR );
|
||||
if (fd <= 0) {
|
||||
fprintf(stderr,"Error open %s device: %s\n", VL53L1_MISC_DEV_NAME, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
test_mask = strtoul(argv[1], &end, 16);
|
||||
if (*end) {
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
for( i= 0, n_run=0 ; i < (int)ARRAY_SIZE(tests); i++){
|
||||
if( test_mask & (1<<i) ){
|
||||
n_run++;
|
||||
printf("test #%d %s ...", n_run, tests[i].name);
|
||||
tests[i].f_test(fd);
|
||||
}
|
||||
}
|
||||
|
||||
//done:
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1,277 +0,0 @@
|
|||
|
||||
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "stmvl53l1_if.h"
|
||||
#include "stmvl53l1_internal_if.h"
|
||||
|
||||
static int stmvl53l1_reg_wr(int fd, int index, int len , void *data){
|
||||
struct stmvl53l1_register reg;
|
||||
int rc;
|
||||
reg.is_read = 0;
|
||||
reg.index = index;
|
||||
reg.cnt= len;
|
||||
if( len > 0)
|
||||
memcpy(reg.data.bytes, data, len);
|
||||
rc= ioctl(fd, VL53L1_IOCTL_REGISTER,®);
|
||||
if( rc == 0 ){
|
||||
return reg.status;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
static int stmvl53l1_reg_rd(int fd, int index, int len , void *data){
|
||||
struct stmvl53l1_register reg;
|
||||
int rc;
|
||||
reg.is_read = 1;
|
||||
reg.index = index;
|
||||
reg.cnt = len;
|
||||
rc= ioctl(fd, VL53L1_IOCTL_REGISTER,®);
|
||||
if( rc == 0 ){
|
||||
if( len > 0 && len < 256 )
|
||||
memcpy(data, reg.data.bytes, len);
|
||||
return reg.status;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int test_check=0;
|
||||
int test_n_err=0;
|
||||
#define tfail( cond, msg, ...)\
|
||||
do{\
|
||||
test_check++;\
|
||||
if( cond ) {\
|
||||
printf("ERR %s line %d\t" msg "\n", __func__, __LINE__, ##__VA_ARGS__);\
|
||||
test_n_err++;\
|
||||
}\
|
||||
}while(0)
|
||||
|
||||
#define t_status(msg, ...)\
|
||||
do{\
|
||||
printf("STAT %s\t %d err out of %d " msg "\n", __func__, test_n_err, test_check, ##__VA_ARGS__ );\
|
||||
}while(0)
|
||||
|
||||
/** ewokplus cut 1.0 */
|
||||
const int random_wr_index = 0x16 ;
|
||||
const int random_sz= 0x8;
|
||||
void reg_test_random(int fd){
|
||||
int sz;
|
||||
uint8_t wr_data[random_sz];
|
||||
uint8_t rd_data[random_sz];
|
||||
int rc;
|
||||
int data_ok;
|
||||
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index, 0, rd_data);
|
||||
tfail( rc == 0 ," wr 0 length must fail");
|
||||
|
||||
rc = stmvl53l1_reg_rd(fd, random_wr_index, 0, rd_data);
|
||||
tfail( rc == 0 ," rd 0 length must fail");
|
||||
|
||||
memset(wr_data, 0xFF, sizeof(wr_data));
|
||||
for( sz = 1 ; sz < random_sz; sz++ ){
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index, sz, wr_data);
|
||||
tfail(rc !=0 , "wr sz %d", sz );
|
||||
if( rc )
|
||||
continue;
|
||||
|
||||
rc = stmvl53l1_reg_rd(fd, random_wr_index, sz, rd_data);
|
||||
tfail( rc != 0 , "rd sz %d", sz );
|
||||
if( rc )
|
||||
continue;
|
||||
|
||||
data_ok =memcmp(wr_data, rd_data, sz);
|
||||
tfail(data_ok!=0, "FF sz %d data mismacth", sz );
|
||||
}
|
||||
for( sz=0; sz< (int)sizeof(wr_data); sz++)
|
||||
wr_data[sz] =sz;
|
||||
|
||||
for( sz = 1 ; sz < random_sz; sz++ ){
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index, sz, wr_data);
|
||||
tfail(rc !=0 , "wr sz %d", sz );
|
||||
if( rc )
|
||||
continue;
|
||||
|
||||
rc = stmvl53l1_reg_rd(fd, random_wr_index, sz, rd_data);
|
||||
tfail(rc !=0 , "wr sz %d", sz );
|
||||
if( rc )
|
||||
continue;
|
||||
|
||||
data_ok =memcmp(wr_data, rd_data, sz);
|
||||
tfail(data_ok!=0, "addr test sz %d data mismacth", sz );
|
||||
}
|
||||
|
||||
// offset test
|
||||
memset(wr_data, 0, sizeof(wr_data));
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index, sz, wr_data);
|
||||
tfail(rc!=0, "addr test sz %d data mismacth", sz );
|
||||
goto no_off;
|
||||
int offset,i;
|
||||
for( sz=1; sz <= 4; sz*=2){
|
||||
for( offset = 0 ; offset <= random_sz/2; offset++ ){
|
||||
for( i=0; i<sz; sz++)
|
||||
wr_data[offset+i]=offset+i+sz;
|
||||
rc = stmvl53l1_reg_wr(fd, random_wr_index+offset, sz, &wr_data[offset]);
|
||||
tfail(rc !=0 , "off wr%d sz %d", offset , sz );
|
||||
if( rc )
|
||||
break;
|
||||
// read back full chunk
|
||||
rc = stmvl53l1_reg_rd(fd, random_wr_index, sizeof(wr_data), rd_data);
|
||||
tfail(rc !=0 , "off wr %d sz %d", offset, sz );
|
||||
if( rc )
|
||||
break;
|
||||
|
||||
data_ok = memcmp(wr_data, rd_data, sizeof(wr_data));
|
||||
tfail(data_ok!=0, "off %d z %d data mismacth", offset, sz);
|
||||
if( data_ok )
|
||||
break;
|
||||
}
|
||||
}
|
||||
no_off:
|
||||
t_status("");
|
||||
}
|
||||
|
||||
static void help(void)
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Usage: vl53l1_reg REG_ADDR REG_BYTES [REG_DATA]\n"
|
||||
" REG_ADDR is VL53L1 register address using 0xxx format: \n"
|
||||
" REG_BYTES is r number bytes(1, 2 or 4) \n"
|
||||
" REG_DATA is optional for writting data to requested REG_ADDR for 1 2 4 it can be single hax form or a list of byte hexa array\n"
|
||||
);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int fd;
|
||||
struct stmvl53l1_register reg;
|
||||
char *end;
|
||||
int rc;
|
||||
int i;
|
||||
|
||||
if (argc < 3) {
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fd = open("/dev/" VL53L1_MISC_DEV_NAME ,O_RDWR );
|
||||
if (fd <= 0) {
|
||||
fprintf(stderr,"Error open %s device: %s\n", VL53L1_MISC_DEV_NAME, strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
|
||||
reg.index = strtoul(argv[1], &end, 16);
|
||||
if (*end) {
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
|
||||
switch( reg.index ){
|
||||
case 0x10000 :
|
||||
// ioctl test
|
||||
reg_test_random(fd);
|
||||
break;
|
||||
case 0x10001 :
|
||||
break;
|
||||
}
|
||||
reg.cnt = strtoul(argv[2],&end,10);
|
||||
if (*end) {
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
if (argc == 3) {
|
||||
reg.is_read = 1;
|
||||
printf("To read VL53L1 register index:0x%x, bytes:%d\n", reg.index, reg.cnt);
|
||||
|
||||
rc= ioctl(fd, VL53L1_IOCTL_REGISTER,®);
|
||||
if( rc ){
|
||||
perror("fail");
|
||||
}
|
||||
else{
|
||||
if( reg.status !=0 ){
|
||||
//fail
|
||||
printf("device rd fail status %d\n", (int)reg.status);
|
||||
goto done;
|
||||
}
|
||||
switch( reg.cnt ){
|
||||
case 1:
|
||||
printf(" 0x%02x %d\n", (int)reg.data.b, (int)reg.data.b);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
printf(" 0x%04x %d\n", (int)reg.data.w, (int)reg.data.w);
|
||||
break;
|
||||
case 4:
|
||||
printf(" 0x%04x %d\n", (int)reg.data.dw, (int)reg.data.dw);
|
||||
break;
|
||||
default:
|
||||
for(i=0; i< (int)reg.cnt; i++ ){
|
||||
printf("0x%02x ", (int)reg.data.bytes[i]);
|
||||
if( i%16 == 15 && i != (int)reg.cnt-1){
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
}
|
||||
}
|
||||
} else {
|
||||
uint32_t dw;
|
||||
reg.data.dw=0;// reset to 0 so that all 1 2 3 4 size can use direct assuming same endianness
|
||||
if( argc == 4 ){
|
||||
// we have single data for 1 2 3 4 byte reg
|
||||
reg.is_read = 0;
|
||||
|
||||
dw = strtoul(argv[3],&end,16);
|
||||
if (*end) {
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
switch( reg.cnt ){
|
||||
case 1: reg.data.b = dw;break;
|
||||
case 2: reg.data.w = dw;break;
|
||||
case 3:
|
||||
case 4: reg.data.dw = dw;break;
|
||||
default:
|
||||
if( reg.cnt >4 )
|
||||
fprintf(stderr, "not enough data for given %d size\n",reg.cnt );
|
||||
}
|
||||
}
|
||||
else{
|
||||
uint32_t dw;
|
||||
if( argc != (int)reg.cnt + 3 ){
|
||||
fprintf(stderr, "not enough data byte for size\n");
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
for ( i=0; i<(int)reg.cnt; i++ ){
|
||||
rc= sscanf(argv[3+i], "%x", & dw);
|
||||
if( rc != 1 ){
|
||||
fprintf(stderr, "bad syntax data[%d] %s\n", i, argv[3+i]);
|
||||
help();
|
||||
exit(1);
|
||||
}
|
||||
reg.data.bytes[i]=dw;
|
||||
}
|
||||
}
|
||||
// if we have more args scan all of them
|
||||
printf("To write VL53L0 register index:0x%x, bytes:%d as value:0x%x ",
|
||||
reg.index, reg.cnt, reg.data.dw);
|
||||
rc= ioctl(fd, VL53L1_IOCTL_REGISTER,®);
|
||||
printf("status %d\n", reg.status);
|
||||
}
|
||||
|
||||
done:
|
||||
close(fd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in a new issue