Skip to content
Snippets Groups Projects
Commit 0181898d authored by aht2nguy's avatar aht2nguy
Browse files

sensors working BUT showing 2 copies at a time

parent 98472a1a
No related branches found
No related tags found
2 merge requests!16Withtime,!15Samplek4
......@@ -60,8 +60,9 @@ The s88 units can be told to reset its memory after a dump to the computer, or i
void SensorPrintTask();
void ProcessSensors(char* SensorInput, char* Chars, char* Nums, int* FirstFullLoop, int* NumSensors);
//void ProcessSensors(char* SensorInput, char* SensorChars, char* SensorNums, int* NumSensors);
void ProcessData (int* Sensors, char* SensorChars, int* SensorNums);
void SensorServer();
void SensorNotifier();
......
......@@ -90,7 +90,9 @@ typedef enum SensorServerMessageType {
typedef struct SensorServerMessage{
SSMsgType Type;
char* SensorInput;
// char* SensorInput;
char* SensorChars;
int* SensorNums;
} SSMsg;
......
......@@ -10,89 +10,73 @@
#include <clockserver-api.h>
#include <td-shared.h>
void SensorPrintTask () {
void SensorPrintTask () {//char* SensorChars, int* SensorNums) {
SSMsg SendMsg, ReplyMsg;
int i,j, ColPos;
char* SensorChars, *SensorNums, *pChars, *pNums;
int NumSensors = 0;
int FirstFullLoop = 0;
int i, ColPos;
char* SensorChars;
int* SensorNums;
char SensorServerName[] = "SensorServer";
int SensorServerID = WhoIs(SensorServerName);
int SensorServerID = WhoIs(SensorServerName);//MyParentTid();
// char ClkServerName[] = "ClockServer";
// int ClkServerID = WhoIs(ClkServerName);
FOREVER {
SendMsg.Type = SENSOR_QUERY;
Send(SensorServerID, (void*)&SendMsg, sizeof(SSMsg), (void*)&ReplyMsg, sizeof(ReplyMsg));
ProcessSensors(ReplyMsg.SensorInput, SensorChars, SensorNums, &FirstFullLoop, &NumSensors);
NumSensors = NumSensors < NUM_SENSORS_DISPLAYED ? NumSensors: NUM_SENSORS_DISPLAYED;
if (FirstFullLoop && (NumSensors < NUM_SENSORS_DISPLAYED)) {
// Printf(COM2,"a\n\r");
// int Diff = NUM_SENSORS_DISPLAYED - NumSensors;
for (i = 0; i < NUM_SENSORS_DISPLAYED; i++) {
// j = (MAX_NUM_SENSORS-Diff + i) % MAX_NUM_SENSORS;
j = NumSensors - 1;
if (j < 0) j += 80;
pChars[i] = SensorChars[j];
pNums[i] = SensorNums[j];
}
} else {
// Printf(COM2,"b\n\r");
for (i = 0; i < NumSensors; i++) {
pChars[i] = SensorChars[NumSensors-i-1];
pNums[i] = SensorNums[NumSensors-i-1];
}
}
if (NumSensors) {
// Printf(COM2,"NS %d \n\r", NumSensors);
for (i = 0; i < NumSensors; i++) {
//Printf(COM2, "%d\n\r", SensorNums[i]);
ColPos = 11 + i*5;
if ((int)pNums[i] < 10) {
Printf(COM2, "%s%c[19;%dH%c0%d%s", SAVE_CURSOR, 27, ColPos, pChars[i], (int)pNums[i], RESTORE_CURSOR);
//Printf(COM2,"y");
}else {
Printf(COM2, "%s%c[19;%dH%c%d%s", SAVE_CURSOR, 27, ColPos, pChars[i], (int)pNums[i], RESTORE_CURSOR);
//Printf(COM2,"x");
}
}
SensorChars = ReplyMsg.SensorChars;
SensorNums = ReplyMsg.SensorNums;
for (i = 0; i < NUM_SENSORS_DISPLAYED; i++) {
ColPos = 11 + i*5;
if (SensorNums[i] < 10) Printf(COM2, "%s%c[19;%dH%c0%d%s", SAVE_CURSOR, 27, ColPos, SensorChars[i], SensorNums[i], RESTORE_CURSOR);
else Printf(COM2, "%s%c[19;%dH%c%d%s", SAVE_CURSOR, 27, ColPos, SensorChars[i], SensorNums[i], RESTORE_CURSOR);
// Printf(COM2,"SPT %c%d\n\r",SensorChars[i],SensorNums[i]);
}
}
}
void ProcessSensors(char* SensorInput, char* Chars, char* Nums, int* FirstFullLoop, int* NumSensors) {
int i, j, SensorNum, Index, First;
int Num, Temp;
}
void ProcessData (int* Sensors, char* SensorChars, int* SensorNums) {
int i, j, Num, SensorNum, Index, First;
char SensorChar;
// Printf(COM2,"PS %s\n\r",SensorInput);
int Temp = 0;
char LookUpOffset[10] = "EAABBCCDDE";
for (i = 0; i < NUM_SENSORS_READ; i++) {
SensorChar = 'A' + (i/2);
SensorChar = LookUpOffset[i];//'A' + (i/2);
First = i % 2;
Index = 1;
Num = 128;
Temp = (int)SensorInput[i];
FOREVER {
if (Temp == 0) break;
if (Temp >= Num) {
if (Sensors[i] == 0) break;
// Printf(COM2,"Char %c\n\r", SensorChar);
// Printf(COM2,"NumTotal %d\n\r", Sensors[i]);
if (Sensors[i] >= Num) {
SensorNum = First*8 + Index;
Temp -= Num;
// Printf(COM2,"here1\n\r");
Chars[*NumSensors] = SensorChar;
Nums[*NumSensors] = (char)SensorNum; //char or break
// Printf(COM2,"%c%d ",SensorChar,SensorNum);
*NumSensors += 1;
if (*NumSensors == MAX_NUM_SENSORS) {
*FirstFullLoop = 1;
*NumSensors = 0;
}
// Printf(COM2,"Sensor Num %d\n\r", SensorNum);
Sensors[i] -= Num;
//if ((SensorChar != SensorChars[0]) || (SensorNum != SensorNums[0])) {
// Temp++;
for (j = NUM_SENSORS_DISPLAYED - 1; j > 0; j--) {
SensorChars[j] = SensorChars[j-1];
SensorNums[j] = SensorNums[j-1];
}
SensorChars[0] = SensorChar;
SensorNums[0] = (SensorNum+8)%16 ? (SensorNum+8)%16 : 16;
// Printf(COM2,"ProcessData %c%d\n\r",SensorChars[0],SensorNums[0]);
//}
}
Num /= 2;
Index++;
}
//Printf(COM2, " NS%d ", *NumSensors);
}
// Printf(COM2,"In array:%d\n\r", Temp);
}
void SensorServer() {
......@@ -102,12 +86,13 @@ void SensorServer() {
Message RcvSlot;
RcvSlot.Addr = (void *)(&RcvMsg);
Buffer SendQ;
char* SensorInput;
int* SensorNums;
char* SensorChars;
int i, ColPos;
AP Args;
Buffer WL;
int WLStorage[MAX_NUM_TD];
InitBuffer(&WL,(void*)WLStorage, (int)(MAX_NUM_TD));
Buffer** AllSendQ = GetAllSendQ();
......@@ -133,32 +118,42 @@ void SensorServer() {
if (bReceived == 0){
Res = Receive(SenderID, (void*)&RcvSlot, sizeof(SSMsg));
SenderID = RcvSlot.SenderID;
// Printf(COM2,"bReceived == 0 SensorID %d SendQLen %d Temp %d\n\r", SenderID, SendQ.Length, RcvMsg.Type);
}
bReceived = 0;
// Printf(COM2,"bReceived == 1 SensorID %d SendQLen %d Type %d\n\r", SenderID, SendQ.Length, RcvMsg.Type);
switch (RcvMsg.Type){
case SENSOR_QUERY:
// Putc(COM2,'q');
// Printf(COM2,"SensorQuery ID %d SendQLen %d\n\r", SenderID, SendQ.Length);
FeedBuffer(&WL, (void*)SenderID);
break;
case SENSOR_NOTIFIER:
//Putc(COM2,'t');
//Printf(COM2,"SensorNotifier\n\r");
ReplyMsg.Type = SENSOR_RESPONSE;
Reply(SenderID, (void*)&ReplyMsg, sizeof(ReplyMsg));
SensorInput = RcvMsg.SensorInput;
// Printf(COM2,"SS %s\n\r",SensorInput);
SensorChars = RcvMsg.SensorChars;
SensorNums = RcvMsg.SensorNums;
while (WL.Length > 0) {
// Putc(COM2,'l');
BufferFIFO(&WL, (void*)&SenderID);
ReplyMsg.SensorInput = SensorInput;
// Printf(COM2,"SenderID in loop %d", SenderID);
ReplyMsg.SensorChars = SensorChars;
ReplyMsg.SensorNums = SensorNums;
Reply(SenderID, (void*)&ReplyMsg, sizeof(SSMsg));
BufferPopHead(&WL);
}
break;
default:
Printf(COM2,"Sensor Server: Unrecognized RcvMsg Type.\n\r");
break;
}
}
else {
bReceived = 1;
// Printf(COM2, "SS ABOUT TO Block\n\r");
Receive(-1, (void*)&RcvSlot, sizeof(SSMsg));
SenderID = RcvSlot.SenderID;
Res = 0;
......@@ -167,26 +162,35 @@ void SensorServer() {
}
void SensorNotifier() {
char SensorInput[NUM_SENSORS_READ];
SSMsg SendMsg, ReplyMsg;
int i;
int Sensors[NUM_SENSORS_READ];
char SensorChars[NUM_SENSORS_DISPLAYED];
int SensorNums[NUM_SENSORS_DISPLAYED];
SSMsg SendMsg, ReplyMsg;
char SensorServerName[] = "SensorServer";
int SensorServerID = WhoIs(SensorServerName);
// Getc(COM1); // to get rid of the first byte TC sends
for (i = 0; i < NUM_SENSORS_DISPLAYED; i++) {
SensorChars[i] = '\0';
SensorNums[i] = 0;
}
FOREVER {
Putc(COM1, SENSOR_RESET);
Putc(COM1, SENSOR_REQUEST); // 128 + 5 modules
for (i = 0; i < NUM_SENSORS_READ; i++) {
SensorInput[i] = Getc(COM1);
Sensors[i] = Getc(COM1);
}
//SensorGetStr(COM1, 10);
//Printf(COM2,"SNotif %s\n\r",SensorInput);
ProcessData(Sensors, SensorChars, SensorNums);
SendMsg.Type = SENSOR_NOTIFIER;
SendMsg.SensorInput = SensorInput;
SendMsg.SensorChars = SensorChars;
SendMsg.SensorNums = SensorNums;
Send(SensorServerID, (void*)&SendMsg, sizeof(SSMsg), (void*)&ReplyMsg, sizeof(SSMsg));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment