// HDX reads data in Half Duplex mode // first we energise the TAG for long enough that it charges up // then we use sniffer to read response // each bit is 16 ticks, a 1 is 124.2 KHz and a 0 is 134.2 KHz // activation frequency is 134.2 KHz (745 FCs)) BOOL hdx_get_uid(BYTE *response) { BYTE i; BYTE tmp[HDX_DATABITS]; // this is a work in progress, so until reading produces any data, return empty return FALSE; // energise tag & wait for wakeup period InitHWReaderClock(OC_TOGGLE_PULSE, 745 / 2L, 745, RWD_STATE_ACTIVE); Delay_us((RFIDlerConfig.FrameClock * RFIDlerConfig.RWD_Wake_Period) / 100); // switch off clock and switch to sniffer mode detect_init(); // read to temporary array for speed for(i= 0 ; i < HDX_DATABITS ; ++i) tmp[i]= read_external_clock_burst(16) / 1000L; // convert to binary based on freq +- 3 for(i= 0 ; i < HDX_DATABITS ; ++i) { if (tmp[i] >= 122 && tmp[i] <= 128) tmp[i]= 0x01; else if (tmp[i] >= 129 && tmp[i] <= 135) tmp[i]= 0x00; else return FALSE; } binarraytohex(response, tmp, HDX_DATABITS); return TRUE; }
void stride_init(void) { #ifdef APE detect_init(); #else decoder_init(); #endif }
void decoder_init(void) { detect_init(); }
static int camera_detect_probe(struct platform_device *pdev) { int ret = 0; const char *detect_status = NULL; struct device_node *fdt_node; DBG_INFO(""); fdt_node = of_find_compatible_node(NULL, NULL, CAMERA_DETECT_NAME); if (NULL == fdt_node) { DBG_ERR("err: no ["CAMERA_DETECT_NAME"] in dts"); return -1; } ret = of_property_read_string(fdt_node, "status", &detect_status); if (ret == 0 && strcmp(detect_status, "okay") != 0) { printk(KERN_DEBUG"%s camera detect disabled by DTS in %s\n",__func__,fdt_node->full_name); return -ENODEV; } ret = detect_init(); if (ret) { DBG_ERR("module detect init error."); goto exit; } rear_kobj = kobject_create_and_add(CAMERA_REAR_NAME, NULL); if (rear_kobj == NULL) { DBG_ERR("kobject_create_and_add failed."); ret = -ENOMEM; goto kobject_create_err; } front_kobj = kobject_create_and_add(CAMERA_FRONT_NAME, NULL); if (front_kobj == NULL) { DBG_ERR("kobject_create_and_add failed."); ret = -ENOMEM; goto kobject_create_err; } ret = sysfs_create_file(front_kobj, &dev_attr_front_name.attr); if (ret < 0){ DBG_ERR("sysfs_create_file front_name failed."); goto sysfs_create_err; } ret = sysfs_create_file(front_kobj, &dev_attr_front_offset.attr); if (ret < 0){ DBG_ERR("sysfs_create_file front_offset failed."); goto sysfs_create_err; } ret = sysfs_create_file(rear_kobj, &dev_attr_rear_name.attr); if (ret < 0){ DBG_ERR("sysfs_create_file rear_name failed."); goto sysfs_create_err; } ret = sysfs_create_file(rear_kobj, &dev_attr_rear_offset.attr); if (ret < 0){ DBG_ERR("sysfs_create_file rear_offset failed."); goto sysfs_create_err; } ret = sysfs_create_file(rear_kobj, &dev_attr_status.attr); if (ret < 0){ DBG_ERR("sysfs_create_file status failed."); goto sysfs_create_err; } camera_detect_status = 0; INIT_DELAYED_WORK(&g_work, detect_work); schedule_delayed_work(&g_work, DELAY_INTERVAL); return 0; sysfs_create_err: kobject_del(rear_kobj); kobject_del(front_kobj); kobject_create_err: exit: detect_deinit(); return ret; }