update now working
authorMart Lubbers <mart@martlubbers.net>
Sat, 28 Jan 2017 12:53:02 +0000 (13:53 +0100)
committerMart Lubbers <mart@martlubbers.net>
Sat, 28 Jan 2017 12:53:02 +0000 (13:53 +0100)
CleanSerial
int/interface.c
int/interface.h
int/main.c
int/task.c
mTaskInterpret.dcl
mTaskInterpret.icl
miTask.icl

index 71526f6..3afa2bb 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 71526f6a1cc5b289d3963c6396a600bba1f5c416
+Subproject commit 3afa2bb48da41a8467b7197e5eebabbec3c6acfe
index 0916ee5..6809110 100644 (file)
@@ -16,7 +16,7 @@ bool input_available(void)
 
 uint8_t read_byte(void)
 {
-       return sdGet(&SD3);
+       return (uint8_t)sdGet(&SD3);
 }
 
 void write_byte(uint8_t b)
@@ -75,12 +75,12 @@ void setup(void)
 
 void debug(char *fmt, ...)
 {
-       //unsigned int i;
-       //write_byte('m');
-       //for(i = 0; i<strlen(fmt); i++){
-       //      write_byte((uint8_t)fmt[i]);
-       //}
-       //write_byte('\n');
+//     unsigned int i;
+//     write_byte((uint8_t)'m');
+//     for(i = 0; i<strlen(fmt); i++){
+//             write_byte((uint8_t)fmt[i]);
+//     }
+//     write_byte('\n');
        (void)fmt;
 }
 
index b2968a9..5a506b9 100644 (file)
@@ -10,7 +10,7 @@ extern int gargc;
 extern char **gargv;
 #endif
 
-#define read16() 256*read_byte() + read_byte()
+#define read16() 256*(uint8_t)read_byte() + (uint8_t)read_byte()
 #define from16(a, b) 256*a+b
 uint8_t read_byte(void);
 void write_byte(uint8_t b);
index c4417f8..00c9f82 100644 (file)
@@ -24,6 +24,7 @@ void read_message(void)
        //Find next task
        if(input_available()){
                uint8_t c = read_byte();
+               uint8_t ct;
                debug("Receiving input: %c %02x\n", c, c);
                switch(c){
                case MSG_SDS_SPEC:
@@ -41,9 +42,10 @@ void read_message(void)
                        break;
                case MSG_GET_TASK:
                        debug("Receiving a task");
-       //              write_dpin(0, true);
-                       task_register();
-       //              write_dpin(0, false);
+                       ct = task_register();
+                       write_byte('t');
+                       write_byte(ct+'0');
+                       write_byte('\n');
                        break;
                case '\0':
                        break;
index 4ac8ce5..3280b1e 100644 (file)
@@ -46,6 +46,10 @@ int task_register(void)
        debug("Received a task of length %d", tasks[ct].tlen);
        tasks[ct].used = true;
        tasks[ct].lastrun = 0L;
+//     write_byte('t');
+//     write_byte(0);
+//     write_byte(ct);
+//     write_byte('\n');
 
        return ct;
 }
index 70dc6ad..0cf8ef3 100644 (file)
@@ -8,6 +8,7 @@ import mTask
 :: MTaskMSGRecv
        = MTPub Int String
        | MTMessage String
+       | MTTaskAdded Int
        | MTEmpty
 
 :: MTaskMSGSend
index 7a2559f..dca53d4 100644 (file)
@@ -35,6 +35,7 @@ decode x
        '\0' = MTEmpty
        '\n' = MTEmpty
        'm' = MTMessage x
+       't' = MTTaskAdded (from16bit (x % (1,3)))
        'u' = MTPub (from16bit (x % (1,3))) (x % (3,5))
        _ = MTMessage x//abort ("Didn't understand message: " +++ join " " [toString (toInt c)\\c<-: x] +++ "\n")
 
@@ -51,6 +52,7 @@ instance toString MTaskMSGSend where
 instance toString MTaskMSGRecv where
        toString (MTPub i v) = "Publish id: " +++ toString i
                +++ " value " +++ safePrint v
+       toString (MTTaskAdded i) = "Task added with id: " +++ toString i
        toString MTEmpty = "Empty message"
 
 bclength :: BC -> Int
index 2634ce8..92fbff2 100644 (file)
@@ -54,14 +54,15 @@ bc = sds \x=1 In sds \pinnetje=1 In {main =
                        )
                )}
 
-deviceSelector :: (Shared ([MTaskMSGRecv],[MTaskMSGSend],Bool)) -> Task ()
-deviceSelector ch = enterInformation "Type" []
+withDevice :: ((Shared ([MTaskMSGRecv],[MTaskMSGSend],Bool)) -> Task a) -> Task a | iTask a
+withDevice t = withShared ([], [], False) \ch->
+               enterInformation "Type" []
        >>= \ty->case ty of
                TCP = (enterInformation "Host" [] -&&- enterInformation "Port" [])
-                       >>= \(port,host)->syncNetworkChannel host port ch
+                       >>= \(port,host)->t ch -|| syncNetworkChannel host port ch
                Serial = accWorld getDevices
                        >>= \dl->(enterChoice "Device" [] dl -&&- updateInformation "Settings" [] zero)
-                       >>= \(dev,set)->syncSerialChannel dev set ch
+                       >>= \(dev,set)->t ch -|| syncSerialChannel dev set ch
        where
                getDevices :: !*World -> *(![String], !*World)
                getDevices w = case readDirectory "/dev" w of
@@ -73,8 +74,8 @@ deviceSelector ch = enterInformation "Type" []
 
 mTaskTask :: Task ()
 mTaskTask = let (msgs, sdsShares) = makeMsgs 1000 bc in
-       withShared ([], msgs, False) (\ch->
-                       deviceSelector ch
+       withDevice (\ch->
+                       sendMsg msgs ch
                ||- processMessages ch messageShare sdsShares
                ||- viewSharedInformation "channels" [ViewWith lens] ch
                ||- viewSharedInformation "messages" [] messageShare
@@ -103,10 +104,10 @@ mTaskTask = let (msgs, sdsShares) = makeMsgs 1000 bc in
 
                updateSDSs :: [(Int, Shared Int)] (Shared [String]) MTaskMSGRecv -> Task ()
                updateSDSs _ m (MTMessage s) = upd (\l->take 20 [s:l]) m @! ()
-               updateSDSs _ _ MTEmpty = return ()
                updateSDSs [(id, sh):xs] m n=:(MTPub i d)
                | id == i = set ((toInt d.[0])*265 + toInt d.[1]) sh @! ()
                = updateSDSs xs m n
+               updateSDSs _ _ _ = return ()
 
                lens :: ([MTaskMSGRecv], [MTaskMSGSend],Bool) -> ([String], [String])
                lens (r,s,_) = (map toString r, map toString s)