1 #ifndef SCRIPTCONTAINER_H 2 #define SCRIPTCONTAINER_H 3 4 #include "can_structs.h" 5 #include "canfilter.h" 6 #include "bus_protocols/isotp_handler.h" 7 #include "bus_protocols/isotp_message.h" 8 #include "bus_protocols/uds_handler.h" 9 10 #include <QElapsedTimer> 11 #include <QJSEngine> 12 #include <QTimer> 13 #include <qlistwidget.h> 14 15 class ScriptingWindow; 16 17 class CANScriptHelper: public QObject 18 { 19 Q_OBJECT 20 public: 21 CANScriptHelper(QJSEngine *engine); 22 23 public slots: 24 void setFilter(QJSValue id, QJSValue mask, QJSValue bus); 25 void clearFilters(); 26 void sendFrame(QJSValue bus, QJSValue id, QJSValue length, QJSValue data); 27 void setRxCallback(QJSValue cb); 28 29 private slots: 30 void gotTargettedFrame(const CANFrame &frame); 31 32 private: 33 QList<CANFilter> filters; 34 QJSValue gotFrameFunction; 35 QJSEngine *scriptEngine; 36 }; 37 38 class ISOTPScriptHelper: public QObject 39 { 40 Q_OBJECT 41 public: 42 ISOTPScriptHelper(QJSEngine *engine); 43 public slots: 44 void setFilter(QJSValue id, QJSValue mask, QJSValue bus); 45 void clearFilters(); 46 void sendISOTP(QJSValue bus, QJSValue id, QJSValue length, QJSValue data); 47 void setRxCallback(QJSValue cb); 48 private slots: 49 void newISOMessage(ISOTP_MESSAGE msg); 50 private: 51 QJSValue gotFrameFunction; 52 QJSEngine *scriptEngine; 53 ISOTP_HANDLER *handler; 54 }; 55 56 class UDSScriptHelper: public QObject 57 { 58 Q_OBJECT 59 public: 60 UDSScriptHelper(QJSEngine *engine); 61 public slots: 62 void setFilter(QJSValue id, QJSValue mask, QJSValue bus); 63 void clearFilters(); 64 void sendUDS(QJSValue bus, QJSValue id, QJSValue service, QJSValue sublen, QJSValue subFunc, QJSValue length, QJSValue data); 65 void setRxCallback(QJSValue cb); 66 private slots: 67 void newUDSMessage(UDS_MESSAGE msg); 68 private: 69 QJSValue gotFrameFunction; 70 QJSEngine *scriptEngine; 71 UDS_HANDLER *handler; 72 }; 73 74 class ScriptContainer : public QObject 75 { 76 Q_OBJECT 77 78 public: 79 ScriptContainer(); 80 virtual ~ScriptContainer(); 81 void setScriptWindow(ScriptingWindow *win); 82 83 QString fileName; 84 QString filePath; 85 QString scriptText; 86 87 /* 88 Anything registered as a public slot on this class and that takes either no arguments 89 or only QJSValue arguments will be callable from scripts via host.XXX calls. So, have at it, champ. 90 */ 91 public slots: 92 void compileScript(); 93 void setTickInterval(QJSValue interval); 94 void log(QJSValue logString); 95 void addParameter(QJSValue name); 96 void updateValuesTable(QTableWidget *widget); 97 void updateParameter(QString name, QString value); 98 99 signals: 100 void sendLog(QString text); 101 102 private slots: 103 void tick(); 104 105 private: 106 QJSEngine *scriptEngine; 107 QJSValue compiledScript; 108 QJSValue setupFunction; 109 QJSValue tickFunction; 110 QTimer timer; 111 ScriptingWindow *window; 112 CANScriptHelper *canHelper; 113 ISOTPScriptHelper *isoHelper; 114 UDSScriptHelper *udsHelper; 115 QVector<QString> scriptParams; 116 }; 117 118 #endif // SCRIPTCONTAINER_H 119