IPS(Interpreter for Process Structures) for mbed

Dependencies:   ConfigFile FATFileSystem mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers mbedAPI.h Source File

mbedAPI.h

00001 // mbedAPI.h 2015/5/22
00002 #include "BaseIPS.h"
00003 #include "myvector.h"
00004 
00005 struct mbedObj {
00006     void* p;
00007     uint8_t ct;
00008 };
00009 
00010 class mbedAPI {
00011     BaseIPS& ips;
00012 
00013 public:
00014     mbedAPI(BaseIPS& ips_): ips(ips_) {}
00015     void code();
00016 
00017 private:
00018     template<class T>
00019     void init(int ct) {
00020         push_ps_obj(new T(), ct);
00021     }
00022 
00023     template<class T, typename A1>
00024     void init(int ct) {
00025         A1 a1 = pull_ps<A1>();
00026         push_ps_obj(new T(a1), ct);
00027     }
00028 
00029     template<class T, typename A1, typename A2>
00030     void init(int ct) {
00031         A2 a2 = pull_ps<A2>();
00032         A1 a1 = pull_ps<A1>();
00033         push_ps_obj(new T(a1, a2), ct);
00034     }
00035 
00036     template<class T, typename A1, typename A2, typename A3>
00037     void init(int ct) {
00038         A3 a3 = pull_ps<A3>();
00039         A2 a2 = pull_ps<A2>();
00040         A1 a1 = pull_ps<A1>();
00041         push_ps_obj(new T(a1, a2, a3), ct);
00042     }
00043 
00044     template<class T, void(T::*member)()>
00045     void method(void* obj) {
00046         (reinterpret_cast<T*>(obj)->*member)();
00047     }
00048 
00049     template<class T, typename A1, void(T::*member)(A1)>
00050     void method(void* obj) {
00051         A1 a1 = ips.pull_ps();
00052         (reinterpret_cast<T*>(obj)->*member)(a1);
00053     }
00054 
00055     template<typename R, class T, R(T::*member)()>
00056     void method(void* obj) {
00057         ips.push_ps((reinterpret_cast<T*>(obj)->*member)());
00058     }
00059 
00060     template<typename R, class T, typename A1, R(T::*member)(A1)>
00061     void method(void* obj) {
00062         A1 a1 = ips.pull_ps();
00063         ips.push_ps((reinterpret_cast<T*>(obj)->*member)(a1));
00064     }
00065 
00066     template<typename T>
00067     PinName pull_ps();
00068 
00069     void code_method(int f);
00070     void code_method_I2C(int f, mbedObj& obj);
00071     mbedObj pull_ps_obj();
00072     void push_ps_obj(void*, int ct);
00073     void pull_ps_string(char* buf, size_t size);
00074     PinName findPinName(const char* name) const;
00075     myvector<mbedObj> objs;
00076 };
00077 
00078