Big Mouth Billy Bass automation library

Dependents:   BillyBass_with_SD

Revision:
0:84aaade0de8f
Child:
1:9b1f3eb204ac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/song.hpp	Mon Jun 17 22:17:59 2013 +0000
@@ -0,0 +1,78 @@
+#ifndef __included_song_hpp
+#define __included_song_hpp
+
+#include <DirHandle.h>
+
+#include "billybass.hpp"
+#include "config.hpp"
+#include "action.hpp"
+
+class Song
+{
+public:
+
+    typedef std::vector<Action> actions_t;
+
+    // _name is relative to BASS_DIRECTORY
+    // return a pointer to a fully read-in Song if valid
+    // also adds new song to songs
+    static Song *newSong(char const *_name);
+    static std::list<Song*> songs;
+    static unsigned readAllSongs(DIR *bassDir);
+    static void clearAllSongs();
+
+    Song() : sequenceNumber(0), whichFish(NO_FISH), basename(0), extension(0)  {
+        fullname[0] = 0;
+        actions.reserve(60);
+    }
+
+    bool isValid() const {
+        return basename != 0 && whichFish != NO_FISH;
+    }
+    bool parseFilename(char const *_name);
+    bool readActions();
+
+    unsigned getSequenceNumber() const {
+        return sequenceNumber;
+    }
+    unsigned getWhichFish() const {
+        return whichFish;
+    }
+    char const *getSampleFileName() {
+        if (!extension) return 0;
+        strcpy(extension, sampleExtension);
+        return fullname;
+    }
+    char const *getTextFileName() {
+        if (!extension) return 0;
+        strcpy(extension, textExtension);
+        return fullname;
+    }
+    actions_t const &getActions() const {
+        return actions;
+    }
+
+    void print(Serial &pc) {
+        pc.printf("%s fish=%u seq=%u\r\n", getSampleFileName(), whichFish, sequenceNumber);
+        for (actions_t::const_iterator action_it = actions.begin(); action_it != actions.end(); action_it++) {
+            Action const &action = *action_it;
+            pc.printf("%0.02f %s %d\r\n", action.actionTime, action.outputName, action.desiredState ? 1 : 0);
+        }
+    }
+
+protected:
+
+    static char const directoryName[ BASS_DIRECTORY_LENGTH + 1 ];
+    static unsigned const NO_FISH;
+    static char const *textExtension;
+    static char const *sampleExtension;
+
+    unsigned sequenceNumber;    // 0-relative
+    unsigned whichFish;         // 0-relative
+    char fullname[ MAX_PATH_LEN ];  // with directory name
+    char *basename;     // points into fullname
+    char *extension;    // points into fullname
+    actions_t actions;
+};
+
+#endif                                 // __included_song_hpp