static int mxt_proc_proximity_msg(struct plugin_ac *p,unsigned long pl_flag) { const struct mxt_config *dcfg = p->dcfg; struct device *dev = dcfg->dev; struct t72_observer *obs = p->obs; int ret; dev_info2(dev, "mxt t72 at mxt_proc_proximity_msg flag 0x%lx pl_flag 0x%lx\n",obs->flag,pl_flag); //proximity if (test_flag(IRAD_FLAG_PROXIMITY_DETECTED, &obs->flag)) { proximity_enable(true); ret = get_proximity_data(); if (ret != 0) { dev_info(dev, "mxt t72 proximity removed\n"); clear_flag(IRAD_FLAG_PROXIMITY_DETECTED, &obs->flag); p->set_and_clr_flag(p->dev, PL_STATUS_FLAG_PROXIMITY_REMOVED, 0); } proximity_enable(false); }else if (test_flag(/*T72_FLAG_CAL*/T72_FLAG_RESUME, &obs->flag)) {//only check when proximity not detected proximity_enable(true); ret = get_proximity_data(); if (ret == 0) { dev_info(dev, "mxt t72 proximity detected\n"); set_flag(IRAD_FLAG_PROXIMITY_DETECTED, &obs->flag); }else { dev_info(dev, "mxt t72 proximity not detected\n"); clear_flag(IRAD_FLAG_PROXIMITY_DETECTED, &obs->flag); } proximity_enable(false); } return 0; }
actionResponse NavStack::DetectObstacle(Anshu *AnshuPtr,LocStack *Loc){ struct ultrasonic_sensor_data uss_data; uss_data=get_proximity_data(); AnshuPtr->set_isFrontObs((uss_data.uss_f<24.0)?true:false); AnshuPtr->set_isRearObs((uss_data.uss_b<24.0)?true:false); AnshuPtr->set_isRightObs((uss_data.uss_r<24.0)?true:false); AnshuPtr->set_isLeftObs((uss_data.uss_l<24.0)?true:false); ResolveObstacle(AnshuPtr,Loc); // Following code not implemented. Was for an alternate implementation of // the bot rangefinders mounted on a servo to rotate around and take measurements. //AnshuPtr->setObstacle(obs_f,false,false,false); //if(AnshuPtr->isObstacle.is_front) //Scan //Set Pwm to 0 //wait(25ms) // Read sensor data // Load into Obstacle variable //Increment PWM by 90 and do twice till PWM = 180 //If for character byte any bit is 1 then obstacle detected return Ok; }