diff --git a/app/modbus-data-viewer/src/service-web/main.go b/app/modbus-data-viewer/src/service-web/main.go index e4c372d..ca95752 100644 --- a/app/modbus-data-viewer/src/service-web/main.go +++ b/app/modbus-data-viewer/src/service-web/main.go @@ -14,11 +14,51 @@ import ( ) type Header int32 -type Packet [50]uint16 +type ControlPacket [50]uint16 +type StatePacket [73]uint16 var mutex sync.Mutex var templateMap = make(map[string]interface{}) -var controlTable, stateTable string +var controlDesc [50]string +var stateDesc [73]string + +func init() { + controlDesc[5] = "Oven Mode" + controlDesc[6] = "Cook On/Off" + controlDesc[7] = "Wash On/Off" + controlDesc[8] = "System On/Off" + controlDesc[9] = "Temp" + controlDesc[10] = "Humidity" + controlDesc[11] = "Time" + controlDesc[12] = "Preheat On/Off" + controlDesc[15] = "Convection RPM" + controlDesc[16] = "Cooldown On/Off" + controlDesc[17] = "Core Temp" + controlDesc[20] = "Wash Type" + controlDesc[21] = "Wash Total" + controlDesc[22] = "Wash Steps" + controlDesc[23] = "Wash Step Type" + + stateDesc[0] = "Firmware Y" + stateDesc[1] = "Firmware Y" + stateDesc[2] = "Firmware M" + stateDesc[3] = "Firmware D" + stateDesc[4] = "Cook State" + stateDesc[5] = "Temp Setting" + stateDesc[6] = "Humidity Setting" + stateDesc[7] = "Time Setting" + stateDesc[8] = "Temp Value" + stateDesc[9] = "Humidity Value" + stateDesc[10] = "Time Value" + stateDesc[11] = "Wash State" + stateDesc[12] = "Wash Type" + stateDesc[13] = "Wash Steps" + stateDesc[16] = "Door Open/Close" + stateDesc[32] = "Core Temp 1" + stateDesc[33] = "Core Temp 2" + stateDesc[34] = "Core Temp 3" + stateDesc[35] = "Core Temp 4" +} func main() { go ListenUDP() @@ -64,40 +104,54 @@ func ListenUDP() { log.Fatal(err) } - var packet Packet - err = binary.Read(buf, binary.LittleEndian, &packet) - if err != nil { - log.Fatal(err) - } - switch header { case 0: + var packet ControlPacket + err = binary.Read(buf, binary.LittleEndian, &packet) + if err != nil { + log.Fatal(err) + } mapControl(packet) case 1: + var packet StatePacket + err = binary.Read(buf, binary.LittleEndian, &packet) + if err != nil { + log.Fatal(err) + } mapState(packet) } } } -func mapControl(packet Packet) { +func mapControl(packet ControlPacket) { mutex.Lock() defer mutex.Unlock() - controlTable = "" + var controlTable string for i, v := range packet { - controlTable += fmt.Sprintf("<tr><td>%v</td><td>0x%04X</td><td>0x%04X</td><td>%d</td></tr>\n", 40001+i, i, v, v) + class := "odd" + if i%2 == 0 { + class = "even" + } + + controlTable += fmt.Sprintf("<tr class=\"%v\"><td>%v</td><td>0x%04X</td><td>0x%04X</td><td>%d</td><td>%v</td></tr>\n", class, 40001+i, i, v, v, controlDesc[i]) } templateMap["Table_Control"] = template.HTML(controlTable) } -func mapState(packet Packet) { +func mapState(packet StatePacket) { mutex.Lock() defer mutex.Unlock() - stateTable = "" + var stateTable string for i, v := range packet { - stateTable += fmt.Sprintf("<tr><td>%v</td><td>0x%04X</td><td>0x%04X</td><td>%d</td></tr>\n", 30001+i, i, v, v) + class := "odd" + if i%2 == 0 { + class = "even" + } + + stateTable += fmt.Sprintf("<tr class=\"%v\"><td>%v</td><td>0x%04X</td><td>0x%04X</td><td>%d</td><td>%v</td></tr>\n", class, 30001+i, i, v, v, stateDesc[i]) } templateMap["Table_State"] = template.HTML(stateTable) diff --git a/app/modbus-data-viewer/src/service-web/templates/main.tmpl b/app/modbus-data-viewer/src/service-web/templates/main.tmpl index 6fafd4f..30dd644 100644 --- a/app/modbus-data-viewer/src/service-web/templates/main.tmpl +++ b/app/modbus-data-viewer/src/service-web/templates/main.tmpl @@ -2,45 +2,38 @@ <html lang="en"> <head> <style> -th, td { padding: 0.5em } -table.data +th, td { padding: 0.5em; } +table { display: inline-block; + vertical-align: top; text-align: right; font-family: monospace; font-size: 1.2em; border: 1px solid black; + border-collapse: collapse; } +tr:nth-child(even) { background-color: #EEE; } </style> </head> <body> - <table class="data"> + <table> <tr> - <th>Address</th> - <th>Address</th> - <th>Value</th> - <th>Value</th> - </tr> - <tr> - <th>(Dec)</th> - <th>(Hex)</th> - <th>(Hex)</th> - <th>(Dec)</th> + <th>Address<br />(Dec)</th> + <th>Address<br />(Hex)</th> + <th>Value<br />(Hex)</th> + <th>Value<br />(Dec)</th> + <th>Description</th> </tr> {{.Table_Control}} </table> - <table class="data"> - <tr> - <th>Address</th> - <th>Address</th> - <th>Value</th> - <th>Value</th> - </tr> + <table> <tr> - <th>(Dec)</th> - <th>(Hex)</th> - <th>(Hex)</th> - <th>(Dec)</th> + <th>Address<br />(Dec)</th> + <th>Address<br />(Hex)</th> + <th>Value<br />(Hex)</th> + <th>Value<br />(Dec)</th> + <th>Description</th> </tr> {{.Table_State}} </table>