Refactoring and other updates
Dependencies: BLE_API mbed nRF51822
Fork of nRF51822_SimpleChat by
Diff: ControllerFactory.cpp
- Revision:
- 3:b6e4e5529a52
- Child:
- 5:fca87573ed92
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ControllerFactory.cpp Mon May 08 13:05:45 2017 +0000 @@ -0,0 +1,71 @@ + +#include "ControllerFactory.hpp" + + +void ControllerFactory::createController (Controller **c, SysObjTypes &ctrlType) { + + switch (ctrlType) { + case P: //fall-through + case PI: + case PID: { + *c = new PIDController(); + break; + } + case RST: { + *c = new RSTController(); + break; + } + default: *c = 0; + } +} + +void ControllerFactory::createControllerParams (ControllerParams &cp, SysObjTypes &ctrlType, uint8_t *paramsList, int paramsListLen) { + /* + paramsList form: { + P: [kp] + PI: [kp, ti] + PID: [kp, ti, td] + RST: [nR,r0,r1,...,r_nR,nS,s0,s1,...,s_nS,nT,t0,t1,...,t_nT] + } + cond: paramsListLen = nR + nS + nT + 6 + */ + switch (ctrlType) { + case P: { + cp.kp = *paramsList; + cp.ti = 0; + cp.td = 0; + break; + } + case PI: { + cp.kp = *paramsList; + cp.ti = paramsList[1]; + cp.td = 0; + break; + } + case PID: { + cp.kp = *paramsList; + cp.ti = paramsList[1]; + cp.td = paramsList[2]; + break; + } + case RST: { + int i; + cp.ordR = *paramsList; + cp.R = new float[cp.ordR+1]; + for (i=1; i<cp.ordR+2;i++) { + cp.R[i] = paramsList[i]; + } + cp.ordS = paramsList[i]; + cp.S = new float[cp.ordS+1]; + for (i=cp.ordR+2; i<cp.ordR+cp.ordS+3; i++) { + cp.S[i] = paramsList[i]; + } + cp.ordT = paramsList[i]; + cp.T = new float[cp.ordT+1]; + for(i=cp.ordR+cp.ordS+3; i<paramsListLen; i++) { + cp.T[i] = paramsList[i]; + } + break; + } + } +}