diff --git a/Makefile b/Makefile index 79019f1..cfb2654 100644 --- a/Makefile +++ b/Makefile @@ -17,6 +17,7 @@ CFLAGS?=-Datmega328p\ -DARDUINO=200\ -DARDUINO_AVR_NANO\ -DARDUINO_ARCH_AVR\ + -std=c++11\ -Os\ -ffunction-sections\ -fdata-sections\ @@ -59,9 +60,9 @@ SRC_FILES?=./$(ARDUINO_DIR)/cores/arduino/main.cpp\ ./$(NANOPB_DIR)/pb_common.c\ ./gateway/message.pb.c -build: $(OUT)$(NAME).hex +build: $(OUT)$(NAME) -$(OUT)$(NAME).hex: $(OUT)$(NAME).elf +$(OUT)$(NAME): $(OUT)$(NAME).elf $(OBJCOPY) -R .eeprom -O ihex $(OUT)$(NAME).elf $(OUT)$(NAME).hex $(OUT)eep.hex: $(OUT)$(NAME).elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $(OUT)$(NAME).elf $(OUT)eep.hex @@ -70,13 +71,17 @@ $(OUT)$(NAME).elf: protobuf bin protobuf: mkdir -p protobuf/gateway - python external/nanopb/generator/nanopb_generator.py gateway/message.proto -D protobuf + python3 external/nanopb/generator/nanopb_generator.py gateway/message.proto -D protobuf bin: mkdir bin flash: avrdude -v -patmega328p -carduino -P/dev/ttyUSB0 -b115200 -D -Uflash:w:$(OUT)$(NAME).hex:i + +stop: + avrdude -v -patmega328p -carduino -P/dev/ttyUSB0 -b115200 -D -Uflash:w:nothing.hex:i + clean: rm -r protobuf rm -r bin diff --git a/README.md b/README.md new file mode 100644 index 0000000..55fbef7 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Dependencies + +- python3-protobuf +- protobuf +- protobuf-c + +# Python3 dependencies +- protobuf +- grpcio-tools diff --git a/collar.cpp b/collar.cpp index fa0afb9..889c4fe 100644 --- a/collar.cpp +++ b/collar.cpp @@ -14,14 +14,79 @@ const long interval = 5000; float lat = 0; float lng = 0; +bool sending = false; + TinyGPSPlus gps; SoftwareSerial ss(6, 7); +typedef struct lora_status_s { + int sleep; +} lora_status_t; + +static lora_status_t lora_status; + +void transmitLora() { + // Encode as protobuf packet + if (lat && lng) { + uint8_t buffer[50] = {0}; + Fenceless_CollarResponse m = Fenceless_CollarResponse_init_zero; + pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); + m.loc.x = lat; + m.loc.y = lng; + + int status = pb_encode(&stream, Fenceless_CollarResponse_fields, &m); + + if (!status) { + Serial.println("Failed to encode"); + } + + Serial.print("Sending packet Lat / Long: "); + Serial.println(lat); + Serial.println(lng); + + // send packet + + LoRa.beginPacket(); + LoRa.print((char *) buffer); + LoRa.endPacket(); + + } +} +void updateGPS() { + // Gather GPS data + if (gps.location.isValid()) { + lat = gps.location.lat(); + lng = gps.location.lng(); + } else { + lat = 0; + lng = 0; + } +} +ISR(TIMER1_OVF_vect) { + // handle timer overflow interrupt at 1 per second + updateGPS(); + if(!gps.location.isValid()) { + Serial.println("Seeking GPS"); + } + if(sending && gps.location.isValid()) { + if(lora_status.sleep) { + } + transmitLora(); + } +} +void initialize_timer() { + TCCR1A = 0; + TCCR1B = 0; + TCNT1 = 34286; // timer preload + TCCR1B |= (1< 0) { + gps.encode(ss.read()); + } + /* Lora data recieved */ int packetSize = LoRa.parsePacket(); if (packetSize) { Serial.print("Received Packet: "); @@ -43,50 +128,4 @@ void loop() { } Serial.println(); } - - if (ss.available() > 0) - gps.encode(ss.read()); - - unsigned long currentMillis = millis(); - if (currentMillis - previousMillis >= interval) { - previousMillis = currentMillis; - - // Gather GPS data - if (gps.location.isValid()) { - Serial.println("Valid GPS"); - lat = gps.location.lat(); - lng = gps.location.lng(); - } else { - lat = 0; - lng = 0; - } - - // Encode as protobuf packet - if (lat && lng) { - uint8_t buffer[50] = {0}; - Fenceless_CollarResponse m = Fenceless_CollarResponse_init_zero; - pb_ostream_t stream = pb_ostream_from_buffer(buffer, sizeof(buffer)); - m.loc.x = lat; - m.loc.y = lng; - - int status = pb_encode(&stream, Fenceless_CollarResponse_fields, &m); - - if (!status) { - Serial.println("Failed to encode"); - } - - Serial.print("Sending packet Lat / Long: "); - Serial.println(lat); - Serial.println(lng); - - // send packet - - LoRa.beginPacket(); - LoRa.print((char *) buffer); - LoRa.endPacket(); - - } else { - Serial.println("GPS has not yet initialized"); - } - } } diff --git a/generatetags.sh b/generatetags.sh new file mode 100755 index 0000000..26701ae --- /dev/null +++ b/generatetags.sh @@ -0,0 +1,2 @@ +#!/bin/bash +ctags -e -R --append ./ diff --git a/nothing.hex b/nothing.hex new file mode 100644 index 0000000..bdc078a --- /dev/null +++ b/nothing.hex @@ -0,0 +1,137 @@ +:100000000C9435000C945D000C945D000C945D0024 +:100010000C945D000C945D000C945D000C945D00EC +:100020000C945D000C945D000C945D000C945D00DC +:100030000C945D000C945D000C945D000C945D00CC +:100040000C94E9010C945D000C94B7010C9491019F +:100050000C945D000C945D000C945D000C945D00AC +:100060000C945D000C945D00EB0211241FBECFEFD9 +:10007000D8E0DEBFCDBF11E0A0E0B1E0E0E4F6E003 +:1000800002C005900D92AE31B107D9F721E0AEE183 +:10009000B1E001C01D92A43CB207E1F710E0C5E356 +:1000A000D0E004C02197FE010E941803C433D10799 +:1000B000C9F70E9433020C941E030C940000AF9207 +:1000C000BF92CF92DF92EF92FF920F931F93CF9345 +:1000D000DF936C017B018B01040F151FEB015E01A7 +:1000E000AE18BF08C017D10759F06991D601ED913C +:1000F000FC910190F081E02DC6010995892B79F7DB +:10010000C501DF91CF911F910F91FF90EF90DF908C +:10011000CF90BF90AF900895FC01538D448D252F53 +:1001200030E0842F90E0821B930B541710F0CF9691 +:10013000089501970895FC01918D828D981761F0C3 +:10014000A28DAE0FBF2FB11D5D968C91928D9F5FDA +:100150009F73928F90E008958FEF9FEF0895FC01B9 +:10016000918D828D981731F0828DE80FF11D858D6C +:1001700090E008958FEF9FEF0895FC01918D228DFF +:10018000892F90E0805C9F4F821B91098F73992784 +:10019000089587E291E00E94BD0021E0892B09F4D7 +:1001A00020E0822F089580E090E0892B29F00E94C2 +:1001B000C90081110C9400000895FC01A48DA80FC2 +:1001C000B92FB11DA35ABF4F2C91848D90E0019699 +:1001D0008F739927848FA689B7892C93A089B189B9 +:1001E0008C91837080648C93938D848D981306C05A +:1001F0000288F389E02D80818F7D80830895EF92BE +:10020000FF920F931F93CF93DF93EC0181E0888FD0 +:100210009B8D8C8D98131AC0E889F989808185FFA0 +:1002200015C09FB7F894EE89FF896083E889F98942 +:1002300080818370806480839FBF81E090E0DF9144 +:10024000CF911F910F91FF90EF900895F62E0B8D97 +:1002500010E00F5F1F4F0F731127E02E8C8D8E1152 +:100260000CC00FB607FCFACFE889F989808185FFB9 +:10027000F5CFCE010E94DD00F1CFEB8DEC0FFD2F0D +:10028000F11DE35AFF4FF0829FB7F8940B8FEA8974 +:10029000FB8980818062CFCFCF93DF93EC01888D83 +:1002A0008823B9F0AA89BB89E889F9898C9185FDF1 +:1002B00003C0808186FD0DC00FB607FCF7CF8C917F +:1002C00085FFF2CF808185FFEDCFCE010E94DD005A +:1002D000E9CFDF91CF9108953FB7F8948091230142 +:1002E00090912401A0912501B091260126B5A89BEB +:1002F00005C02F3F19F00196A11DB11D3FBFBA2FB8 +:10030000A92F982F8827BC01CD01620F711D811D77 +:10031000911D42E0660F771F881F991F4A95D1F7FC +:1003200008951F920F920FB60F9211242F933F93AF +:100330004F935F936F937F938F939F93AF93BF93ED +:10034000EF93FF9387E291E00E94DD00FF91EF9130 +:10035000BF91AF919F918F917F916F915F914F91DD +:100360003F912F910F900FBE0F901F9018951F92E5 +:100370000F920FB60F9211242F938F939F93EF93A9 +:10038000FF93E0913701F09138018081E0913D01C8 +:10039000F0913E0182FD1BC09081809140018F5FF2 +:1003A0008F7320914101821741F0E0914001F0E00C +:1003B000E95DFE4F958F80934001FF91EF919F91F2 +:1003C0008F912F910F900FBE0F901F9018958081E5 +:1003D000F4CF1F920F920FB60F9211242F933F93D9 +:1003E0008F939F93AF93BF9380911F0190912001B2 +:1003F000A0912101B091220130911E0123E0230F31 +:100400002D3758F50196A11DB11D20931E01809333 +:100410001F0190932001A0932101B09322018091AC +:10042000230190912401A0912501B091260101960C +:10043000A11DB11D8093230190932401A093250158 +:10044000B0932601BF91AF919F918F913F912F91D2 +:100450000F900FBE0F901F90189526E8230F02965D +:10046000A11DB11DD2CF789484B5826084BD84B5BE +:10047000816084BD85B5826085BD85B5816085BD9F +:1004800080916E00816080936E0010928100809157 +:1004900081008260809381008091810081608093DF +:1004A0008100809180008160809380008091B10004 +:1004B00084608093B1008091B00081608093B0002F +:1004C00080917A00846080937A0080917A008260C3 +:1004D00080937A0080917A00816080937A00809185 +:1004E0007A00806880937A001092C100E091370111 +:1004F000F091380182E08083E0913301F091340182 +:100500001082E0913501F09136018FEC80831092DA +:100510003F01E0913B01F0913C0186E08083E09156 +:100520003901F0913A01808180618083E091390145 +:10053000F0913A01808188608083E0913901F091E7 +:100540003A01808180688083E0913901F0913A011D +:1005500080818F7D8083C0E0D0E047E050E062E1A1 +:1005600071E087E291E00E945F0042E050E06AE1C2 +:1005700071E087E291E00E945F000E946C014B01F4 +:100580005C0188EEC82E83E0D82EE12CF12C0E946D +:100590006C01681979098A099B09683E73408105D5 +:1005A0009105A8F321E0C21AD108E108F10888EE0C +:1005B000880E83E0981EA11CB11CC114D104E10473 +:1005C000F10429F7209749F20E94C900882329F2F3 +:1005D0000E940000C2CFE7E2F1E01382128288EEAF +:1005E00093E0A0E0B0E084839583A683B78384E0A2 +:1005F00091E09183808385EC90E09587848784ECFB +:1006000090E09787868780EC90E0918B808B81ECDF +:1006100090E0938B828B82EC90E0958B848B86ECC0 +:1006200090E0978B868B118E128E138E148E089508 +:10063000EE0FFF1F0590F491E02D0994F894FFCF81 +:1006400000000000FF005F008C004C01BD009B001B +:0E065000AF004E4F5448494E47000D0A0000BF +:107E0000112484B714BE81FFF0D085E080938100F7 +:107E100082E08093C00088E18093C10086E0809377 +:107E2000C20080E18093C4008EE0C9D0259A86E02C +:107E300020E33CEF91E0309385002093840096BBD3 +:107E4000B09BFECF1D9AA8958150A9F7CC24DD24C4 +:107E500088248394B5E0AB2EA1E19A2EF3E0BF2EE7 +:107E6000A2D0813461F49FD0082FAFD0023811F036 +:107E7000013811F484E001C083E08DD089C08234E0 +:107E800011F484E103C0853419F485E0A6D080C0E4 +:107E9000853579F488D0E82EFF2485D0082F10E0AE +:107EA000102F00270E291F29000F111F8ED06801E7 +:107EB0006FC0863521F484E090D080E0DECF843638 +:107EC00009F040C070D06FD0082F6DD080E0C81688 +:107ED00080E7D80618F4F601B7BEE895C0E0D1E017 +:107EE00062D089930C17E1F7F0E0CF16F0E7DF06D8 +:107EF00018F0F601B7BEE89568D007B600FCFDCFD4 +:107F0000A601A0E0B1E02C9130E011968C91119780 +:107F100090E0982F8827822B932B1296FA010C0160 +:107F200087BEE89511244E5F5F4FF1E0A038BF0790 +:107F300051F7F601A7BEE89507B600FCFDCF97BE46 +:107F4000E89526C08437B1F42ED02DD0F82E2BD052 +:107F50003CD0F601EF2C8F010F5F1F4F84911BD097 +:107F6000EA94F801C1F70894C11CD11CFA94CF0C13 +:107F7000D11C0EC0853739F428D08EE10CD085E9AC +:107F80000AD08FE07ACF813511F488E018D01DD067 +:107F900080E101D065CF982F8091C00085FFFCCF94 +:107FA0009093C60008958091C00087FFFCCF809118 +:107FB000C00084FD01C0A8958091C6000895E0E648 +:107FC000F0E098E1908380830895EDDF803219F02E +:107FD00088E0F5DFFFCF84E1DECF1F93182FE3DFCA +:107FE0001150E9F7F2DF1F91089580E0E8DFEE27F6 +:047FF000FF270994CA +:027FFE00040479 +:0400000300007E007B +:00000001FF