/* * DriverWithCallbackExample.c * * Created on: 11 march 2018 * Author: shlomo */ #include "include.h" #include "control.h" uint32_t KeepParameter = 0; callback_fptr ModuleCallback = 0; bool isValid (uint32_t deviceID); uint32_t ControlCallBackFunction(uint32_t deviceID, uint32_t ReadValue); uint32_t DriverActionWithCallback (uint32_t deviceId, uint32_t parameter, callback_fptr callback) { assert (callback); assert (isValid(deviceId)); //call driver action to device id with the parameter //SetMotorSpeed (deviceId, parameter); KeepParameter = parameter; ModuleCallback = callback; //start control: uint32_t ControlId = AddControlCallback( callback, eOneMillisecond, NULL, (IfTypeNone*0x100+deviceId),deviceId, parameter ); return ControlId; } uint32_t ControlCallBackFunction(uint32_t deviceId, uint32_t ReadValue) { if (ReadValue == KeepParameter) { //stop this control loop RemoveControlCallback(deviceId, ControlCallBackFunction ); //possibly: start regular control (speed etc) //uint32_t ControlId = AddControlCallback(ControlCBFunction Callback, eOneMillisecond, NULL, deviceId, Parameter ); //call the module callback ModuleCallback(deviceId,ReadValue); } return OK; } bool isValid (uint32_t deviceID) { return true; }